You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2017/09/05 19:37:17 UTC

[01/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Repository: ambari
Updated Branches:
  refs/heads/trunk 93011b260 -> 02360dd5d


http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.min.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.min.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.min.css
deleted file mode 100644
index 3c48696..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.min.css
+++ /dev/null
@@ -1,6422 +0,0 @@
-/*
- * 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.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-audio:not([controls]) {
-  display: none;
-}
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-  -ms-text-size-adjust: 100%;
-}
-a:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-a:hover,
-a:active {
-  outline: 0;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  /* Responsive images (ensure images don't scale beyond their parents) */
-  max-width: 100%;
-  /* Part 1: Set a maxium relative to the parent */
-  width: auto\9;
-  /* IE7-8 need help adjusting responsive images */
-  height: auto;
-  /* Part 2: Scale the height according to the width, otherwise you get stretching */
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-#map_canvas img,
-.google-maps img {
-  max-width: none;
-}
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button,
-input {
-  *overflow: visible;
-  line-height: normal;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
-  cursor: pointer;
-}
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-@media print {
-  * {
-    text-shadow: none !important;
-    color: #000 !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  @page {
-    margin: 0.5cm;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-}
-.clearfix {
-  *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.clearfix:after {
-  clear: both;
-}
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-body {
-  margin: 0;
-  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 20px;
-  color: #444444;
-  background-color: #f1f1f1;
-}
-a {
-  color: #3ea211;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #245d0a;
-  text-decoration: underline;
-}
-.img-rounded {
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.img-polaroid {
-  padding: 4px;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-.img-circle {
-  -webkit-border-radius: 500px;
-  -moz-border-radius: 500px;
-  border-radius: 500px;
-}
-.row {
-  margin-left: -30px;
-  *zoom: 1;
-}
-.row:before,
-.row:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.row:after {
-  clear: both;
-}
-[class*="span"] {
-  float: left;
-  min-height: 1px;
-  margin-left: 30px;
-}
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 870px;
-}
-.span12 {
-  width: 870px;
-}
-.span11 {
-  width: 795px;
-}
-.span10 {
-  width: 720px;
-}
-.span9 {
-  width: 645px;
-}
-.span8 {
-  width: 570px;
-}
-.span7 {
-  width: 495px;
-}
-.span6 {
-  width: 420px;
-}
-.span5 {
-  width: 345px;
-}
-.span4 {
-  width: 270px;
-}
-.span3 {
-  width: 195px;
-}
-.span2 {
-  width: 120px;
-}
-.span1 {
-  width: 45px;
-}
-.offset12 {
-  margin-left: 930px;
-}
-.offset11 {
-  margin-left: 855px;
-}
-.offset10 {
-  margin-left: 780px;
-}
-.offset9 {
-  margin-left: 705px;
-}
-.offset8 {
-  margin-left: 630px;
-}
-.offset7 {
-  margin-left: 555px;
-}
-.offset6 {
-  margin-left: 480px;
-}
-.offset5 {
-  margin-left: 405px;
-}
-.offset4 {
-  margin-left: 330px;
-}
-.offset3 {
-  margin-left: 255px;
-}
-.offset2 {
-  margin-left: 180px;
-}
-.offset1 {
-  margin-left: 105px;
-}
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-.row-fluid:before,
-.row-fluid:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.row-fluid:after {
-  clear: both;
-}
-.row-fluid [class*="span"] {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  float: left;
-  margin-left: 3.44827586%;
-  *margin-left: 3.3908046%;
-}
-.row-fluid [class*="span"]:first-child {
-  margin-left: 0;
-}
-.row-fluid .controls-row [class*="span"] + [class*="span"] {
-  margin-left: 3.44827586%;
-}
-.row-fluid .span12 {
-  width: 100%;
-  *width: 99.94252874%;
-}
-.row-fluid .span11 {
-  width: 91.37931034%;
-  *width: 91.32183908%;
-}
-.row-fluid .span10 {
-  width: 82.75862069%;
-  *width: 82.70114943%;
-}
-.row-fluid .span9 {
-  width: 74.13793103%;
-  *width: 74.08045977%;
-}
-.row-fluid .span8 {
-  width: 65.51724138%;
-  *width: 65.45977011%;
-}
-.row-fluid .span7 {
-  width: 56.89655172%;
-  *width: 56.83908046%;
-}
-.row-fluid .span6 {
-  width: 48.27586207%;
-  *width: 48.2183908%;
-}
-.row-fluid .span5 {
-  width: 39.65517241%;
-  *width: 39.59770115%;
-}
-.row-fluid .span4 {
-  width: 31.03448276%;
-  *width: 30.97701149%;
-}
-.row-fluid .span3 {
-  width: 22.4137931%;
-  *width: 22.35632184%;
-}
-.row-fluid .span2 {
-  width: 13.79310345%;
-  *width: 13.73563218%;
-}
-.row-fluid .span1 {
-  width: 5.17241379%;
-  *width: 5.11494253%;
-}
-.row-fluid .offset12 {
-  margin-left: 106.89655172%;
-  *margin-left: 106.7816092%;
-}
-.row-fluid .offset12:first-child {
-  margin-left: 103.44827586%;
-  *margin-left: 103.33333333%;
-}
-.row-fluid .offset11 {
-  margin-left: 98.27586207%;
-  *margin-left: 98.16091954%;
-}
-.row-fluid .offset11:first-child {
-  margin-left: 94.82758621%;
-  *margin-left: 94.71264368%;
-}
-.row-fluid .offset10 {
-  margin-left: 89.65517241%;
-  *margin-left: 89.54022989%;
-}
-.row-fluid .offset10:first-child {
-  margin-left: 86.20689655%;
-  *margin-left: 86.09195402%;
-}
-.row-fluid .offset9 {
-  margin-left: 81.03448276%;
-  *margin-left: 80.91954023%;
-}
-.row-fluid .offset9:first-child {
-  margin-left: 77.5862069%;
-  *margin-left: 77.47126437%;
-}
-.row-fluid .offset8 {
-  margin-left: 72.4137931%;
-  *margin-left: 72.29885057%;
-}
-.row-fluid .offset8:first-child {
-  margin-left: 68.96551724%;
-  *margin-left: 68.85057471%;
-}
-.row-fluid .offset7 {
-  margin-left: 63.79310345%;
-  *margin-left: 63.67816092%;
-}
-.row-fluid .offset7:first-child {
-  margin-left: 60.34482759%;
-  *margin-left: 60.22988506%;
-}
-.row-fluid .offset6 {
-  margin-left: 55.17241379%;
-  *margin-left: 55.05747126%;
-}
-.row-fluid .offset6:first-child {
-  margin-left: 51.72413793%;
-  *margin-left: 51.6091954%;
-}
-.row-fluid .offset5 {
-  margin-left: 46.55172414%;
-  *margin-left: 46.43678161%;
-}
-.row-fluid .offset5:first-child {
-  margin-left: 43.10344828%;
-  *margin-left: 42.98850575%;
-}
-.row-fluid .offset4 {
-  margin-left: 37.93103448%;
-  *margin-left: 37.81609195%;
-}
-.row-fluid .offset4:first-child {
-  margin-left: 34.48275862%;
-  *margin-left: 34.36781609%;
-}
-.row-fluid .offset3 {
-  margin-left: 29.31034483%;
-  *margin-left: 29.1954023%;
-}
-.row-fluid .offset3:first-child {
-  margin-left: 25.86206897%;
-  *margin-left: 25.74712644%;
-}
-.row-fluid .offset2 {
-  margin-left: 20.68965517%;
-  *margin-left: 20.57471264%;
-}
-.row-fluid .offset2:first-child {
-  margin-left: 17.24137931%;
-  *margin-left: 17.12643678%;
-}
-.row-fluid .offset1 {
-  margin-left: 12.06896552%;
-  *margin-left: 11.95402299%;
-}
-.row-fluid .offset1:first-child {
-  margin-left: 8.62068966%;
-  *margin-left: 8.50574713%;
-}
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
-  display: none;
-}
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
-  float: right;
-}
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  *zoom: 1;
-}
-.container:before,
-.container:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.container:after {
-  clear: both;
-}
-.container-fluid {
-  padding-right: 30px;
-  padding-left: 30px;
-  *zoom: 1;
-}
-.container-fluid:before,
-.container-fluid:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.container-fluid:after {
-  clear: both;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 19.5px;
-  font-weight: 200;
-  line-height: 30px;
-}
-small {
-  font-size: 85%;
-}
-strong {
-  font-weight: bold;
-}
-em {
-  font-style: italic;
-}
-cite {
-  font-style: normal;
-}
-.muted {
-  color: #999999;
-}
-a.muted:hover,
-a.muted:focus {
-  color: #808080;
-}
-.text-warning {
-  color: #aa7d29;
-}
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #815f1f;
-}
-.text-error {
-  color: #b85355;
-}
-a.text-error:hover,
-a.text-error:focus {
-  color: #993f41;
-}
-.text-info {
-  color: #4e7b86;
-}
-a.text-info:hover,
-a.text-info:focus {
-  color: #3b5d66;
-}
-.text-success {
-  color: #5c8846;
-}
-a.text-success:hover,
-a.text-success:focus {
-  color: #456635;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin: 10px 0;
-  font-family: inherit;
-  font-weight: bold;
-  line-height: 20px;
-  color: inherit;
-  text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999999;
-}
-h1,
-h2,
-h3 {
-  line-height: 40px;
-}
-h1 {
-  font-size: 35.75px;
-}
-h2 {
-  font-size: 29.25px;
-}
-h3 {
-  font-size: 22.75px;
-}
-h4 {
-  font-size: 16.25px;
-}
-h5 {
-  font-size: 13px;
-}
-h6 {
-  font-size: 11.05px;
-}
-h1 small {
-  font-size: 22.75px;
-}
-h2 small {
-  font-size: 16.25px;
-}
-h3 small {
-  font-size: 13px;
-}
-h4 small {
-  font-size: 13px;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 20px 0 30px;
-  border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
-  padding: 0;
-  margin: 0 0 10px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-li {
-  line-height: 20px;
-}
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-ul.inline,
-ol.inline {
-  margin-left: 0;
-  list-style: none;
-}
-ul.inline > li,
-ol.inline > li {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-dl {
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 20px;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 10px;
-}
-.dl-horizontal {
-  *zoom: 1;
-}
-.dl-horizontal:before,
-.dl-horizontal:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.dl-horizontal:after {
-  clear: both;
-}
-.dl-horizontal dt {
-  float: left;
-  width: 160px;
-  clear: left;
-  text-align: right;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.dl-horizontal dd {
-  margin-left: 180px;
-}
-hr {
-  margin: 20px 0;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-  border-bottom: 1px solid #ffffff;
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 20px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p {
-  margin-bottom: 0;
-  font-size: 16.25px;
-  font-weight: 300;
-  line-height: 1.25;
-}
-blockquote small {
-  display: block;
-  line-height: 20px;
-  color: #999999;
-}
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-blockquote.pull-right {
-  float: right;
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-}
-blockquote.pull-right p,
-blockquote.pull-right small {
-  text-align: right;
-}
-blockquote.pull-right small:before {
-  content: '';
-}
-blockquote.pull-right small:after {
-  content: '\00A0 \2014';
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  display: block;
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 20px;
-}
-code,
-pre {
-  padding: 0 3px 2px;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  font-size: 11px;
-  color: #444444;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-code {
-  padding: 2px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-  white-space: nowrap;
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 12px;
-  line-height: 20px;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-pre.prettyprint {
-  margin-bottom: 20px;
-}
-pre code {
-  padding: 0;
-  color: inherit;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-form {
-  margin: 0 0 20px;
-}
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 19.5px;
-  line-height: 40px;
-  color: #444444;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-legend small {
-  font-size: 15px;
-  color: #999999;
-}
-label,
-input,
-button,
-select,
-textarea {
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 20px;
-}
-input,
-button,
-select,
-textarea {
-  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: 20px;
-  padding: 4px 6px;
-  margin-bottom: 10px;
-  font-size: 13px;
-  line-height: 20px;
-  color: #555555;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  vertical-align: middle;
-}
-input,
-textarea,
-.uneditable-input {
-  width: 206px;
-}
-textarea {
-  height: auto;
-}
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: #ffffff;
-  border: 1px solid #c4c4c4;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear .2s, box-shadow linear .2s;
-  -moz-transition: border linear .2s, box-shadow linear .2s;
-  -o-transition: border linear .2s, box-shadow linear .2s;
-  transition: border linear .2s, box-shadow linear .2s;
-}
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  *margin-top: 0;
-  /* IE7 */
-  margin-top: 1px \9;
-  /* IE8-9 */
-  line-height: normal;
-}
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto;
-}
-select,
-input[type="file"] {
-  height: 30px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-  *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-  line-height: 30px;
-}
-select {
-  width: 220px;
-  border: 1px solid #c4c4c4;
-  background-color: #ffffff;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.uneditable-input,
-.uneditable-textarea {
-  color: #999999;
-  background-color: #fcfcfc;
-  border-color: #c4c4c4;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  cursor: not-allowed;
-}
-.uneditable-input {
-  overflow: hidden;
-  white-space: nowrap;
-}
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-input:-moz-placeholder,
-textarea:-moz-placeholder {
-  color: #999999;
-}
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
-  color: #999999;
-}
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
-  color: #999999;
-}
-.radio,
-.checkbox {
-  min-height: 20px;
-  padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px;
-}
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-.input-mini {
-  width: 60px;
-}
-.input-small {
-  width: 90px;
-}
-.input-medium {
-  width: 150px;
-}
-.input-large {
-  width: 210px;
-}
-.input-xlarge {
-  width: 270px;
-}
-.input-xxlarge {
-  width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-input,
-textarea,
-.uneditable-input {
-  margin-left: 0;
-}
-.controls-row [class*="span"] + [class*="span"] {
-  margin-left: 30px;
-}
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
-  width: 856px;
-}
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
-  width: 781px;
-}
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
-  width: 706px;
-}
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
-  width: 631px;
-}
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
-  width: 556px;
-}
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
-  width: 481px;
-}
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
-  width: 406px;
-}
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
-  width: 331px;
-}
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
-  width: 256px;
-}
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
-  width: 181px;
-}
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
-  width: 106px;
-}
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
-  width: 31px;
-}
-.controls-row {
-  *zoom: 1;
-}
-.controls-row:before,
-.controls-row:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.controls-row:after {
-  clear: both;
-}
-.controls-row [class*="span"],
-.row-fluid .controls-row [class*="span"] {
-  float: left;
-}
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
-  padding-top: 5px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-.control-group.warning .control-label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
-  color: #aa7d29;
-}
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  color: #aa7d29;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  border-color: #aa7d29;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
-  border-color: #815f1f;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
-  color: #aa7d29;
-  background-color: #fcf8e3;
-  border-color: #aa7d29;
-}
-.control-group.error .control-label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
-  color: #b85355;
-}
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  color: #b85355;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  border-color: #b85355;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
-  border-color: #993f41;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
-  color: #b85355;
-  background-color: #f2dede;
-  border-color: #b85355;
-}
-.control-group.success .control-label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
-  color: #5c8846;
-}
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  color: #5c8846;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  border-color: #5c8846;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
-  border-color: #456635;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
-  color: #5c8846;
-  background-color: #dff0d8;
-  border-color: #5c8846;
-}
-.control-group.info .control-label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
-  color: #4e7b86;
-}
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  color: #4e7b86;
-}
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  border-color: #4e7b86;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
-  border-color: #3b5d66;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-}
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
-  color: #4e7b86;
-  background-color: #d9edf7;
-  border-color: #4e7b86;
-}
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-}
-input:focus:invalid:focus,
-textarea:focus:invalid:focus,
-select:focus:invalid:focus {
-  border-color: #e9322d;
-  -webkit-box-shadow: 0 0 6px #f8b9b7;
-  -moz-box-shadow: 0 0 6px #f8b9b7;
-  box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
-  padding: 19px 20px 20px;
-  margin-top: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #e5e5e5;
-  *zoom: 1;
-}
-.form-actions:before,
-.form-actions:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.form-actions:after {
-  clear: both;
-}
-.help-block,
-.help-inline {
-  color: #6a6a6a;
-}
-.help-block {
-  display: block;
-  margin-bottom: 10px;
-}
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  vertical-align: middle;
-  padding-left: 5px;
-}
-.input-append,
-.input-prepend {
-  display: inline-block;
-  margin-bottom: 10px;
-  vertical-align: middle;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input,
-.input-append .dropdown-menu,
-.input-prepend .dropdown-menu,
-.input-append .popover,
-.input-prepend .popover {
-  font-size: 13px;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input {
-  position: relative;
-  margin-bottom: 0;
-  *margin-left: 0;
-  vertical-align: top;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append input:focus,
-.input-prepend input:focus,
-.input-append select:focus,
-.input-prepend select:focus,
-.input-append .uneditable-input:focus,
-.input-prepend .uneditable-input:focus {
-  z-index: 2;
-}
-.input-append .add-on,
-.input-prepend .add-on {
-  display: inline-block;
-  width: auto;
-  height: 20px;
-  min-width: 16px;
-  padding: 4px 5px;
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 20px;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-}
-.input-append .add-on,
-.input-prepend .add-on,
-.input-append .btn,
-.input-prepend .btn,
-.input-append .btn-group > .dropdown-toggle,
-.input-prepend .btn-group > .dropdown-toggle {
-  vertical-align: top;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.input-append .active,
-.input-prepend .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-.input-prepend .add-on,
-.input-prepend .btn {
-  margin-right: -1px;
-}
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append input + .btn-group .btn:last-child,
-.input-append select + .btn-group .btn:last-child,
-.input-append .uneditable-input + .btn-group .btn:last-child {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append .add-on,
-.input-append .btn,
-.input-append .btn-group {
-  margin-left: -1px;
-}
-.input-append .add-on:last-child,
-.input-append .btn:last-child,
-.input-append .btn-group:last-child > .dropdown-toggle {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.input-prepend.input-append input + .btn-group .btn,
-.input-prepend.input-append select + .btn-group .btn,
-.input-prepend.input-append .uneditable-input + .btn-group .btn {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
-  margin-right: -1px;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
-  margin-left: -1px;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append .btn-group:first-child {
-  margin-left: 0;
-}
-input.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9;
-  /* IE7-8 doesn't have border-radius, so don't indent the padding */
-  margin-bottom: 0;
-  -webkit-border-radius: 15px;
-  -moz-border-radius: 15px;
-  border-radius: 15px;
-}
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.form-search .input-append .search-query {
-  -webkit-border-radius: 14px 0 0 14px;
-  -moz-border-radius: 14px 0 0 14px;
-  border-radius: 14px 0 0 14px;
-}
-.form-search .input-append .btn {
-  -webkit-border-radius: 0 14px 14px 0;
-  -moz-border-radius: 0 14px 14px 0;
-  border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0 14px 14px 0;
-  -moz-border-radius: 0 14px 14px 0;
-  border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .btn {
-  -webkit-border-radius: 14px 0 0 14px;
-  -moz-border-radius: 14px 0 0 14px;
-  border-radius: 14px 0 0 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
-  display: none;
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
-  display: inline-block;
-}
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-.control-group {
-  margin-bottom: 10px;
-}
-legend + .control-group {
-  margin-top: 20px;
-  -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
-  margin-bottom: 20px;
-  *zoom: 1;
-}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.form-horizontal .control-group:after {
-  clear: both;
-}
-.form-horizontal .control-label {
-  float: left;
-  width: 160px;
-  padding-top: 5px;
-  text-align: right;
-}
-.form-horizontal .controls {
-  *display: inline-block;
-  *padding-left: 20px;
-  margin-left: 180px;
-  *margin-left: 0;
-}
-.form-horizontal .controls:first-child {
-  *padding-left: 180px;
-}
-.form-horizontal .help-block {
-  margin-bottom: 0;
-}
-.form-horizontal input + .help-block,
-.form-horizontal select + .help-block,
-.form-horizontal textarea + .help-block,
-.form-horizontal .uneditable-input + .help-block,
-.form-horizontal .input-prepend + .help-block,
-.form-horizontal .input-append + .help-block {
-  margin-top: 10px;
-}
-.form-horizontal .form-actions {
-  padding-left: 180px;
-}
-table {
-  max-width: 100%;
-  background-color: transparent;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-.table th,
-.table td {
-  padding: 8px;
-  line-height: 20px;
-  text-align: left;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-.table th {
-  font-weight: bold;
-}
-.table thead th {
-  vertical-align: bottom;
-}
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
-  border-top: 0;
-}
-.table tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-.table .table {
-  background-color: #f1f1f1;
-}
-.table-condensed th,
-.table-condensed td {
-  padding: 4px 5px;
-}
-.table-bordered {
-  border: 1px solid #dddddd;
-  border-collapse: separate;
-  *border-collapse: collapse;
-  border-left: 0;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.table-bordered th,
-.table-bordered td {
-  border-left: 1px solid #dddddd;
-}
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
-  border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child > th:first-child,
-.table-bordered tbody:first-child tr:first-child > td:first-child,
-.table-bordered tbody:first-child tr:first-child > th:first-child {
-  -webkit-border-top-left-radius: 3px;
-  -moz-border-radius-topleft: 3px;
-  border-top-left-radius: 3px;
-}
-.table-bordered thead:first-child tr:first-child > th:last-child,
-.table-bordered tbody:first-child tr:first-child > td:last-child,
-.table-bordered tbody:first-child tr:first-child > th:last-child {
-  -webkit-border-top-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  border-top-right-radius: 3px;
-}
-.table-bordered thead:last-child tr:last-child > th:first-child,
-.table-bordered tbody:last-child tr:last-child > td:first-child,
-.table-bordered tbody:last-child tr:last-child > th:first-child,
-.table-bordered tfoot:last-child tr:last-child > td:first-child,
-.table-bordered tfoot:last-child tr:last-child > th:first-child {
-  -webkit-border-bottom-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  border-bottom-left-radius: 3px;
-}
-.table-bordered thead:last-child tr:last-child > th:last-child,
-.table-bordered tbody:last-child tr:last-child > td:last-child,
-.table-bordered tbody:last-child tr:last-child > th:last-child,
-.table-bordered tfoot:last-child tr:last-child > td:last-child,
-.table-bordered tfoot:last-child tr:last-child > th:last-child {
-  -webkit-border-bottom-right-radius: 3px;
-  -moz-border-radius-bottomright: 3px;
-  border-bottom-right-radius: 3px;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
-  -webkit-border-bottom-left-radius: 0;
-  -moz-border-radius-bottomleft: 0;
-  border-bottom-left-radius: 0;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
-  -webkit-border-bottom-right-radius: 0;
-  -moz-border-radius-bottomright: 0;
-  border-bottom-right-radius: 0;
-}
-.table-bordered caption + thead tr:first-child th:first-child,
-.table-bordered caption + tbody tr:first-child td:first-child,
-.table-bordered colgroup + thead tr:first-child th:first-child,
-.table-bordered colgroup + tbody tr:first-child td:first-child {
-  -webkit-border-top-left-radius: 3px;
-  -moz-border-radius-topleft: 3px;
-  border-top-left-radius: 3px;
-}
-.table-bordered caption + thead tr:first-child th:last-child,
-.table-bordered caption + tbody tr:first-child td:last-child,
-.table-bordered colgroup + thead tr:first-child th:last-child,
-.table-bordered colgroup + tbody tr:first-child td:last-child {
-  -webkit-border-top-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  border-top-right-radius: 3px;
-}
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover tbody tr:hover > td,
-.table-hover tbody tr:hover > th {
-  background-color: #f5f5f5;
-}
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
-  display: table-cell;
-  float: none;
-  margin-left: 0;
-}
-.table td.span1,
-.table th.span1 {
-  float: none;
-  width: 29px;
-  margin-left: 0;
-}
-.table td.span2,
-.table th.span2 {
-  float: none;
-  width: 104px;
-  margin-left: 0;
-}
-.table td.span3,
-.table th.span3 {
-  float: none;
-  width: 179px;
-  margin-left: 0;
-}
-.table td.span4,
-.table th.span4 {
-  float: none;
-  width: 254px;
-  margin-left: 0;
-}
-.table td.span5,
-.table th.span5 {
-  float: none;
-  width: 329px;
-  margin-left: 0;
-}
-.table td.span6,
-.table th.span6 {
-  float: none;
-  width: 404px;
-  margin-left: 0;
-}
-.table td.span7,
-.table th.span7 {
-  float: none;
-  width: 479px;
-  margin-left: 0;
-}
-.table td.span8,
-.table th.span8 {
-  float: none;
-  width: 554px;
-  margin-left: 0;
-}
-.table td.span9,
-.table th.span9 {
-  float: none;
-  width: 629px;
-  margin-left: 0;
-}
-.table td.span10,
-.table th.span10 {
-  float: none;
-  width: 704px;
-  margin-left: 0;
-}
-.table td.span11,
-.table th.span11 {
-  float: none;
-  width: 779px;
-  margin-left: 0;
-}
-.table td.span12,
-.table th.span12 {
-  float: none;
-  width: 854px;
-  margin-left: 0;
-}
-.table tbody tr.success > td {
-  background-color: #dff0d8;
-}
-.table tbody tr.error > td {
-  background-color: #f2dede;
-}
-.table tbody tr.warning > td {
-  background-color: #fcf8e3;
-}
-.table tbody tr.info > td {
-  background-color: #d9edf7;
-}
-.table-hover tbody tr.success:hover > td {
-  background-color: #d0e9c6;
-}
-.table-hover tbody tr.error:hover > td {
-  background-color: #ebcccc;
-}
-.table-hover tbody tr.warning:hover > td {
-  background-color: #faf2cc;
-}
-.table-hover tbody tr.info:hover > td {
-  background-color: #c4e3f3;
-}
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../fonts/fontawesome/fontawesome-webfont.eot?v=3.2.1');
-  src: url('../fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../fonts/fontawesome/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../fonts/fontawesome/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../fonts/fontawesome/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-/* FONT AWESOME CORE
- * -------------------------- */
-[class^="icon-"],
-[class*=" icon-"] {
-  font-family: FontAwesome;
-  font-weight: normal;
-  font-style: normal;
-  text-decoration: inherit;
-  -webkit-font-smoothing: antialiased;
-  *margin-right: .3em;
-}
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
-  text-decoration: inherit;
-  display: inline-block;
-  speak: none;
-}
-/* makes the font 33% larger relative to the icon container */
-.icon-large:before {
-  vertical-align: -10%;
-  font-size: 1.33333333em;
-}
-/* makes sure icons active on rollover in links */
-a [class^="icon-"],
-a [class*=" icon-"] {
-  display: inline;
-}
-/* increased font size for icon-large */
-[class^="icon-"].icon-fixed-width,
-[class*=" icon-"].icon-fixed-width {
-  display: inline-block;
-  width: 1.14285714em;
-  text-align: right;
-  padding-right: 0.28571429em;
-}
-[class^="icon-"].icon-fixed-width.icon-large,
-[class*=" icon-"].icon-fixed-width.icon-large {
-  width: 1.42857143em;
-}
-.icons-ul {
-  margin-left: 2.14285714em;
-  list-style-type: none;
-}
-.icons-ul > li {
-  position: relative;
-}
-.icons-ul .icon-li {
-  position: absolute;
-  left: -2.14285714em;
-  width: 2.14285714em;
-  text-align: center;
-  line-height: inherit;
-}
-[class^="icon-"].hide,
-[class*=" icon-"].hide {
-  display: none;
-}
-.icon-muted {
-  color: #eeeeee;
-}
-.icon-light {
-  color: #ffffff;
-}
-.icon-dark {
-  color: #333333;
-}
-.icon-border {
-  border: solid 1px #eeeeee;
-  padding: .2em .25em .15em;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.icon-2x {
-  font-size: 2em;
-}
-.icon-2x.icon-border {
-  border-width: 2px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.icon-3x {
-  font-size: 3em;
-}
-.icon-3x.icon-border {
-  border-width: 3px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.icon-4x {
-  font-size: 4em;
-}
-.icon-4x.icon-border {
-  border-width: 4px;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.icon-5x {
-  font-size: 5em;
-}
-.icon-5x.icon-border {
-  border-width: 5px;
-  -webkit-border-radius: 7px;
-  -moz-border-radius: 7px;
-  border-radius: 7px;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-[class^="icon-"].pull-left,
-[class*=" icon-"].pull-left {
-  margin-right: .3em;
-}
-[class^="icon-"].pull-right,
-[class*=" icon-"].pull-right {
-  margin-left: .3em;
-}
-/* BOOTSTRAP SPECIFIC CLASSES
- * -------------------------- */
-/* Bootstrap 2.0 sprites.less reset */
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline;
-  width: auto;
-  height: auto;
-  line-height: normal;
-  vertical-align: baseline;
-  background-image: none;
-  background-position: 0% 0%;
-  background-repeat: repeat;
-  margin-top: 0;
-}
-/* more sprites.less reset */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"] {
-  background-image: none;
-}
-/* keeps Bootstrap styles with and without icons the same */
-.btn [class^="icon-"].icon-large,
-.nav [class^="icon-"].icon-large,
-.btn [class*=" icon-"].icon-large,
-.nav [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].icon-spin,
-.nav [class^="icon-"].icon-spin,
-.btn [class*=" icon-"].icon-spin,
-.nav [class*=" icon-"].icon-spin {
-  display: inline-block;
-}
-.nav-tabs [class^="icon-"],
-.nav-pills [class^="icon-"],
-.nav-tabs [class*=" icon-"],
-.nav-pills [class*=" icon-"],
-.nav-tabs [class^="icon-"].icon-large,
-.nav-pills [class^="icon-"].icon-large,
-.nav-tabs [class*=" icon-"].icon-large,
-.nav-pills [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].pull-left.icon-2x,
-.btn [class*=" icon-"].pull-left.icon-2x,
-.btn [class^="icon-"].pull-right.icon-2x,
-.btn [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .18em;
-}
-.btn [class^="icon-"].icon-spin.icon-large,
-.btn [class*=" icon-"].icon-spin.icon-large {
-  line-height: .8em;
-}
-.btn.btn-small [class^="icon-"].pull-left.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-small [class^="icon-"].pull-right.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .25em;
-}
-.btn.btn-large [class^="icon-"],
-.btn.btn-large [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .05em;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x {
-  margin-right: .2em;
-}
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-left: .2em;
-}
-/* Fixes alignment in nav lists */
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  line-height: inherit;
-}
-/* EXTRAS
- * -------------------------- */
-/* Stacked and layered icon */
-.icon-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: -35%;
-}
-.icon-stack [class^="icon-"],
-.icon-stack [class*=" icon-"] {
-  display: block;
-  text-align: center;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  font-size: 1em;
-  line-height: inherit;
-  *line-height: 2em;
-}
-.icon-stack .icon-stack-base {
-  font-size: 2em;
-  *line-height: 1em;
-}
-/* Animated rotating icon */
-.icon-spin {
-  display: inline-block;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  -webkit-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-/* Prevent stack and spinners from being taken inline when inside a link */
-a .icon-stack,
-a .icon-spin {
-  display: inline-block;
-  text-decoration: none;
-}
-@-moz-keyframes spin {
-  0% {
-    -moz-transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(359deg);
-  }
-}
-@-webkit-keyframes spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-  }
-}
-@-o-keyframes spin {
-  0% {
-    -o-transform: rotate(0deg);
-  }
-  100% {
-    -o-transform: rotate(359deg);
-  }
-}
-@-ms-keyframes spin {
-  0% {
-    -ms-transform: rotate(0deg);
-  }
-  100% {
-    -ms-transform: rotate(359deg);
-  }
-}
-@keyframes spin {
-  0% {
-    transform: rotate(0deg);
-  }
-  100% {
-    transform: rotate(359deg);
-  }
-}
-/* Icon rotations and mirroring */
-.icon-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-.icon-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-.icon-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-.icon-flip-horizontal:before {
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.icon-flip-vertical:before {
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-/* ensure rotation occurs inside anchor tags */
-a .icon-rotate-90:before,
-a .icon-rotate-180:before,
-a .icon-rotate-270:before,
-a .icon-flip-horizontal:before,
-a .icon-flip-vertical:before {
-  display: inline-block;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.icon-glass:before {
-  content: "\f000";
-}
-.icon-music:before {
-  content: "\f001";
-}
-.icon-search:before {
-  content: "\f002";
-}
-.icon-envelope-alt:before {
-  content: "\f003";
-}
-.icon-heart:before {
-  content: "\f004";
-}
-.icon-star:before {
-  content: "\f005";
-}
-.icon-star-empty:before {
-  content: "\f006";
-}
-.icon-user:before {
-  content: "\f007";
-}
-.icon-film:before {
-  content: "\f008";
-}
-.icon-th-large:before {
-  content: "\f009";
-}
-.icon-th:before {
-  content: "\f00a";
-}
-.icon-th-list:before {
-  content: "\f00b";
-}
-.icon-ok:before {
-  content: "\f00c";
-}
-.icon-remove:before {
-  content: "\f00d";
-}
-.icon-zoom-in:before {
-  content: "\f00e";
-}
-.icon-zoom-out:before {
-  content: "\f010";
-}
-.icon-power-off:before,
-.icon-off:before {
-  content: "\f011";
-}
-.icon-signal:before {
-  content: "\f012";
-}
-.icon-gear:before,
-.icon-cog:before {
-  content: "\f013";
-}
-.icon-trash:before {
-  content: "\f014";
-}
-.icon-home:before {
-  content: "\f015";
-}
-.icon-file-alt:before {
-  content: "\f016";
-}
-.icon-time:before {
-  content: "\f017";
-}
-.icon-road:before {
-  content: "\f018";
-}
-.icon-download-alt:before {
-  content: "\f019";
-}
-.icon-download:before {
-  content: "\f01a";
-}
-.icon-upload:before {
-  content: "\f01b";
-}
-.icon-inbox:before {
-  content: "\f01c";
-}
-.icon-play-circle:before {
-  content: "\f01d";
-}
-.icon-rotate-right:before,
-.icon-repeat:before {
-  content: "\f01e";
-}
-.icon-refresh:before {
-  content: "\f021";
-}
-.icon-list-alt:before {
-  content: "\f022";
-}
-.icon-lock:before {
-  content: "\f023";
-}
-.icon-flag:before {
-  content: "\f024";
-}
-.icon-headphones:before {
-  content: "\f025";
-}
-.icon-volume-off:before {
-  content: "\f026";
-}
-.icon-volume-down:before {
-  content: "\f027";
-}
-.icon-volume-up:before {
-  content: "\f028";
-}
-.icon-qrcode:before {
-  content: "\f029";
-}
-.icon-barcode:before {
-  content: "\f02a";
-}
-.icon-tag:before {
-  content: "\f02b";
-}
-.icon-tags:before {
-  content: "\f02c";
-}
-.icon-book:before {
-  content: "\f02d";
-}
-.icon-bookmark:before {
-  content: "\f02e";
-}
-.icon-print:before {
-  content: "\f02f";
-}
-.icon-camera:before {
-  content: "\f030";
-}
-.icon-font:before {
-  content: "\f031";
-}
-.icon-bold:before {
-  content: "\f032";
-}
-.icon-italic:before {
-  content: "\f033";
-}
-.icon-text-height:before {
-  content: "\f034";
-}
-.icon-text-width:before {
-  content: "\f035";
-}
-.icon-align-left:before {
-  content: "\f036";
-}
-.icon-align-center:before {
-  content: "\f037";
-}
-.icon-align-right:before {
-  content: "\f038";
-}
-.icon-align-justify:before {
-  content: "\f039";
-}
-.icon-list:before {
-  content: "\f03a";
-}
-.icon-indent-left:before {
-  content: "\f03b";
-}
-.icon-indent-right:before {
-  content: "\f03c";
-}
-.icon-facetime-video:before {
-  content: "\f03d";
-}
-.icon-picture:before {
-  content: "\f03e";
-}
-.icon-pencil:before {
-  content: "\f040";
-}
-.icon-map-marker:before {
-  content: "\f041";
-}
-.icon-adjust:before {
-  content: "\f042";
-}
-.icon-tint:before {
-  content: "\f043";
-}
-.icon-edit:before {
-  content: "\f044";
-}
-.icon-share:before {
-  content: "\f045";
-}
-.icon-check:before {
-  content: "\f046";
-}
-.icon-move:before {
-  content: "\f047";
-}
-.icon-step-backward:before {
-  content: "\f048";
-}
-.icon-fast-backward:before {
-  content: "\f049";
-}
-.icon-backward:before {
-  content: "\f04a";
-}
-.icon-play:before {
-  content: "\f04b";
-}
-.icon-pause:before {
-  content: "\f04c";
-}
-.icon-stop:before {
-  content: "\f04d";
-}
-.icon-forward:before {
-  content: "\f04e";
-}
-.icon-fast-forward:before {
-  content: "\f050";
-}
-.icon-step-forward:before {
-  content: "\f051";
-}
-.icon-eject:before {
-  content: "\f052";
-}
-.icon-chevron-left:before {
-  content: "\f053";
-}
-.icon-chevron-right:before {
-  content: "\f054";
-}
-.icon-plus-sign:before {
-  content: "\f055";
-}
-.icon-minus-sign:before {
-  content: "\f056";
-}
-.icon-remove-sign:before {
-  content: "\f057";
-}
-.icon-ok-sign:before {
-  content: "\f058";
-}
-.icon-question-sign:before {
-  content: "\f059";
-}
-.icon-info-sign:before {
-  content: "\f05a";
-}
-.icon-screenshot:before {
-  content: "\f05b";
-}
-.icon-remove-circle:before {
-  content: "\f05c";
-}
-.icon-ok-circle:before {
-  content: "\f05d";
-}
-.icon-ban-circle:before {
-  content: "\f05e";
-}
-.icon-arrow-left:before {
-  content: "\f060";
-}
-.icon-arrow-right:before {
-  content: "\f061";
-}
-.icon-arrow-up:before {
-  content: "\f062";
-}
-.icon-arrow-down:before {
-  content: "\f063";
-}
-.icon-mail-forward:before,
-.icon-share-alt:before {
-  content: "\f064";
-}
-.icon-resize-full:before {
-  content: "\f065";
-}
-.icon-resize-small:before {
-  content: "\f066";
-}
-.icon-plus:before {
-  content: "\f067";
-}
-.icon-minus:before {
-  content: "\f068";
-}
-.icon-asterisk:before {
-  content: "\f069";
-}
-.icon-exclamation-sign:before {
-  content: "\f06a";
-}
-.icon-gift:before {
-  content: "\f06b";
-}
-.icon-leaf:before {
-  content: "\f06c";
-}
-.icon-fire:before {
-  content: "\f06d";
-}
-.icon-eye-open:before {
-  content: "\f06e";
-}
-.icon-eye-close:before {
-  content: "\f070";
-}
-.icon-warning-sign:before {
-  content: "\f071";
-}
-.icon-plane:before {
-  content: "\f072";
-}
-.icon-calendar:before {
-  content: "\f073";
-}
-.icon-random:before {
-  content: "\f074";
-}
-.icon-comment:before {
-  content: "\f075";
-}
-.icon-magnet:before {
-  content: "\f076";
-}
-.icon-chevron-up:before {
-  content: "\f077";
-}
-.icon-chevron-down:before {
-  content: "\f078";
-}
-.icon-retweet:before {
-  content: "\f079";
-}
-.icon-shopping-cart:before {
-  content: "\f07a";
-}
-.icon-folder-close:before {
-  content: "\f07b";
-}
-.icon-folder-open:before {
-  content: "\f07c";
-}
-.icon-resize-vertical:before {
-  content: "\f07d";
-}
-.icon-resize-horizontal:before {
-  content: "\f07e";
-}
-.icon-bar-chart:before {
-  content: "\f080";
-}
-.icon-twitter-sign:before {
-  content: "\f081";
-}
-.icon-facebook-sign:before {
-  content: "\f082";
-}
-.icon-camera-retro:before {
-  content: "\f083";
-}
-.icon-key:before {
-  content: "\f084";
-}
-.icon-gears:before,
-.icon-cogs:before {
-  content: "\f085";
-}
-.icon-comments:before {
-  content: "\f086";
-}
-.icon-thumbs-up-alt:before {
-  content: "\f087";
-}
-.icon-thumbs-down-alt:before {
-  content: "\f088";
-}
-.icon-star-half:before {
-  content: "\f089";
-}
-.icon-heart-empty:before {
-  content: "\f08a";
-}
-.icon-signout:before {
-  content: "\f08b";
-}
-.icon-linkedin-sign:before {
-  content: "\f08c";
-}
-.icon-pushpin:before {
-  content: "\f08d";
-}
-.icon-external-link:before {
-  content: "\f08e";
-}
-.icon-signin:before {
-  content: "\f090";
-}
-.icon-trophy:before {
-  content: "\f091";
-}
-.icon-github-sign:before {
-  content: "\f092";
-}
-.icon-upload-alt:before {
-  content: "\f093";
-}
-.icon-lemon:before {
-  content: "\f094";
-}
-.icon-phone:before {
-  content: "\f095";
-}
-.icon-unchecked:before,
-.icon-check-empty:before {
-  content: "\f096";
-}
-.icon-bookmark-empty:before {
-  content: "\f097";
-}
-.icon-phone-sign:before {
-  content: "\f098";
-}
-.icon-twitter:before {
-  content: "\f099";
-}
-.icon-facebook:before {
-  content: "\f09a";
-}
-.icon-github:before {
-  content: "\f09b";
-}
-.icon-unlock:before {
-  content: "\f09c";
-}
-.icon-credit-card:before {
-  content: "\f09d";
-}
-.icon-rss:before {
-  content: "\f09e";
-}
-.icon-hdd:before {
-  content: "\f0a0";
-}
-.icon-bullhorn:before {
-  content: "\f0a1";
-}
-.icon-bell:before {
-  content: "\f0a2";
-}
-.icon-certificate:before {
-  content: "\f0a3";
-}
-.icon-hand-right:before {
-  content: "\f0a4";
-}
-.icon-hand-left:before {
-  content: "\f0a5";
-}
-.icon-hand-up:before {
-  content: "\f0a6";
-}
-.icon-hand-down:before {
-  content: "\f0a7";
-}
-.icon-circle-arrow-left:before {
-  content: "\f0a8";
-}
-.icon-circle-arrow-right:before {
-  content: "\f0a9";
-}
-.icon-circle-arrow-up:before {
-  content: "\f0aa";
-}
-.icon-circle-arrow-down:before {
-  content: "\f0ab";
-}
-.icon-globe:before {
-  content: "\f0ac";
-}
-.icon-wrench:before {
-  content: "\f0ad";
-}
-.icon-tasks:before {
-  content: "\f0ae";
-}
-.icon-filter:before {
-  content: "\f0b0";
-}
-.icon-briefcase:before {
-  content: "\f0b1";
-}
-.icon-fullscreen:before {
-  content: "\f0b2";
-}
-.icon-group:before {
-  content: "\f0c0";
-}
-.icon-link:before {
-  content: "\f0c1";
-}
-.icon-cloud:before {
-  content: "\f0c2";
-}
-.icon-beaker:before {
-  content: "\f0c3";
-}
-.icon-cut:before {
-  content: "\f0c4";
-}
-.icon-copy:before {
-  content: "\f0c5";
-}
-.icon-paperclip:before,
-.icon-paper-clip:before {
-  content: "\f0c6";
-}
-.icon-save:before {
-  content: "\f0c7";
-}
-.icon-sign-blank:before {
-  content: "\f0c8";
-}
-.icon-reorder:before {
-  content: "\f0c9";
-}
-.icon-list-ul:before {
-  content: "\f0ca";
-}
-.icon-list-ol:before {
-  content: "\f0cb";
-}
-.icon-strikethrough:before {
-  content: "\f0cc";
-}
-.icon-underline:before {
-  content: "\f0cd";
-}
-.icon-table:before {
-  content: "\f0ce";
-}
-.icon-magic:before {
-  content: "\f0d0";
-}
-.icon-truck:before {
-  content: "\f0d1";
-}
-.icon-pinterest:before {
-  content: "\f0d2";
-}
-.icon-pinterest-sign:before {
-  content: "\f0d3";
-}
-.icon-google-plus-sign:before {
-  content: "\f0d4";
-}
-.icon-google-plus:before {
-  content: "\f0d5";
-}
-.icon-money:before {
-  content: "\f0d6";
-}
-.icon-caret-down:before {
-  content: "\f0d7";
-}
-.icon-caret-up:before {
-  content: "\f0d8";
-}
-.icon-caret-left:before {
-  content: "\f0d9";
-}
-.icon-caret-right:before {
-  content: "\f0da";
-}
-.icon-columns:before {
-  content: "\f0db";
-}
-.icon-sort:before {
-  content: "\f0dc";
-}
-.icon-sort-down:before {
-  content: "\f0dd";
-}
-.icon-sort-up:before {
-  content: "\f0de";
-}
-.icon-envelope:before {
-  content: "\f0e0";
-}
-.icon-linkedin:before {
-  content: "\f0e1";
-}
-.icon-rotate-left:before,
-.icon-undo:before {
-  content: "\f0e2";
-}
-.icon-legal:before {
-  content: "\f0e3";
-}
-.icon-dashboard:before {
-  content: "\f0e4";
-}
-.icon-comment-alt:before {
-  content: "\f0e5";
-}
-.icon-comments-alt:before {
-  content: "\f0e6";
-}
-.icon-bolt:before {
-  content: "\f0e7";
-}
-.icon-sitemap:before {
-  content: "\f0e8";
-}
-.icon-umbrella:before {
-  content: "\f0e9";
-}
-.icon-paste:before {
-  content: "\f0ea";
-}
-.icon-lightbulb:before {
-  content: "\f0eb";
-}
-.icon-exchange:before {
-  content: "\f0ec";
-}
-.icon-cloud-download:before {
-  content: "\f0ed";
-}
-.icon-cloud-upload:before {
-  content: "\f0ee";
-}
-.icon-user-md:before {
-  content: "\f0f0";
-}
-.icon-stethoscope:before {
-  content: "\f0f1";
-}
-.icon-suitcase:before {
-  content: "\f0f2";
-}
-.icon-bell-alt:before {
-  content: "\f0f3";
-}
-.icon-coffee:before {
-  content: "\f0f4";
-}
-.icon-food:before {
-  content: "\f0f5";
-}
-.icon-file-text-alt:before {
-  content: "\f0f6";
-}
-.icon-building:before {
-  content: "\f0f7";
-}
-.icon-hospital:before {
-  content: "\f0f8";
-}
-.icon-ambulance:before {
-  content: "\f0f9";
-}
-.icon-medkit:before {
-  content: "\f0fa";
-}
-.icon-fighter-jet:before {
-  content: "\f0fb";
-}
-.icon-beer:before {
-  content: "\f0fc";
-}
-.icon-h-sign:before {
-  content: "\f0fd";
-}
-.icon-plus-sign-alt:before {
-  content: "\f0fe";
-}
-.icon-double-angle-left:before {
-  content: "\f100";
-}
-.icon-double-angle-right:before {
-  content: "\f101";
-}
-.icon-double-angle-up:before {
-  content: "\f102";
-}
-.icon-double-angle-down:before {
-  content: "\f103";
-}
-.icon-angle-left:before {
-  content: "\f104";
-}
-.icon-angle-right:before {
-  content: "\f105";
-}
-.icon-angle-up:before {
-  content: "\f106";
-}
-.icon-angle-down:before {
-  content: "\f107";
-}
-.icon-desktop:before {
-  content: "\f108";
-}
-.icon-laptop:before {
-  content: "\f109";
-}
-.icon-tablet:before {
-  content: "\f10a";
-}
-.icon-mobile-phone:before {
-  content: "\f10b";
-}
-.icon-circle-blank:before {
-  content: "\f10c";
-}
-.icon-quote-left:before {
-  content: "\f10d";
-}
-.icon-quote-right:before {
-  content: "\f10e";
-}
-.icon-spinner:before {
-  content: "\f110";
-}
-.icon-circle:before {
-  content: "\f111";
-}
-.icon-mail-reply:before,
-.icon-reply:before {
-  content: "\f112";
-}
-.icon-github-alt:before {
-  content: "\f113";
-}
-.icon-folder-close-alt:before {
-  content: "\f114";
-}
-.icon-folder-open-alt:before {
-  content: "\f115";
-}
-.icon-expand-alt:before {
-  content: "\f116";
-}
-.icon-collapse-alt:before {
-  content: "\f117";
-}
-.icon-smile:before {
-  content: "\f118";
-}
-.icon-frown:before {
-  content: "\f119";
-}
-.icon-meh:before {
-  content: "\f11a";
-}
-.icon-gamepad:before {
-  content: "\f11b";
-}
-.icon-keyboard:before {
-  content: "\f11c";
-}
-.icon-flag-alt:before {
-  content: "\f11d";
-}
-.icon-flag-checkered:before {
-  content: "\f11e";
-}
-.icon-terminal:before {
-  content: "\f120";
-}
-.icon-code:before {
-  content: "\f121";
-}
-.icon-reply-all:before {
-  content: "\f122";
-}
-.icon-mail-reply-all:before {
-  content: "\f122";
-}
-.icon-star-half-full:before,
-.icon-star-half-empty:before {
-  content: "\f123";
-}
-.icon-location-arrow:before {
-  content: "\f124";
-}
-.icon-crop:before {
-  content: "\f125";
-}
-.icon-code-fork:before {
-  content: "\f126";
-}
-.icon-unlink:before {
-  content: "\f127";
-}
-.icon-question:before {
-  content: "\f128";
-}
-.icon-info:before {
-  content: "\f129";
-}
-.icon-exclamation:before {
-  content: "\f12a";
-}
-.icon-superscript:before {
-  content: "\f12b";
-}
-.icon-subscript:before {
-  content: "\f12c";
-}
-.icon-eraser:before {
-  content: "\f12d";
-}
-.icon-puzzle-piece:before {
-  content: "\f12e";
-}
-.icon-microphone:before {
-  content: "\f130";
-}
-.icon-microphone-off:before {
-  content: "\f131";
-}
-.icon-shield:before {
-  content: "\f132";
-}
-.icon-calendar-empty:before {
-  content: "\f133";
-}
-.icon-fire-extinguisher:before {
-  content: "\f134";
-}
-.icon-rocket:before {
-  content: "\f135";
-}
-.icon-maxcdn:before {
-  content: "\f136";
-}
-.icon-chevron-sign-left:before {
-  content: "\f137";
-}
-.icon-chevron-sign-right:before {
-  content: "\f138";
-}
-.icon-chevron-sign-up:before {
-  content: "\f139";
-}
-.icon-chevron-sign-down:before {
-  content: "\f13a";
-}
-.icon-html5:before {
-  content: "\f13b";
-}
-.icon-css3:before {
-  content: "\f13c";
-}
-.icon-anchor:before {
-  content: "\f13d";
-}
-.icon-unlock-alt:before {
-  content: "\f13e";
-}
-.icon-bullseye:before {
-  content: "\f140";
-}
-.icon-ellipsis-horizontal:before {
-  content: "\f141";
-}
-.icon-ellipsis-vertical:before {
-  content: "\f142";
-}
-.icon-rss-sign:before {
-  content: "\f143";
-}
-.icon-play-sign:before {
-  content: "\f144";
-}
-.icon-ticket:before {
-  content: "\f145";
-}
-.icon-minus-sign-alt:before {
-  content: "\f146";
-}
-.icon-check-minus:before {
-  content: "\f147";
-}
-.icon-level-up:before {
-  content: "\f148";
-}
-.icon-level-down:before {
-  content: "\f149";
-}
-.icon-check-sign:before {
-  content: "\f14a";
-}
-.icon-edit-sign:before {
-  content: "\f14b";
-}
-.icon-external-link-sign:before {
-  content: "\f14c";
-}
-.icon-share-sign:before {
-  content: "\f14d";
-}
-.icon-compass:before {
-  content: "\f14e";
-}
-.icon-collapse:before {
-  content: "\f150";
-}
-.icon-collapse-top:before {
-  content: "\f151";
-}
-.icon-expand:before {
-  content: "\f152";
-}
-.icon-euro:before,
-.icon-eur:before {
-  content: "\f153";
-}
-.icon-gbp:before {
-  content: "\f154";
-}
-.icon-dollar:before,
-.icon-usd:before {
-  content: "\f155";
-}
-.icon-rupee:before,
-.icon-inr:before {
-  content: "\f156";
-}
-.icon-yen:before,
-.icon-jpy:before {
-  content: "\f157";
-}
-.icon-renminbi:before,
-.icon-cny:before {
-  content: "\f158";
-}
-.icon-won:before,
-.icon-krw:before {
-  content: "\f159";
-}
-.icon-bitcoin:before,
-.icon-btc:before {
-  content: "\f15a";
-}
-.icon-file:before {
-  content: "\f15b";
-}
-.icon-file-text:before {
-  content: "\f15c";
-}
-.icon-sort-by-alphabet:before {
-  content: "\f15d";
-}
-.icon-sort-by-alphabet-alt:before {
-  content: "\f15e";
-}
-.icon-sort-by-attributes:before {
-  content: "\f160";
-}
-.icon-sort-by-attributes-alt:before {
-  content: "\f161";
-}
-.icon-sort-by-order:before {
-  content: "\f162";
-}
-.icon-sort-by-order-alt:before {
-  content: "\f163";
-}
-.icon-thumbs-up:before {
-  content: "\f164";
-}
-.icon-thumbs-down:before {
-  content: "\f165";
-}
-.icon-youtube-sign:before {
-  content: "\f166";
-}
-.icon-youtube:before {
-  content: "\f167";
-}
-.icon-xing:before {
-  content: "\f168";
-}
-.icon-xing-sign:before {
-  content: "\f169";
-}
-.icon-youtube-play:before {
-  content: "\f16a";
-}
-.icon-dropbox:before {
-  content: "\f16b";
-}
-.icon-stackexchange:before {
-  content: "\f16c";
-}
-.icon-instagram:before {
-  content: "\f16d";
-}
-.icon-flickr:before {
-  content: "\f16e";
-}
-.icon-adn:before {
-  content: "\f170";
-}
-.icon-bitbucket:before {
-  content: "\f171";
-}
-.icon-bitbucket-sign:before {
-  content: "\f172";
-}
-.icon-tumblr:before {
-  content: "\f173";
-}
-.icon-tumblr-sign:before {
-  content: "\f174";
-}
-.icon-long-arrow-down:before {
-  content: "\f175";
-}
-.icon-long-arrow-up:before {
-  content: "\f176";
-}
-.icon-long-arrow-left:before {
-  content: "\f177";
-}
-.icon-long-arrow-right:before {
-  content: "\f178";
-}
-.icon-apple:before {
-  content: "\f179";
-}
-.icon-windows:before {
-  content: "\f17a";
-}
-.icon-android:before {
-  content: "\f17b";
-}
-.icon-linux:before {
-  content: "\f17c";
-}
-.icon-dribbble:before {
-  content: "\f17d";
-}
-.icon-skype:before {
-  content: "\f17e";
-}
-.icon-foursquare:before {
-  content: "\f180";
-}
-.icon-trello:before {
-  content: "\f181";
-}
-.icon-female:before {
-  content: "\f182";
-}
-.icon-male:before {
-  content: "\f183";
-}
-.icon-gittip:before {
-  content: "\f184";
-}
-.icon-sun:before {
-  content: "\f185";
-}
-.icon-moon:before {
-  content: "\f186";
-}
-.icon-archive:before {
-  content: "\f187";
-}
-.icon-bug:before {
-  content: "\f188";
-}
-.icon-vk:before {
-  content: "\f189";
-}
-.icon-weibo:before {
-  content: "\f18a";
-}
-.icon-renren:before {
-  content: "\f18b";
-}
-.dropup,
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top: 4px solid #000000;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-  content: "";
-}
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  list-style: none;
-  background-color: #ffffff;
-  border: 1px solid #ccc;
-  border: 1px solid #c0c0c0;
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding;
-  background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 9px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 20px;
-  color: #444444;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
-  text-decoration: none;
-  color: #ffffff;
-  background-color: #3a9910;
-  background-image: -moz-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#358b0f));
-  background-image: -webkit-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -o-linear-gradient(top, #3ea211, #358b0f);
-  background-image: linear-gradient(to bottom, #3ea211, #358b0f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff358b0f', GradientType=0);
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #3a9910;
-  background-image: -moz-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#358b0f));
-  background-image: -webkit-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -o-linear-gradient(top, #3ea211, #358b0f);
-  background-image: linear-gradient(to bottom, #3ea211, #358b0f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff358b0f', GradientType=0);
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: default;
-}
-.open {
-  *z-index: 1000;
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px solid #000000;
-  content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-.dropdown-submenu {
-  position: relative;
-}
-.dropdown-submenu > .dropdown-menu {
-  top: 0;
-  left: 100%;
-  margin-top: -6px;
-  margin-left: -1px;
-  -webkit-border-radius: 0 6px 6px 6px;
-  -moz-border-radius: 0 6px 6px 6px;
-  border-radius: 0 6px 6px 6px;
-}
-.dropdown-submenu:hover > .dropdown-menu {
-  display: block;
-}
-.dropup .dropdown-submenu > .dropdown-menu {
-  top: auto;
-  bottom: 0;
-  margin-top: 0;
-  margin-bottom: -2px;
-  -webkit-border-radius: 5px 5px 5px 0;
-  -moz-border-radius: 5px 5px 5px 0;
-  border-radius: 5px 5px 5px 0;
-}
-.dropdown-submenu > a:after {
-  display: block;
-  content: " ";
-  float: right;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #cccccc;
-  margin-top: 5px;
-  margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
-  border-left-color: #ffffff;
-}
-.dropdown-submenu.pull-left {
-  float: none;
-}
-.dropdown-submenu.pull-left > .dropdown-menu {
-  left: -100%;
-  margin-left: 10px;
-  -webkit-border-radius: 6px 0 6px 6px;
-  -moz-border-radius: 6px 0 6px 6px;
-  border-radius: 6px 0 6px 6px;
-}
-.dropdown .dropdown-menu .nav-header {
-  padding-left: 20px;
-  padding-right: 20px;
-}
-.typeahead {
-  z-index: 1051;
-  margin-top: 2px;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-.well-large {
-  padding: 24px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.well-small {
-  padding: 9px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
-}
-.collapse.in {
-  height: auto;
-}
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 20px;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
-  color: #000000;
-  text-decoration: none;
-  cursor: pointer;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-}
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-.btn {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  padding: 4px 12px;
-  margin-bottom: 0;
-  font-size: 13px;
-  line-height: 20px;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  color: #444444;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  background-color: #f5f5f5;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #e6e6e6;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  border: 1px solid #bbbbbb;
-  *border: 0;
-  border-bottom-color: #a2a2a2;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  *margin-left: .3em;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn:hover,
-.btn:focus,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
-  color: #444444;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-}
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
-}
-.btn:first-child {
-  *margin-left: 0;
-}
-.btn:hover,
-.btn:focus {
-  color: #444444;
-  text-decoration: none;
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;
-}
-.btn:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn.active,
-.btn:active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-  box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn.disabled,
-.btn[disabled] {
-  cursor: default;
-  background-image: none;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-.btn-large {
-  padding: 11px 19px;
-  font-size: 16.25px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
-  margin-top: 4px;
-}
-.btn-small {
-  padding: 2px 10px;
-  font-size: 11.05px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
-  margin-top: -1px;
-}
-.btn-mini {
-  padding: 0 6px;
-  font-size: 9.75px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-left: 0;
-  padding-right: 0;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
-  color: rgba(255, 255, 255, 0.75);
-}
-.btn-primary {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #2ca212;
-  background-image: -moz-linear-gradient(top, #3ea211, #11a214);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#11a214));
-  background-image: -webkit-linear-gradient(top, #3ea211, #11a214);
-  background-image: -o-linear-gradient(top, #3ea211, #11a214);
-  background-image: linear-gradient(to bottom, #3ea211, #11a214);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff11a214', GradientType=0);
-  border-color: #11a214 #11a214 #0a5d0c;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #11a214;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  color: #ffffff;
-  background-color: #11a214;
-  *background-color: #0f8b11;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #0c740f \9;
-}
-.btn-warning {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(to bottom, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-  border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #f89406;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
-  color: #ffffff;
-  background-color: #f89406;
-  *background-color: #df8505;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #c67605 \9;
-}
-.btn-danger {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #da4f49;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
-  border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #bd362f;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
-  color: #ffffff;
-  background-color: #bd362f;
-  *background-color: #a9302a;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #942a25 \9;
-}
-.btn-success {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(to bottom, #62c462, #51a351);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
-  border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #51a351;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
-  color: #ffffff;
-  background-color: #51a351;
-  *background-color: #499249;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #408140 \9;
-}
-.btn-info {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
-  border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #2f96b4;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
-  color: #ffffff;
-  background-color: #2f96b4;
-  *background-color: #2a85a0;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #24748c \9;
-}
-.btn-inverse {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #363636;
-  background-image: -moz-linear-gradient(top, #444444, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
-  background-image: -webkit-linear-gradient(top, #444444, #222222);
-  background-image: -o-linear-gra

<TRUNCATED>

[12/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Utils.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Utils.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Utils.js
deleted file mode 100644
index 15322ef..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Utils.js
+++ /dev/null
@@ -1,1241 +0,0 @@
-/**
-* 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/Enums',
-    'utils/LangSupport',
-    'moment',
-    'utils/Globals',
-    'bootbox'
-],function(require,XAEnums,localization,moment,Globals,bootbox) {
-    'use strict';
-
-
-    var prevNetworkErrorTime = 0;
-    var Utils = {};
-
-    require(['noty'],function(){
-        $.extend($.noty.defaults,{
-            timeout : 5000,
-            layout : "topRight",
-            theme : "relax",
-            closeWith: ['click','button'],
-             animation   : {
-                 open  : 'animated flipInX',
-                 close : 'animated flipOutX',
-                 easing: 'swing',
-                 speed : 500
-             }
-            
-        });
-    });
-
-    // ///////////////////////////////////////////////////////
-    // Enum utility methods
-    // //////////////////////////////////////////////////////
-    /**Utils
-     * Get enum for the enumId
-     * 
-     * @param {integer}
-     *            enumId - The enumId
-     */
-    Utils.getEnum = function(enumId) {
-        if (!enumId || enumId.length < 1) {
-            return "";
-        }
-        // check if the enums are loaded
-        if (!XAEnums[enumId]) {
-            return "";
-        }
-        return XAEnums[enumId];
-    };
-
-    /**
-     * Get enum by Enum and value
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     * @param {integer}
-     *            value - The value
-     */
-    Utils.enumElementByValue = function(myEnum, value) {
-        var element = _.detect(myEnum, function(element) {
-            return element.value == value;
-        });
-        return element;
-    };
-
-    /**
-     * Get enum by Enum and name, value
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     * @param {string}
-     *            propertyName - The name of key
-     * @param {integer}
-     *            propertyValue - The value
-     */
-    Utils.enumElementByPropertyNameValue = function(myEnum, propertyName,
-            propertyValue) {
-        for ( var element in myEnum) {
-            if (myEnum[element][propertyName] == propertyValue) {
-                return myEnum[element];
-            }
-        }
-        return null;
-    };
-
-    /**
-     * Get enum value for given enum label
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     * @param {string}
-     *            label - The label to search for in the Enum
-     */
-    Utils.enumLabelToValue = function(myEnum, label) {
-        var element = _.detect(myEnum, function(element) {
-            return element.label == label;
-        });
-        return (typeof element === "undefined") ? "--" : element.value;
-    };
-
-    /**
-     * Get enum label for given enum value
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     * @param {integer}
-     *            value - The value
-     */
-    Utils.enumValueToLabel = function(myEnum, value) {
-        var element = _.detect(myEnum, function(element) {
-            return element.value == value;
-        });
-        return (typeof element === "undefined") ? "--" : element.label;
-    };
-
-    /**
-     * Get enum label tt string for given Enum value
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     * @param {integer}
-     *            value - The value
-     */
-    Utils.enumValueToLabeltt = function(myEnum, value) {
-        var element = _.detect(myEnum, function(element) {
-            return element.value == value;
-        });
-        return (typeof element === "undefined") ? "--" : element.tt;
-    };
-
-    /**
-     * Get NVpairs for given Enum to be used in Select
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     */
-    Utils.enumToSelectPairs = function(myEnum) {
-        return _.map(myEnum, function(o) {
-            return {
-                val : o.value,
-                label : o.label
-            };
-        });
-    };
-
-    /**
-     * Get NVpairs for given Enum
-     * 
-     * @param {Object}
-     *            myEnum - The enum
-     */
-    Utils.enumNVPairs = function(myEnum) {
-        var nvPairs = {
-            ' ' : '--Select--'
-        };
-
-        for ( var name in myEnum) {
-            nvPairs[myEnum[name].value] = myEnum[name].label;
-        }
-
-        return nvPairs;
-    };
-
-    /**
-     * Get array NV pairs for given Array
-     * 
-     * @param {Array}
-     *            myArray - The eArraynum
-     */
-    Utils.arrayNVPairs = function(myArray) {
-        var nvPairs = {
-            ' ' : '--Select--'
-        };
-        _.each(myArray, function(val) {
-            nvPairs[val] = val;
-        });
-        return nvPairs;
-    };
-
-    Utils.notifyInfo = function(options) {
-        noty({
-            type:"information",
-            text : "<i class='fa fa-exclamation-circle'></i> "+(options.content || "Info message.")
-        });
-    };
-    Utils.notifyWarn = function(options) {
-        noty({
-            type:"warning",
-            text : "<i class='fa fa-times-circle'></i> "+(options.content || "Info message.")
-        });
-    };
-
-    Utils.notifyError = function(options) {
-        noty({
-            type:"error",
-            text : "<i class='fa fa-times-circle'></i> "+(options.content || "Error occurred.")
-        });
-    };
-
-    Utils.notifySuccess = function(options) {
-        noty({
-            type:"success",
-            text : "<i class='fa fa-check-circle-o'></i> "+(options.content || "Error occurred.")
-        });
-    };
-
-    /**
-     * Convert new line to <br />
-     * 
-     * @param {string}
-     *            str - the string to convert
-     */
-    Utils.nl2br = function(str) {
-        if (!str)
-            return '';
-        return str.replace(/\n/g, '<br/>').replace(/[\r\t]/g, " ");
-    };
-
-    /**
-     * Convert <br />
-     * to new line
-     * 
-     * @param {string}
-     *            str - the string to convert
-     */
-    Utils.br2nl = function(str) {
-        if (!str)
-            return '';
-        return str.replace(/\<br(\s*\/|)\>/gi, '\n');
-    };
-
-    /**
-     * Escape html chars
-     * 
-     * @param {string}
-     *            str - the html string to escape
-     */
-    Utils.escapeHtmlChar = function(str) {
-        if (!str)
-            return '';
-        str = str.replace(/&/g, "&amp;");
-        str = str.replace(/>/g, "&gt;");
-        str = str.replace(/</g, "&lt;");
-        str = str.replace(/\"/g, "&quot;");
-        str = str.replace(/'/g, "&#039;");
-        return str;
-    };
-
-    /**
-     * nl2br and Escape html chars
-     * 
-     * @param {string}
-     *            str - the html string
-     */
-    Utils.nl2brAndEscapeHtmlChar = function(str) {
-
-        if (!str)
-            return '';
-        var escapedStr = escapeHtmlChar(str);
-        var finalStr = nl2br(str);
-        return finalStr;
-    };
-
-    /**
-     * prevent navigation with msg and call callback
-     * 
-     * @param {String}
-     *            msg - The msg to show
-     * @param {function}
-     *            callback - The callback to call
-     */
-    Utils.preventNavigation = function(msg, $form) {
-        window._preventNavigation = true;
-        window._preventNavigationMsg = msg;
-        $("body a, i[class^='icon-']").on("click.blockNavigation", function(e) {
-            Utils.preventNavigationHandler.call(this, e, msg, $form);
-        });
-    };
-
-    /**
-     * remove the block of preventNavigation
-     */
-    Utils.allowNavigation = function() {
-        window._preventNavigation = false;
-        window._preventNavigationMsg = undefined;
-        $("body a, i[class^='icon-']").off('click.blockNavigation');
-    };
-
-    Utils.preventNavigationHandler = function(e, msg, $form) {
-        var formChanged = false;
-        var target = this;
-        if (!_.isUndefined($form))
-            formChanged = $form.find('.dirtyField').length > 0 ? true : false;
-        if (!$(e.currentTarget).hasClass("_allowNav") && formChanged) {
-
-            e.preventDefault();
-            e.stopImmediatePropagation();
-            bootbox.dialog(msg, [ {
-                "label" : localization.tt('btn.stayOnPage'),
-                "class" : "btn-success btn-small",
-                "callback" : function() {
-                }
-            }, {
-                "label" : localization.tt('btn.leavePage'),
-                "class" : "btn-danger btn-small",
-                "callback" : function() {
-                    Utils.allowNavigation();
-                    target.click();
-                }
-            } ]);
-            return false;
-        }
-    };
-
-    /**
-     * Bootbox wrapper for alert
-     * 
-     * @param {Object}
-     *            params - The params
-     */
-    Utils.alertPopup = function(params) {
-        var obj = _.extend({
-                message : params.msg
-        },params);
-        bootbox.alert(obj);
-    };
-
-    /**
-     * Bootbox wrapper for confirm
-     * 
-     * @param {Object}
-     *            params - The params
-     */
-    Utils.confirmPopup = function(params) {
-        bootbox.confirm(params.msg, function(result) {
-            if (result) {
-                params.callback();
-            }
-        });
-    };
-
-    Utils.bootboxCustomDialogs = function(params) {
-        bootbox.dialog({
-            title: params.title,
-            message: params.msg,
-            buttons: {
-                cancel: {
-                    label: "Cancel",
-                    className: "btn-secondary"
-                },
-                Ok: {
-                    className: "btn-primary",
-                    callback: params.callback
-                }
-            }
-        });
-    };
-
-    Utils.filterResultByIds = function(results, selectedVals) {
-        return _.filter(results, function(obj) {
-            if ($.inArray(obj.id, selectedVals) < 0)
-                return obj;
-
-        });
-    };
-    Utils.filterResultByText = function(results, selectedVals) {
-        return _.filter(results, function(obj) {
-            if ($.inArray(obj.text, selectedVals) < 0)
-                return obj;
-
-        });
-    };
-    Utils.scrollToField = function(field) {
-        $("html, body").animate({
-            scrollTop : field.position().top - 80
-        }, 1100, function() {
-            field.focus();
-        });
-    };
-    Utils.blockUI = function(options) {
-        var Opt = {
-            autoUnblock : false,
-            clickUnblock : false,
-            bgPath : 'images/',
-            content : '<img src="images/blockLoading.gif" > Please wait..',
-            css : {}
-        };
-        options = _.isUndefined(options) ? Opt : options;
-        $.msg(options);
-    };
-    var errorShown = false;
-    Utils.defaultErrorHandler = function(model, error) {
-        if (error.status == 500) {
-            try {
-                if (!errorShown) {
-                    errorShown = true;
-                    var errorMessage = "Some issues on server, Please try again later."
-                    if (error != null && error.responseText != null) {
-                      var errorObj = JSON.parse(error.responseText);
-                      if (errorObj.hasOwnProperty('msgDesc')) {
-                        errorMessage = errorObj.msgDesc;
-                      }
-                    }
-                    Utils.notifyError({
-                      content: errorMessage
-                    });
-                    setTimeout(function() {
-                        errorShown = false;
-                    }, 3000);
-                }
-            } catch (e) {}
-        }
-        else if (error.status == 400) {
-            try {
-                if (!errorShown) {
-                    errorShown = true;
-                    Utils.notifyError({
-                        content: JSON.parse(error.responseText).msgDesc
-                    });
-                    setTimeout(function() {
-                        errorShown = false;
-                    }, 3000);
-                }
-            } catch (e) {}
-        } else if (error.status == 401) {
-            window.location = 'login.html' + window.location.search;
-            // App.rContent.show(new vError({
-            //     status : error.status
-            // }));
-
-        } else if (error.status == 419) {
-            window.location = 'login.html' + window.location.search;
-
-        } else if (error.status == "0") {
-            var diffTime = (new Date().getTime() - prevNetworkErrorTime);
-            if (diffTime > 3000) {
-                prevNetworkErrorTime = new Date().getTime();
-                if(error.statusText === "abort"){
-                    Utils.notifyInfo({ content: "You have canceled the request"});
-                }else{
-                     Utils.notifyError({
-                        content: "Network Connection Failure : " +
-                            "It seems you are not connected to the internet. Please check your internet connection and try again"
-                    });
-                }
-            }
-        }
-        // require(['views/common/ErrorView','App'],function(vError,App){
-
-        // });
-    };
-    Utils.select2Focus = function(event) {
-        if (/^select2-focus/.test(event.type)) {
-            $(this).select2('open');
-        }
-    };
-
-    Utils.checkDirtyField = function(arg1, arg2, $elem) {
-        if (_.isEqual(arg1, arg2)) {
-            $elem.removeClass('dirtyField');
-        } else {
-            $elem.addClass('dirtyField');
-        }
-    };
-    Utils.checkDirtyFieldForToggle = function($el) {
-        if ($el.hasClass('dirtyField')) {
-            $el.removeClass('dirtyField');
-        } else {
-            $el.addClass('dirtyField');
-        }
-    };
-    Utils.checkDirtyFieldForSelect2 = function($el, dirtyFieldValue, that) {
-        if ($el.hasClass('dirtyField')
-                && _.isEqual($el.val(), dirtyFieldValue.toString())) {
-            $el.removeClass('dirtyField');
-        } else if (!$el.hasClass('dirtyField')) {
-            $el.addClass('dirtyField');
-            dirtyFieldValue = !_.isUndefined(that.value.values) ? that.value.values
-                    : '';
-        }
-        return dirtyFieldValue;
-    };
-    Utils.enumToSelectLabelValuePairs = function(myEnum) {
-        return _.map(myEnum, function(o) {
-            return {
-                label : o.label,
-                value : o.value + ''
-            // category :'DHSS',
-            };
-        });
-    };
-    Utils.hackForVSLabelValuePairs = function(myEnum) {
-        return _.map(myEnum, function(o) {
-            return {
-                label : o.label,
-                value : o.label + ''
-            // category :'DHSS',
-            };
-        });
-    };
-    Utils.addVisualSearch = function(searchOpt, serverAttrName, collection,
-            pluginAttr) {
-        var visualSearch;
-        var search = function(searchCollection, serverAttrName, searchOpt,
-                collection) {
-            var params = {};
-            searchCollection.each(function(m) {
-                var serverParamName = _.findWhere(serverAttrName, {
-                    text : m.attributes.category
-                });
-                var extraParam = {};
-                if (_.has(serverParamName, 'multiple')
-                        && serverParamName.multiple) {
-                    extraParam[serverParamName.label] = Utils
-                            .enumLabelToValue(serverParamName.optionsArr, m
-                                    .get('value'));
-                    ;
-                    $.extend(params, extraParam);
-                } else {
-                    if (!_.isUndefined(serverParamName)) {
-                        extraParam[serverParamName.label] = m.get('value');
-                        $.extend(params, extraParam);
-                    }
-                }
-            });
-            collection.queryParams = $.extend(collection.queryParams, params);
-            collection.state.currentPage = collection.state.firstPage;
-            collection.fetch({
-                reset : true,
-                cache : false
-            // data : params,
-            });
-        };
-        // var searchOpt = ['Event Time','User','Resource Name','Resource
-        // ID','Resource Type','Repository Name','Repository
-        // Type','Result','Client IP','Client Type','Access Type','Access
-        // Enforcer','Audit Type','Session ID'];
-
-        var callbackCommon = {
-            search : function(query, searchCollection) {
-                collection.VSQuery = query;
-                search(searchCollection, serverAttrName, searchOpt, collection);
-            },
-            clearSearch : function(callback) {
-                _.each(serverAttrName, function(attr) {
-                    delete collection.queryParams[attr.label];
-                });
-                callback();
-            },
-            facetMatches : function(callback) {
-                // console.log(visualSearch);
-                var searchOptTemp = $.extend(true, [], searchOpt);
-                visualSearch.searchQuery.each(function(m) {
-                    if ($.inArray(m.get('category'), searchOptTemp) >= 0) {
-                        searchOptTemp.splice($.inArray(m.get('category'),
-                                searchOptTemp), 1);
-                    }
-                });
-                // visualSearch.options.readOnly = searchOptTemp.length <= 0 ?
-                // true : false;
-                callback(searchOptTemp, {
-                    preserveOrder : false
-                });
-            },
-            removedFacet : function(removedFacet, searchCollection, indexObj) {
-                // console.log(removedFacet);
-
-                var removedFacetSeverName = _.findWhere(serverAttrName, {
-                    text : removedFacet.get('category')
-                });
-                if (!_.isUndefined(removedFacetSeverName)) {
-                    delete collection.queryParams[removedFacetSeverName.label];
-                    collection.state.currentPage = collection.state.firstPage;
-                    collection.fetch({
-                        reset : true,
-                        cache : false
-                    });
-                }
-                // TODO Added for Demo to remove datapicker popups
-                if (!_.isUndefined(visualSearch.searchBox.$el))
-                    visualSearch.searchBox.$el.parents('body').find(
-                            '.datepicker').remove();
-            }
-        // we can also add focus, blur events callback here..
-        };
-        pluginAttr.callbacks = $.extend(callbackCommon, pluginAttr.callbacks);
-        // Initializing VisualSearch Plugin....
-        visualSearch = VS.init($.extend(pluginAttr, {
-            remainder : false
-        }));
-
-        if (visualSearch.searchQuery.length > 0) // For On Load Visual Search
-            search(visualSearch.searchQuery, serverAttrName, searchOpt,
-                    collection);
-
-        return visualSearch;
-    };
-
-    Utils.displayDatepicker = function($el, facet, $date, callback) {
-        var input = $el
-                .find('.search_facet.is_editing input.search_facet_input');
-        $el.parents('body').find('.datepicker').hide();
-        input.datepicker({
-            autoclose : true,
-            dateFormat : 'yy-mm-dd'
-        }).on('changeDate', function(ev) {
-            callback(ev.date);
-            input.datepicker("hide");
-            var e = jQuery.Event("keydown");
-            e.which = 13; // Enter
-            $(this).trigger(e);
-        });
-        if (!_.isUndefined($date)) {
-            if (facet == 'Start Date') {
-                input.datepicker('setEndDate', $date);
-            } else {
-                input.datepicker('setStartDate', $date);
-            }
-        }
-        input.datepicker('show');
-        input.on('blur', function(e) {
-            input.datepicker("hide");
-            // $('.datepicker').remove();
-
-        });
-        // input.attr("readonly", "readonly");
-        input.on('keydown', function(e) {
-            if (e.which == 9 && e.shiftKey) {
-                input.datepicker('setValue', new Date());
-                input.trigger('change');
-                input.datepicker("hide");
-            }
-            if (e.which == 13) {
-                var e1 = jQuery.Event("keypress");
-                e1.which = 13; // Enter
-                $(this).trigger(e1);
-
-            }
-        });
-        return input;
-    };
-    
-    Utils.capitaliseFirstLetter = function(string) {
-        return string.charAt(0).toUpperCase() + string.slice(1);
-    };
-    Utils.lowerCaseFirstLetter = function(string) {
-        return string.charAt(0).toLowerCase() + string.slice(1);
-    };
-    Utils.toUpperCase = function(string) {
-        return (""+string).toUpperCase();
-    };
-    
-    Utils.bindDraggableEvent = function($el){
-        //
-        //  Function maked all .box selector is draggable, to disable for concrete element add class .no-drop
-        //
-        $el
-        .draggable({
-            revert: true,
-            zIndex: 2000,
-            cursor: "crosshair",
-            handle: '.box-name',
-            opacity: 0.8
-        })
-        .droppable({
-            tolerance: 'pointer',
-            drop: function( event, ui ) {
-                var draggable = ui.draggable;
-                var droppable = $(this);
-                var dragPos = draggable.position();
-                var dropPos = droppable.position();
-                draggable.swap(droppable);
-                setTimeout(function() {
-                    var dropmap = droppable.find('[id^=map-]');
-                    var dragmap = draggable.find('[id^=map-]');
-                    if (dragmap.length > 0 || dropmap.length > 0){
-                        dragmap.resize();
-                        dropmap.resize();
-                    }
-                    else {
-                        draggable.resize();
-                        droppable.resize();
-                    }
-                }, 50);
-                setTimeout(function() {
-                    draggable.find('[id^=map-]').resize();
-                    droppable.find('[id^=map-]').resize();
-                }, 250);
-            }
-        });
-    };
-    
-    Utils.scrollToSearchString = function(results, type, counter, adjPx,$el){
-        if(results.length > 0){
-            if(type === 'next'){
-                if(counter > 0 && results.length == counter){
-                    counter = 0;
-                }
-            } else if (type === 'prev') {
-                if(counter < 0){
-                    counter = results.length - 1;
-                } else if(counter === results.length){
-                    counter = counter - 2;
-                }
-            }
-            results.removeClass("active");
-            $(results[counter]).addClass("active");
-            if(_.isUndefined($el)){
-                $('html,body').animate({
-                    scrollTop: $(results[counter]).offset().top  - adjPx
-                }, 100);
-            }else{
-                $el.animate({
-                    scrollTop: $(results[counter]).offset().top  - adjPx
-                }, 100);
-            }
-            
-            counter = (type === 'prev') ? counter - 1 : counter + 1;
-        }
-        return counter;
-    };
-    //date should be javascript date
-    Utils.convertDateToUTC  = function (date) {
-        return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
-    }
-    Utils.randomNumber = function(){
-        var date = new Date();
-        var id = new Number();
-        return ((Math.random()*date.getTime())/2).toFixed(0)
-    }
-    /**
-     * GET data from form
-     * @param {object} title -serializeArray
-     */
-    Utils.getFormData = function(serializeArray) {
-        var formJson = {};
-        _.each(serializeArray, function(fValues) {
-            formJson[fValues.name] = fValues.value;
-
-        });
-        return formJson;
-    };
-    Utils.getQueryParams = function(qs) {
-        qs = qs.split('+').join(' ');
-
-        var params = {},
-            tokens,
-            re = /[?&]?([^=]+)=([^&]*)/g;
-        try {
-            while (tokens = re.exec(qs)) {
-                params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
-            }
-        } catch (exception) {
-            console.error(exception);
-            Utils.notifyError({
-                content: exception
-            });
-        }
-        return params;
-    };
-    /**
-     * [converDate description]
-     * @param  {[type]} option [pass String or momnet object]
-     * @return {[type]}        [it is string]
-     */
-    Utils.dateUtil = new function() {
-        var that = this;
-
-        this.getTimeZone = function(string, format) {
-            return moment(string).format((format || Globals.dateFormat));
-        };
-        this.getJSON = function(string) {
-            return moment(string).toJSON();
-        };
-        this.getMomentUTC = function(string) {
-            return moment.utc(string)
-        };
-        this.getMomentObject = function(string) {
-            return moment(string)
-        }
-        this.getLocalTimeZoneDateObject = function(date,offset) {
-            return new Date(date.setMinutes(-(date.getTimezoneOffset() + (offset))))
-        }
-        this.getTimeZoneDateObject = function(string) {
-            return new Date(string)
-        }
-        /**
-         * [getTimeZoneMomentDateObject it will return ]
-         * @param  {[type]} option [require moment tz object]
-         * @return {[type]}        [description]
-         */
-        this.getTimeZoneFromMomentObject = function(momentO) {
-            if(momentO.isValid()){
-                var date = momentO.format('MM/DD/YYYY,HH:mm:ss.SSS').split(',');
-                var dateObjectWithMilisecond ="";
-                if(date[0] && date[1]){
-                    var milliseconds = date[1].split('.');
-                    if(milliseconds[0] && milliseconds[1] ){
-                        dateObjectWithMilisecond =  new Date( date[0] +" " +milliseconds[0]);
-                        dateObjectWithMilisecond.setMilliseconds(milliseconds[1]);
-                    }else{
-                        dateObjectWithMilisecond =  new Date(date[0]);
-                    }
-                    return dateObjectWithMilisecond;
-                }
-            }else{
-                this.getLocalTimeZoneDateObject( ((momentO.toDate())?(momentO.toDate()):(new Date(momentO))));
-            }
-        }
-        this.getTimeDiff = function(option) {
-            // If You have time more then 24 hours so moment returns 0 for HH:MM:SS so using this 3 line we get perfect time gap
-            var self = this;
-            var ms = moment(option[1], "DD/MM/YYYY HH:mm:ss").diff(moment(option[0], "DD/MM/YYYY HH:mm:ss"));
-            var d = moment.duration(ms);
-            var s = Math.floor(d.asHours()) + that.getMomentUTC(ms).format(":mm:ss");
-            this.splitedValue = s.split(':');
-
-            this.getHourDiff = function() {
-                return parseInt(self.splitedValue[0]);
-            };
-            this.getMinuteDiff = function() {
-                return parseInt(self.splitedValue[1]);
-            };
-            this.getSecondDiff = function() {
-                return parseInt(self.splitedValue[2]);
-            };
-        }
-        this.setTimeZone =function(zone){
-            moment.tz.setDefault(zone)
-        }
-        this.getRelativeDateString =function(){}
-        this.getLast1HourRange = function() {
-            var m = moment()
-            return [moment().hour(m.hours() - 1).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds() + 1), moment().hour(m.hours()).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds())];
-        }
-        this.getLast24HourRange = function() {
-          var m = moment()
-          return [moment().hour(m.hours() - 24).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds() + 1), moment().hour(m.hours()).minute(m.minutes()).seconds(m.seconds()).milliseconds(m.milliseconds())];
-      }
-        this.getTodayRange = function() {
-            return [moment().hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getYesterdayRange = function() {
-            return [moment().subtract(1, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'days').hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getLast7DaysRange = function() {
-            return [moment().subtract(6, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getLast30DaysRange = function() {
-            return [moment().subtract(29, 'days').hour('0').minute('0').seconds('0').milliseconds("000"), moment().hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getThisMonthRange = function() {
-            return [moment().startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getLastMonthRange = function() {
-            return [moment().subtract(1, 'month').startOf('month').hour('0').minute('0').seconds('0').milliseconds("000"), moment().subtract(1, 'month').endOf('month').hour('23').minute('59').seconds('59').milliseconds("999")];
-        }
-        this.getOneDayTimeDiff = function(checkTime) {
-            var hourDiff = checkTime.getHourDiff();
-            var seconDiff = checkTime.getSecondDiff();
-            var minuteDiff = checkTime.getMinuteDiff();
-            if (hourDiff <= 2) {
-
-                if (hourDiff == 0) {
-                    if (minuteDiff == 0) {
-                        if (seconDiff == 0) {
-                            return "+100MILLISECOND";
-                        } else {
-                            if (seconDiff > 30) {
-                                return "+2SECOND";
-                            } else if (seconDiff < 30 && seconDiff > 1) {
-                                return "+500MILLISECOND";
-                            } else {
-                                return "+100MILLISECOND";
-                            }
-                        }
-
-                    } else {
-                        if (minuteDiff > 30) {
-                            return "+2MINUTE";
-                        } else if (minuteDiff < 30 || minuteDiff > 1) {
-                            return "+1MINUTE";
-                        }
-                    }
-
-                } else {
-                    if (hourDiff == 1) {
-                        return "+2MINUTE";
-                    } else if (hourDiff == 2) {
-                        return "+5MINUTE";
-                    }
-                }
-            } else if (hourDiff <= 6) {
-                return "+5MINUTE";
-            } else if (hourDiff <= 10) {
-                return "+10MINUTE";
-            } else {
-                return "+1HOUR";
-            }
-        }
-        this.getMonthDiff = function(startDate, endDate, dayGap, checkTime) {
-            var dayDiff = (moment(endDate).diff(startDate, 'days'));
-            if (dayDiff <= dayGap) {
-                if (dayDiff == 0) {
-                    return this.getOneDayTimeDiff(checkTime)
-                } else {
-                    return "+" + (moment(endDate).diff(startDate, 'days')) + "HOUR"
-                }
-            } else {
-                return "+1DAY"
-            }
-        }
-        this.calculateUnit =function(picker){
-                var dayGap = 10,
-                startDate = new Date(picker.startDate.format('MM/DD/YYYY')),
-                endDate = new Date(picker.endDate.format('MM/DD/YYYY')),
-                now = new Date(moment().format('MM/DD/YYYY'));
-
-            var checkTime = new that.getTimeDiff([picker.startDate.format('MM/DD/YYYY HH:mm:ss'), picker.endDate.format('MM/DD/YYYY HH:mm:ss')]);
-
-            if ((moment(startDate).isSame(endDate)) && (moment(startDate).isSame(now))) {
-                //console.log("today")
-                return that.getOneDayTimeDiff(checkTime);
-            } else if ((moment(startDate).isSame(endDate)) && (moment(startDate).isBefore(now))) {
-                //console.log("yesterday")
-                return that.getOneDayTimeDiff(checkTime);
-
-            } else if ((moment(startDate).isBefore(now)) || (moment(now).diff(startDate, 'days'))) {
-                if ((moment(now).diff(startDate, 'days')) === 6) {
-                    //console.log("last 7 days");
-                    return "+8HOUR";
-                } else if ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 28) || (moment(now).diff(startDate, 'days') === 30)) {
-                    //console.log("Last 30 days");
-                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-                } else if ((moment(now).diff(startDate, 'month') === 1) && (moment(now).diff(startDate, 'days') > 30) && (moment(startDate).isSame(endDate, 'month'))) {
-                    //console.log("Last Month");
-                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-                } else if ((moment(startDate).isSame(endDate, 'month')) && ((moment(now).diff(startDate, 'days') === 29) || (moment(now).diff(startDate, 'days') === 30) || (moment(now).diff(startDate, 'days') === 28))) {
-                    //console.log("this Month");
-                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-                } else if ((moment(endDate).diff(startDate, 'days') >= 28) && (moment(endDate).diff(startDate, 'days') <= 30)) {
-                    //console.log("Last 30 days");
-                    return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-                } else if ((moment(endDate).diff(startDate, 'month') > 3)) {
-                    return "+1MONTH";
-                } else if ((moment(endDate).diff(startDate, 'month') < 3)) {
-                    if ((moment(endDate).diff(startDate, 'month')) === 0) {
-                        return that.getMonthDiff(startDate, endDate, dayGap, checkTime);
-                    } else {
-                        return "+1MONTH"
-                    }
-
-                } else {
-                    return "+1MONTH";
-                }
-            } else {
-                if ((moment(endDate).diff(startDate, 'days') < 10)) {
-                    return "+2HOUR";
-                } else if ((moment(endDate).diff(startDate, 'days') >15)) {
-                    return "+8HOUR";
-                } else if ((moment(endDate).diff(startDate, 'days') <= 30)) {
-                    return "+1DAY";
-                } else {
-                    return "+1MONTH";
-                }
-            }
-            
-        }
-        this.getRelativeDateFromString = function(string){
-            var obj =  _.findWhere(Utils.relativeDates, { text : string})
-            if(obj)
-                return obj.fn && obj.fn();
-        }
-
-    };
-    Utils.relativeDates = {
-            last1Hour : {text : "Last 1 Hour",fn:Utils.dateUtil.getLast1HourRange},
-            last24Hour: {text : "Last 24 Hour",fn:Utils.dateUtil.getLast24HourRange},
-            today     : {text : "Today",fn:Utils.dateUtil.getTodayRange},
-            yesterday : {text : "Yesterday",fn:Utils.dateUtil.getYesterdayRange},
-            last7Days : {text : "Last 7 Days",fn:Utils.dateUtil.getLast7DaysRange},
-            last30Days: {text : "Last 30 Days",fn:Utils.dateUtil.getLast30DaysRange},
-            thisMonth : {text : "This Month",fn:Utils.dateUtil.getThisMonthRange},
-            lastMonth : {text : "Last Month",fn:Utils.dateUtil.getLastMonthRange}
-    };
-
-    /*
-     * Converting Include Exclude string
-     */
-    Utils.encodeIncludeExcludeStr = function(arrOrStr,doEncode,token){
-        var token = token  || Globals.splitToken;
-        if(doEncode && _.isArray(arrOrStr)){
-            return arrOrStr.join(token);
-        }else if(_.isString(arrOrStr)){
-            return arrOrStr.split(token);
-        }
-    };
-
-    Utils.localStorage = {
-        checkLocalStorage:function(key,value){
-            if (typeof(Storage) !== "undefined") {
-                return this.getLocalStorage(key,value);
-            } else {
-                console.log('Sorry! No Web Storage support');
-                Utils.cookie.checkCookie(key,value);
-            }
-        },
-        setLocalStorage:function(key,value){
-            localStorage.setItem(key,value);
-            return {found:false,'value':value};
-        },
-        getLocalStorage:function(key,value){
-            var keyValue = localStorage.getItem(key)
-            if(!keyValue || keyValue == "undefined"){
-                return this.setLocalStorage(key,value);
-            }else{
-                return {found:true,'value':keyValue};
-            }
-        }
-        
-    }
-    Utils.cookie ={
-        setCookie:function(cname,cvalue) {
-            //var d = new Date();
-            //d.setTime(d.getTime() + (exdays*24*60*60*1000));
-            //var expires = "expires=" + d.toGMTString();
-            document.cookie = cname+"="+cvalue+"; "
-            return {found:false,'value':cvalue};
-        },
-        getCookie:function(findString) {
-            var search = findString + "=";
-            var ca = document.cookie.split(';');
-            for(var i=0; i<ca.length; i++) {
-                var c = ca[i];
-                while (c.charAt(0)==' ') c = c.substring(1);
-                if (c.indexOf(name) == 0) {
-                    return c.substring(name.length, c.length);
-                }
-            }
-            return "";
-        },
-        checkCookie:function(key,value) {
-            var findString = getCookie(key);
-            if (findString != "" || keyValue != "undefined") {
-                return {found:true,'value':((findString == "undefined")?(undefined):(findString))};
-            } else {
-                return setCookie(key,value);
-            }
-        }
-    }
-    
-    Utils.getRandomColor = function getRandomColor(str) {
-        if(!str)
-            return "#000";
-        var hashCode = function(str) {
-            var hash = 0;
-            for (var i = 0; i < str.length; i++) {
-               hash = str.charCodeAt(i) + ((hash << 5) - hash);
-            }
-            return hash;
-        };
-
-        var intToRGB = function(i){
-            var c = (i & 0x00FFFFFF)
-                .toString(16)
-                .toUpperCase();
-
-            return "00000".substring(0, 6 - c.length) + c;
-        };
-        return "#" +intToRGB(hashCode(str));
-    };
-    /**
-     * [genrateSelect2 description]
-     * @param  {[array of object]}  listOfselect2  []
-     * listOfselect2 = [
-                {
-                    id: "select2 id",
-                    placeholder: "placeholder",
-                    collection: "collection",
-                    dataText: 'display text', //in binding for appling name
-                    collectionHasCode: 'collection dosnt have id then pass what you want to show', // if collection dont have id ,
-                    modelAttr: 'collection attribute name',
-                    mandatory: false,
-                    nonCrud: getAuditSchemaFieldsName // pass function Name with params (suucess,error,etc)
-                    fetch: true,
-                    data:[] // it will not fetch from collection
-                },
-                {...}
-                ]
-                collectionFetchLov // listenTo in your view
-     * @param  {[type]} that          [scope of function or view]
-     * @return {[type]}               [description]
-     */
-    Utils.genrateSelect2 =function(listOfselect2,that){
-
-        for (var i = 0; i < listOfselect2.length; i++) {
-
-            if (listOfselect2[i]['data'] || listOfselect2[i]['attachSelect']) {
-                if(listOfselect2[i]['attachSelect']){
-                    that.ui[listOfselect2[i]['id']].select2({
-                        placeholder: listOfselect2[i]['placeholder'],
-                        width: '100%'
-                    });
-                    continue;
-                }
-
-                if(that.ui[listOfselect2[i]['id']]){
-                    that.ui[listOfselect2[i]['id']].select2({
-                        placeholder: listOfselect2[i]['placeholder'],
-                        width: '100%',
-                        data: listOfselect2[i]['data']
-                    });
-                }
-               
-                continue;
-            } else {
-                if(that.ui[listOfselect2[i]['id']]){
-                    that.ui[listOfselect2[i]['id']].select2({
-                        placeholder: listOfselect2[i]['placeholder'],
-                        width: '100%',
-                        data: []
-                    });
-                    that.ui[listOfselect2[i]['id']].select2("disable");
-                }else{
-                    continue;
-                }
-              
-            }
-
-
-            if (listOfselect2[i]['fetch']) {
-                if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "object") {
-                    that.listOfselect2[i]['collectionFetchLov'] = that.listOfselect2[i].collection
-                } else if (listOfselect2[i].collection && typeof that.listOfselect2[i].collection === "string") {
-                    that.listOfselect2[i]['collectionFetchLov'] = that[listOfselect2[i]['collection']]
-                }
-
-            }
-            
-         }
-
-        _.each(that.listOfselect2, function(obj, i) {
-            if(obj['collectionFetchLov']){
-                   that.listenTo(obj['collectionFetchLov'], "reset", function(collection, response, options) {
-                    if (obj['collectionHasCode']) {
-                        for (var i = 0; i < collection.models.length; i++) {
-                            $.extend(collection.models[i].attributes, {
-                                id: collection.models[i].get(obj['collectionHasCode'])
-                            })
-                        }
-                    }
-                var allowClearFlag = false;
-                if(!obj['mandatory'])allowClearFlag = true
-                var data = _.pluck(collection.models, 'attributes');
-                that.ui[obj['id']].select2({
-                    placeholder: obj['placeholder'],
-                    width: '100%',
-                    data: {
-                        results: data,
-                        text: obj['dataText']
-                    },
-                    allowClear: allowClearFlag,
-                    formatSelection: function(item) {
-                        return item[obj['dataText']];
-                    },
-                    formatResult: function(item) {
-                        return item[obj['dataText']];
-                    }
-                });
-                if(!obj['disabled']){
-                    that.ui[obj['id']].select2("enable");
-                }
-                
-                if (that.model && !that.model.isNew()) {
-                    that.ui[obj['id']].select2('val', that.model.get(obj['modelAttr'])).trigger('change');
-                }
-            }, that);
-                 if(obj['nonCrud']){
-                    obj['nonCrud'](that.ui[obj['id']]);
-                }else{
-                    obj['collectionFetchLov'].fetch({reset:true});
-                }
-                
-            }
-        });
-    },
-
-    /* This Method for handling graph unit.
-        which seperate number from the string and again append to
-        the string by formatting it
-    
-    */
-    Utils.graphUnitParse = function(unitVal){
-        if(! unitVal){
-            return "";
-        }
-        var pattern = /(\d)\s+(?=\d)/g;
-        var number = unitVal.match(/\d+/g).map(Number);
-        var numString = number.toString().replace(pattern , '$1');
-        var str = unitVal.replace(/\d+/g, '').replace(/\+/g,'');
-        return numString +" " + Utils.getCamelCase(str) + "(s) gap";
-    },
-
-    Utils.getCamelCase = function(str){
-        if(!str){
-            return "";
-        }
-        var str = str.toLowerCase();
-        return str.replace(/(?:^|\s)\w/g, function(match) {
-            return match.toUpperCase()
-        });
-    },
-    Utils.manipulateValueForAddingAstrik = function(str){
-        if(!str){
-            return "";
-        }
-        var string = ((str.lastIndexOf('*',0) === 0)) ? str : '*'+str;
-        string = ((str.lastIndexOf('*', str.length - 1) === str.length - 1)) ?  string : string+'*';
-        
-        return string;
-    };
-    
-    return Utils;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/ViewUtils.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/ViewUtils.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/ViewUtils.js
deleted file mode 100644
index 9934572..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/ViewUtils.js
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * 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',
-  'moment',
-  'collections/VNameValueList',
-  'utils/Globals'
-], function (require, Utils, moment, VNameValueList, Globals) {
-  'use strict';
-
-  var ViewUtil = {};
-
-  ViewUtil.setdefaultParams = function () {
-    var fromSolr, toSolr, that = this;
-    var params = Utils.getQueryParams(window.location.search);
-    this.defaultParams = {
-      q: "*:*",
-      from: moment().hours("00").minutes("00").seconds("00").milliseconds("000").toJSON(),
-      to: moment().hours("23").minutes("59").seconds("59").milliseconds("999").toJSON(),
-      unit: "+1HOUR",
-      level: "FATAL,ERROR,WARN"
-    };
-    var applyParamsDate = function (date) {
-      if (date) {
-        var dateString = date.split(',');
-        if (dateString.length) {
-          var checkDate = Utils.dateUtil.getMomentUTC(dateString[0]);
-          if (checkDate.isValid()) {
-            if (dateString[1]) {
-              checkDate.millisecond(dateString[1])
-            } else {
-              checkDate.millisecond('000')
-            }
-            return checkDate.toJSON();
-          }
-        }
-      }
-    }
-    if (params.bundle_id && !params.start_time && !params.end_time) {
-      var collection = new VNameValueList();
-
-      collection.url = Globals.baseURL + "service/logs/boundarydates";
-      collection.modelAttrName = "vNameValues";
-      _.extend(collection.queryParams, {
-        "bundle_id": params.bundle_id
-      });
-      collection.fetch({
-        reset: true,
-        async: false,
-        success: function (data) {
-          collection.each(function (model) {
-            if (model.get('name') == "From") {
-              fromSolr = moment(parseInt(model.get('value'))).toJSON();
-            }
-            if (model.get('name') == "To") {
-              toSolr = moment(parseInt(model.get('value'))).toJSON();
-            }
-            if (fromSolr && toSolr) {
-              that.defaultParams['dateRangeLabel'] = "Custom Range";
-            }
-          })
-
-        }
-      });
-    }
-    if (params.bundle_id) {
-      this.defaultParams['bundle_id'] = params.bundle_id;
-    }
-    if (params.start_time) {
-      var startDateString = applyParamsDate(params.start_time);
-    }
-    if (params.end_time) {
-      var endDateString = applyParamsDate(params.end_time);
-    }
-    if (params.host_name) {
-      this.defaultParams['host_name'] = params.host_name;
-    }
-    if (params.component_name) {
-      this.defaultParams['component_name'] = params.component_name;
-    }
-    if (params.file_name) {
-      this.defaultParams['file_name'] = params.file_name;
-    }
-    if (startDateString && endDateString) {
-      if (params.timezone) {
-        var timeZoneObject = worldMapTime.getTimeZoneObject(params.timezone)
-        if (timeZoneObject.length) {
-          var timeZoneName = timeZoneObject[0].timezone
-        }
-        if (timeZoneName) {
-          var startEncodeDate = params.start_time.replace(",", ".")
-          var endEncodeDate = params.end_time.replace(",", ".")
-          startDateString = moment.tz(startEncodeDate, timeZoneName).toJSON();
-          endDateString = moment.tz(endEncodeDate, timeZoneName).toJSON();
-          var timeZoneString = timeZoneName + "," + timeZoneObject[0].zoneName + "," + timeZoneObject.length;
-          Utils.localStorage.setLocalStorage('timezone', timeZoneString);
-          moment.tz.setDefault(timeZoneName);
-        }
-      }
-      this.defaultParams['end_time'] = endDateString
-      this.defaultParams['start_time'] = startDateString;
-      this.defaultParams['from'] = startDateString;
-      this.defaultParams['to'] = endDateString;
-      this.defaultParams['dateRangeLabel'] = "Custom Range";
-    }
-    if (fromSolr && toSolr) {
-      this.defaultParams['from'] = fromSolr;
-      this.defaultParams['to'] = toSolr;
-      this.defaultParams['dateRangeLabel'] = "Custom Range";
-    }
-  }
-  ViewUtil.getDefaultParams = function () {
-    return $.extend(true, {}, this.defaultParams);
-  }
-  ViewUtil.getCountDistributionHTML = function (node) {
-    if (!node.logLevelCount)
-      return "";
-    return '<div data-node = "' + node.name + '" class="nodebar">' + ViewUtil.getLevelDistributionHTML(node) + '</div>';
-  };
-  ViewUtil.getLevelDistributionHTML = function (node) {
-    var html = "";
-    if (!_.isUndefined(node.logLevelCount) && !_.isArray(node.logLevelCount))
-      node.logLevelCount = [node.logLevelCount];
-    var toPct = ViewUtil.calculatePercentge(node.logLevelCount);
-    _.each(node.logLevelCount, function (data) {
-      //html += '<div class="node '+data.name+'" style="width:'+toPct(data)+'%;" data-toggle="tooltip" title="'+data.value+'" data-original-title="'+data.value+'"></div>';
-      html += '<div class="node ' + data.name + '" style="width:' + toPct(data) + '%;"></div>';
-    });
-    return html;
-  };
-  ViewUtil.calculatePercentge = function (values) {
-    var sum = 0;
-    for (var i = 0; i != values.length; ++i) {
-      sum = sum + parseInt(values[i].value, 10);
-    }
-    var scale = 100 / sum;
-    return function (x) {
-      return (parseInt(x.value, 10) * scale) /*.toFixed(5)*/;
-    };
-  };
-
-  ViewUtil.getDefaultParamsForHierarchy = function () {
-    return ViewUtil.getDefaultParams();
-  };
-
-  ViewUtil.setLatestTimeParams = function (params) {
-    if (params && params.dateRangeLabel) {
-      var arr = Utils.dateUtil.getRelativeDateFromString(params.dateRangeLabel);
-      if (_.isArray(arr)) {
-        params.from = arr[0].toJSON();
-        params.to = arr[1].toJSON();
-      }
-      ;
-    }
-
-  };
-
-  ViewUtil.foramtLogMessageAsLogFile = function (model, logMessageHtmlClass) {
-    var attrs = model.attributes;
-    var str = "";
-    if (attrs.logtime)
-      str += moment(attrs.logtime).format("YYYY-MM-DD HH:mm:ss,SSS") + " ";
-    if (attrs.level)
-      str += "<span class='" + ("" + attrs.level).toUpperCase() + "'>" + ("" + attrs.level).toUpperCase() + "</span> ";
-    if (attrs.thread_name)
-      str += $.trim(attrs.thread_name) + " ";
-    if (attrs.logger_name)
-      str += $.trim(attrs.logger_name) + " ";
-    if (attrs.file && attrs.line_number)
-      str += attrs.file + ":" + attrs.line_number + " ";
-    if (attrs.log_message)
-      str += "<span class='" + (logMessageHtmlClass ? logMessageHtmlClass : "logMessage") + "'>- " + Utils.escapeHtmlChar(attrs.log_message) + " </span>";
-    return str;
-  }
-
-  ViewUtil.scrollToElement = function (top, speed) {
-    if (!top)
-      return;
-    $("html, body").animate({scrollTop: (top - 200)}, (speed) ? speed : 300);
-  };
-
-  ViewUtil.formatAuditGraphData = function (collection) {
-    var mainObj = [], len = 0, that = this;
-    collection.each(function (m, index) {
-      var userName = m.get("name");
-      if (len < userName.length)
-        len = userName.length;
-      var compo = m.get("dataCount");
-      for (var i = 0; i < compo.length; i++) {
-        var b = {label: userName, value: parseInt(compo[i].value, 10)}
-        var ret = _.findWhere(mainObj, {key: compo[i].name});
-        if (ret) {
-          ret.values.push(b);
-        } else {
-          mainObj.push({
-            key: compo[i].name,
-            values: [b],
-            color: Utils.getRandomColor(compo[i].name)
-          });
-        }
-      }
-    });
-    return {
-      max: len,
-      arr: mainObj
-    }
-  };
-
-  /**
-   * Generate sorted named schema field list for service/audit logs
-   * @param data Response data
-   * @param fieldMappings Solr field - UI field mapping
-   * @param excludes Array of fields that needs to be filtered out on UI
-   * @returns sorted schema field list (human readable format)
-   */
-  ViewUtil.getLogSchemaFields = function(data, fieldMappings, excludes) {
-    var jsonData = {};
-    for (var key in data) {
-      if ($.inArray(key.toString(), excludes) == -1) {
-        if (fieldMappings.hasOwnProperty(key)) {
-          jsonData[key] = fieldMappings[key];
-        } else {
-          jsonData[key] = key;
-        }
-      }
-    }
-    return _.sortBy(jsonData, function(k, v){return k});
-  };
-
-
-  ViewUtil.replaceColumnNamesWithKeys = function (collection, nameKeyMap, addingAstrik) {
-    var result = [];
-    collection.each(function (m) {
-      var data = {};
-      var value = addingAstrik == true ? Utils.manipulateValueForAddingAstrik(m.get("value")) : m.get("value");
-      if (nameKeyMap[m.get("category")] === undefined) {
-        data[m.get("category")] = m.get("value");
-      } else {
-        data[nameKeyMap[m.get("category")]] = m.get("value");
-      }
-      result.push(data);
-    });
-    return result;
-  };
-
-  return ViewUtil;
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/XATemplateHelpers.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/XATemplateHelpers.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/XATemplateHelpers.js
deleted file mode 100644
index f595eff..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/XATemplateHelpers.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.
- */
-
- 
-	/*
-	 * 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] 
-	 */
-	
-
-define(['require','Handlebars'],function(require,Handlebars){
-
-	var HHelpers = {};
-	
-	/**
-     * Convert new line (\n\r) to <br>
-     * from http://phpjs.org/functions/nl2br:480
-     */
-	Handlebars.registerHelper('nl2br', function(text) {
-        text = Handlebars.XAUtils.escapeExpression(text);
-        var nl2br = (text + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + '<br>' + '$2');
-        return new Handlebars.SafeString(nl2br);
-    });
-	
-	/*
-	 * escapeHtmlChar
-	 */
-	Handlebars.registerHelper("escapeHtmlChar", function(str) {
-		return Util.escapeHtmlChar(str);
-	});
-	
-	Handlebars.registerHelper("nl2brAndEscapeHtmlChar", function(str) {
-		return Util.nl2brAndEscapeHtmlChar(str);
-	});
-	
-	/*
-	 * required to fetch label for enum value
-	 */ 
-	Handlebars.registerHelper('convertEnumValueToLabel', function(enumName, enumValue) {
-		return Util.enumValueToLabel( Util.getEnum(enumName), enumValue);
-	});
-	
-	/*
-	 * Truncate the String till n positions
-	 */
-	Handlebars.registerHelper('truncStr', function(str, n, useWordBoundary) {
-		var len = n || 1;
-		var useWordBn = useWordBoundary || false;
-		return str.trunc(len, useWordBn);
-	});
-	
-	/*Handlebars.registerHelper('tt', function(str) {
-		return localization.tt(str);
-	});*/
-	
-	Handlebars.registerHelper('getCopyrightDate', function() {
-		return new Date().getFullYear().toString();
-	});
-	
-	Handlebars.registerHelper('if_eq', function(context, options) {
-		if (context == options.hash.compare)
-			return options.fn(this);
-		return options.inverse(this);
-	});
-
-	Handlebars.registerHelper('if_gt', function(context, options) {
-		if (context > options.hash.compare)
-			return options.fn(this);
-		return options.inverse(this);
-	});
-
-	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);
-	});
-
-
-    /**
-     * This helper provides a for i in range loop
-     *
-     * start and end parameters have to be integers >= 0 or their string representation. start should be <= end.
-     * In all other cases, the block is not rendered.
-     * Usage:
-     *        <ul>
-     *            {{#for 0 10}}
-     *                <li>{{this}}</li>
-     *            {{/for}}
-     *        </ul>
-     */
-    Handlebars.registerHelper('for', function(start, end, options) {
-        var fn = options.fn, inverse = options.inverse;
-        var isStartValid = (start != undefined && !isNaN(parseInt(start)) && start >= 0);
-        var isEndValid = (end != undefined && !isNaN(parseInt(end)) && end >= 0);
-        var ret = "";
-
-        if (isStartValid && isEndValid && parseInt(start) <= parseInt(end)) {
-            for (var i = start; i <= end; i++) {
-                ret = ret + fn(i);
-            }
-        } else {
-            ret = inverse(this);
-        }
-
-        return ret;
-    });
-
-	Handlebars.registerHelper('dateFormat', function(context, block) {
-		if (window.moment) {
-			var f = block.hash.format || "MMM Do, YYYY";
-			return moment(Date(context)).format(f);
-		}else{
-			return context;   //  moment plugin not available. return data as is.
-		};
-	});
-	return HHelpers;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditAggregatedView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditAggregatedView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditAggregatedView.js
deleted file mode 100644
index 0822051..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditAggregatedView.js
+++ /dev/null
@@ -1,416 +0,0 @@
-/**
- * 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',
-	'backbone',
-	'utils/Globals',
-	'utils/Utils',
-	'utils/ViewUtils',
-	'collections/VNameValueList',
-    'moment',
-	'hbs!tmpl/audit/AuditAggregatedView_tmpl',
-    'views/common/JBDialog',
-    'views/tabs/ExportLogFileView',
-	'select2',
-	'nv'
-],function(require,Backbone,Globals,Utils,ViewUtils,VNameValueList,moment,AuditAggregatedTmpl,JBDialog,ExportLogFileView){
-    'use strict';
-
-	return Backbone.Marionette.Layout.extend(
-	/** @lends LogLevelView */
-	{
-		_viewName : 'AuditAggregatedView',
-
-		template: AuditAggregatedTmpl,
-
-		/** Layout sub regions */
-		regions: {
-			RtableUsers : "[data-id='topUsers']",
-			RtableResources : "[data-id='topResources']"
-		},
-
-		/** ui selector cache */
-		ui: {
-			tableView: "[data-id='aggregatedTable']",
-			graphView:"[data-id='aggregatedGraph']"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['change [data-id="toggleTableAccessLog"]']  = 'onToggleTableAggregated';
-			events['click [data-id="export-aggregated-text"]']  = 'onExportAggregatedClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * 
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent', 'globalVent', 'params'));
-			this.initializeCollection();
-			this.bindEvents();
-			this.initializeAggregatedTable();
-		},
-		bindEvents : function(){
-			this.listenTo(this.vent,"search:audit:query auditComponents:include auditComponents:exclude "+
-					"search:audit:include search:audit:exclude logtime:filter tab:refresh",function(value){
-				this.fetchTopUsers(value);
-				this.fetchTopResources(value);
-            },this);
-			this.listenTo(this.topUsers,"reset",function(){
-				this.createUsersTable();
-				this.renderGraphUsers();
-			},this);
-			this.listenTo(this.topResources,"reset",function(){
-				this.createResourceTable();
-				this.renderGraphResources();
-			},this);
-			this.listenTo(this.vent,"reinitialize:TopTenGraph",function(value){
-				this.fetchTopUsers(value);
-				this.fetchTopResources(value);
-            },this);
-            this.listenTo(this,"button:min:max",function(){
-            	this.renderGraphUsers();
-            	this.renderGraphResources();
-            },this);
-		},
-		initializeCollection : function(){
-			this.topUsers = new VNameValueList([],{
-				state: {
-                    firstPage: 0,
-                    pageSize: 9999
-                }
-			});
-			this.topUsers.url = Globals.baseURL + "audit/logs/resources/10";
-			this.topUsers.modelAttrName = "graphData";
-			this.topResources = new VNameValueList([],{
-				state: {
-                    firstPage: 0,
-                    pageSize: 9999
-                }
-			});
-			this.topResources.url = Globals.baseURL + "audit/logs/resources/10";
-			this.topResources.modelAttrName = "graphData";		
-			//initialize colors
-			this.colors = (new d3.scale.category20c().range().slice().reverse()).concat(new d3.scale.category20b().range().slice().reverse());
-		},
-		onRender : function(){
-			//this.renderTables();
-			this.fetchTopUsers(_.extend({field : "reqUser"},this.params));
-			this.fetchTopResources(_.extend({field : "resource"},this.params));
-		},
-		renderTables : function(){
-			var that = this;
-			var opts = {
-					includeFilter : false,
-					includePagination : false,
-					includePageSize : false,
-					includeFooterRecords : false,
-					includeColumnManager : false,
-					columnOpts : {
-				    	initialColumnsVisible: 0,
-				    	saveState : false
-					},
-					gridOpts : {
-						className : "table m-table table-bordered table-hover table-heading",
-						emptyText : 'No records found!'
-					},
-					filterOpts : {},
-					paginatorOpts : {}
-			}
-			var cols = {
-				name : {
-					label : "User",
-					cell: "String",
-					sortType: false,
-					editable: false,
-					sortable : false,
-				},
-				value : {
-					label : "Hits",
-					cell: "String",
-					sortType: false,
-					sortable : false,
-					editable: false
-				}
-			};
-			require(['views/common/TableLayout'], function(TableLayout){
-				var userCols = new Backgrid.Columns(that.topUsers.constructor.getTableCols(cols, that.topUsers));
-				that.RTopUsers.show(new TableLayout(_.extend({},opts,{
-					columns: userCols,
-					collection: that.topUsers,
-				})));
-				cols.name.label = "Resources";
-				var resourcesCols = new Backgrid.Columns(that.topResources.constructor.getTableCols(cols, that.topResources));
-				that.RTopResources.show(new TableLayout(_.extend({},opts,{
-					columns: resourcesCols,
-					collection: that.topResources,
-				})));
-			});
-		},
-		fetchTopResources : function(params){
-			var that = this;
-			$.extend(this.topResources.queryParams, params);
-			this.topResources.fetch({
-				reset:true,
-				beforeSend : function(){
-					that.$("[data-id='resourcesLoader']").removeClass("hidden");
-				},
-				complete : function(){
-					that.$("[data-id='resourcesLoader']").addClass("hidden");
-				}
-			});
-		},
-		fetchTopUsers : function(params){
-			var that = this;
-			$.extend(this.topUsers.queryParams, params);
-			this.topUsers.fetch({
-				reset:true,
-				beforeSend : function(){
-					that.$("[data-id='usersLoader']").removeClass("hidden");
-				},
-				complete : function(){
-					that.$("[data-id='usersLoader']").addClass("hidden");
-				}
-			});
-		},
-		renderHorizontalBar : function(el,data,margin,columnKey){
-			var that = this;
-			nv.addGraph({generate : function() {
-				  var chart = nv.models.multiBarHorizontalChart()
-				      .x(function(d) { return d.label })
-				      .y(function(d) { return d.value })
-				      .margin(margin)
-				      .showValues(true)
-				      .valueFormat(d3.format('.0f'))
-				      .showControls(false);
-				  chart.tooltip.enabled();
-				  chart.yAxis
-				      .tickFormat(d3.format('d'));
-				  chart.multibar.dispatch.on("elementClick", function(e) {
-					  that.vent.trigger("toggle:facet",{viewName : "includeColumns",key :columnKey,value :e.data.label});
-				  });
-				  d3.select(el)
-				  .datum(data)
-				    .transition().duration(500)
-				      .call(chart);
-				  return chart;
-			},
-			callback : function(graph){
-				d3.select(el)
-					.selectAll("rect")
-					.style("cursor","pointer");
-				that.$el.resize(function(){
-                    d3.select(el)
-//                        .attr('width', width)
-//                        .attr('height', height)
-                        .transition().duration(0)
-                        .call(graph);
-				});
-			}
-			});
-		},
-		renderGraphUsers : function(){
-//			var d= [{
-//				"key": "Top Ten Users",
-//				"color": "#4281DA",          
-//			}];
-			var obj = this.formatBarData(this.topUsers);
-			//d[0].values = obj.arr;
-			this.renderHorizontalBar(this.$('[data-id="topUsersGraph"] svg')[0],obj.arr, {top: 5,right:10, bottom: 20,left:(obj.max * 7)+25},"reqUser");
-		},
-		renderGraphResources : function(){
-//			var d= [{
-//				"key": "Top Ten Res	ources",
-//				"color": "#C7504B",          
-//			}];
-			var obj = this.formatBarData(this.topResources);
-			//d[0].values = obj.arr;
-			var marginleft = obj.max * 7;
-			this.renderHorizontalBar(this.$('[data-id="topResourcesGraph"] svg')[0],obj.arr, {top: 5,right:10, bottom: 20,left:(marginleft > 300) ? 300 : marginleft },"resource");
-		},
-		formatBarData : function(collection){
-//			var obj=[],len=0;
-//			collection.each(function(m){
-//				var val = parseInt(m.get("value"),10)
-//				if(len < m.get("name").length )
-//					len = m.get("name").length;
-//				obj.push({
-//					label : m.get("name"),
-//					value : (_.isNaN(val)) ? 0 : val
-//				});
-//			});
-//			return {
-//				max : len,
-//				arr : obj
-//			}
-			return ViewUtils.formatAuditGraphData(collection);
-		},
-
-		onToggleTableAggregated: function(e){
-			if(e.target.checked){
-				this.ui.tableView.addClass("showContent").removeClass('hideContent');
-				this.ui.graphView.addClass("hideContent").removeClass('showContent');
-			} else{
-				this.ui.tableView.addClass("hideContent").removeClass('showContent');
-				this.ui.graphView.addClass("showContent").removeClass('hideContent');
-			}
-		},
-		initializeAggregatedTable: function(){
-			var that = this;
-			that.opts = {
-					includeFilter : false,
-					includePagination : false,
-					includePageSize : false,
-					includeFooterRecords : false,
-					includeColumnManager : false,
-					columnOpts : {
-				    	initialColumnsVisible: 0,
-				    	saveState : false
-					},
-					gridOpts : {
-						className : "table m-table table-bordered table-hover table-heading",
-						emptyText : 'No records found!'
-					},
-					filterOpts : {},
-					paginatorOpts : {}
-			}
-			that.cols = {
-				name : {
-					label : "User",
-					cell: "String",
-					sortType: false,
-					editable: false,
-					sortable : false,
-				},
-				dataCount : {
-					label : "Components/Access",
-					cell: "html",
-					sortType: false,
-					editable: false,
-					sortable : false,
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function(rawValue, model){
-							var str = "<table class='m-table'>";
-							_.each(model.get('dataCount'),function(obj){
-								str +="<tr><td>"+obj.name+"</td><td>"+obj.value+"</td></tr>"
-							});
-							return str + "</table>";
-						}
-					})
-				},
-			/*	value : {
-					label : "Access",
-					cell: "html",
-					sortType: false,
-					editable: false,
-					sortable : false,
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function(rawValue, model){
-							var str="";
-							_.each(model.get('dataCount'),function(obj){
-								str = obj.value;
-							});
-							return str;
-						}
-					})
-				},*/
-			};
-			
-		},
-
-		createUsersTable:function(){
-			var that = this;
-			require(['views/common/TableLayout'], function(TableLayout){
-				that.cols.name.label = "Users";
-				var userCols = new Backgrid.Columns(that.topUsers.constructor.getTableCols(that.cols, that.topUsers));
-				that.RtableUsers.show(new TableLayout(_.extend({},that.opts,{
-					columns: userCols,
-					collection: that.topUsers,
-				})));
-			});
-		},
-		createResourceTable:function(){
-			var that = this;
-			require(['views/common/TableLayout'], function(TableLayout){
-			that.cols.name.label = "Resources";
-				var resourcesCols = new Backgrid.Columns(that.topResources.constructor.getTableCols(that.cols, that.topResources));
-				that.RtableResources.show(new TableLayout(_.extend({},that.opts,{
-					columns: resourcesCols,
-					collection: that.topResources,
-				})));
-			});
-		},
-		onExportAggregatedClick:function(){
-				var that = this;
-			require(['views/common/JBDialog',],function(JBDialog){
-				var view = new ExportLogFileView({viewType:"aggregatView"});
-				var opts = _.extend({
-					title: "Export",
-					content:view,
-					viewType: 'Update',
-					appendTo: 'body',
-					modal: true,
-					resizable: false,
-					width: 550,
-					height:200,
-					beforeClose: function(event, ui) {
-						that.onDialogClosed();
-					},
-					buttons: [{
-						id: "okBtn",
-						text: "Export",
-						"class": "btn btn-primary",
-						click: function() {
-							that.onDialogSubmitted();
-						}
-					}, {
-						id: "cancelBtn",
-						text: "Cancel",
-						"class": "btn btn-default",
-						click: function() {
-							that.onDialogClosed();
-						}
-					}]
-				});
-				var dialog = that.dialog = new JBDialog(opts).render().open();
-			})
-		},
-		onDialogClosed: function() {
-            if (this.dialog) {
-                this.dialog.close && this.dialog.close();
-                this.dialog.remove && this.dialog.remove();
-                this.dialog = null;
-            }
-        },
-        onDialogSubmitted : function(){
-			var obj = Utils.getFormData(this.dialog.$(".form-horizontal").serializeArray());
-			this.downloadAggregateFile(obj);
-		},
-		downloadAggregateFile : function(obj){
-			obj.utcOffset = moment().utcOffset();
-			obj.startIndex =  this.topUsers.state.currentPage * this.topUsers.state.pageSize;
-			var params = $.param(_.extend({},this.topUsers.queryParams,obj));
-			var url = "api/v1/audit/logs/export?"+ params;
-			window.open(url);
-			this.onDialogClosed();
-		}
-	});
-})
\ No newline at end of file


[41/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/bootstrap-logsearch.min.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/bootstrap-logsearch.min.js b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/bootstrap-logsearch.min.js
deleted file mode 100644
index a1b68d2..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/bootstrap-logsearch.min.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 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.
- */
-"use strict";$(document).ready(function(){var n=$(this).find('[data-toggle="collapseAccordion"]');n.off("click").on("click",function(n){var l=$(this);return l.siblings(".panel-body").slideToggle(500),l.children().children(".panel-toggle").toggleClass("fa-angle-down fa-angle-up"),n.stopPropagation(),!1})});
-"use strict";!function(e){e.fn.navigationBar=function(n){var t=e.extend({},e.fn.navigationBar.defaults,n);return this.each(function(){function n(){var n=window.location.pathname+window.location.hash;o.find("li a").each(function(t,a){var i=e(a),s=i.attr("data-href")||i.attr("href");n.indexOf(s)!==-1&&["","#"].indexOf(s)===-1?i.parent().addClass("active"):i.parent().removeClass("active")})}function a(n){var a=e(n).parent(),i=t.activeClass,s=f+"."+i,l=c+"."+i;o.find(s).removeClass(i),o.find(l).removeClass(i),a.addClass(i)}var i=this,s=".navigation-bar-container",o=e(this).find(s),l=e(this).find("[data-toggle="+t.navBarToggleDataAttr+"]"),r=e(this).find("[data-toggle="+t.subMenuNavToggleDataAttr+"]"),f=".side-nav-menu>li",c=".side-nav-menu>li>ul>li",d=e(this).find(".more-actions"),u=d.children(".dropdown-menu");r.each(function(n,t){return e(t).parent().addClass("has-sub-menu")}),t.fitHeight&&(e(this).addClass("navigation-bar-fit-height"),e(this).find(".side-nav-menu").on("DOMMouseScroll
  mousewheel",function(n){var t=e(this),a=this.scrollTop,i=this.scrollHeight,s=t.innerHeight(),o=n.originalEvent.wheelDelta,l=o>0,r=function(){return n.stopPropagation(),n.preventDefault(),n.returnValue=!1,!1};return!l&&-o>i-s-a?(t.scrollTop(i),r()):l&&o>a?(t.scrollTop(0),r()):void 0}));var h=o.width();t.moveLeftContent&&e(t.content).css("margin-left",h),t.moveLeftFooter&&e(t.footer).css("margin-left",h),t.handlePopState&&(n(),e(window).bind("popstate",n)),e(f+">a").on("click",function(){a(this)}),e(c+">a").on("click",function(){a(this),e(this).parent().parent().parent().addClass(t.activeClass)}),r.off("click").on("click",function(n){if(o.hasClass("collapsed"))return!1;var a=e(this);return a.siblings(".sub-menu").slideToggle(600,function(){var e=a.parent(),n=e.find("ul");return n.is(":visible")?e.removeClass("collapsed"):e.addClass("collapsed")}),a.children(".toggle-icon").toggleClass(t.menuLeftClass+" "+t.menuDownClass),n.stopPropagation(),!1}),e(this).find(".mainmenu-li>a").hover(f
 unction(){var n=e(this).siblings(".more-actions");n.length&&!o.hasClass("collapsed")&&n.css("display","inline-block")},function(){var n=e(this).siblings(".more-actions");n.length&&!o.hasClass("collapsed")&&n.hide()}),d.hover(function(){e(this).css("display","inline-block")}),t.fitHeight&&d.on("click",function(){var n=e(this),t=e(".side-nav-header");u.css({top:n.offset().top-t.offset().top+20+"px",left:n.offset().left+"px"})}),u.on("click",function(){var n=e(this).parent();setTimeout(function(){n.hide()},1e3)}),o.children(".side-nav-menu").scroll(function(){d.removeClass("open")}),l.click(function(){return o.toggleClass("collapsed").promise().done(function(){var n="ul.sub-menu",a=o.find(n),s=o.find(".side-nav-menu>li");o.hasClass("collapsed")?(a.hide(),d.hide(),s.hover(function(){e(this).find(n).show();var a=e(this),i=e(".side-nav-header");t.fitHeight&&e(this).find(n).css({position:"fixed",top:a.offset().top-i.offset().top+"px",left:"50px"})},function(){e(this).find(n).hide()})):(a.s
 how().each(function(n,t){return e(t).parent().removeClass("collapsed")}),s.unbind("mouseenter mouseleave"),o.find(".toggle-icon").removeClass(t.menuLeftClass).addClass(t.menuDownClass),t.fitHeight&&e(i).find(n).css({position:"relative",top:0,left:0})),o.on("transitionend",function(){var n=o.width();t.moveLeftContent&&e(t.content).css("margin-left",n),t.moveLeftFooter&&e(t.footer).css("margin-left",n)}),l.find("span").toggleClass(t.collapseNavBarClass+" "+t.expandNavBarClass)}),!1})})},e.fn.navigationBar.defaults={handlePopState:!0,fitHeight:!1,content:"#main",footer:"footer",moveLeftContent:!0,moveLeftFooter:!0,menuLeftClass:"glyphicon-menu-right",menuDownClass:"glyphicon-menu-down",collapseNavBarClass:"fa-angle-double-left",expandNavBarClass:"fa-angle-double-right",activeClass:"active",navBarToggleDataAttr:"collapse-side-nav",subMenuNavToggleDataAttr:"collapse-sub-menu"}}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/tsconfig.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/tsconfig.json b/ambari-logsearch/ambari-logsearch-web-new/tsconfig.json
deleted file mode 100644
index 094fb6d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/tsconfig.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "compileOnSave": false,
-  "compilerOptions": {
-    "outDir": "./dist/out-tsc",
-    "baseUrl": "src",
-    "paths": {
-      "@app/*": [
-        "app/*"
-      ],
-      "@envs/*": [
-        "environments/*"
-      ],
-      "@vendor/*": [
-        "vendor/*"
-      ]
-    },
-    "sourceMap": true,
-    "declaration": false,
-    "moduleResolution": "node",
-    "emitDecoratorMetadata": true,
-    "experimentalDecorators": true,
-    "target": "es5",
-    "typeRoots": [
-      "node_modules/@types"
-    ],
-    "lib": [
-      "es2016",
-      "dom"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/tslint.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/tslint.json b/ambari-logsearch/ambari-logsearch-web-new/tslint.json
deleted file mode 100644
index 9113f13..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/tslint.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-  "rulesDirectory": [
-    "node_modules/codelyzer"
-  ],
-  "rules": {
-    "callable-types": true,
-    "class-name": true,
-    "comment-format": [
-      true,
-      "check-space"
-    ],
-    "curly": true,
-    "eofline": true,
-    "forin": true,
-    "import-blacklist": [true, "rxjs"],
-    "import-spacing": true,
-    "indent": [
-      true,
-      "spaces"
-    ],
-    "interface-over-type-literal": true,
-    "label-position": true,
-    "max-line-length": [
-      true,
-      140
-    ],
-    "member-access": false,
-    "member-ordering": [
-      true,
-      "static-before-instance",
-      "variables-before-functions"
-    ],
-    "no-arg": true,
-    "no-bitwise": true,
-    "no-console": [
-      true,
-      "debug",
-      "info",
-      "time",
-      "timeEnd",
-      "trace"
-    ],
-    "no-construct": true,
-    "no-debugger": true,
-    "no-duplicate-variable": true,
-    "no-empty": false,
-    "no-empty-interface": true,
-    "no-eval": true,
-    "no-inferrable-types": [true, "ignore-params"],
-    "no-shadowed-variable": true,
-    "no-string-literal": false,
-    "no-string-throw": true,
-    "no-switch-case-fall-through": true,
-    "no-trailing-whitespace": true,
-    "no-unused-expression": true,
-    "no-use-before-declare": true,
-    "no-var-keyword": true,
-    "object-literal-sort-keys": false,
-    "one-line": [
-      true,
-      "check-open-brace",
-      "check-catch",
-      "check-else",
-      "check-whitespace"
-    ],
-    "prefer-const": true,
-    "quotemark": [
-      true,
-      "single"
-    ],
-    "radix": true,
-    "semicolon": [
-      "always"
-    ],
-    "triple-equals": [
-      true,
-      "allow-null-check"
-    ],
-    "typedef-whitespace": [
-      true,
-      {
-        "call-signature": "nospace",
-        "index-signature": "nospace",
-        "parameter": "nospace",
-        "property-declaration": "nospace",
-        "variable-declaration": "nospace"
-      }
-    ],
-    "typeof-compare": true,
-    "unified-signatures": true,
-    "variable-name": false,
-    "whitespace": [
-      true,
-      "check-branch",
-      "check-decl",
-      "check-operator",
-      "check-separator",
-      "check-type"
-    ],
-
-    "directive-selector": [true, "attribute", "app", "camelCase"],
-    "component-selector": [true, "element", "app", "kebab-case"],
-    "use-input-property-decorator": true,
-    "use-output-property-decorator": true,
-    "use-host-property-decorator": true,
-    "no-input-rename": true,
-    "no-output-rename": true,
-    "use-life-cycle-interface": true,
-    "use-pipe-transform-interface": true,
-    "component-class-suffix": true,
-    "directive-class-suffix": true,
-    "no-access-missing-member": true,
-    "templates-use-public": true,
-    "invoke-injectable": true
-  }
-}


[19/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.css
deleted file mode 100644
index 89a2446..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.css
+++ /dev/null
@@ -1,114 +0,0 @@
-#control {
-    margin: 0 0 10px 0;
-}
-
-div.columnmanager-visibilitycontrol {
-    margin: 0 auto;
-    position: relative;
-    width: 50px;
-}
-
-div.columnmanager-visibilitycontrol > button.dropdown-button {
-    background-image: -moz-linear-gradient(top, #ffffff, #dbdbdb);
-    background-image: -webkit-gradient(linear,left top,left bottom,
-    color-stop(0, #ffffff),color-stop(1, #dbdbdb));
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#dbdbdb');
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#dbdbdb')";
-    border: 1px solid #fff;
-    -moz-box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.4);
-    -webkit-box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.4);
-    box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.4);
-    text-decoration: none;
-    text-shadow: #fff 0 1px 0;
-    color: #597390;
-    font-weight: bold;
-}
-
-div.columnmanager-visibilitycontrol > button.dropdown-button:hover {
-    background-image: -moz-linear-gradient(top, #ffffff, #eeeeee);
-    background-image: -webkit-gradient(linear,left top,left bottom,
-    color-stop(0, #ffffff),color-stop(1, #eeeeee));
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#eeeeee');
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#eeeeee')";
-    color: #000;
-}
-
-div.columnmanager-visibilitycontrol > button.dropdown-button:active {
-    background-image: -moz-linear-gradient(top, #dbdbdb, #ffffff);
-    background-image: -webkit-gradient(linear,left top,left bottom,
-    color-stop(0, #dbdbdb),color-stop(1, #ffffff));
-    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#dbdbdb', EndColorStr='#ffffff');
-    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#dbdbdb', EndColorStr='#ffffff')";
-    text-shadow: 0px -1px 0 rgba(255, 255, 255, 0.5);
-}
-
-div.columnmanager-dropdown-container {
-    cursor: default;
-    position: absolute;
-    z-index: 10;
-    top: 0;
-    left: 0;
-    background: #fff;
-    border: solid 1px #bbb;
-    -webkit-box-shadow: #999999 0 1px 3px;
-    -moz-box-shadow: #999999 0 1px 3px;
-    box-shadow: #999999 0 1px 3px;
-    width: 200px;
-    display: none !important;
-    min-height: 20px;
-    max-height: 400px;
-    font-size: 14px;
-    line-height: 1.1em;
-    font-weight: normal;
-    text-align: left;
-    color: #444;
-    text-transform: none;
-    -webkit-border-radius: 3px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-    -moz-background-clip: padding;
-    -webkit-background-clip: padding-box;
-    background-clip: padding-box;
-    pointer-events: none;
-}
-
-div.columnmanager-dropdown-container.open {
-    display: block !important;
-    pointer-events: auto;
-}
-
-.columnmanager-dropdown-container > li {
-    list-style-type:none;
-    padding: 5px 0px 0px 20px;
-    border-bottom: solid 1px lightgray;
-    cursor: pointer;
-}
-
-.columnmanager-dropdown-container > li:hover {
-    background-color: #f0f0f0;
-}
-
-.columnmanager-dropdown-container > li:last-child {
-    border-bottom: none;
-}
-
-.columnmanager-dropdown-container > li > span.indicator {
-    width: 20px;
-    display: inline-block;
-}
-.columnmanager-dropdown-container > li.visible > span.indicator::before {
-    content: "✓";
-    color: blue;
-}
-
-.columnmanager-dropdown-container > li > span.column-label {
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    display: inline-block;
-    width: 150px;
- }
-
-th.columnVisibility {
-    overflow: visible;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.js
deleted file mode 100644
index e65e8cd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.js
+++ /dev/null
@@ -1,1045 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("_"), require("jQuery"), require("Backbone"), require("Backgrid"));
-	else if(typeof define === 'function' && define.amd)
-		define(["underscore", "jquery", "backbone", "backgrid"], factory);
-	else if(typeof exports === 'object')
-		exports["Backgrid.Extension.ColumnManager"] = factory(require("_"), require("jQuery"), require("Backbone"), require("Backgrid"));
-	else
-		root["Backgrid.Extension.ColumnManager"] = factory(root["_"], root["jQuery"], root["Backbone"], root["Backgrid"]);
-})(this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_4__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-
-
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-	"use strict";
-
-	/**
-	 * A column manager for backgrid
-	 *
-	 * @module Backgrid.ColumnManager
-	 */
-	// Dependencies
-	var _ = __webpack_require__(1);
-	var $ = __webpack_require__(2);
-	var Backbone = __webpack_require__(3);
-	var Backgrid = __webpack_require__(4);
-
-	/**
-	 * Manages visibility of columns.
-	 *
-	 * @class Backgrid.Extension.ColumnManager ColumnManager
-	 * @constructor
-	 * @param {Backgrid.Columns} columns
-	 * @param {Object} [options]
-	 * @param {number} [options.initialColumnCount] Initial amount of columns to show. Default is null (All visible).
-	 * @param {boolean} [options.trackSize]
-	 * @param {boolean} [options.trackOrder]
-	 * @param {boolean} [options.trackVisibility]
-	 * @param {string} [options.stateChecking] can be "strict" or "loose".
-	 * @param {boolean} [options.saveState]
-	 * @param {string} [options.saveStateKey] Storage key. Must be unique for location. Can be left out if this plugin is only used in one place.
-	 * @param {string} [options.saveStateLocation] Can be "localStorage" (default) or "sessionStorage" (be aware, session stored values are lost when window is closed)
-	 * @param {boolean} [options.loadStateOnInit]
-	 * @param {Array} [state]
-	 */
-	Backgrid.Extension.ColumnManager = function (columns, options, state) {
-	  // Bind backbone events
-	  _.extend(this, Backbone.Events);
-
-	  // Save options and merge with defaults
-	  var defaults = {
-	    initialColumnsVisible: null,
-
-	    // State options
-	    trackSize: true,
-	    trackOrder: true,
-	    trackVisibility: true,
-	    stateChecking: "strict",
-	    saveState: false,
-	    saveStateKey: "",
-	    saveStateLocation: "localStorage",
-	    loadStateOnInit: false
-	  };
-	  this.options = _.extend({}, defaults, options);
-	  this.state = [];
-
-	  // Check if columns is instance of Backgrid.Columns
-	  if (columns instanceof Backgrid.Columns) {
-	    // Save columns
-	    this.columns = columns;
-
-	    // Add columnManager to columns (instance)
-	    columns.columnManager = this;
-	    this.addManagerToColumns();
-
-	    // Set state if provided
-	    var storedState = (this.options.loadStateOnInit) ? this.loadState() : false;
-	    if (state && this.checkStateValidity(state)) {
-	      this.setState(state, true);
-	    }
-	    else if (storedState) {
-	      this.setState(storedState, true);
-	    }
-	    else {
-	      // If no initial state is provided, adhere to initial column visibility settings
-	      this.setInitialColumnVisibility();
-
-	      // Set current state
-	      this.setState(this.getStateFromColumns());
-	    }
-
-	    // Listen to column events
-	    if (this.options.trackVisibility || this.options.trackSize || this.options.trackOrder) {
-	      //this.stateUpdateHandler = _.bind(this.stateUpdateHandler, this);
-	      var events = "" +
-	          ((this.options.trackVisibility) ? "change:renderable " : "") +
-	          ((this.options.trackSize) ? "resize " : "") +
-	          ((this.options.trackOrder) ? "ordered" : "");
-	      this.columns.on(events, _.bind(this.stateUpdateHandler, this));
-	    }
-	  }
-	  else {
-	    // Issue warning
-	    console.error("Backgrid.ColumnManager: options.columns is not an instance of Backgrid.Columns");
-	  }
-	};
-
-	/**
-	 * Loops over all columns and sets the visibility according to provided options.
-	 *
-	 * @method setInitialColumnVisibility
-	 */
-	Backgrid.Extension.ColumnManager.prototype.setInitialColumnVisibility = function () {
-	  var self = this;
-
-	  // Loop columns and set renderable property according to settings
-	  var initialColumnsVisible = self.options.initialColumnsVisible;
-
-	  if (initialColumnsVisible) {
-	    self.columns.each(function (col, index) {
-	      col.set("renderable", (col.get("alwaysVisible")) ? true : index < initialColumnsVisible);
-	    });
-	  }
-	};
-
-	/**
-	 * Loops over all columns and adds the columnManager instance to VisibilityHeaderCell columns.
-	 *
-	 * @method addManagerToColumns
-	 */
-	Backgrid.Extension.ColumnManager.prototype.addManagerToColumns = function () {
-	  var self = this;
-
-	  self.columns.each(function (col) {
-	    // Look for header cell
-	    if (col.get("headerCell") === Backgrid.Extension.ColumnManager.ColumnVisibilityHeaderCell) {
-	      col.set("headerCell", col.get("headerCell").extend({
-	        columnManager: self
-	      }));
-	    }
-
-	    if (col.get("headerCell") instanceof Backgrid.Extension.ColumnManager.ColumnVisibilityHeaderCell) {
-	      col.get("headerCell").columnManager = self;
-	    }
-	  });
-	};
-
-	/**
-	 * Convenience function to retrieve a column either directly or by its id.
-	 * Returns false if no column is found.
-	 *
-	 * @method getColumn
-	 * @param {string|number|Backgrid.Column} col
-	 * @return {Backgrid.Column|boolean}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getColumn = function (col) {
-	  // If column is a string or number, try to find a column which has that ID
-	  if (_.isNumber(col) || _.isString(col)) {
-	    col = this.columns.get(col);
-	  }
-	  return (col instanceof Backgrid.Column) ? col : false;
-	};
-
-	/**
-	 * Hides a column
-	 *
-	 * @method hidecolumn
-	 * @param {string|number|Backgrid.Column} col
-	 */
-	Backgrid.Extension.ColumnManager.prototype.hideColumn = function (col) {
-	  // If column is a valid backgrid column, set the renderable property to false
-	  var column = this.getColumn(col);
-	  if (column) {
-	    column.set("renderable", false);
-	  }
-	};
-
-	/**
-	 * Shows a column
-	 *
-	 * @method showColumn
-	 * @param {string|number|Backgrid.Column} col
-	 */
-	Backgrid.Extension.ColumnManager.prototype.showColumn = function (col) {
-	  // If column is a valid backgrid column, set the renderable property to true
-	  var column = this.getColumn(col);
-	  if (column) {
-	    column.set("renderable", true);
-	  }
-	};
-
-	/**
-	 * Toggles a columns' visibility
-	 *
-	 * @method toggleColumnVisibility
-	 * @param {string|number|Backgrid.Column} col
-	 */
-	Backgrid.Extension.ColumnManager.prototype.toggleColumnVisibility = function (col) {
-	  // If column is a valid backgrid column, set the renderable property to true
-	  var column = this.getColumn(col);
-	  if (column) {
-	    if (column.get("renderable")) {
-	      this.hideColumn(column);
-	    }
-	    else {
-	      this.showColumn(column);
-	    }
-	  }
-	};
-
-	/**
-	 * Returns the managed column collection
-	 *
-	 * @method getColumnCollection
-	 * @return {Backgrid.Columns}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getColumnCollection = function () {
-	  return this.columns;
-	};
-
-	/**
-	 *
-	 * @method setState
-	 * @param {Array} state
-	 * @param {boolean} applyState
-	 * @return {boolean}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.setState = function (state, applyState) {
-	  var self = this;
-
-	  // Filter state
-	  _.filter(state, function(columnState) {
-	    if (!_.has(columnState, "name")) {
-	      return false;
-	    }
-
-	    var column = self.columns.findWhere({
-	      name: state.name
-	    });
-
-	    return typeof column !== "undefined";
-	  });
-
-	  // Check if state is valid
-	  if (self.checkStateValidity(state) && state !== self.state) {
-	    // Apply and save state
-	    self.state = state;
-	    self.trigger("state-changed", state);
-
-	    if (applyState) {
-	      return self.applyStateToColumns();
-	    }
-	    else {
-	      return self.saveState();
-	    }
-	  }
-	  return false;
-	};
-
-	/**
-	 * @method getState
-	 * @return {Array}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getState = function () {
-	  return this.state;
-	};
-
-	/**
-	 *
-	 * @method checkStateValidity
-	 * @return {boolean}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.checkStateValidity = function (state) {
-	  // Has to be array
-	  if (!_.isArray(state) && _.isEmpty(state)) {
-	    return false;
-	  }
-
-	  function checkValidityColumnState() {
-	    return _.every(state, function(column) {
-	      var valid = true;
-
-	      // We require a name key
-	      if (!_.has(column, "name")) {
-	        valid = false;
-	      }
-
-	      // If renderable is set, should be boolean
-	      if (_.has(column, "renderable")) {
-	        if (!_.isBoolean(column.renderable)) {
-	          valid = false;
-	        }
-	      }
-
-	      // If displayOrder is set, should be a number
-	      if (_.has(column, "displayOrder")) {
-	        if (!_.isNumber(column.displayOrder)) {
-	          valid = false;
-	        }
-	      }
-
-	      // If width is set, should be a number or a string
-	      if (_.has(column, "width")) {
-	        if (!_.isNumber(column.width) && !_.isString(column.width)) {
-	          valid = false;
-	        }
-	      }
-
-	      return valid;
-	    });
-	  }
-
-	  // Check if state is valid
-	  if (this.options.stateChecking === "loose") {
-	    // At least we require 'name' keys in every objec
-	    return checkValidityColumnState();
-	  }
-	  else {
-	    // Strict check
-	    // Requires same length and valid name keys.
-	    if (state.length !== this.columns.length && !checkValidityColumnState()) {
-	      return false;
-	    }
-
-	    var columnNameKeys = this.columns.map(function (column) {
-	      return column.get("name");
-	    });
-
-	    var newStateNameKeys = _.map(state, function (column) {
-	      return column.name;
-	    });
-
-	    return columnNameKeys.sort().toString() === newStateNameKeys.sort().toString();
-	  }
-	};
-
-
-	/**
-	 *
-	 * @method loadState
-	 * @return {boolean}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.loadState = function () {
-	  // Get state from storage
-	  var state = JSON.parse(this.getStorage().getItem(this.getStorageKey()));
-	  if (this.checkStateValidity(state)) {
-	    return state;
-	  }
-	  return false;
-	};
-
-	/**
-	 *
-	 * @method saveState
-	 * @param {boolean} [force] Override save settings.
-	 * @return {boolean}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.saveState = function (force) {
-	  if (this.options.saveState || force) {
-	    this.getStorage().setItem(this.getStorageKey(), JSON.stringify(this.state));
-	    this.trigger("state-saved");
-	    return true;
-	  }
-	  return false;
-	};
-
-	/**
-	 * @method getStorage
-	 * @return {boolean|Storage}
-	 * @private
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getStorage = function () {
-	  // Check if storage functionality is available
-	  if (typeof Storage !== "undefined") {
-	    return (this.options.saveStateLocation === "sessionStorage") ? sessionStorage : localStorage;
-	  }
-	  else {
-	    console.error("ColMrg: No storage support detected. State won't be saved.");
-	    return false;
-	  }
-	};
-
-	/**
-	 * @method getStorageKey
-	 * @return {string}
-	 * @private
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getStorageKey = function () {
-	  return (this.options.saveStateKey) ? "backgrid-colmgr-" + this.options.saveStateKey : "backgrid-colmgr";
-	};
-
-	/**
-	 * @method stateUpdateHandler
-	 * @return {boolean}
-	 * @private
-	 */
-	Backgrid.Extension.ColumnManager.prototype.stateUpdateHandler = function () {
-	  var state = this.getStateFromColumns();
-	  return this.setState(state);
-	};
-
-	/**
-	 * @method getStateFromColumn
-	 * @return {Array}
-	 */
-	Backgrid.Extension.ColumnManager.prototype.getStateFromColumns = function() {
-	  var self = this;
-
-	  // Map state from columns
-	  return this.columns.map(function(column) {
-	    var columnState = {
-	      name: column.get("name")
-	    };
-
-	    if (self.options.trackVisibility) {
-	      columnState.renderable = column.get("renderable");
-	    }
-	    if (self.options.trackOrder) {
-	      columnState.displayOrder = column.get("displayOrder");
-	    }
-	    if (self.options.trackSize) {
-	      columnState.width = column.get("width");
-	    }
-	    return columnState;
-	  });
-	};
-
-	/**
-	 * @method applyStateToColumns
-	 * @private
-	 */
-	Backgrid.Extension.ColumnManager.prototype.applyStateToColumns = function () {
-	  var self = this;
-
-	  // Loop state
-	  var ordered = false;
-	  _.each(this.state, function(columnState) {
-	    // Find column
-	    var column = self.columns.findWhere({
-	      name: columnState.name
-	    });
-
-	    if (_.has(columnState, "renderable")) {
-	      column.set("renderable", columnState.renderable);
-	    }
-	    if (_.has(columnState, "width")) {
-	      var oldWidth = column.get("width");
-	      column.set("width", columnState.width, {silent: true});
-	      if (oldWidth !== columnState.width) {
-	        column.trigger("resize", column, columnState.width, oldWidth);
-	      }
-	    }
-
-	    if (_.has(columnState, "displayOrder")) {
-	      if (columnState.displayOrder !== column.get("displayOrder")) {
-	        ordered = true;
-	      }
-	      column.set("displayOrder", columnState.displayOrder, {silent: true});
-	    }
-	  });
-
-	  if (ordered) {
-	    self.columns.sort();
-	    self.columns.trigger("ordered");
-	  }
-	};
-
-	//////////////////////////////////////////////
-	/////////////// UI Controls //////////////////
-	//////////////////////////////////////////////
-
-	/**
-	 * A dropdown item view
-	 *
-	 * @class DropDownItemView
-	 * @extends Backbone.View
-	 */
-	var DropDownItemView = Backbone.View.extend({
-	  className: "columnmanager-dropdown-item",
-	  tagName: "li",
-
-	  /**
-	   * @method initialize
-	   * @param {object} opts
-	   * @param {Backgrid.Extension.ColumnManager} opts.columnManager ColumnManager instance.
-	   * @param {Backgrid.Column} opts.column A backgrid column.
-	   */
-	  initialize: function (opts) {
-	    this.columnManager = opts.columnManager;
-	    this.column = opts.column;
-	    this.template = opts.template;
-
-	    _.bindAll(this, "render", "toggleVisibility");
-	    this.column.on("change:renderable", this.render, this);
-	    this.el.addEventListener("click", this.toggleVisibility, true);
-	  },
-
-	  /**
-	   * @method render
-	   * @return {DropDownItemView}
-	   */
-	  render: function () {
-	    this.$el.empty();
-
-	    this.$el.append(this.template({
-	      label: this.column.get("label")
-	    }));
-
-	    if (this.column.get("renderable")) {
-	      this.$el.addClass((this.column.get("renderable")) ? "visible" : null);
-	    }
-	    else {
-	      this.$el.removeClass("visible");
-	    }
-
-	    return this;
-	  },
-
-	  /**
-	   * Toggles visibility of column.
-	   *
-	   * @method toggleVisibility
-	   * @param {object} e
-	   */
-	  toggleVisibility: function (e) {
-	    if (e) {
-	      this.stopPropagation(e);
-	    }
-	    this.columnManager.toggleColumnVisibility(this.column);
-	  },
-
-	  /**
-	   * Convenience function to stop event propagation.
-	   *
-	   * @method stopPropagation
-	   * @param {object} e
-	   * @private
-	   */
-	  stopPropagation: function (e) {
-	    e.stopPropagation();
-	    e.stopImmediatePropagation();
-	    e.preventDefault();
-	  }
-	});
-
-
-	/**
-	 * Dropdown view container.
-	 *
-	 * @class DropDownView
-	 * @extends Backbone.view
-	 */
-	var DropDownView = Backbone.View.extend({
-	  /**
-	   * @property className
-	   * @type String
-	   * @default "columnmanager-dropdown-container"
-	   */
-	  className: "columnmanager-dropdown-container",
-
-	  /**
-	   * @method initialize
-	   * @param {object} opts
-	   * @param {Backgrid.Extension.ColumnManager} opts.columnManager ColumnManager instance.
-	   * @param {Backbone.View} opts.DropdownItemView View to be used for the items.
-	   * @param {Function} opts.dropdownItemTemplate
-	   */
-	  initialize: function (opts) {
-	    this.options = opts;
-	    this.columnManager = opts.columnManager;
-	    this.ItemView = (opts.DropdownItemView instanceof Backbone.View) ? opts.DropdownItemView : DropDownItemView;
-	    this.$dropdownButton = opts.$dropdownButton;
-
-	    this.on("dropdown:opened", this.open, this);
-	    this.on("dropdown:closed", this.close, this);
-	    this.columnManager.columns.on("add remove", this.render, this);
-	  },
-
-	  /**
-	   * @method render
-	   * @return {DropDownView}
-	   */
-	  render: function () {
-	    var view = this;
-	    view.$el.empty();
-
-	    // List all columns
-	    this.columnManager.columns.each(function (col) {
-	      if (!col.get("alwaysVisible")) {
-	        view.$el.append(new view.ItemView({
-	          column: col,
-	          columnManager: view.columnManager,
-	          template: view.options.dropdownItemTemplate
-	        }).render().el);
-	      }
-	    });
-
-	    return this;
-	  },
-
-	  /**
-	   * Opens the dropdown.
-	   *
-	   * @method open
-	   */
-	  open: function () {
-	    this.$el.addClass("open");
-
-	    // Get button
-	    var $button = this.$dropdownButton;
-
-	    // Align
-	    var align;
-	    if (this.options.align === "auto") {
-	      // Determine what alignment fits
-	      var viewPortWidth = document.body.clientWidth || document.body.clientWidth;
-	      align = (($button.offset().left + this.$el.outerWidth()) > viewPortWidth) ? "left" : "right";
-	    }
-	    else {
-	      align = (this.options.align === "left" || this.options.align === "right") ?
-	        (this.options.align === "right" ? "right" : "left") : "right";
-	    }
-
-	    var offset;
-	    if (align === "left") {
-	      // Align right by default
-	      offset = $button.offset().left + $button.outerWidth() - this.$el.outerWidth();
-	      this.$el.css("left", offset + "px");
-	    }
-	    else {
-	      offset = $button.offset().left;
-	      this.$el.css("left", offset + "px");
-	    }
-
-	    // Height position
-	    var offsetHeight = $button.offset().top + $button.outerHeight();
-	    this.$el.css("top", offsetHeight + "px");
-	  },
-
-	  /**
-	   * Closes the dropdown.
-	   *
-	   * @method close
-	   */
-	  close: function () {
-	    this.$el.removeClass("open");
-	  }
-	});
-
-	/**
-	 * UI control which manages visibility of columns.
-	 * Inspired by: https://github.com/kjantzer/backbonejs-dropdown-view.
-	 *
-	 * @class Backgrid.Extension.ColumnManagerVisibilityControl
-	 * @extends Backbone.View
-	 */
-	Backgrid.Extension.ColumnManagerVisibilityControl = Backbone.View.extend({
-	  /**
-	   * @property tagName
-	   * @type String
-	   * @default "div"
-	   */
-	  tagName: "div",
-
-	  /**
-	   * @property className
-	   * @type String
-	   * @default "columnmanager-visibilitycontrol"
-	   */
-	  className: "columnmanager-visibilitycontrol",
-
-	  /**
-	   * @property defaultEvents
-	   * @type Object
-	   */
-	  defaultEvents: {
-	    "click": "stopPropagation"
-	  },
-
-	  /**
-	   * @property defaultOpts
-	   * @type Object
-	   */
-	  defaultOpts: {
-	    width: null,
-	    closeOnEsc: true,
-	    closeOnClick: true,
-	    openOnInit: false,
-	    columnManager: null,
-
-	    // Button
-	    buttonTemplate: _.template("<button class='dropdown-button'>...</button>"),
-
-	    // Container
-	    DropdownView: DropDownView,
-	    dropdownAlign: "auto",
-
-	    // Item view
-	    DropdownItemView: DropDownItemView,
-	    dropdownItemTemplate: _.template("<span class='indicator'></span><span class='column-label'><%= label %></span>")
-	  },
-
-	  /**
-	   * @method initialize
-	   * @param {Object} opts
-	   * @param {Backgrid.Extension.ColumnManager} opts.columnManager ColumnManager instance
-	   */
-	  initialize: function (opts) {
-	    this.options = _.extend({}, this.defaultOpts, opts);
-	    this.events = _.extend({}, this.defaultEvents, this.events || {});
-	    this.columnManager = opts.columnManager;
-
-	    // Option checking
-	    if (!this.columnManager instanceof Backgrid.Extension.ColumnManager) {
-	      console.error("Backgrid.ColumnManager: options.columns is not an instance of Backgrid.Columns");
-	    }
-
-	    // Bind scope to events
-	    _.bindAll(this, "deferClose", "stopDeferClose", "closeOnEsc", "toggle", "render");
-
-	    // UI events
-	    document.body.addEventListener("click", this.deferClose, true);
-	    this.el.addEventListener("click", this.stopDeferClose, true);
-	    if (this.options.closeOnEsc) {
-	      document.body.addEventListener("keyup", this.closeOnEsc, false);
-	    }
-	    this.el.addEventListener("click", this.toggle, false);
-
-	    // Create elements
-	    this.setup();
-
-	    // Listen for dropdown view events indicating to open and/or close
-	    this.view.on("dropdown:close", this.close, this);
-	    this.view.on("dropdown:open", this.open, this);
-	  },
-
-	  /**
-	   * @method delayStart
-	   * @private
-	   */
-	  delayStart: function () {
-	    clearTimeout(this.closeTimeout);
-	    this.delayTimeout = setTimeout(this.open.bind(this), this.options.delay);
-	  },
-
-	  /**
-	   * @method delayEnd
-	   * @private
-	   */
-	  delayEnd: function () {
-	    clearTimeout(this.delayTimeout);
-	    this.closeTimeout = setTimeout(this.close.bind(this), 300);
-	  },
-
-	  /**
-	   * @method setup
-	   * @private
-	   */
-	  setup: function () {
-	    // Override element width
-	    if (this.options.width) {
-	      this.$el.width(this.options.width + "px");
-	    }
-
-	    // Create button element
-	    this.$dropdownButton = $(this.options.buttonTemplate());
-
-	    var viewOptions = {
-	      columnManager: this.columnManager,
-	      DropdownItemView: this.options.DropdownItemView,
-	      dropdownItemTemplate: this.options.dropdownItemTemplate,
-	      align: this.options.dropdownAlign,
-	      $dropdownButton: this.$dropdownButton
-	    };
-
-	    // Check if a different childView has been provided, if not, use default dropdown view
-	    this.view = (this.options.DropdownView instanceof Backbone.View) ?
-	      new this.options.DropdownView(viewOptions) :
-	      new DropDownView(viewOptions);
-	  },
-
-	  /**
-	   * @method setup
-	   */
-	  render: function () {
-	    this.$el.empty();
-
-	    // Render button
-	    this.$el.append(this.$dropdownButton);
-
-	    // Render inner view
-	    this.view.render(); // tell the inner view to render itself
-	    $(document.body).append(this.view.el);
-	    return this;
-	  },
-
-	  /**
-	   * Convenience function to stop event propagation
-	   *
-	   * @method stopPropagation
-	   * @param {object} e
-	   * @private
-	   */
-	  stopPropagation: function (e) {
-	    e.stopPropagation();
-	    e.stopImmediatePropagation();
-	    e.preventDefault();
-	  },
-
-	  /**
-	   * Toggle the dropdown visibility
-	   *
-	   * @method toggle
-	   * @param {object} [e]
-	   */
-	  toggle: function (e) {
-	    if (this.isOpen !== true) {
-	      this.open(e);
-	    }
-	    else {
-	      this.close(e);
-	    }
-	  },
-
-	  /**
-	   * Open the dropdown
-	   *
-	   * @method open
-	   * @param {object} [e]
-	   */
-	  open: function (e) {
-	    clearTimeout(this.closeTimeout);
-	    clearTimeout(this.deferCloseTimeout);
-
-	    if (e) {
-	      if (e.stopPropagation) {
-	        e.stopPropagation();
-	      }
-	      if (e.preventDefault) {
-	        e.preventDefault();
-	      }
-	      e.cancelBubble = true;
-	    }
-
-	    // Don't do anything if already open
-	    if (this.isOpen) {
-	      return;
-	    }
-
-	    this.isOpen = true;
-	    this.$el.addClass("open");
-	    this.trigger("dropdown:opened");
-
-	    // Notify child view
-	    this.view.trigger("dropdown:opened");
-	  },
-
-	  /**
-	   * Close the dropdown
-	   *
-	   * @method close
-	   * @param {object} [e]
-	   */
-	  close: function (e) {
-	    // Don't do anything if already closed
-	    if (!this.isOpen) {
-	      return;
-	    }
-
-	    this.isOpen = false;
-	    this.$el.removeClass("open");
-	    this.trigger("dropdown:closed");
-
-	    // Notify child view
-	    this.view.trigger("dropdown:closed");
-	  },
-
-	  /**
-	   * Close the dropdown on esc
-	   *
-	   * @method closeOnEsc
-	   * @param {object} e
-	   * @private
-	   */
-	  closeOnEsc: function (e) {
-	    if (e.which === 27) {
-	      this.deferClose();
-	    }
-	  },
-
-	  /**
-	   * @method deferClose
-	   * @private
-	   */
-	  deferClose: function () {
-	    this.deferCloseTimeout = setTimeout(this.close.bind(this), 0);
-	  },
-
-	  /**
-	   * @method stopDeferClose
-	   * @private
-	   */
-	  stopDeferClose: function (e) {
-	    clearTimeout(this.deferCloseTimeout);
-	  },
-
-	  /**
-	   * Clean up this control
-	   *
-	   * @method remove
-	   * @chainable
-	   */
-	  remove: function () {
-	    // Remove event listeners
-	    document.body.removeEventListener("click", this.deferClose);
-	    this.el.removeEventListener("click", this.stopDeferClose);
-	    if (this.options.closeOnEsc) {
-	      document.body.removeEventListener("keyup", this.closeOnEsc);
-	    }
-	    this.el.removeEventListener("click", this.toggle);
-
-	    // Remove DOM element
-	    $(this.view.el).remove();
-
-	    // Invoke original backbone methods
-	    return Backbone.View.prototype.remove.apply(this, arguments);
-	  }
-	});
-
-	/**
-	 * Backgrid HeaderCell containing ColumnManagerVisibilityControl
-	 *
-	 * @class Backgrid.Extension.ColumnVisibilityHeaderCell
-	 * @extends Backgrid.HeaderCell
-	 */
-
-	Backgrid.Extension.ColumnManager.ColumnVisibilityHeaderCell = Backgrid.HeaderCell.extend({
-	  initialize: function (options) {
-	    Backgrid.HeaderCell.prototype.initialize.apply(this, arguments);
-
-	    // Add class
-	    this.$el.addClass(this.column.get("name"));
-	  },
-	  render: function () {
-	    this.$el.empty();
-
-	    // Add control
-	    var colVisibilityControl = this.colVisibilityControl = new Backgrid.Extension.ColumnManagerVisibilityControl({
-	      columnManager: this.columnManager
-	    });
-
-	    // Add to header
-	    this.$el.html(colVisibilityControl.render().el);
-
-	    this.delegateEvents();
-	    return this;
-	  },
-
-	  /**
-	   * Clean up this cell.
-	   *
-	   * @method remove
-	   * @chainable
-	   */
-	  remove: function () {
-	    // Remove UI control
-	    this.colVisibilityControl.remove();
-
-	    // Invoke super
-	    /*eslint no-underscore-dangle:0*/
-	    return Backgrid.HeaderCell.__super__.remove.apply(this, arguments);
-	  }
-	});
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
-
-/***/ },
-/* 2 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = __WEBPACK_EXTERNAL_MODULE_2__;
-
-/***/ },
-/* 3 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
-
-/***/ },
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
-
-/***/ }
-/******/ ])
-});
-;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/css/daterangepicker.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/css/daterangepicker.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/css/daterangepicker.css
deleted file mode 100644
index 7f1ef54..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/css/daterangepicker.css
+++ /dev/null
@@ -1,415 +0,0 @@
-.daterangepicker {
-    position: absolute;
-    color: inherit;
-    background: #fff;
-    border-radius: 4px;
-    width: 278px;
-    padding: 4px;
-    margin-top: 1px;
-    top: 100px;
-    left: 20px;
-    /* Calendars */
-}
-
-.daterangepicker:before,
-.daterangepicker:after {
-    position: absolute;
-    display: inline-block;
-    border-bottom-color: rgba(0, 0, 0, 0.2);
-    content: '';
-}
-
-.daterangepicker:before {
-    top: -7px;
-    border-right: 7px solid transparent;
-    border-left: 7px solid transparent;
-    border-bottom: 7px solid #ccc;
-}
-
-.daterangepicker:after {
-    top: -6px;
-    border-right: 6px solid transparent;
-    border-bottom: 6px solid #fff;
-    border-left: 6px solid transparent;
-}
-
-.daterangepicker.opensleft:before {
-    right: 9px;
-}
-
-.daterangepicker.opensleft:after {
-    right: 10px;
-}
-
-.daterangepicker.openscenter:before {
-    left: 0;
-    right: 0;
-    width: 0;
-    margin-left: auto;
-    margin-right: auto;
-}
-
-.daterangepicker.openscenter:after {
-    left: 0;
-    right: 0;
-    width: 0;
-    margin-left: auto;
-    margin-right: auto;
-}
-
-.daterangepicker.opensright:before {
-    left: 9px;
-}
-
-.daterangepicker.opensright:after {
-    left: 10px;
-}
-
-.daterangepicker.dropup {
-    margin-top: -5px;
-}
-
-.daterangepicker.dropup:before {
-    top: initial;
-    bottom: -7px;
-    border-bottom: initial;
-    border-top: 7px solid #ccc;
-}
-
-.daterangepicker.dropup:after {
-    top: initial;
-    bottom: -6px;
-    border-bottom: initial;
-    border-top: 6px solid #fff;
-}
-
-.daterangepicker.dropdown-menu {
-    max-width: none;
-    z-index: 3001;
-}
-
-.daterangepicker.single .ranges,
-.daterangepicker.single .calendar {
-    float: none;
-}
-
-.daterangepicker.show-calendar .calendar {
-    display: block;
-}
-
-.daterangepicker .calendar {
-    display: none;
-    max-width: 270px;
-    margin: 4px;
-}
-
-.daterangepicker .calendar.single .calendar-table {
-    border: none;
-}
-
-.daterangepicker .calendar th,
-.daterangepicker .calendar td {
-    white-space: nowrap;
-    text-align: center;
-    min-width: 32px;
-}
-
-.daterangepicker .calendar-table {
-    border: 1px solid #fff;
-    padding: 4px;
-    border-radius: 4px;
-    background: #fff;
-}
-
-.daterangepicker table {
-    width: 100%;
-    margin: 0;
-}
-
-.daterangepicker td,
-.daterangepicker th {
-    text-align: center;
-    width: 20px;
-    height: 20px;
-    border-radius: 4px;
-    border: 1px solid transparent;
-    white-space: nowrap;
-    cursor: pointer;
-}
-
-.daterangepicker td.available:hover,
-.daterangepicker th.available:hover {
-    background-color: #eee;
-    border-color: transparent;
-    color: inherit;
-}
-
-.daterangepicker td.week,
-.daterangepicker th.week {
-    font-size: 80%;
-    color: #ccc;
-}
-
-.daterangepicker td.off,
-.daterangepicker td.off.in-range,
-.daterangepicker td.off.start-date,
-.daterangepicker td.off.end-date {
-    background-color: #fff;
-    border-color: transparent;
-    color: #999;
-}
-
-.daterangepicker td.in-range {
-    background-color: #ebf4f8;
-    border-color: transparent;
-    color: #000;
-    border-radius: 0;
-}
-
-.daterangepicker td.start-date {
-    border-radius: 4px 0 0 4px;
-}
-
-.daterangepicker td.end-date {
-    border-radius: 0 4px 4px 0;
-}
-
-.daterangepicker td.start-date.end-date {
-    border-radius: 4px;
-}
-
-.daterangepicker td.active,
-.daterangepicker td.active:hover {
-    background-color: #357ebd;
-    border-color: transparent;
-    color: #fff;
-}
-
-.daterangepicker th.month {
-    width: auto;
-}
-
-.daterangepicker td.disabled,
-.daterangepicker option.disabled {
-    color: #999;
-    cursor: not-allowed;
-    text-decoration: line-through;
-}
-
-.daterangepicker select.monthselect,
-.daterangepicker select.yearselect {
-    font-size: 12px;
-    padding: 1px;
-    height: auto;
-    margin: 0;
-    cursor: default;
-}
-
-.daterangepicker select.monthselect {
-    margin-right: 2%;
-    width: 56%;
-}
-
-.daterangepicker select.yearselect {
-    width: 40%;
-}
-
-.daterangepicker select.hourselect,
-.daterangepicker select.minuteselect,
-.daterangepicker select.secondselect,
-.daterangepicker select.ampmselect {
-    width: 50px;
-    margin-bottom: 0;
-}
-
-.daterangepicker .input-mini {
-    border: 1px solid #ccc;
-    border-radius: 4px;
-    color: #555;
-    height: 30px;
-    line-height: 30px;
-    display: block;
-    vertical-align: middle;
-    margin: 0 0 5px 0;
-    padding: 0 6px 0 28px;
-    width: 100%;
-}
-
-.daterangepicker .input-mini.active {
-    border: 1px solid #08c;
-    border-radius: 4px;
-}
-
-.daterangepicker .daterangepicker_input {
-    position: relative;
-}
-
-.daterangepicker .daterangepicker_input i {
-    position: absolute;
-    left: 8px;
-    top: 8px;
-}
-
-.daterangepicker.rtl .input-mini {
-    padding-right: 28px;
-    padding-left: 6px;
-}
-
-.daterangepicker.rtl .daterangepicker_input i {
-    left: auto;
-    right: 8px;
-}
-
-.daterangepicker .calendar-time {
-    text-align: center;
-    margin: 5px auto;
-    line-height: 30px;
-    position: relative;
-    padding-left: 28px;
-}
-
-.daterangepicker .calendar-time select.disabled {
-    color: #ccc;
-    cursor: not-allowed;
-}
-
-.ranges {
-    font-size: 11px;
-    float: none;
-    margin: 4px;
-    text-align: left;
-}
-
-.ranges ul {
-    list-style: none;
-    margin: 0 auto;
-    padding: 0;
-    width: 100%;
-}
-
-.ranges li {
-    font-size: 13px;
-    background: #f5f5f5;
-    border: 1px solid #f5f5f5;
-    border-radius: 4px;
-    color: #08c;
-    padding: 3px 12px;
-    margin-bottom: 8px;
-    cursor: pointer;
-}
-
-.ranges li:hover {
-    background: #08c;
-    border: 1px solid #08c;
-    color: #fff;
-}
-
-.ranges li.active {
-    background: #08c;
-    border: 1px solid #08c;
-    color: #fff;
-}
-
-
-/*  Larger Screen Styling */
-
-@media (min-width: 564px) {
-    .daterangepicker {
-        width: auto;
-    }
-    .daterangepicker .ranges ul {
-        width: 160px;
-    }
-    .daterangepicker.single .ranges ul {
-        width: 100%;
-    }
-    .daterangepicker.single .calendar.left {
-        clear: none;
-    }
-    .daterangepicker.single.ltr .ranges,
-    .daterangepicker.single.ltr .calendar {
-        float: left;
-    }
-    .daterangepicker.single.rtl .ranges,
-    .daterangepicker.single.rtl .calendar {
-        float: right;
-    }
-    .daterangepicker.ltr {
-        direction: ltr;
-        text-align: left;
-    }
-    .daterangepicker.ltr .calendar.left {
-        clear: left;
-        margin-right: 0;
-    }
-    .daterangepicker.ltr .calendar.left .calendar-table {
-        border-right: none;
-        border-top-right-radius: 0;
-        border-bottom-right-radius: 0;
-    }
-    .daterangepicker.ltr .calendar.right {
-        margin-left: 0;
-    }
-    .daterangepicker.ltr .calendar.right .calendar-table {
-        border-left: none;
-        border-top-left-radius: 0;
-        border-bottom-left-radius: 0;
-    }
-    .daterangepicker.ltr .left .daterangepicker_input {
-        padding-right: 12px;
-    }
-    .daterangepicker.ltr .calendar.left .calendar-table {
-        padding-right: 12px;
-    }
-    .daterangepicker.ltr .ranges,
-    .daterangepicker.ltr .calendar {
-        float: left;
-    }
-    .daterangepicker.rtl {
-        direction: rtl;
-        text-align: right;
-    }
-    .daterangepicker.rtl .calendar.left {
-        clear: right;
-        margin-left: 0;
-    }
-    .daterangepicker.rtl .calendar.left .calendar-table {
-        border-left: none;
-        border-top-left-radius: 0;
-        border-bottom-left-radius: 0;
-    }
-    .daterangepicker.rtl .calendar.right {
-        margin-right: 0;
-    }
-    .daterangepicker.rtl .calendar.right .calendar-table {
-        border-right: none;
-        border-top-right-radius: 0;
-        border-bottom-right-radius: 0;
-    }
-    .daterangepicker.rtl .left .daterangepicker_input {
-        padding-left: 12px;
-    }
-    .daterangepicker.rtl .calendar.left .calendar-table {
-        padding-left: 12px;
-    }
-    .daterangepicker.rtl .ranges,
-    .daterangepicker.rtl .calendar {
-        text-align: right;
-        float: right;
-    }
-}
-
-@media (min-width: 730px) {
-    .daterangepicker .ranges {
-        width: auto;
-    }
-    .daterangepicker.ltr .ranges {
-        float: left;
-    }
-    .daterangepicker.rtl .ranges {
-        float: right;
-    }
-    .daterangepicker .calendar.left {
-        clear: none !important;
-    }
-}
\ No newline at end of file


[42/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/WorldMapGenerator.min.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/WorldMapGenerator.min.js b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/WorldMapGenerator.min.js
deleted file mode 100644
index 0b54091..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/js/WorldMapGenerator.min.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @version: 1.0.1
- * @author: Keval Bhatt 
- * @copyright: Copyright (c) 2015 Keval Bhatt. All rights reserved.
- * @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
- * @website: http://kevalbhatt.github.io/WorldMapGenerator/
- */
-"use strict";!function(e,n){if("function"==typeof define&&define.amd)define(["moment","jquery"],function(o,t){e.worldMapTime={},n(o,t,e.worldMapTime)});else{if("undefined"==typeof e.moment){var o=!1;console.log("Day light feature requires moment.js")}else if(!e.moment.tz)throw new Error("moment-timezone dependency not found");if("undefined"==e.jQuery&&"undefined"==e.Zepto&&"undefined"==e.ender&&"undefined"==e.$)throw new Error("jQuery dependnecy not found");var t=e.worldMapTime={};n(e.moment||o,e.jQuery||e.Zepto||e.ender||e.$,t)}}(this,function(e,n,o){function t(e){return this.each(function(){var o=n(this),t=n.extend({},a.DEFAULTS,o.data(),"object"==typeof e&&e);o.data("WorldMapGenerator",new a(o,t)),o.trigger("map:loaded")})}var i=function(e,o){for(var t=[],i=(a.timeZoneValue.filter(function(i){return i[e]===o?(t.push(n.extend(!0,{},i)),i):void 0}),0);i<t.length;i++)delete t[i].points,delete t[i].pin;return t};o.getSystemTimezone=function(){var e=(new Date).toString().split("(")[1]
 .slice(0,-1);return i("zoneName",e)},o.getZoneName=function(e){return i("zoneName",e).zoneName},o.getTimeZoneString=function(e){return i("zoneName",e).timezone},o.getTimeZoneObject=function(e){return i("zoneName",e)};var a=function(e,n){this.$el=e,this.generateMap(n)};a.VERSION="1.0.1",a.DEFAULTS={width:500,height:250,hoverColor:"#5A5A5A",selectedColor:"#496A84",mapColor:"#BBB",defaultCss:!0,localStore:!0,quickLink:[{IST:"IST",EAT:"EAT"}],selectBox:!0,showHoverText:!0,dayLightSaving:"function"==typeof e?!0:!1},a.prototype={constructor:a,setValue:function(e,n){this.$el.find("svg polygon").attr("data-selected","false");var o=this.$el.find("svg polygon[data-"+(n?n:"timezone")+'="'+e+'"]');if(o&&o.length){o.attr("data-selected","true"),this.$el.find('select option[value="'+(n?o.attr("data-timeZone"):e)+'"]').prop("selected",!0),this.$el.find(".quickLink span").removeClass("active");this.$el.find('.quickLink span[data-select="'+e+'"]');this.$el.find('.quickLink span[data-select="'+e+'"]'
 ).addClass("active"),this.$el.find('.quickLink span[data-select="'+o.attr("data-zonename")+'"]').addClass("active")}},getValue:function(){var e=[];return this.$el.find('svg polygon[data-selected="true"]').map(function(o,t){e.push(n(t).data())}),e},generateMap:function(n){var o=[],t=[],i=[],s=[],m=a.timeZoneValue;for(var r in m)o.push(this.genrateElement("polygon",{"data-timezone":m[r].timezone,"data-country":m[r].country,"data-pin":m[r].pin,"data-offset":m[r].offset,points:m[r].points,"data-zonename":n.dayLightSaving?e().tz(m[r].timezone).zoneName():m[r].zoneName},!1,!0)),t.push(this.genrateElement("option",{value:m[r].timezone},m[r].timezone+" ("+(n.dayLightSaving?e().tz(m[r].timezone).zoneName():m[r].zoneName)+")"));if(n.selectBox){var f=this.genrateElement("select",{"class":"btn btn-default dropdown-toggle"},t);s.push(f)}if(n.quickLink.length>0){for(var r in n.quickLink[0])i.push(this.genrateElement("span",{"data-select":n.quickLink[0][r]},r));var p=this.genrateElement("div",{"cl
 ass":"quickLink"},i);s.push(p)}var z=this.genrateElement("svg",{"class":"timezone-map",viewBox:"0 0 "+n.width+" "+n.height},o,!0);if(s.length>0){var c=this.genrateElement("div",{"class":"Cbox"},s);this.$el.append(c)}if(this.$el.append(z),n.showHoverText){var u=this.genrateElement("span",{"class":"hoverZone"});this.$el.append(u)}n.defaultCss&&this.createCss(n),this.bindEvent(n)},bindEvent:function(){var e=this;this.$el.on("mouseenter","svg polygon",function(o){var t=n(this).data();n('.timezone-map polygon[data-zonename="'+t.zonename+'"]').attr("class","active"),e.$el.find(".hoverZone").text(t.timezone+" ("+t.zonename+")")}),this.$el.on("mouseleave","svg polygon",function(o){n(".timezone-map polygon").attr("class",""),e.$el.find(".hoverZone").text("")}),this.$el.on("click","svg polygon",function(){e.setValue(n(this).attr("data-timezone")),e.$el.trigger("map:clicked")}),this.$el.on("change","select",function(){e.setValue(n(this).val()),e.$el.trigger("map:clicked")}),this.$el.on("click"
 ,".quickLink span",function(){var o=n(this).data().select;o.search("/")>0?e.setValue(o,"timezone"):e.setValue(o,"zonename"),e.$el.trigger("map:clicked")})},genrateElement:function(e,n,o,t){if(t)var i=document.createElementNS("http://www.w3.org/2000/svg",e);else var i=document.createElement(e);if(n)for(var a in n)i.setAttribute(a,n[a]);if(o)if(o instanceof Array)for(var s in o)i.appendChild(o[s]);else"string"==typeof o?i.innerHTML=o:i.appendChild(o);return i},createCss:function(e){var n=document.createElement("style");n.type="text/css",n.innerHTML='.timezone-map polygon[data-selected="true"] {fill: '+e.selectedColor+"}.timezone-map polygon { fill: "+e.mapColor+";}.timezone-map polygon.active {fill: "+e.hoverColor+";}.timezone-map polygon:hover { cursor: pointer;}.Cbox .quickLink{width: 52%;float: right;padding-bottom: 11px;overflow-x: auto; white-space: nowrap;overflow-y: hidden;}.Cbox .quickLink span:hover {color:#FFF;background-color: #496A84;  cursor: pointer;}.Cbox select{width: 
 45%;float: left;height: 27px; padding: 0px 0px 0px 10px;}.Cbox .quickLink span.active {color: #FFF; background-color: #496A84;}.Cbox .quickLink span{ font-weight: 300; border-radius: 3px; color: #000; background-color: #FFF; border: solid 1px #CCC;margin-left: 10px;font-size: 9px;padding: 4px 6px 4px 6px;}",document.getElementsByTagName("head")[0].appendChild(n)}},n.fn.WorldMapGenerator=t,a.timeZoneValue=[{timezone:"Africa/Abidjan",country:"CI",pin:"244,118",offset:0,points:"241,118,240,119,240,117,238,116,238,115,239,114,239,113,239,113,239,111,241,110,241,111,243,111,244,112,246,111,247,113,245,116,246,118,241,118",zoneName:"GMT"},{timezone:"Africa/Accra",country:"GH",pin:"250,117",offset:0,points:"251,117,247,118,246,118,246,118,246,116,247,114,246,110,250,110,251,113,251,116,252,116,251,117",zoneName:"GMT"},{timezone:"Africa/Addis_Ababa",country:"ET",pin:"304,112",offset:3,points:"313,118,311,118,308,120,307,119,305,120,300,119,299,116,296,114,296,113,297,113,298,110,299,110,300
 ,107,300,107,301,105,302,105,303,104,303,105,307,105,309,108,308,110,310,110,309,110,310,112,317,114,313,118",zoneName:"EAT"},{timezone:"Africa/Algiers",country:"DZ",pin:"254,74",offset:1,points:"263,83,264,86,264,88,263,89,264,91,266,91,267,92,258,98,255,99,254,97,252,97,250,95,238,87,238,85,239,85,243,83,243,82,245,82,245,81,246,81,246,80,248,80,249,80,248,79,248,77,247,76,254,74,262,74,261,74,262,77,260,78,263,81,263,83",zoneName:"CET"},{timezone:"Africa/Asmara",country:"ER",pin:"304,104",offset:3,points:"306,104,310,107,309,108,306,105,303,105,303,104,302,105,301,105,301,101,304,100,305,104,305,103,306,104",zoneName:"EAT"},{timezone:"Africa/Bamako",country:"ML",pin:"239,107",offset:0,points:"244,107,244,108,242,109,242,111,241,111,241,110,240,111,239,110,239,111,238,110,238,110,238,109,237,108,235,108,234,108,234,107,233,105,234,103,235,104,237,103,242,103,241,90,243,90,252,96,252,97,254,97,255,99,256,98,256,101,255,104,249,104,246,105,245,107,244,106,244,107",zoneName:"GMT"},{t
 imezone:"Africa/Bangui",country:"CF",pin:"276,119",offset:1,points:"284,118,283,119,282,118,281,119,277,118,276,119,276,120,273,120,272,122,270,119,270,117,272,115,276,114,276,113,278,112,280,110,281,110,283,111,283,113,284,113,284,113,285,114,288,118,285,118,285,118,284,118",zoneName:"WAT"},{timezone:"Africa/Banjul",country:"GM",pin:"227,106",offset:0,points:"231,106,227,106,229,106,231,106",zoneName:"GMT"},{timezone:"Africa/Bissau",country:"GW",pin:"228,109",offset:0,points:"228,109,228,109,228,109",zoneName:"GMT"},{timezone:"Africa/Blantyre",country:"MW",pin:"299,147",offset:2,points:"298,144,300,146,299,149,298,147,298,145,297,145,295,144,297,142,296,140,297,140,296,138,298,139,299,141,298,142,298,144",zoneName:"CAT"},{timezone:"Africa/Brazzaville",country:"CG",pin:"271,131",offset:1,points:"266,131,267,130,266,128,267,128,268,128,270,128,270,128,270,126,269,125,270,124,269,123,268,123,268,122,272,123,273,120,276,120,275,126,273,128,272,130,270,132,270,131,269,132,268,131,267,13
 2,266,131",zoneName:"WAT"},{timezone:"Africa/Bujumbura",country:"BI",pin:"291,130",offset:2,points:"292,131,291,131,290,129,291,129,292,128,292,128,293,130,292,131",zoneName:"CAT"},{timezone:"Asia/Oral",country:"KZ",pin:"321,54",offset:5,points:"316,55,317,56,318,56,317,55,319,54,320,53,323,53,326,54,326,56,323,58,321,57,319,58,315,58,316,55",zoneName:"ORAT"},{timezone:"Africa/Cairo",country:"EG",pin:"293,83",offset:2,points:"294,94,285,94,284,83,285,81,290,82,293,81,294,81,295,82,298,82,298,84,298,86,296,85,295,83,295,84,300,92,299,92,299,93,297,95,294,94",zoneName:"EET"},{timezone:"Africa/Casablanca",country:"MA",pin:"239,78",offset:0,points:"242,84,240,84,238,85,238,87,232,87,236,84,237,83,236,81,237,80,241,78,242,75,243,75,244,76,246,76,248,77,248,80,246,80,246,81,245,81,245,82,243,82,242,84",zoneName:"WET"},{timezone:"Africa/Ceuta",country:"ES",pin:"243,75",offset:1,points:"243,75,243,75,243,75",zoneName:"CET"},{timezone:"Africa/Conakry",country:"GN",pin:"231,112",offset:0,poin
 ts:"238,114,237,115,236,113,235,114,235,113,234,111,233,111,232,112,231,111,230,110,229,109,231,109,231,107,234,108,235,108,237,108,238,109,238,110,238,110,239,111,239,112,239,113,239,113,239,114,238,114",zoneName:"GMT"},{timezone:"Africa/Dakar",country:"SN",pin:"226,105",offset:0,points:"227,107,229,106,231,106,229,106,227,106,226,105,227,102,230,102,233,105,234,108,229,107,227,108,227,108,227,108,227,107",zoneName:"GMT"},{timezone:"Africa/Dar_es_Salaam",country:"TZ",pin:"305,134",offset:3,points:"306,139,306,139,306,140,302,141,299,141,297,138,293,137,291,134,291,132,293,130,292,129,293,128,292,126,297,126,302,129,302,130,304,131,304,134,305,135,305,137,306,139",zoneName:"EAT"},{timezone:"Asia/Yekaterinburg",country:"RU",pin:"334,46",offset:6,points:"333,53,335,54,335,54,333,55,331,54,329,54,327,55,326,54,326,55,324,53,321,53,322,51,322,50,324,50,325,49,324,48,325,48,324,47,326,47,325,46,326,46,325,44,325,43,324,43,325,42,323,41,322,40,326,40,329,40,332,39,333,35,342,31,341,31,342
 ,31,341,31,341,30,340,29,342,29,342,29,341,29,345,30,346,29,345,28,343,28,344,28,344,27,343,27,345,25,346,24,351,24,350,26,351,27,351,27,351,29,352,30,350,32,346,32,346,33,350,33,354,31,353,30,356,29,357,30,357,31,358,31,361,32,358,31,359,30,358,29,353,29,352,28,353,27,351,26,354,25,354,24,355,25,354,26,355,26,359,27,356,25,358,25,357,25,358,25,362,25,360,26,362,26,362,27,360,28,365,29,365,30,364,31,364,31,364,32,366,32,366,34,367,34,367,35,369,35,369,36,368,37,369,37,367,39,369,40,369,40,364,41,357,40,356,42,353,44,349,44,348,44,348,45,350,46,348,47,348,48,346,48,341,50,335,50,335,51,336,51,335,51,334,52,335,52,333,53",zoneName:"YEKT"},{timezone:"Africa/Djibouti",country:"DJ",pin:"310,109",offset:3,points:"310,109,310,109,310,109",zoneName:"EAT"},{timezone:"Africa/Douala",country:"CM",pin:"263,119",offset:1,points:"270,117,270,119,272,121,272,123,270,122,264,122,263,119,263,120,262,119,262,117,264,116,265,115,266,116,266,115,269,110,270,109,270,107,271,107,271,110,272,111,269,112,2
 72,114,270,117",zoneName:"WAT"},{timezone:"Africa/Freetown",country:"SL",pin:"232,113",offset:0,points:"235,115,234,115,232,114,232,112,233,111,234,111,235,112,235,114,236,114,235,115",zoneName:"GMT"},{timezone:"Africa/Gaborone",country:"BW",pin:"286,159",offset:2,points:"287,158,285,161,282,160,281,162,279,162,279,161,278,159,278,156,279,156,279,150,282,150,283,151,285,150,286,152,289,153,289,155,291,156,287,158",zoneName:"CAT"},{timezone:"Africa/Harare",country:"ZW",pin:"293,150",offset:2,points:"293,156,289,155,289,153,286,152,285,150,288,150,291,147,296,148,295,151,296,153,295,155,293,156",zoneName:"CAT"},{timezone:"Africa/El_Aaiun",country:"EH",pin:"232,87",offset:0,points:"233,89,233,92,232,93,232,95,227,95,226,96,226,95,228,92,228,92,229,91,230,89,231,88,232,87,238,87,238,89,233,89",zoneName:"WET"},{timezone:"Africa/Johannesburg",country:"ZA",pin:"289,161",offset:2,points:"283,172,278,173,276,172,276,173,275,171,275,170,275,169,273,165,274,164,274,165,275,165,278,164,278,159,
 279,161,279,162,280,162,282,160,285,161,288,158,290,156,293,156,294,159,294,161,294,161,293,162,294,163,294,163,294,162,296,162,295,165,289,171,286,172,283,172",zoneName:"SAST"},{timezone:"Africa/Juba",country:"SS",pin:"294,118",offset:3,points:"299,117,299,118,300,118,300,119,298,119,297,120,293,120,291,119,289,119,289,119,287,116,284,113,285,111,286,111,287,112,290,112,292,111,293,111,295,110,295,108,296,108,296,110,297,111,297,113,296,113,296,114,297,115,299,117",zoneName:"EAT"},{timezone:"Africa/Kampala",country:"UG",pin:"295,125",offset:3,points:"293,126,291,127,292,124,293,122,293,122,293,120,297,120,297,119,299,122,297,125,297,126,293,126",zoneName:"EAT"},{timezone:"Africa/Khartoum",country:"SD",pin:"295,103",offset:3,points:"300,107,299,110,298,110,297,112,296,110,296,108,295,108,295,108,295,110,293,111,292,111,290,112,287,112,286,111,285,111,284,113,283,113,283,111,282,110,281,107,280,107,282,103,283,103,283,97,285,97,285,94,294,94,297,95,299,93,301,94,302,96,302,99,304,100
 ,301,101,301,106,300,107,300,107",zoneName:"EAT"},{timezone:"Africa/Kinshasa",country:"CD",pin:"271,131",offset:1,points:"271,131,272,130,273,128,275,126,276,119,277,118,277,118,279,119,283,120,281,120,283,122,281,122,281,123,283,125,282,126,283,126,282,126,284,127,281,128,281,128,281,128,279,128,279,131,278,131,278,135,277,135,277,136,274,136,273,133,267,133,268,131,269,132,270,131,270,132,271,131",zoneName:"WAT"},{timezone:"Africa/Lagos",country:"NG",pin:"255,116",offset:1,points:"261,119,258,119,256,116,254,116,254,112,255,110,255,109,256,106,258,106,260,107,261,106,263,107,265,106,267,107,269,106,270,108,270,109,269,110,266,115,266,116,264,115,262,117,262,118,261,119",zoneName:"WAT"},{timezone:"Africa/Libreville",country:"GA",pin:"263,124",offset:1,points:"269,125,270,126,270,128,267,128,267,128,266,128,267,130,266,131,263,128,262,126,263,126,263,125,264,125,263,124,263,124,266,124,266,122,268,122,268,123,270,123,270,124,269,125",zoneName:"WAT"},{timezone:"Africa/Lome",country:"
 TG",pin:"252,116",offset:0,points:"252,116,251,116,251,113,250,110,251,110,251,111,252,111,253,116,252,116",zoneName:"GMT"},{timezone:"Africa/Kigali",country:"RW",pin:"292,128",offset:2,points:"292,128,291,129,290,129,291,127,292,126,293,128,292,128",zoneName:"CAT"},{timezone:"Africa/Luanda",country:"AO",pin:"268,137",offset:1,points:"281,140,281,141,283,140,283,143,281,143,281,148,283,149,279,150,276,149,269,149,268,149,266,149,267,144,269,142,269,140,268,138,269,137,267,133,273,133,274,136,277,136,277,135,280,135,280,138,281,140",zoneName:"WAT"},{timezone:"Africa/Lubumbashi",country:"CD",pin:"288,141",offset:2,points:"291,132,291,134,293,136,290,137,289,138,290,139,289,141,290,142,291,142,291,144,290,144,288,141,287,142,286,142,285,141,284,141,283,140,281,141,280,135,278,135,277,134,278,133,278,131,279,131,279,128,281,128,281,128,281,128,284,127,282,126,283,126,282,126,283,125,281,123,281,122,283,122,281,120,283,120,281,119,282,118,285,118,285,118,288,118,289,119,291,119,293,120,2
 93,122,293,122,292,124,291,127,290,128,291,132",zoneName:"CAT"},{timezone:"Africa/Lusaka",country:"ZM",pin:"289,146",offset:2,points:"290,147,290,148,287,150,284,149,283,149,281,148,281,143,283,143,283,140,284,141,285,141,286,142,287,142,288,141,290,144,291,144,291,142,290,142,289,141,290,139,289,138,290,137,293,136,296,138,297,140,296,140,297,142,295,144,296,144,292,146,292,147,290,147",zoneName:"CAT"},{timezone:"Africa/Malabo",country:"GQ",pin:"262,120",offset:1,points:"266,123,266,124,263,123,264,122,266,122,266,123",zoneName:"WAT"},{timezone:"Africa/Maputo",country:"MZ",pin:"295,161",offset:2,points:"296,160,295,161,295,162,296,161,296,162,295,162,294,159,293,156,295,155,296,153,295,151,296,148,292,147,292,146,296,144,297,145,298,145,298,146,298,147,299,149,300,146,298,144,298,141,302,141,306,140,306,146,305,148,303,149,300,151,298,152,298,154,299,156,299,158,296,160",zoneName:"CAT"},{timezone:"Africa/Mbabane",country:"SZ",pin:"293,162",offset:2,points:"294,161,295,162,294,163,2
 93,162,294,161,294,161",zoneName:"SAST"},{timezone:"Africa/Mogadishu",country:"SO",pin:"313,122",offset:3,points:"310,125,308,127,307,126,307,121,308,119,312,118,317,114,311,113,309,110,310,109,312,111,321,109,321,111,321,111,321,111,321,112,317,119,310,125",zoneName:"EAT"},{timezone:"Africa/Monrovia",country:"LR",pin:"235,116",offset:0,points:"239,118,240,119,238,119,234,116,236,113,237,113,237,115,238,115,238,114,239,115,238,116,240,117,239,118",zoneName:"GMT"},{timezone:"Africa/Nairobi",country:"KE",pin:"301,127",offset:3,points:"308,127,306,129,304,131,302,130,302,129,297,126,297,125,299,122,297,119,298,119,300,119,305,120,307,119,308,119,307,121,307,126,308,127",zoneName:"EAT"},{timezone:"Africa/Maseru",country:"LS",pin:"288,166",offset:2,points:"289,167,289,167,288,166,290,165,291,166,289,167",zoneName:"SAST"},{timezone:"Africa/Ndjamena",country:"TD",pin:"271,108",offset:1,points:"278,112,276,113,276,114,272,115,269,112,270,111,272,111,271,110,271,107,270,107,269,105,272,102,2
 72,97,271,95,271,93,272,92,283,98,283,103,282,103,280,107,281,107,282,110,280,110,279,112,278,112",zoneName:"WAT"},{timezone:"Africa/Niamey",country:"NE",pin:"253,106",offset:1,points:"256,106,255,108,255,109,254,108,253,108,253,107,251,107,252,106,251,106,250,104,255,104,256,101,256,98,258,98,267,92,270,94,271,93,271,95,272,97,272,102,269,105,269,106,267,107,265,106,263,107,261,106,260,107,258,106,256,106",zoneName:"WAT"},{timezone:"Africa/Nouakchott",country:"MR",pin:"228,100",offset:0,points:"234,103,233,105,230,102,227,102,227,103,228,100,227,98,228,97,227,95,226,96,232,95,232,93,233,92,233,89,238,89,238,87,243,90,241,90,242,103,237,103,235,104,234,103",zoneName:"GMT"},{timezone:"Africa/Ouagadougou",country:"BF",pin:"248,108",offset:0,points:"249,110,246,110,246,112,246,111,243,112,242,111,242,109,244,108,244,106,245,107,247,105,250,104,250,104,251,106,252,106,251,107,253,107,253,109,252,110,249,110",zoneName:"GMT"},{timezone:"Africa/Porto-Novo",country:"BJ",pin:"254,116",offset
 :1,points:"254,114,254,116,252,116,252,112,251,111,252,109,253,109,254,108,255,109,255,110,254,112,254,114",zoneName:"WAT"},{timezone:"Africa/Tunis",country:"TN",pin:"264,74",offset:1,points:"266,80,264,81,264,82,263,83,263,80,261,79,260,78,262,76,261,74,263,73,264,73,264,74,265,74,265,75,266,76,264,78,266,79,266,80",zoneName:"CET"},{timezone:"Africa/Sao_Tome",country:"ST",pin:"259,125",offset:0,points:"260,123,260,123,260,123",zoneName:"GMT"},{timezone:"Africa/Tripoli",country:"LY",pin:"268,79",offset:2,points:"285,88,285,97,283,97,283,98,272,92,270,94,264,91,263,89,264,88,264,86,263,83,264,82,264,81,266,80,266,79,271,80,272,81,276,83,278,82,278,80,281,79,282,80,285,81,284,83,285,88",zoneName:"EET"},{timezone:"Africa/Windhoek",country:"NA",pin:"274,156",offset:2,points:"278,163,278,164,277,165,274,165,274,164,273,165,272,164,271,162,270,156,267,151,266,149,268,149,269,149,276,149,279,150,284,149,285,150,283,151,282,150,279,150,279,156,278,156,278,163",zoneName:"WAST"},{timezone:"Am
 erica/Adak",country:"US",pin:"5,53",offset:-10,points:"7,53,6,53,8,52,7,53",zoneName:"HST"},{timezone:"America/Argentina/Salta",country:"AR",pin:"159,159",offset:-3,points:"162,180,162,182,163,182,160,182,160,183,150,183,150,180,152,179,151,176,152,175,153,177,155,177,155,175,160,175,160,174,162,174,162,180",zoneName:"ART"},{timezone:"America/Argentina/Salta",country:"AR",pin:"159,159",offset:-3,points:"159,156,161,157,161,156,163,156,163,156,163,159,162,161,158,162,157,161,158,160,155,160,155,159,157,158,158,159,158,157,159,159,161,159,161,158,160,158,159,156",zoneName:"ART"},{timezone:"America/Anchorage",country:"US",pin:"42,40",offset:-9,points:"42,42,40,43,39,43,40,42,39,42,40,41,43,41,42,40,42,40,40,40,36,43,37,43,36,44,30,47,30,47,25,48,25,48,27,48,27,47,31,45,31,44,32,43,30,44,30,43,29,44,27,43,25,44,25,37,27,36,26,36,27,35,25,35,25,33,26,33,25,33,25,32,26,33,25,32,25,27,33,26,34,26,33,27,35,26,39,27,39,27,38,27,39,27,51,28,54,28,54,42,54,41,50,42,46,41,47,40,44,40,45,40,43,4
 1,44,41,44,41,44,41,42,42",zoneName:"AKST"},{timezone:"America/Anguilla",country:"AI",pin:"162,100",offset:-4,points:"162,100,162,100,162,100",zoneName:"AST"},{timezone:"America/Antigua",country:"AG",pin:"164,101",offset:-4,points:"164,101,164,101,164,101",zoneName:"AST"},{timezone:"America/Araguaina",country:"BR",pin:"183,135",offset:-3,points:"185,136,185,136,185,138,186,139,185,141,186,141,186,143,184,143,182,143,182,142,181,143,180,143,180,142,180,143,180,140,182,137,182,135,183,134,183,133,183,132,184,133,184,135,185,136",zoneName:"BRT"},{timezone:"America/Argentina/Buenos_Aires",country:"AR",pin:"169,173",offset:-3,points:"167,171,169,172,169,173,171,174,170,175,171,176,169,178,165,179,163,179,164,180,163,180,163,181,164,181,163,182,162,182,162,173,164,173,165,172,167,171",zoneName:"ART"},{timezone:"America/Argentina/Catamarca",country:"AR",pin:"159,165",offset:-3,points:"159,188,157,188,156,189,151,189,151,188,150,187,151,187,150,187,151,186,150,184,160,183,161,184,161,183,16
 2,184,160,184,161,185,159,186,159,188",zoneName:"ART"},{timezone:"America/Argentina/Catamarca",country:"AR",pin:"159,165",offset:-3,points:"160,167,158,164,154,164,155,162,155,160,158,160,157,161,159,162,158,163,159,164,159,164,160,167",zoneName:"ART"},{timezone:"America/Argentina/Cordoba",country:"AR",pin:"161,169",offset:-3,points:"163,173,162,173,162,174,160,174,160,170,159,169,159,168,160,166,159,164,161,161,162,161,163,159,163,156,165,158,170,160,169,163,173,163,174,162,174,161,175,161,175,163,173,164,170,167,169,172,166,171,164,173,163,173",zoneName:"ART"},{timezone:"America/Argentina/Jujuy",country:"AR",pin:"159,159",offset:-3,points:"157,157,158,155,159,156,159,157,160,158,161,158,161,159,160,159,159,159,158,157,158,159,157,158,157,157",zoneName:"ART"},{timezone:"America/Argentina/La_Rioja",country:"AR",pin:"157,166",offset:-3,points:"156,167,154,166,154,165,153,164,154,164,158,164,160,167,159,169,157,169,156,167",zoneName:"ART"},{timezone:"America/Argentina/Mendoza",country
 :"AR",pin:"154,171",offset:-3,points:"152,170,156,170,157,171,157,175,155,175,155,177,153,177,152,175,152,174,153,171,152,170",zoneName:"ART"},{timezone:"America/Argentina/Rio_Gallegos",country:"AR",pin:"154,197",offset:-3,points:"151,189,156,189,157,190,159,191,158,192,154,195,154,197,155,198,150,197,149,197,150,195,148,196,148,195,148,193,150,192,149,191,150,191,151,189",zoneName:"ART"},{timezone:"America/Argentina/San_Juan",country:"AR",pin:"155,169",offset:-3,points:"153,167,154,164,154,165,154,166,156,167,157,169,156,169,156,170,154,169,152,170,152,168,153,167",zoneName:"ART"},{timezone:"America/Argentina/San_Luis",country:"AR",pin:"158,171",offset:-3,points:"159,169,160,170,160,175,157,175,156,169,159,169",zoneName:"ART"},{timezone:"America/Argentina/Tucuman",country:"AR",pin:"159,162",offset:-3,points:"158,161,160,161,160,164,159,164,158,163,159,162,158,161",zoneName:"ART"},{timezone:"America/Aruba",country:"AW",pin:"153,108",offset:-4,points:"153,108,153,108,153,108",zoneNam
 e:"AST"},{timezone:"America/Argentina/Ushuaia",country:"AR",pin:"155,201",offset:-3,points:"155,201,155,198,155,199,155,199,156,200,160,201,158,201,155,201",zoneName:"ART"},{timezone:"America/Asuncion",country:"PY",pin:"170,160",offset:-3,points:"174,161,173,163,169,163,170,160,165,158,163,156,164,152,167,152,169,152,169,156,172,156,173,158,175,158,174,161",zoneName:"PYST"},{timezone:"America/Bahia_Banderas",country:"MX",pin:"104,96",offset:-6,points:"104,96,103,96,104,96",zoneName:"CST"},{timezone:"America/Atikokan",country:"CA",pin:"123,57",offset:-5,points:"125,58,122,58,123,57,124,57,124,58,125,58",zoneName:"EST"},{timezone:"America/Bahia",country:"BR",pin:"197,143",offset:-2,points:"187,146,186,146,186,141,185,141,186,140,187,139,188,140,189,140,189,138,191,138,193,137,194,138,195,137,197,137,198,139,197,140,198,141,196,143,196,147,195,150,194,149,195,147,194,147,193,147,192,146,189,145,189,145,187,146",zoneName:"BRT"},{timezone:"America/Barbados",country:"BB",pin:"167,107",off
 set:-4,points:"167,106,167,107,167,106",zoneName:"AST"},{timezone:"America/Belem",country:"BR",pin:"183,127",offset:-3,points:"179,126,180,125,179,126,180,125,183,125,182,127,180,128,182,127,181,128,183,127,183,126,186,127,185,130,182,132,183,133,182,135,182,137,180,139,177,138,178,138,177,136,178,134,177,132,177,130,178,129,177,127,178,127,177,126,176,123,174,122,174,122,177,122,178,119,180,122,181,123,179,126",zoneName:"BRT"},{timezone:"America/Belize",country:"BZ",pin:"128,101",offset:-6,points:"128,101,128,101,128,101",zoneName:"CST"},{timezone:"America/Blanc-Sablon",country:"CA",pin:"171,54",offset:-4,points:"169,54,167,55,169,54",zoneName:"AST"},{timezone:"America/Boa_Vista",country:"BR",pin:"166,121",offset:-4,points:"167,118,166,119,167,120,167,121,167,122,168,123,168,125,167,125,166,126,165,126,164,127,163,126,163,122,161,122,160,119,163,120,163,119,165,119,166,118,167,118",zoneName:"AMT"},{timezone:"America/Bogota",country:"CO",pin:"147,119",offset:-5,points:"154,126,153,1
 31,152,130,153,129,152,128,150,128,149,128,146,125,142,124,140,123,143,120,142,119,143,117,142,115,143,114,143,113,143,114,143,113,145,112,145,110,148,109,150,108,151,108,149,110,148,112,149,113,149,115,150,115,153,115,154,117,156,117,156,119,157,120,156,121,157,122,157,123,156,122,153,123,153,124,154,124,153,124,154,126",zoneName:"COT"},{timezone:"America/Boise",country:"US",pin:"89,64",offset:-7,points:"96,66,96,67,87,67,87,66,86,66,86,64,87,63,88,62,88,61,89,62,92,62,93,63,96,63,96,66",zoneName:"MST"},{timezone:"America/Cambridge_Bay",country:"CA",pin:"104,29",offset:-7,points:"99,18,100,19,99,19,101,19,100,20,102,19,104,20,103,21,97,21,97,20,99,20,97,20,98,19,97,19,99,18",zoneName:"MST"},{timezone:"America/Cambridge_Bay",country:"CA",pin:"104,29",offset:-7,points:"108,36,97,35,95,34,92,34,81,30,81,28,89,29,92,30,89,31,90,31,97,31,100,32,99,32,101,33,100,32,101,32,101,32,101,32,100,31,103,30,99,30,100,30,103,29,105,31,106,30,109,31,113,31,113,30,115,30,116,30,116,31,117,30,116,31
 ,118,32,117,30,120,30,120,30,120,29,119,30,120,28,116,28,117,27,116,27,116,26,119,25,118,25,120,25,121,26,121,27,123,28,122,27,121,28,122,28,121,28,125,29,123,29,124,29,124,30,125,30,126,29,126,32,108,32,108,36",zoneName:"MST"},{timezone:"America/Cambridge_Bay",country:"CA",pin:"104,29",offset:-7,points:"115,24,116,24,116,25,116,25,114,25,114,26,113,26,107,24,111,24,110,23,115,24",zoneName:"MST"},{timezone:"America/Cambridge_Bay",country:"CA",pin:"104,29",offset:-7,points:"100,23,103,24,105,26,105,26,110,27,110,28,106,28,107,28,107,29,108,28,109,29,107,29,104,29,104,29,102,28,99,30,93,30,92,29,93,29,88,29,87,28,97,28,97,24,99,24,100,26,101,25,100,23,100,23",zoneName:"MST"},{timezone:"America/Campo_Grande",country:"BR",pin:"174,153",offset:-3,points:"176,150,177,151,179,152,179,153,175,158,173,158,172,156,169,156,170,150,172,149,173,150,175,149,175,150,176,150",zoneName:"AMST"},{timezone:"America/Cancun",country:"MX",pin:"129,96",offset:-6,points:"128,95,130,96,128,98,129,98,128,100,
 128,99,127,100,126,100,126,98,128,96,128,95",zoneName:"EST"},{timezone:"America/Caracas",country:"VE",pin:"157,110",offset:-4.5,points:"163,111,165,112,165,113,167,113,166,115,166,115,165,116,165,117,166,118,163,119,163,120,160,119,161,122,162,122,159,124,159,124,158,124,157,123,157,122,156,121,157,120,156,119,156,116,154,117,153,115,150,115,149,112,148,112,149,110,151,109,150,109,151,110,150,111,150,112,151,112,151,112,151,110,153,109,153,108,153,109,155,109,155,110,158,110,160,111,162,110,161,110,164,110,163,110,163,111",zoneName:"VET"},{timezone:"America/Cayenne",country:"GF",pin:"177,118",offset:-3,points:"176,117,178,119,177,122,175,122,175,120,174,118,175,117,176,117",zoneName:"GFT"},{timezone:"America/Cayman",country:"KY",pin:"137,98",offset:-5,points:"139,98,139,98,139,98",zoneName:"EST"},{timezone:"America/Chicago",country:"US",pin:"128,67",offset:-6,points:"128,72,132,74,132,75,131,76,132,80,132,84,130,83,130,83,129,83,129,82,128,83,128,82,128,83,124,83,126,83,125,84,126,8
 4,126,85,125,84,125,85,120,83,118,84,118,84,118,85,116,86,117,85,116,85,116,86,115,86,115,87,114,87,115,87,115,89,112,88,112,87,109,84,107,84,107,85,105,84,104,82,104,81,107,81,107,74,108,74,108,73,109,73,109,70,108,70,108,69,109,69,109,67,110,67,109,64,111,63,110,63,111,62,111,61,109,61,110,60,110,59,106,59,105,57,118,57,118,56,119,57,126,58,122,60,124,60,124,60,128,61,128,62,128,63,129,63,128,66,129,67,130,67,128,68,128,72",zoneName:"CST"},{timezone:"America/Chihuahua",country:"MX",pin:"103,85",offset:-7,points:"106,85,106,86,106,88,105,88,103,88,101,89,98,86,99,86,99,82,100,82,100,81,102,81,104,83,105,84,106,85",zoneName:"MST"},{timezone:"America/Coral_Harbour",country:"",pin:"250,125",offset:-5,points:"131,33,132,34,133,34,136,35,137,36,136,36,139,36,137,37,135,36,131,37,131,36,129,37,130,36,130,34,131,33",zoneName:"EST"},{timezone:"America/Costa_Rica",country:"CR",pin:"133,111",offset:-6,points:"132,112,131,111,131,109,134,110,135,112,135,112,135,114,131,111,132,112",zoneName:"
 CST"},{timezone:"America/Creston",country:"CA",pin:"88,57",offset:-7,points:"89,57,87,57,88,56,89,57",zoneName:"MST"},{timezone:"America/Cuiaba",country:"BR",pin:"172,147",offset:-3,points:"179,146,176,148,176,150,175,150,175,149,173,150,172,149,170,150,169,149,169,148,166,148,166,144,167,142,167,141,165,140,164,137,169,137,169,135,170,137,171,138,180,139,180,141,180,143,179,146",zoneName:"AMST"},{timezone:"America/Curacao",country:"CW",pin:"154,108",offset:-4,points:"154,108,154,108,154,108",zoneName:"AST"},{timezone:"America/Danmarkshavn",country:"GL",pin:"224,18",offset:0,points:"223,15,223,15,224,15,221,16,221,16,220,17,221,17,223,17,224,17,221,17,224,18,225,18,218,18,223,19,220,19,223,20,218,20,219,14,223,15",zoneName:"GMT"},{timezone:"America/Dawson",country:"CA",pin:"56,36",offset:-8,points:"56,36,56,36,56,36",zoneName:"PST"},{timezone:"America/Dawson_Creek",country:"CA",pin:"83,42",offset:-7,points:"83,45,83,50,79,48,78,46,83,45",zoneName:"MST"},{timezone:"America/Denver",co
 untry:"US",pin:"104,70",offset:-7,points:"93,63,92,62,91,62,91,60,89,59,89,57,105,57,106,59,108,59,108,60,110,61,109,61,111,61,111,62,110,63,111,63,109,64,110,67,109,67,109,69,108,69,108,70,109,70,109,73,108,73,108,74,107,74,107,81,104,81,104,82,102,81,99,81,99,76,96,76,95,74,95,74,92,74,92,67,96,67,96,63,93,63",zoneName:"MST"},{timezone:"America/Detroit",country:"US",pin:"135,66",offset:-5,points:"132,67,129,67,130,66,130,64,130,63,131,62,132,63,132,61,134,62,134,62,134,63,133,65,135,64,136,65,134,67,132,67",zoneName:"EST"},{timezone:"America/Detroit",country:"US",pin:"135,66",offset:-5,points:"125,60,127,59,127,60,130,61,132,60,134,61,131,61,130,62,129,61,128,62,129,62,128,61,126,61,125,60",zoneName:"EST"},{timezone:"America/Dominica",country:"DM",pin:"165,104",offset:-4,points:"165,103,165,104,165,103",zoneName:"AST"},{timezone:"America/Edmonton",country:"CA",pin:"92,51",offset:-7,points:"92,57,88,56,88,55,85,53,86,52,86,52,83,51,83,42,97,42,97,51,99,51,97,52,97,57,92,57",zoneNam
 e:"MST"},{timezone:"America/Eirunepe",country:"BR",pin:"153,134",offset:-4,points:"156,138,148,135,148,134,149,132,150,131,153,131,156,138",zoneName:"ACT"},{timezone:"America/El_Salvador",country:"SV",pin:"126,106",offset:-6,points:"126,106,125,106,126,105,128,106,128,107,126,106",zoneName:"CST"},{timezone:"America/Fortaleza",country:"BR",pin:"197,130",offset:-3,points:"201,134,202,135,201,135,199,137,198,136,198,135,197,136,194,135,194,136,192,138,189,138,189,140,187,140,186,139,185,138,185,136,184,135,184,133,182,132,185,130,186,126,187,127,187,127,188,127,188,128,188,130,188,128,189,129,190,128,191,129,194,129,198,132,201,132,201,134",zoneName:"BRT"},{timezone:"America/Glace_Bay",country:"CA",pin:"167,61",offset:-4,points:"167,61,166,61,166,61,167,61",zoneName:"AST"},{timezone:"America/Godthab",country:"GL",pin:"178,36",offset:-3,points:"188,42,187,42,188,41,187,41,188,41,187,41,187,41,186,41,187,40,186,41,187,40,183,41,184,40,183,40,183,40,182,40,183,39,182,39,182,39,181,39,182,
 39,181,39,182,39,180,38,181,37,180,38,180,38,180,37,180,37,179,37,180,37,179,37,180,37,179,37,179,36,178,36,180,36,178,36,180,35,179,35,180,35,181,36,179,34,180,35,178,36,178,35,179,35,177,35,178,34,177,34,180,34,177,34,177,34,176,34,178,33,176,33,180,32,175,33,176,33,175,33,177,33,176,32,177,32,175,32,180,32,175,31,181,31,177,31,178,31,175,31,176,30,178,31,176,30,180,31,179,30,179,30,176,30,179,30,180,29,179,30,179,29,180,29,180,29,180,29,180,29,179,29,180,28,179,28,180,28,174,27,180,27,179,27,179,27,178,26,179,26,177,26,178,26,177,26,179,26,176,26,178,25,176,25,175,25,175,26,173,26,172,25,174,25,173,25,174,25,173,24,174,24,173,23,174,23,172,23,173,22,172,22,172,22,170,22,172,21,168,20,169,20,169,20,161,19,158,15,160,15,160,14,162,14,156,13,162,12,163,13,162,12,165,12,165,12,166,12,165,11,166,11,172,12,167,11,169,11,174,11,176,11,175,12,176,11,181,12,179,11,181,11,179,10,180,10,188,11,189,11,188,11,188,11,188,11,191,11,186,10,195,10,187,10,196,10,196,10,199,10,196,9,202,9,214,9,201
 ,10,215,9,216,10,214,10,220,10,204,11,216,11,213,12,213,12,221,11,220,12,217,13,224,12,223,12,228,11,234,12,229,13,221,13,228,13,221,14,222,14,226,14,225,14,219,14,218,20,223,20,223,21,219,20,220,20,219,20,222,21,219,21,224,22,219,22,219,22,219,22,220,23,220,22,222,22,221,23,219,23,217,23,219,23,214,22,216,23,212,23,213,23,212,23,212,24,215,24,212,24,216,24,213,24,215,24,215,25,216,25,216,26,210,25,212,25,210,26,215,26,211,26,212,26,209,27,213,27,210,28,212,28,215,27,219,28,213,30,208,30,206,30,205,30,206,31,204,31,202,33,198,33,198,34,197,33,198,33,197,33,197,33,197,33,197,34,195,34,194,34,195,34,194,35,193,35,194,36,192,36,194,36,194,37,192,36,193,37,192,37,192,37,191,37,192,38,190,38,191,38,190,38,192,39,190,39,191,39,190,40,191,40,189,40,191,40,190,41,190,41,189,41,190,42,189,41,188,42",
-zoneName:"WGT"},{timezone:"America/Goose_Bay",country:"CA",pin:"166,51",offset:-4,points:"171,53,161,53,161,52,162,52,162,52,161,52,160,53,158,53,158,51,156,52,157,51,156,50,157,49,156,49,157,49,157,48,159,49,161,49,162,48,161,48,161,47,162,47,161,47,162,45,160,44,162,43,160,43,161,43,161,42,160,42,160,41,162,43,161,43,163,43,162,44,163,44,162,44,164,45,163,45,165,46,163,46,164,46,164,47,166,48,166,48,166,49,167,48,167,48,168,48,167,49,168,48,168,49,170,49,167,50,169,50,166,51,170,50,171,50,170,51,171,53",zoneName:"AST"},{timezone:"America/Grand_Turk",country:"TC",pin:"151,95",offset:-5,points:"151,95,151,95,151,95",zoneName:"AST"},{timezone:"America/Grenada",country:"GD",pin:"164,108",offset:-4,points:"165,108,165,108,165,108",zoneName:"AST"},{timezone:"America/Guadeloupe",country:"GP",pin:"165,102",offset:-4,points:"165,102,165,102,165,102",zoneName:"AST"},{timezone:"America/Guatemala",country:"GT",pin:"124,105",offset:-6,points:"125,106,123,105,122,104,123,103,124,103,123,101,124
 ,101,124,100,126,100,126,103,127,103,125,106",zoneName:"CST"},{timezone:"America/Guayaquil",country:"EC",pin:"139,128",offset:-5,points:"141,130,140,132,139,131,138,131,139,128,139,129,137,128,139,124,141,123,142,124,144,124,145,125,145,125,146,126,141,130",zoneName:"ECT"},{timezone:"America/Guyana",country:"GY",pin:"169,116",offset:-4,points:"170,116,171,118,170,118,169,119,172,122,170,122,168,123,167,122,167,121,167,120,166,119,167,118,165,117,165,116,166,115,166,115,167,114,167,113,169,115,169,116,169,115,170,116",zoneName:"GYT"},{timezone:"America/Halifax",country:"CA",pin:"162,63",offset:-4,points:"161,63,162,62,160,62,161,61,163,62,164,61,165,62,161,63,159,65,158,64,158,63,160,62,161,63",zoneName:"AST"},{timezone:"America/Havana",country:"CU",pin:"136,93",offset:-5,points:"146,96,147,97,142,97,143,96,141,96,141,95,136,94,136,94,137,94,136,93,132,95,134,93,138,93,146,96",zoneName:"CST"},{timezone:"America/Hermosillo",country:"MX",pin:"96,85",offset:-7,points:"90,81,91,80,96,81,
 99,81,99,86,98,86,99,88,98,88,96,87,97,86,94,85,93,82,90,81",zoneName:"MST"},{timezone:"America/Indiana/Petersburg",country:"US",pin:"129,72",offset:-5,points:"129,72,129,72,129,72",zoneName:"EST"},{timezone:"America/Indiana/Tell_City",country:"US",pin:"129,72",offset:-6,points:"130,72,130,72,130,72",zoneName:"CST"},{timezone:"America/Indiana/Vevay",country:"US",pin:"132,71",offset:-5,points:"132,71,132,71,132,71",zoneName:"EST"},{timezone:"America/Indiana/Indianapolis",country:"US",pin:"130,70",offset:-5,points:"132,71,130,72,130,71,128,71,128,68,130,68,130,67,132,67,132,70,132,71",zoneName:"EST"},{timezone:"America/Indiana/Knox",country:"US",pin:"130,68",offset:-6,points:"130,67,129,68,130,67",zoneName:"CST"},{timezone:"America/Indiana/Marengo",country:"US",pin:"130,72",offset:-5,points:"130,72,130,72,130,72,130,72",zoneName:"EST"},{timezone:"America/Indiana/Vincennes",country:"US",pin:"128,71",offset:-5,points:"128,72,128,71,130,71,130,72,128,72",zoneName:"EST"},{timezone:"Americ
 a/Indiana/Winamac",country:"US",pin:"130,68",offset:-5,points:"130,68,129,68,130,68",zoneName:"EST"},{timezone:"America/Inuvik",country:"CA",pin:"64,30",offset:-7,points:"65,30,64,30,65,30",zoneName:"MST"},{timezone:"America/Iqaluit",country:"CA",pin:"155,36",offset:-5,points:"139,20,138,20,140,20,138,21,140,21,132,21,132,20,139,20",zoneName:"EST"},{timezone:"America/Iqaluit",country:"CA",pin:"155,36",offset:-5,points:"139,10,145,10,144,11,145,10,142,10,156,10,155,10,156,10,156,12,154,12,156,12,152,12,156,12,156,13,152,13,153,14,149,14,152,14,151,14,147,14,146,14,148,15,142,15,147,15,142,15,146,16,143,16,145,16,145,17,141,17,142,17,141,18,136,18,142,18,141,19,137,19,138,19,135,18,136,19,132,19,132,18,134,18,134,17,136,17,132,17,132,15,136,16,134,16,137,15,132,15,134,15,132,15,132,14,138,14,139,14,134,13,144,13,140,13,143,12,140,12,140,12,139,13,132,13,132,12,136,12,132,12,132,11,133,11,132,10,140,11,135,11,138,10,137,10,141,10,138,10,139,10",zoneName:"EST"},{timezone:"America/Iqalui
 t",country:"CA",pin:"155,36",offset:-5,points:"132,30,133,29,132,29,132,28,136,28,134,28,137,29,136,29,137,30,135,30,137,31,134,33,133,32,132,32,132,30",zoneName:"EST"},{timezone:"America/Iqaluit",country:"CA",pin:"155,36",offset:-5,points:"144,24,140,24,138,23,142,23,144,24",zoneName:"EST"},{timezone:"America/Iqaluit",country:"CA",pin:"155,36",offset:-5,points:"133,23,137,23,139,24,138,24,138,24,138,25,139,24,142,25,140,25,142,25,141,24,142,24,146,24,146,25,144,25,147,25,145,26,146,25,146,26,148,25,147,26,148,26,147,26,149,26,148,26,149,25,151,26,149,27,150,27,149,27,152,26,150,27,151,27,151,28,153,27,152,27,155,27,152,28,155,28,153,28,156,27,155,28,153,28,156,29,154,29,155,29,154,29,155,29,155,29,156,29,154,29,156,30,156,33,155,33,156,34,156,37,154,36,156,37,156,39,151,37,150,37,151,37,149,36,148,36,148,35,148,36,148,35,147,36,147,35,146,35,146,35,147,36,142,36,141,35,142,34,148,34,147,33,150,32,148,30,148,30,147,30,148,30,145,29,144,30,145,29,143,28,143,28,143,28,143,28,142,28,14
 2,27,140,27,139,27,140,27,141,28,136,28,138,28,135,27,137,28,132,28,132,26,133,25,132,25,132,25,133,25,132,25,132,24,133,24,132,23,133,24,132,23,133,23",zoneName:"EST"},{timezone:"America/La_Paz",country:"BO",pin:"155,148",offset:-4,points:"164,154,163,156,161,156,161,157,160,156,158,155,157,157,156,157,155,153,155,152,153,149,154,148,154,147,155,142,153,140,155,140,157,139,159,138,160,142,166,144,166,148,169,148,169,149,170,150,170,153,168,152,164,152,164,154",zoneName:"BOT"},{timezone:"America/Jamaica",country:"JM",pin:"143,100",offset:-5,points:"144,100,143,100,141,100,143,99,144,100",zoneName:"EST"},{timezone:"America/Juneau",country:"US",pin:"63,44",offset:-9,points:"59,43,62,42,66,45,65,46,65,45,64,45,65,45,64,45,65,45,64,44,64,44,63,44,62,42,62,42,62,44,61,44,61,43,61,43,61,43,60,43,61,44,60,44,58,43,59,43",zoneName:"AKST"},{timezone:"America/Kentucky/Louisville",country:"US",pin:"131,72",offset:-5,points:"130,72,130,72,131,71,130,72",zoneName:"EST"},{timezone:"America/Kentuc
 ky/Monticello",country:"US",pin:"132,74",offset:-5,points:"132,74,133,74,132,74,132,74",zoneName:"EST"},{timezone:"America/Kralendijk",country:"BQ",pin:"155,108",offset:-4,points:"162,101,162,100,162,101",zoneName:"AST"},{timezone:"America/Lima",country:"PE",pin:"143,142",offset:-5,points:"153,149,153,150,152,150,151,149,146,146,144,145,144,144,139,135,137,133,138,133,137,131,138,130,139,130,138,131,140,132,141,130,145,127,146,126,145,125,146,125,149,128,150,128,153,129,152,130,153,131,152,131,149,132,148,134,147,135,149,137,148,138,150,138,150,139,152,138,152,140,153,140,155,142,154,147,154,148,153,149",zoneName:"PET"},{timezone:"America/Managua",country:"NI",pin:"130,108",offset:-6,points:"132,110,131,110,128,107,129,107,129,106,131,106,132,104,135,104,134,110,132,110",zoneName:"CST"},{timezone:"America/Manaus",country:"BR",pin:"167,129",offset:-4,points:"167,125,168,125,169,127,172,128,169,134,169,135,169,137,164,137,163,136,162,136,161,137,160,138,158,138,157,139,156,138,153,131
 ,154,127,153,124,154,124,153,124,153,123,156,122,157,123,158,124,159,124,159,124,161,122,162,122,163,124,163,126,164,127,165,126,166,126,167,125",zoneName:"AMT"},{timezone:"America/Los_Angeles",country:"US",pin:"86,78",offset:-8,points:"91,62,88,62,88,61,88,62,87,63,86,64,86,66,87,66,87,67,92,67,92,75,91,75,91,77,91,79,91,79,87,80,85,78,82,77,82,76,80,73,80,72,79,72,78,71,77,69,78,67,77,66,78,61,78,61,78,61,78,60,78,60,78,60,78,60,77,58,80,58,79,59,80,58,80,59,79,60,80,59,80,57,89,57,89,59,91,60,91,62",zoneName:"PST"},{timezone:"America/Lower_Princes",country:"SX",pin:"162,100",offset:-4,points:"162,100,162,100,162,100",zoneName:"AST"},{timezone:"America/Maceio",country:"BR",pin:"200,138",offset:-3,points:"199,140,198,141,197,140,198,139,197,138,198,137,199,138,201,137,199,140",zoneName:"BRT"},{timezone:"America/Marigot",country:"MF",pin:"162,100",offset:-4,points:"162,100,162,100,162,100",zoneName:"AST"},{timezone:"America/Martinique",country:"MQ",pin:"165,105",offset:-4,points:"16
 5,104,165,104,165,104",zoneName:"AST"},{timezone:"America/Matamoros",country:"MX",pin:"115,89",offset:-6,points:"113,89,112,89,109,84,108,84,107,85,107,85,107,84,109,84,112,87,112,88,115,89,115,90,113,89",zoneName:"CST"},{timezone:"America/Mazatlan",country:"MX",pin:"102,93",offset:-7,points:"104,93,106,95,105,96,104,96,104,95,103,94,100,90,98,89,98,88,100,88,101,90,104,93",zoneName:"MST"},{timezone:"America/Mazatlan",country:"MX",pin:"102,93",offset:-7,points:"91,86,93,86,98,93,97,93,94,91,94,89,93,88,92,88,90,86,92,87,91,86",zoneName:"MST"},{timezone:"America/Menominee",country:"US",pin:"128,62",offset:-6,points:"128,62,128,61,124,60,128,61,129,62,128,62",zoneName:"CST"},{timezone:"America/Mexico_City",country:"MX",pin:"112,98",offset:-6,points:"119,103,118,102,116,103,114,103,104,98,103,97,104,96,105,96,106,95,105,94,106,92,108,91,107,90,110,91,111,93,114,94,117,99,119,100,122,99,122,100,124,100,124,101,123,101,124,102,123,103,122,105,119,102,119,103",zoneName:"CST"},{timezone:"A
 merica/Merida",country:"MX",pin:"126,96",offset:-6,points:"124,96,125,95,128,95,128,96,126,98,126,100,122,100,122,99,123,99,124,96",zoneName:"CST"},{timezone:"America/Metlakatla",country:"US",pin:"67,48",offset:-8,points:"67,48,67,48,67,48",zoneName:"PST"},{timezone:"America/Miquelon",country:"PM",pin:"172,60",offset:-3,points:"172,60,172,60,172,60",zoneName:"PMST"},{timezone:"America/Moncton",country:"CA",pin:"160,61",offset:-4,points:"157,58,160,59,159,60,160,60,160,61,161,61,158,62,156,62,156,62,156,60,154,59,155,58,157,58",zoneName:"AST"},{timezone:"America/Monterrey",country:"MX",pin:"111,89",offset:-6,points:"107,90,108,91,106,92,105,94,104,94,101,90,103,88,105,88,106,88,106,86,106,85,108,84,109,84,112,89,115,89,115,90,115,90,114,90,114,94,111,93,110,91,107,90",zoneName:"CST"},{timezone:"America/Montevideo",country:"UY",pin:"172,173",offset:-2,points:"172,173,170,173,169,172,170,167,171,167,172,168,173,168,176,170,175,173,172,173",zoneName:"UYT"},{timezone:"America/Montreal",c
 ountry:"",pin:"250,125",offset:-5,points:"146,63,147,62,144,62,141,61,139,59,140,53,140,54,140,53,141,52,140,51,140,50,139,49,142,48,144,47,143,44,141,44,143,42,142,41,143,41,142,41,142,40,141,41,142,40,142,39,142,38,146,39,148,38,150,39,150,39,151,39,150,40,151,40,153,40,153,42,151,42,153,42,153,43,154,43,152,44,154,43,155,44,154,45,156,44,155,44,156,44,156,45,158,43,158,44,158,43,159,43,159,43,160,43,159,42,160,41,160,42,161,42,161,43,160,43,162,43,160,44,162,45,161,47,162,47,161,47,161,48,162,48,161,49,159,49,157,48,157,49,156,49,157,49,156,50,157,51,156,52,158,51,158,53,160,53,161,52,162,52,162,52,161,52,161,53,171,53,171,53,168,54,167,55,164,55,158,55,158,55,156,57,155,57,152,60,149,61,157,57,160,57,161,58,159,58,155,58,153,60,152,62,151,63,146,63",zoneName:"EST"},{timezone:"America/Montserrat",country:"MS",pin:"164,102",offset:-4,points:"164,102,164,102,164,102",zoneName:"AST"},{timezone:"America/Nassau",country:"BS",pin:"143,90",offset:-5,points:"143,90,143,90,143,90",zoneNam
 e:"EST"},{timezone:"America/New_York",country:"US",pin:"147,68",offset:-5,points:"132,82,131,76,132,75,133,74,130,72,132,71,132,71,132,67,136,67,140,66,140,65,144,65,144,64,146,63,152,62,154,59,156,60,156,62,157,63,155,64,154,63,154,64,152,64,151,66,152,67,153,67,153,67,151,67,151,67,151,68,148,68,146,71,145,70,146,72,145,73,145,72,144,71,145,70,144,70,144,72,143,72,144,72,143,72,144,74,143,73,144,74,145,75,144,74,145,75,143,75,145,76,143,76,144,76,143,76,144,76,144,77,138,80,137,82,139,88,138,90,137,90,136,88,136,88,136,88,135,87,136,86,135,86,135,84,133,83,131,84,132,82",zoneName:"EST"},{timezone:"America/Nipigon",country:"CA",pin:"127,57",offset:-5,points:"127,57,127,57,127,57",zoneName:"EST"},{timezone:"America/Nome",country:"US",pin:"20,35",offset:-9,points:"25,32,23,32,22,31,18,30,19,29,23,29,25,27,25,32",zoneName:"AKST"},{timezone:"America/Nome",country:"US",pin:"20,35",offset:-9,points:"25,35,24,36,19,35,18,35,19,34,16,34,23,33,22,33,25,33,25,35",zoneName:"AKST"},{timezone:"
 America/Nome",country:"US",pin:"20,35",offset:-9,points:"25,42,22,42,20,41,21,40,19,39,22,37,23,37,25,37,25,42",zoneName:"AKST"},{timezone:"America/Noronha",country:"BR",pin:"205,130",offset:-2,points:"205,130,205,130,205,130",zoneName:"FNT"},{timezone:"America/North_Dakota/Beulah",country:"US",pin:"109,59",offset:-6,points:"109,59,108,60,108,59,109,59",zoneName:"CST"},{timezone:"America/North_Dakota/Center",country:"US",pin:"109,60",offset:-6,points:"110,60,109,60,110,60",zoneName:"CST"},{timezone:"America/North_Dakota/New_Salem",country:"US",pin:"109,60",offset:-6,points:"110,60,110,60,110,61,108,60,110,60",zoneName:"CST"},{timezone:"America/Ojinaga",country:"MX",pin:"105,84",offset:-7,points:"102,81,106,85,105,84,104,83,102,81,99,82,100,81,100,81,102,81",zoneName:"MST"},{timezone:"America/Panama",country:"PA",pin:"140,113",offset:-5,points:"142,113,143,114,142,115,141,114,141,113,142,114,140,112,138,114,139,115,138,115,138,115,137,114,137,114,136,113,135,114,135,113,135,112,137,1
 13,140,112,142,113",zoneName:"EST"},{timezone:"America/Pangnirtung",country:"CA",pin:"159,33",offset:-5,points:"156,10,160,10,165,11,156,12,156,10",zoneName:"EST"},{timezone:"America/Pangnirtung",country:"CA",pin:"159,33",offset:-5,points:"156,34,157,34,157,35,157,35,160,35,159,36,160,36,160,36,160,37,159,36,160,38,159,37,159,38,158,37,158,37,156,37,156,34",zoneName:"EST"},{timezone:"America/Pangnirtung",country:"CA",pin:"159,33",offset:-5,points:"156,30,157,30,156,30,158,30,157,31,158,31,158,31,158,31,160,31,159,31,160,31,161,31,160,31,161,32,160,32,162,31,161,32,163,32,163,32,164,32,165,32,163,33,164,33,162,33,163,33,163,33,163,34,162,33,162,35,159,34,161,33,159,33,159,33,158,33,156,32,157,33,156,33,157,33,156,33,156,30",zoneName:"EST"},{timezone:"America/Paramaribo",country:"SR",pin:"173,117",offset:-3,points:"175,118,175,120,174,122,172,121,172,122,171,122,169,119,170,118,171,118,171,117,175,117,175,118",zoneName:"SRT"},{timezone:"America/Phoenix",country:"US",pin:"94,79",offset
 :-7,points:"99,80,99,81,96,81,91,80,91,77,91,75,91,75,92,74,95,74,95,74,96,76,99,76,99,80",zoneName:"MST"},{timezone:"America/Port-au-Prince",country:"HT",pin:"150,99",offset:-5,points:"148,99,149,99,148,99",zoneName:"EST"},{timezone:"America/Port_of_Spain",country:"TT",pin:"165,110",offset:-4,points:"164,110,164,110,164,110",zoneName:"AST"},{timezone:"America/Porto_Velho",country:"BR",pin:"161,137",offset:-4,points:"167,142,166,144,164,144,160,142,159,138,157,139,158,138,160,138,161,137,162,136,163,136,165,137,165,140,167,140,167,142",zoneName:"AMT"},{timezone:"America/Puerto_Rico",country:"PR",pin:"158,99",offset:-4,points:"158,99,158,99,158,99",zoneName:"AST"},{timezone:"America/Rainy_River",country:"CA",pin:"119,57",offset:-6,points:"119,57,119,57,119,57",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"132,12,125,12,125,12,129,12,122,12,132,11,132,12",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6
 ,points:"113,19,114,19,114,20,115,20,111,21,110,20,111,20,108,20,108,20,109,20,108,19,111,20,111,19,112,19,110,19,113,19",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"125,16,126,16,122,16,121,16,123,16,119,15,124,15,118,15,117,15,119,14,116,14,119,14,118,14,119,14,116,13,120,13,117,13,121,12,119,12,120,12,127,14,128,13,128,14,129,14,129,15,132,15,128,16,128,15,127,16,128,16,127,16,127,16,125,16",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"132,21,122,21,122,21,122,20,121,19,118,19,118,19,115,18,117,18,121,18,120,19,124,19,124,19,123,19,126,19,123,19,126,20,132,20,132,21",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"132,19,125,19,130,18,127,17,129,17,132,18,132,19",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"132,28,127,27,126,26,129,26,125,26,125,25,126,25,125,24,128,23,132,23,130,24,130,24,130
 ,25,132,26,129,26,132,26,132,28",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"125,36,124,37,119,36,123,37,124,37,122,38,122,38,120,39,120,39,119,40,120,40,118,42,108,42,108,32,126,32,126,29,128,30,128,30,127,31,129,32,130,31,131,30,132,30,132,33,130,33,131,33,129,34,123,33,129,35,128,36,125,36",zoneName:"CST"},{timezone:"America/Rankin_Inlet",country:"CA",pin:"122,38",offset:-6,points:"118,22,120,22,125,22,122,24,119,24,120,24,120,25,117,24,117,23,119,23,118,22",zoneName:"CST"},{timezone:"America/Recife",country:"BR",pin:"202,136",offset:-3,points:"196,136,197,136,198,135,199,137,201,135,202,136,201,137,199,138,198,137,197,138,195,137,194,138,193,137,194,136,194,135,196,136",zoneName:"BRT"},{timezone:"America/Regina",country:"CA",pin:"105,55",offset:-6,points:"104,57,97,57,97,52,99,51,97,51,97,42,108,42,108,48,108,49,109,50,109,57,104,57",zoneName:"CST"},{timezone:"America/Resolute",country:"CA",pin:"118,21",offset:-6,points:"118,20,12
 0,20,120,21,116,21,118,20",zoneName:"CST"},{timezone:"America/Rio_Branco",country:"BR",pin:"156,139",offset:-4,points:"148,135,152,136,157,139,155,140,152,140,152,138,150,139,150,138,148,138,149,137,147,135,148,135",zoneName:"ACT"},{timezone:"America/Santa_Isabel",country:"MX",pin:"90,83",offset:-8,points:"91,80,91,83,93,86,91,86,92,85,89,84,88,81,88,80,91,80",zoneName:"PST"},{timezone:"America/Santarem",country:"BR",pin:"174,128",offset:-3,points:"176,125,177,126,178,127,177,127,178,129,177,130,177,132,178,134,177,136,178,138,177,138,171,138,170,137,169,134,172,128,168,126,168,123,170,122,172,122,172,121,174,121,174,123,176,123,176,125",zoneName:"BRT"},{timezone:"America/Santiago",country:"CL",pin:"152,171",offset:-3,points:"152,199,154,198,155,198,155,201,150,201,153,201,152,200,154,201,154,201,154,201,153,200,154,199,152,199,152,199",zoneName:"CLT"},{timezone:"America/Santiago",country:"CL",pin:"152,171",offset:-3,points:"148,193,148,195,148,196,150,195,149,197,150,197,155,198,15
 2,198,151,200,149,199,150,199,151,198,151,198,149,198,149,199,148,199,149,198,148,198,148,197,149,198,149,197,149,198,149,198,149,198,149,197,148,196,148,197,149,197,148,197,149,197,148,197,148,197,148,197,147,197,148,196,147,196,148,195,148,195,147,196,147,195,146,195,147,195,147,194,148,194,147,193,147,194,147,193,147,193,147,193,147,192,146,192,148,192,148,191,146,191,147,191,147,191,147,191,147,190,145,190,146,189,147,189,147,190,148,188,148,189,148,188,149,188,148,188,149,187,148,186,149,184,149,184,149,184,149,183,149,183,150,183,148,183,147,182,148,180,148,177,148,177,151,172,151,165,152,162,152,157,153,155,152,150,154,149,155,152,155,153,156,157,157,157,156,158,155,159,155,162,153,164,153,167,152,168,153,173,152,174,152,175,151,176,152,179,150,180,150,183,150,184,151,186,150,187,151,187,150,187,151,188,150,188,150,190,149,191,149,193,148,193",zoneName:"CLT"},{timezone:"America/Santo_Domingo",country:"DO",pin:"153,99",offset:-4,points:"151,100,150,100,150,99,150,97,153,98,154
 ,98,153,98,155,99,155,100,151,100",zoneName:"AST"},{timezone:"America/Scoresbysund",country:"GL",pin:"219,27",offset:-1,points:"216,25,219,25,218,26,220,25,219,26,220,26,220,26,219,26,220,26,219,26,220,27,217,27,216,26,216,25",zoneName:"EGT"},{timezone:"America/Sao_Paulo",country:"BR",pin:"185,158",offset:-2,points:"181,166,179,168,178,170,180,167,179,167,179,168,176,172,176,171,176,170,175,170,173,168,172,168,171,167,170,167,173,164,175,162,175,161,174,161,175,159,176,157,178,155,179,152,177,151,176,149,179,146,180,142,181,143,182,142,182,143,184,143,186,143,186,146,189,145,195,147,194,149,195,150,195,152,193,155,193,156,192,157,188,157,183,160,182,160,183,161,182,161,183,161,182,164,181,166",zoneName:"BRST"},{timezone:"America/Sitka",country:"US",pin:"62,46",offset:-9,points:"66,45,67,46,65,46,66,45,66,45",zoneName:"AKST"},{timezone:"America/St_Barthelemy",country:"BL",pin:"163,100",offset:-4,points:"163,100,163,100,163,100",zoneName:"AST"},{timezone:"America/St_Johns",country:"CA
 ",pin:"177,59",offset:-3.5,points:"173,53,172,54,173,54,172,54,171,56,172,55,173,56,172,56,173,56,173,57,174,56,176,57,175,58,176,57,175,58,175,59,177,58,176,59,177,59,176,60,176,60,176,59,175,60,175,59,175,58,173,60,174,59,172,59,173,59,173,58,171,59,168,59,169,58,168,58,169,57,170,57,169,57,170,56,169,56,170,55,173,53",zoneName:"NST"},{timezone:"America/Thule",country:"GL",pin:"154,19",offset:-4,points:"161,19,155,19,153,19,156,18,151,18,158,17,153,17,153,17,149,16,158,15,161,19",zoneName:"AST"},{timezone:"America/St_Kitts",country:"KN",pin:"163,101",offset:-4,points:"163,101,163,101,163,101",zoneName:"AST"},{timezone:"America/St_Lucia",country:"LC",pin:"165,106",offset:-4,points:"165,105,165,106,165,105",zoneName:"AST"},{timezone:"America/St_Thomas",country:"VI",pin:"160,100",offset:-4,points:"160,99,160,99,160,99",zoneName:"AST"},{timezone:"America/St_Vincent",country:"VC",pin:"165,107",offset:-4,points:"165,106,165,107,165,106",zoneName:"AST"},{timezone:"America/Swift_Current",
 country:"CA",pin:"100,55",offset:-6,points:"100,55,100,55,100,55",zoneName:"CST"},{timezone:"America/Tegucigalpa",country:"HN",pin:"129,105",offset:-6,points:"129,106,129,107,128,106,126,105,126,104,128,103,131,103,133,103,135,104,132,104,131,106,129,106",zoneName:"CST"},{timezone:"America/Thunder_Bay",country:"CA",pin:"126,58",offset:-5,points:"126,58,126,58,126,58",zoneName:"EST"},{timezone:"America/Tijuana",country:"MX",pin:"87,80",offset:-8,points:"87,80,87,80,87,80",zoneName:"PST"},{timezone:"America/Toronto",country:"CA",pin:"140,64",offset:-5,points:"146,62,147,62,143,64,142,63,143,64,143,64,140,64,139,65,140,65,135,67,137,65,137,63,137,62,138,63,139,63,138,61,137,61,136,62,133,61,133,60,132,58,131,58,130,57,127,57,128,58,126,58,126,58,124,58,124,57,125,56,125,55,124,53,125,53,125,52,126,52,127,51,126,50,125,50,125,47,127,46,128,47,132,48,136,48,136,51,138,54,140,54,140,60,141,61,144,62,146,62",zoneName:"EST"},{timezone:"America/Tortola",country:"VG",pin:"160,99",offset:-4,po
 ints:"160,99,160,99,160,99",zoneName:"AST"},{timezone:"America/Vancouver",country:"CA",pin:"79,57",offset:-8,points:"72,54,76,55,79,58,76,57,77,57,76,57,75,56,74,56,75,56,72,55,73,55,72,54",zoneName:"PST"},{timezone:"America/Vancouver",country:"CA",pin:"79,57",offset:-8,points:"63,43,62,42,59,43,57,42,83,42,83,45,78,46,79,48,86,52,86,52,85,53,88,55,88,57,79,57,81,56,81,57,80,56,81,57,80,57,80,56,79,57,79,56,79,56,79,55,79,56,78,56,78,56,78,56,78,55,77,56,77,55,77,55,76,55,77,54,76,54,76,55,75,55,76,54,75,55,74,54,75,54,73,54,74,54,73,54,74,53,73,53,72,53,73,52,74,53,74,52,75,52,73,52,73,52,73,52,72,53,72,52,72,52,72,52,71,51,73,51,71,51,71,50,70,51,69,50,70,50,69,49,69,50,69,49,70,48,69,49,70,48,70,48,69,49,69,47,67,46,65,44,63,43",zoneName:"PST"},{timezone:"America/Whitehorse",country:"CA",pin:"62,41",offset:-8,points:"57,29,60,29,61,32,64,32,64,33,66,33,66,35,69,36,70,37,69,37,70,37,70,39,73,40,74,41,77,40,78,42,54,41,54,28,57,29",zoneName:"PST"},{timezone:"America/Winnipeg",count
 ry:"CA",pin:"115,56",offset:-6,points:"122,58,119,57,118,56,118,57,109,57,109,50,108,49,108,48,108,42,118,42,118,43,121,43,122,45,121,46,124,45,126,46,125,47,125,50,126,50,127,51,126,52,125,52,125,53,124,53,125,55,125,56,123,57,122,58",zoneName:"CST"},{timezone:"America/Yakutat",country:"US",pin:"56,42",offset:-9,points:"56,42,56,42,56,42",zoneName:"AKST"},{timezone:"America/Yellowknife",country:"CA",pin:"91,38",offset:-7,points:"83,31,92,34,95,34,97,35,108,36,108,42,78,42,77,40,74,41,73,40,70,39,70,37,69,37,70,37,69,36,66,35,66,33,64,33,64,32,61,32,60,29,62,30,61,29,63,28,64,28,64,29,70,28,67,28,67,29,68,28,68,29,69,28,73,27,72,27,76,29,77,28,78,28,77,29,79,28,82,28,81,28,81,30,83,31",zoneName:"MST"},{timezone:"America/Yellowknife",country:"CA",pin:"91,38",offset:-7,points:"88,17,90,18,88,18,89,18,87,19,86,19,86,18,83,20,79,19,84,18,88,17",zoneName:"MST"},{timezone:"America/Yellowknife",country:"CA",pin:"91,38",offset:-7,points:"84,22,87,22,90,23,85,24,83,25,83,26,79,26,75,25,78,23
 ,77,22,81,21,84,22",zoneName:"MST"},{timezone:"America/Yellowknife",country:"CA",pin:"91,38",offset:-7,points:"91,19,97,20,97,21,93,22,91,21,96,20,87,20,90,20,87,20,91,20,88,20,91,19",zoneName:"MST"},{timezone:"America/Yellowknife",country:"CA",pin:"91,38",offset:-7,points:"90,23,92,23,91,24,93,24,96,24,95,25,97,24,97,28,87,28,87,28,87,28,95,27,87,27,86,26,90,26,86,26,87,25,85,25,86,25,86,24,90,23",zoneName:"MST"},{timezone:"Antarctica/Macquarie",country:"AU",pin:"471,201",offset:11,points:"471,201,471,201,471,201",zoneName:"MIST"},{timezone:"Arctic/Longyearbyen",country:"SJ",pin:"272,17",offset:1,points:"275,14,275,14,275,15,275,14,280,16,276,16,276,17,274,18,274,19,273,19,272,18,273,18,269,17,273,17,270,17,274,17,269,17,269,17,274,16,273,16,273,16,271,16,271,15,270,16,271,16,268,16,267,16,268,16,266,15,267,15,266,15,267,15,266,15,265,15,269,14,267,14,269,15,269,15,270,14,273,15,272,14,275,14",zoneName:"CET"},{timezone:"Arctic/Longyearbyen",country:"SJ",pin:"272,17",offset:1,points
 :"285,14,288,14,283,15,275,14,277,14,276,13,278,14,277,13,281,14,282,13,282,13,282,14,285,14",zoneName:"CET"},{timezone:"Asia/Aden",country:"YE",pin:"313,107",offset:3,points:"313,107,310,107,309,104,310,101,314,102,314,103,318,100,322,99,324,102,323,102,322,103,313,107",zoneName:"AST"},{timezone:"Asia/Almaty",country:"KZ",pin:"357,65",offset:6,points:"348,66,345,68,343,68,342,66,344,65,345,64,344,63,343,61,337,60,339,58,339,58,340,57,342,57,345,55,344,54,344,52,342,52,342,51,342,51,342,51,342,49,346,48,348,48,349,50,352,50,352,51,357,49,356,50,358,51,361,55,362,54,363,55,366,54,368,56,371,56,371,57,369,58,369,60,365,59,364,62,365,62,363,62,361,63,362,63,362,65,361,66,359,65,355,66,353,65,352,65,352,66,350,66,348,66",zoneName:"ALMT"},{timezone:"Asia/Amman",country:"JO",pin:"300,81",offset:2,points:"302,82,303,83,302,83,300,84,299,84,299,80,301,80,304,79,305,80,301,81,302,82",zoneName:"EET"},{timezone:"Asia/Anadyr",country:"RU",pin:"497,35",offset:12,points:"10,32,14,33,13,34,12,34,1
 2,34,10,34,11,34,11,35,9,35,11,36,10,36,6,35,6,34,2,34,2,33,2,33,0,33,1,34,0,35,0,29,7,31,8,33,9,33,7,32,10,32",zoneName:"ANAT"},{timezone:"Asia/Anadyr",country:"RU",pin:"497,35",offset:12,points:"497,35,493,35,498,36,499,38,499,39,496,38,492,39,491,38,487,39,484,37,486,37,484,36,473,35,471,34,471,33,470,33,471,32,469,31,470,30,476,30,476,29,475,28,476,28,483,28,486,30,488,29,486,28,487,28,495,28,500,29,500,35,498,35,497,35",zoneName:"ANAT"},{timezone:"Asia/Aqtau",country:"KZ",pin:"320,63",offset:5,points:"328,63,328,68,325,66,323,67,323,66,321,65,320,63,322,63,321,63,321,62,324,62,323,60,321,60,319,61,317,60,318,60,318,59,315,58,319,58,325,57,325,57,326,57,327,60,329,61,329,62,328,63",zoneName:"AQTT"},{timezone:"Asia/Aqtobe",country:"KZ",pin:"329,55",offset:5,points:"326,55,326,54,327,55,328,54,331,54,333,55,335,54,336,54,337,56,337,57,339,58,337,60,335,59,331,62,329,62,328,60,326,59,326,57,324,57,326,56,326,55",zoneName:"AQTT"},{timezone:"Asia/Ashgabat",country:"TM",pin:"331,72",o
 ffset:5,points:"340,74,340,75,337,76,335,75,335,74,334,74,332,73,329,72,325,73,325,71,324,71,324,70,325,70,323,69,324,68,323,67,325,66,327,68,329,68,329,67,331,66,331,66,331,66,331,66,333,66,334,68,336,68,337,70,343,72,342,73,341,73,340,74",zoneName:"TMT"},{timezone:"Asia/Baghdad",country:"IQ",pin:"312,79",offset:3,points:"315,83,315,85,312,84,308,82,304,80,304,79,307,77,307,74,309,73,312,73,313,75,314,75,313,78,314,79,316,80,316,81,316,82,317,83,315,83",zoneName:"AST"},{timezone:"Asia/Bahrain",country:"BH",pin:"320,88",offset:3,points:"320,89,320,89,320,89",zoneName:"AST"},{timezone:"Asia/Bangkok",country:"TH",pin:"390,106",offset:7,points:"391,116,392,117,390,117,390,116,389,116,389,116,386,113,387,110,388,109,388,106,386,104,387,102,385,99,386,99,386,97,387,98,389,97,390,97,390,98,391,98,390,101,392,100,393,100,393,99,394,100,397,103,396,105,394,105,392,106,393,109,391,107,390,107,390,106,389,107,388,112,389,112,390,115,391,116",zoneName:"ICT"},{timezone:"Asia/Baku",country:"AZ",
 pin:"319,69",offset:4,points:"314,67,316,68,317,67,320,69,319,69,318,72,317,71,317,70,317,70,315,71,315,70,313,69,314,69,313,68,315,68,314,67",zoneName:"AZT"},{timezone:"Asia/Chongqing",country:"",pin:"250,125",offset:8,points:"403,95,402,95,401,95,401,95,399,95,398,94,398,93,396,93,394,94,394,93,393,94,392,93,391,94,391,96,391,96,390,95,389,95,389,94,388,94,388,93,387,93,387,91,385,92,386,90,387,89,387,87,386,86,387,86,387,85,388,84,387,81,385,80,386,79,385,78,387,78,388,77,387,77,388,77,387,75,388,73,388,72,389,72,385,71,386,70,384,70,385,68,386,68,385,66,390,66,396,67,399,66,403,66,404,65,407,67,409,66,408,67,408,69,406,69,404,70,403,72,404,73,403,77,404,79,402,79,403,80,402,80,403,82,401,83,401,84,402,85,402,87,401,87,402,87,402,88,402,89,405,89,404,90,405,90,406,91,405,93,406,92,407,95,405,95,405,94,405,94,404,93,403,95",zoneName:"CST"},{timezone:"Asia/Beirut",country:"LB",pin:"299,78",offset:2,points:"300,79,299,79,300,77,301,77,301,77,300,79",zoneName:"EET"},{timezone:"Asia/B
 ishkek",country:"KG",pin:"354,65",offset:6,points:"354,69,353,69,353,70,350,71,346,70,352,68,350,67,349,68,347,67,349,66,348,66,349,66,352,66,352,65,353,65,355,66,359,65,361,66,359,68,357,68,356,69,354,69",zoneName:"KGT"},{timezone:"Asia/Brunei",country:"BN",pin:"410,118",offset:8,points:"410,118,410,119,410,118",zoneName:"BNT"},{timezone:"Asia/Choibalsan",country:"MN",pin:"409,58",offset:8,points:"412,61,411,62,409,62,408,63,406,62,405,60,405,59,407,59,406,56,409,55,412,56,410,58,411,59,415,58,416,59,416,61,415,60,412,61",zoneName:"CHOT"},{timezone:"Asia/Colombo",country:"LK",pin:"361,115",offset:5.5,points:"363,116,362,117,361,116,361,114,361,111,363,113,364,115,363,116",zoneName:"IST"},{timezone:"Asia/Damascus",country:"SY",pin:"300,78",offset:2,points:"302,80,301,80,299,80,299,79,301,77,300,76,301,75,301,74,304,74,309,73,307,75,307,77,302,80",zoneName:"EET"},{timezone:"Asia/Dhaka",country:"BD",pin:"376,92",offset:6,points:"375,94,375,94,375,95,374,95,373,91,372,91,374,90,372,89,
 373,88,374,89,375,89,375,90,378,90,377,92,377,93,378,92,379,95,378,95,378,96,378,94,378,94,377,94,377,93,376,93,376,92,375,92,376,93,374,92,375,92,376,94,375,94",zoneName:"BDT"},{timezone:"Asia/Dili",country:"TL",pin:"424,137",offset:9,points:"424,137,427,137,424,138,424,137",zoneName:"TLT"},{timezone:"Asia/Dubai",country:"AE",pin:"327,90",offset:4,points:"328,91,328,92,327,92,327,94,323,93,322,92,325,91,328,89,328,90,328,91",zoneName:"GST"},{timezone:"Asia/Dushanbe",country:"TJ",pin:"346,71",offset:5,points:"346,73,344,73,345,72,344,70,345,70,346,69,345,69,348,68,348,68,348,69,349,69,347,69,346,70,349,70,350,71,352,70,352,71,354,72,354,73,352,73,350,74,349,72,349,72,346,73",zoneName:"TJT"},{timezone:"Asia/Gaza",country:"PS",pin:"298,81",offset:2,points:"298,81,298,82,298,81",zoneName:"EET"},{timezone:"Asia/Harbin",country:"",pin:"250,125",offset:8,points:"424,68,423,65,423,66,421,65,421,63,420,64,420,62,419,61,420,61,421,60,422,60,420,59,423,58,423,58,425,54,424,53,421,54,420,53,42
 3,51,425,52,427,56,431,57,432,59,437,58,437,59,435,62,433,62,432,63,432,65,431,66,431,66,430,65,430,66,428,67,428,68,426,67,424,68",zoneName:"CST"},{timezone:"Asia/Hebron",country:"PS",pin:"299,81",offset:2,points:"299,81,299,80,299,81,298,81,299,81",zoneName:"EET"},{timezone:"Asia/Ho_Chi_Minh",country:"VN",pin:"398,110",offset:7,points:"397,112,395,113,396,111,395,111,396,110,397,110,397,109,399,108,400,104,396,99,394,98,396,97,395,97,395,96,393,96,393,95,392,94,392,93,394,94,396,93,398,93,398,94,400,95,398,96,398,96,397,99,401,104,402,107,401,109,398,110,398,112,397,112",zoneName:"ICT"},{timezone:"Asia/Hong_Kong",country:"HK",pin:"409,94",offset:8,points:"409,94,408,94,409,94",zoneName:"HKT"},{timezone:"Asia/Hovd",country:"MN",pin:"377,58",offset:7,points:"387,63,386,64,386,66,384,66,383,63,376,62,376,60,375,59,372,58,372,57,378,54,381,55,381,56,385,56,385,56,386,57,388,57,388,58,386,58,387,59,385,60,387,61,387,63",zoneName:"HOVT"},{timezone:"Asia/Irkutsk",country:"RU",pin:"395,52
 ",offset:9,points:"411,46,410,46,411,48,412,48,412,49,408,51,409,51,408,52,406,52,404,53,401,53,400,55,401,55,400,56,396,55,393,55,392,55,392,54,387,52,388,51,384,50,383,50,384,49,384,48,386,47,385,46,386,45,389,44,390,45,390,44,392,43,392,43,395,44,396,43,396,42,397,42,396,41,395,41,398,39,398,38,397,37,398,37,398,36,400,36,401,36,400,37,402,37,402,38,402,38,403,38,402,39,402,40,404,40,402,42,402,43,406,42,406,43,411,41,413,42,413,42,415,43,415,44,413,44,413,45,414,45,413,46,411,46",
-zoneName:"IRKT"},{timezone:"Asia/Jakarta",country:"ID",pin:"398,134",offset:7,points:"406,135,407,136,409,136,409,137,400,136,396,134,397,133,400,134,401,134,403,135,404,134,406,135",zoneName:"WIB"},{timezone:"Asia/Jakarta",country:"ID",pin:"398,134",offset:7,points:"397,131,397,133,396,133,396,133,395,133,395,133,392,131,389,125,388,125,387,123,383,119,382,117,385,118,386,119,393,124,393,125,394,125,394,126,395,126,395,129,397,128,397,129,397,131",zoneName:"WIB"},{timezone:"Asia/Jayapura",country:"ID",pin:"445,129",offset:9,points:"438,131,437,131,437,130,436,130,436,129,435,130,435,131,434,130,433,129,435,128,436,129,436,128,434,128,433,127,432,127,432,126,434,125,436,126,436,128,438,130,441,127,446,129,446,138,444,136,445,136,443,136,443,136,443,135,444,135,442,135,443,135,441,132,438,131",zoneName:"WIT"},{timezone:"Asia/Kabul",country:"AF",pin:"346,77",offset:4.5,points:"338,84,335,84,336,82,335,81,334,79,335,78,334,78,335,76,337,76,341,73,344,74,346,73,349,72,349,72,350,74,352,
 73,354,73,349,75,350,76,349,78,347,78,348,79,347,79,346,81,345,81,344,81,343,82,342,84,338,84",zoneName:"AFT"},{timezone:"Asia/Jerusalem",country:"IL",pin:"299,81",offset:2,points:"298,81,299,79,300,79,299,80,299,80,299,81,298,81,299,81,298,84,298,82,298,81",zoneName:"IST"},{timezone:"Asia/Kamchatka",country:"RU",pin:"470,51",offset:12,points:"476,45,477,47,475,47,475,48,475,49,472,50,472,51,470,51,470,52,468,54,466,47,468,45,468,45,471,44,475,41,477,41,477,40,478,40,478,39,480,38,477,38,476,39,477,39,476,39,475,39,476,38,475,37,476,37,476,36,477,36,477,35,484,36,486,37,484,37,486,38,491,38,492,39,489,40,487,42,484,41,481,42,481,41,479,42,477,42,477,43,475,44,477,45,476,45",zoneName:"PETT"},{timezone:"Asia/Karachi",country:"PK",pin:"343,90",offset:5,points:"348,86,347,88,348,89,349,91,348,91,346,91,344,92,344,91,343,91,342,89,336,90,336,89,338,88,338,87,337,87,337,86,336,85,335,84,339,84,342,84,343,82,346,81,347,79,348,79,347,78,349,78,349,77,350,76,349,75,350,74,354,74,355,74,356,7
 5,358,76,355,77,353,77,353,79,355,80,354,81,354,82,350,86,348,86",zoneName:"PKT"},{timezone:"Asia/Kashgar",country:"",pin:"250,125",offset:6,points:"361,83,359,82,359,80,360,80,360,79,359,78,360,77,359,77,358,76,356,75,355,74,354,74,354,73,354,72,352,71,352,70,354,69,356,69,357,68,358,68,362,67,361,66,362,65,362,63,361,63,363,62,365,63,363,63,368,65,365,64,366,65,365,65,365,67,364,68,364,70,365,70,364,74,365,75,364,76,365,76,364,77,366,80,365,81,365,81,366,81,366,82,365,82,363,83,361,83",zoneName:"XJT"},{timezone:"Asia/Kathmandu",country:"NP",pin:"368,87",offset:5.8,points:"368,86,372,86,372,88,369,88,367,87,366,87,361,85,362,84,363,83,368,85,368,86",zoneName:"NPT"},{timezone:"Asia/Kolkata",country:"IN",pin:"373,94",offset:5.5,points:"362,106,361,109,361,111,360,111,360,112,360,112,359,112,358,113,357,114,356,113,352,103,351,97,351,96,351,95,352,95,351,95,351,94,351,94,350,96,348,96,346,94,347,94,348,93,346,93,345,92,346,92,345,92,346,91,349,91,347,87,348,86,350,86,354,82,354,81,355
 ,80,353,79,353,77,355,77,358,76,359,77,360,77,359,78,360,79,360,80,359,80,359,82,363,83,361,85,369,88,372,88,372,86,373,86,374,88,378,88,378,87,377,86,379,86,381,84,384,84,384,85,384,85,384,86,385,86,385,87,385,87,384,87,382,88,381,92,380,92,379,95,378,92,377,93,377,92,378,90,375,90,375,89,374,89,373,88,372,89,374,90,372,91,373,91,374,95,373,94,373,95,372,94,371,95,371,96,370,97,368,98,364,101,364,102,362,103,362,106",zoneName:"IST"},{timezone:"Asia/Krasnoyarsk",country:"RU",pin:"379,47",offset:8,points:"396,16,388,17,392,15,393,15,392,16,394,15,396,16,396,16",zoneName:"KRAT"},{timezone:"Asia/Krasnoyarsk",country:"RU",pin:"379,47",offset:8,points:"385,14,386,14,384,14,389,14,389,15,388,15,389,15,382,15,380,14,379,14,385,14",zoneName:"KRAT"},{timezone:"Asia/Krasnoyarsk",country:"RU",pin:"379,47",offset:8,points:"383,12,386,13,384,13,385,14,380,14,377,14,383,12",zoneName:"KRAT"},{timezone:"Asia/Krasnoyarsk",country:"RU",pin:"379,47",offset:8,points:"384,51,388,51,386,54,386,55,385,56,
 381,56,381,55,378,54,374,56,374,55,375,55,374,54,372,53,374,52,373,51,374,50,373,49,373,49,373,48,374,47,373,46,374,45,372,44,373,43,373,43,371,42,367,42,368,41,367,40,369,40,367,39,369,37,368,37,369,36,369,35,367,35,367,34,366,34,366,32,364,32,364,31,364,31,365,30,365,29,360,28,362,27,360,26,362,25,359,24,366,25,364,26,364,27,364,27,364,27,364,28,367,28,365,27,366,27,366,26,366,26,362,24,362,24,362,23,362,23,362,23,371,22,371,22,369,22,371,22,369,21,371,21,372,21,371,21,374,20,381,20,379,19,380,19,388,19,387,19,390,19,391,18,395,17,398,18,395,18,399,18,398,19,404,18,406,19,405,19,408,20,408,20,406,20,408,20,407,21,400,23,397,23,399,23,396,24,404,23,404,23,403,23,404,24,404,24,406,25,406,26,407,26,403,27,402,28,397,29,398,29,398,31,397,32,397,32,398,34,399,34,397,35,400,36,398,36,398,37,397,37,398,38,398,39,396,40,395,41,397,41,397,42,396,42,396,43,396,43,393,43,390,45,390,45,389,44,386,45,385,46,386,47,384,48,384,49,383,50,384,51",zoneName:"KRAT"},{timezone:"Asia/Kuala_Lumpur",coun
 try:"MY",pin:"391,121",offset:8,points:"394,121,395,123,394,123,391,121,390,119,389,116,390,116,390,117,392,116,393,117,394,121",zoneName:"MYT"},{timezone:"Asia/Kuching",country:"MY",pin:"403,123",offset:8,points:"410,118,412,115,412,116,413,115,413,116,414,117,416,118,414,118,415,119,411,119,409,123,406,123,405,124,404,124,402,123,402,122,405,123,404,123,405,121,407,121,408,119,409,119,410,118,410,119,410,118",zoneName:"MYT"},{timezone:"Asia/Kuwait",country:"KW",pin:"317,84",offset:3,points:"317,83,317,83,317,83",zoneName:"AST"},{timezone:"Asia/Macau",country:"MO",pin:"408,94",offset:8,points:"408,94,408,94,408,94",zoneName:"CST"},{timezone:"Asia/Magadan",country:"RU",pin:"459,42",offset:12,points:"464,42,464,42,466,43,460,43,460,43,462,43,458,42,457,43,455,43,454,43,454,42,452,41,454,40,453,39,450,39,445,38,444,37,445,36,444,35,445,34,444,33,445,32,443,32,446,31,446,30,447,30,447,29,448,29,447,28,448,28,446,28,450,25,457,25,458,25,457,25,461,27,470,26,472,27,472,28,474,28,474,29,4
 76,28,476,29,476,30,470,30,469,31,471,32,470,33,471,33,471,34,477,35,477,36,476,36,476,37,475,37,476,38,475,39,476,39,472,41,473,40,472,40,473,39,469,39,464,42",zoneName:"MAGT"},{timezone:"Asia/Makassar",country:"ID",pin:"416,132",offset:8,points:"412,128,411,130,409,131,409,129,411,127,410,125,410,125,410,124,408,124,410,122,411,119,413,119,414,120,413,120,413,120,413,120,414,122,414,122,415,124,414,123,413,126,411,127,412,128",zoneName:"WITA"},{timezone:"Asia/Makassar",country:"ID",pin:"416,132",offset:8,points:"420,129,420,130,421,131,419,132,418,130,418,129,417,129,417,133,416,133,416,131,416,130,415,130,415,129,416,127,416,126,417,124,418,123,422,124,424,123,423,124,417,124,417,125,417,126,418,127,419,126,421,126,421,126,418,128,420,129",zoneName:"WITA"},{timezone:"Asia/Manila",country:"PH",pin:"418,105",offset:8,points:"423,117,422,116,423,115,422,114,421,115,420,114,420,115,419,115,420,114,421,113,422,113,422,114,423,113,423,112,424,112,424,111,425,112,426,115,425,116,425,115
 ,424,117,424,117,423,117",zoneName:"PHT"},{timezone:"Asia/Manila",country:"PH",pin:"418,105",offset:8,points:"421,105,421,106,421,105,422,106,422,106,422,107,422,108,420,106,420,107,419,106,418,106,418,105,417,104,417,105,417,104,416,102,417,103,418,99,420,99,420,102,419,104,419,106,421,105",zoneName:"PHT"},{timezone:"Asia/Muscat",country:"OM",pin:"331,92",offset:4,points:"328,100,327,100,326,101,324,102,322,99,326,97,327,94,327,93,327,92,328,92,328,90,329,92,332,92,333,94,331,97,330,97,330,99,329,99,328,100",zoneName:"GST"},{timezone:"Asia/Nicosia",country:"CY",pin:"296,76",offset:2,points:"296,77,295,76,298,75,297,76,297,76,296,77",zoneName:"EET"},{timezone:"Asia/Novokuznetsk",country:"RU",pin:"371,50",offset:7,points:"373,46,374,47,373,48,373,49,373,49,374,50,374,50,373,51,374,52,373,53,371,52,370,51,371,51,368,49,367,47,373,46",zoneName:"KRAT"},{timezone:"Asia/Novosibirsk",country:"RU",pin:"365,49",offset:7,points:"367,47,368,49,367,50,366,50,365,51,362,49,358,51,356,50,357,49,3
 55,50,355,49,354,48,356,47,355,47,356,46,354,44,356,42,357,40,364,41,366,40,368,41,368,42,371,42,373,43,372,44,374,45,373,46,367,47",zoneName:"NOVT"},{timezone:"Asia/Omsk",country:"RU",pin:"352,49",offset:7,points:"354,44,356,46,355,47,356,47,354,48,355,49,355,50,352,51,352,50,349,50,349,48,348,48,348,47,350,46,348,45,348,44,349,44,351,44,354,44",zoneName:"OMST"},{timezone:"Asia/Omsk",country:"RU",pin:"352,49",offset:7,points:"373,53,372,53,374,54,375,55,374,55,375,56,371,57,371,56,368,56,366,54,363,55,362,54,361,55,358,51,362,49,365,51,366,50,368,49,371,51,370,51,371,52,373,53",zoneName:"OMST"},{timezone:"Asia/Phnom_Penh",country:"KH",pin:"396,109",offset:7,points:"397,109,397,110,394,110,394,109,393,110,392,106,394,105,397,106,397,105,399,105,399,108,397,109",zoneName:"ICT"},{timezone:"Asia/Pontianak",country:"ID",pin:"402,125",offset:7,points:"411,127,409,130,407,129,405,130,405,129,403,129,403,127,402,126,401,123,402,122,404,124,405,124,406,123,408,123,408,124,410,124,410,125,41
 0,125,411,127",zoneName:"WIB"},{timezone:"Asia/Pyongyang",country:"KP",pin:"425,71",offset:9,points:"426,72,424,73,423,72,424,71,424,71,424,70,423,70,423,69,425,68,426,67,428,68,428,67,429,67,431,65,431,66,430,67,430,68,427,70,428,72,426,72",zoneName:"KST"},{timezone:"Asia/Qatar",country:"QA",pin:"322,90",offset:3,points:"322,90,321,91,321,90,321,89,322,90",zoneName:"AST"},{timezone:"Asia/Qyzylorda",country:"KZ",pin:"341,63",offset:6,points:"344,52,344,54,345,55,342,57,340,57,339,58,337,57,337,56,336,54,333,53,335,52,334,52,335,51,336,51,335,51,336,51,335,51,335,50,342,49,342,51,342,52,344,52",zoneName:"QYZT"},{timezone:"Asia/Qyzylorda",country:"KZ",pin:"341,63",offset:6,points:"342,65,340,64,336,65,334,63,334,61,335,60,334,60,333,61,334,61,333,61,333,61,331,61,335,59,341,61,343,61,344,63,345,64,344,65,342,66,342,65",zoneName:"QYZT"},{timezone:"Asia/Rangoon",country:"MM",pin:"384,102",offset:6.5,points:"386,104,388,106,388,109,387,111,387,107,386,106,386,102,385,102,384,101,384,102,
 383,102,383,103,382,102,382,103,382,102,381,103,382,102,381,103,381,101,381,98,380,99,380,98,381,98,380,98,381,98,380,97,379,96,379,97,378,96,379,94,380,92,381,92,382,88,384,87,385,87,385,87,386,85,387,87,387,88,387,89,385,91,385,92,387,91,387,93,388,93,388,94,389,94,389,95,391,95,389,97,386,97,386,99,385,99,387,102,386,104",zoneName:"MMT"},{timezone:"Asia/Riyadh",country:"SA",pin:"315,91",offset:3,points:"310,101,309,102,307,98,304,96,303,92,302,91,299,86,298,86,299,84,300,84,303,83,301,81,304,80,306,81,312,84,317,85,318,87,320,88,319,89,321,91,322,91,321,91,323,93,327,93,327,94,326,97,318,100,314,103,314,102,312,101,310,101,310,101",zoneName:"AST"},{timezone:"Asia/Sakhalin",country:"RU",pin:"448,60",offset:11,points:"450,56,451,57,450,57,449,57,448,59,449,61,449,61,448,60,447,61,447,57,448,54,447,52,447,51,448,50,448,50,449,50,449,52,449,53,450,56",zoneName:"SAKT"},{timezone:"Asia/Samarkand",country:"UZ",pin:"343,70",offset:5,points:"345,71,345,72,344,73,342,73,343,72,337,70,336,6
 8,334,68,333,66,331,66,331,66,331,66,331,66,329,67,329,68,328,68,328,63,331,62,331,63,333,64,334,63,336,65,340,64,342,65,342,67,342,67,343,68,343,69,344,70,344,71,345,71",zoneName:"UZT"},{timezone:"Asia/Seoul",country:"KR",pin:"426,73",offset:9,points:"429,76,427,76,427,77,427,77,426,77,425,77,426,75,425,74,426,74,426,73,426,72,428,71,429,73,430,75,429,76",zoneName:"KST"},{timezone:"Asia/Shanghai",country:"CN",pin:"419,82",offset:8,points:"401,84,401,83,403,82,402,80,403,80,402,79,404,79,403,77,404,73,403,72,404,70,406,69,408,69,408,67,409,66,407,67,406,66,404,65,406,64,405,63,405,63,406,62,408,63,414,60,416,61,416,59,415,58,411,59,410,58,412,56,414,56,416,55,415,55,418,53,417,52,418,51,423,51,420,53,421,54,424,53,425,54,423,58,423,58,420,59,422,60,421,60,420,61,419,61,420,62,420,64,421,63,421,65,423,66,423,65,425,68,418,71,419,70,418,70,419,70,420,69,418,68,415,71,414,71,413,71,414,72,415,72,415,73,416,73,418,72,420,73,420,74,417,75,416,76,417,77,418,80,419,81,417,81,419,82,417,83,
 420,83,419,84,419,84,419,85,419,86,418,86,417,88,416,88,417,88,416,90,416,89,415,91,414,91,413,92,412,92,412,93,409,93,409,94,408,94,408,93,408,94,407,94,406,93,406,92,405,93,406,91,405,90,404,90,405,89,402,89,402,88,402,87,401,87,402,87,402,85,401,84",zoneName:"CST"},{timezone:"Asia/Singapore",country:"SG",pin:"394,123",offset:8,points:"394,123,394,123,394,123",zoneName:"SGT"},{timezone:"Asia/Taipei",country:"TW",pin:"419,90",offset:8,points:"417,94,417,92,418,91,419,90,419,90,418,95,417,94",zoneName:"CST"},{timezone:"Asia/Tashkent",country:"UZ",pin:"346,68",offset:5,points:"345,69,346,69,345,70,344,70,343,68,345,68,349,66,347,67,349,68,350,67,352,68,350,69,348,69,348,68,345,69",zoneName:"UZT"},{timezone:"Asia/Tbilisi",country:"GE",pin:"312,67",offset:4,points:"309,67,308,67,308,66,306,64,310,65,311,66,313,66,315,68,310,68,309,67",zoneName:"GET"},{timezone:"Asia/Tehran",country:"IR",pin:"321,75",offset:3.5,points:"335,81,336,82,335,84,336,85,337,86,337,87,338,87,338,88,336,89,335,9
 0,330,89,329,87,326,88,325,88,321,86,320,83,319,83,318,83,318,83,317,83,316,82,316,81,316,80,314,79,313,77,314,75,313,75,311,72,312,72,311,70,312,70,314,71,317,70,317,70,317,71,318,72,318,73,322,74,325,74,325,73,328,72,332,73,334,74,335,74,335,77,334,78,335,78,334,79,335,81",zoneName:"IRST"},{timezone:"Asia/Thimphu",country:"BT",pin:"375,87",offset:6,points:"378,87,378,88,375,88,373,87,375,86,377,86,378,87",zoneName:"BTT"},{timezone:"Asia/Tokyo",country:"JP",pin:"444,75",offset:9,points:"448,63,451,64,452,63,452,65,453,65,450,65,449,67,447,66,445,66,445,66,446,67,445,67,444,66,445,65,445,65,446,65,447,62,448,63",zoneName:"JST"},{timezone:"Asia/Tokyo",country:"JP",pin:"444,75",offset:9,points:"432,78,433,78,433,79,433,79,432,81,431,82,432,81,431,82,431,81,431,79,431,79,431,80,430,80,430,79,431,79,430,79,432,78",zoneName:"JST"},{timezone:"Asia/Tokyo",country:"JP",pin:"444,75",offset:9,points:"437,76,439,75,440,73,441,73,440,73,441,74,442,73,444,71,444,69,445,68,446,68,446,67,446,67,44
 7,70,447,72,446,72,445,75,446,75,445,76,444,76,445,76,444,75,443,77,443,76,442,77,440,77,441,77,440,76,440,77,439,79,438,78,438,77,434,77,434,78,432,78,432,77,434,76,437,76",zoneName:"JST"},{timezone:"Asia/Ulaanbaatar",country:"MN",pin:"398,58",offset:8,points:"396,67,390,66,386,66,386,64,387,62,385,60,387,59,386,58,388,58,388,57,385,56,386,55,386,54,387,53,392,54,392,55,394,55,398,55,401,56,403,57,406,56,407,59,405,59,405,60,406,62,405,63,406,64,403,66,399,66,396,67",zoneName:"ULAT"},{timezone:"Asia/Urumqi",country:"CN",pin:"372,64",offset:6,points:"386,86,384,86,384,85,383,84,381,84,378,86,375,86,374,87,373,86,369,86,364,83,364,83,365,82,365,83,366,82,365,81,365,81,366,80,364,77,365,76,364,76,365,75,364,74,365,70,364,70,364,68,365,67,365,65,366,65,365,64,368,65,363,63,365,63,364,62,365,59,369,60,369,58,372,57,372,58,375,59,376,60,376,62,383,63,384,66,385,66,386,68,385,68,384,70,386,70,385,71,389,72,388,72,388,73,387,75,388,77,387,77,388,77,387,78,385,78,386,79,385,80,386,80,387,82
 ,388,84,387,85,387,86,386,86",zoneName:"XJT"},{timezone:"Asia/Vientiane",country:"LA",pin:"393,100",offset:7,points:"398,105,397,106,396,105,397,103,394,100,393,99,393,100,392,100,390,101,391,98,390,98,390,97,389,97,390,95,391,96,391,94,393,95,393,96,395,96,395,97,396,97,394,98,396,99,398,102,399,103,399,105,398,105",zoneName:"ICT"},{timezone:"Asia/Vladivostok",country:"RU",pin:"433,65",offset:11,points:"433,63,433,62,435,62,437,59,437,58,432,59,431,57,432,57,433,56,432,54,433,53,435,52,435,52,437,52,437,51,437,51,433,51,433,51,433,50,431,50,435,48,432,48,432,47,433,46,432,46,433,45,433,44,433,44,434,44,433,43,433,42,435,40,435,40,436,39,437,40,439,39,433,37,434,36,434,35,433,34,431,33,435,31,435,30,434,29,435,28,435,28,435,27,433,27,433,26,435,25,435,25,434,25,436,26,444,26,444,25,445,25,443,25,446,24,446,24,455,25,449,25,446,28,448,28,447,28,448,29,447,29,447,30,446,30,446,31,443,32,445,32,444,33,445,34,444,35,445,35,445,36,445,37,444,37,444,38,448,39,453,39,454,40,452,41,454,42,4
 54,42,448,43,438,49,440,49,440,50,441,50,441,51,442,50,442,51,443,50,444,50,446,51,445,51,447,53,445,55,445,57,441,61,436,65,435,66,433,65,431,66,431,66,432,65,432,63,433,63",zoneName:"VLAT"},{timezone:"Asia/Vladivostok",country:"RU",pin:"433,65",offset:11,points:"443,19,445,20,447,19,446,19,452,20,449,21,444,21,443,21,440,20,441,20,443,19",zoneName:"VLAT"},{timezone:"Asia/Yakutsk",country:"RU",pin:"430,39",offset:10,points:"432,48,435,48,431,50,433,50,433,51,437,51,437,51,437,52,435,52,435,52,433,53,431,55,433,55,433,56,432,57,428,56,425,52,422,51,418,51,417,52,418,52,418,53,416,55,416,55,414,56,409,55,404,57,400,56,400,55,401,55,400,55,401,53,404,53,406,52,408,52,409,51,408,51,412,49,412,49,411,48,410,46,413,46,414,45,413,45,413,44,415,44,415,42,413,42,413,42,411,41,406,43,406,42,403,43,402,43,404,40,402,40,402,39,403,38,402,38,402,38,402,37,400,37,401,36,401,36,397,35,399,34,398,34,397,32,397,32,398,31,398,29,397,29,402,28,403,27,406,26,406,26,406,25,404,24,404,24,404,24,403,23,4
 05,22,407,22,408,23,411,23,421,24,422,23,421,23,423,22,430,24,429,24,430,24,429,24,430,25,428,25,430,25,429,26,432,27,434,26,433,27,435,27,435,28,435,28,434,29,435,30,435,31,431,33,433,34,434,35,434,36,433,37,439,39,437,40,436,39,435,40,435,40,433,42,433,43,434,44,433,44,433,44,433,45,432,46,433,46,432,47,432,48",zoneName:"YAKT"},{timezone:"Asia/Yerevan",country:"AM",pin:"312,69",offset:4,points:"313,68,314,69,313,69,315,70,315,71,314,71,314,70,311,69,310,68,313,68",zoneName:"AMT"},{timezone:"Atlantic/Azores",country:"PT",pin:"214,73",offset:-1,points:"202,79,220,65",zoneName:"AZOT"},{timezone:"Atlantic/Bermuda",country:"BM",pin:"160,80",offset:-4,points:"155,85,165,75",zoneName:"AST"},{timezone:"Atlantic/Canary",country:"ES",pin:"229,86",offset:0,points:"220,92,236,79",zoneName:"WET"},{timezone:"Atlantic/Cape_Verde",country:"CV",pin:"217,104",offset:-1,points:"210,109,224,96",zoneName:"CVT"},{timezone:"Atlantic/Faroe",country:"FO",pin:"241,39",offset:0,points:"234,45,246,33",zoneNa
 me:"WET"},{timezone:"Atlantic/Madeira",country:"PT",pin:"227,80",offset:0,points:"221,88,233,74",zoneName:"WET"},{timezone:"Atlantic/Reykjavik",country:"IS",pin:"220,36",offset:0,points:"218,42,231,28",zoneName:"GMT"},{timezone:"Atlantic/South_Georgia",country:"GS",pin:"199,200",offset:-2,points:"192,213,214,195",zoneName:"GST"},{timezone:"Atlantic/St_Helena",country:"SH",pin:"242,147",offset:0,points:"230,181,242,136",zoneName:"GMT"},{timezone:"Atlantic/Stanley",country:"FK",pin:"170,197",offset:-3,points:"160,203,175,191",zoneName:"FKST"},{timezone:"Australia/Adelaide",country:"AU",pin:"442,173",offset:10.5,points:"438,161,446,161,446,178,444,177,444,175,443,174,444,175,444,175,442,174,442,173,442,172,441,174,440,174,441,173,442,172,441,170,441,171,439,173,439,174,438,173,438,173,438,172,436,170,432,169,429,169,429,161,438,161",zoneName:"ACDT"},{timezone:"Australia/Brisbane",country:"AU",pin:"463,163",offset:10,points:"458,156,459,156,460,158,459,157,461,158,463,161,463,163,463,16
 4,462,164,460,166,459,165,457,165,446,165,446,161,442,161,442,148,444,150,446,149,447,146,446,144,447,142,447,142,448,140,449,142,450,145,451,145,452,146,453,151,457,153,458,156,458,156,458,156",zoneName:"AEST"},{timezone:"Australia/Broken_Hill",country:"AU",pin:"446,169",offset:10.5,points:"446,170,446,169,447,169,447,170,446,170",zoneName:"ACDT"},{timezone:"Australia/Currie",country:"AU",pin:"450,180",offset:11,points:"450,180,450,180,450,180",zoneName:"AEDT"},{timezone:"Australia/Darwin",country:"AU",pin:"432,142",offset:9.5,points:"429,146,430,146,430,145,430,145,431,143,432,143,431,142,432,143,432,142,434,142,434,141,433,140,436,142,438,142,439,142,438,142,439,142,439,142,440,141,440,142,440,143,439,143,438,145,437,146,442,148,442,161,429,161,429,146",zoneName:"ACST"},{timezone:"Australia/Eucla",country:"AU",pin:"429,169",offset:8.8,points:"429,168,428,169,424,170,424,168,429,168",zoneName:"ACWST"},{timezone:"Australia/Hobart",country:"AU",pin:"455,185",offset:11,points:"456,18
 2,456,185,454,184,454,186,452,185,452,184,452,184,451,182,452,182,454,183,454,182,456,182",zoneName:"AEDT"},{timezone:"Australia/Lindeman",country:"AU",pin:"457,153",offset:10,points:"457,153,457,153,457,153",zoneName:"AEST"},{timezone:"Australia/Lord_Howe",country:"AU",pin:"471,169",offset:11,points:"471,169,471,169,471,169",zoneName:"LHDT"},{timezone:"Australia/Melbourne",country:"AU",pin:"451,178",offset:11,points:"448,173,449,173,451,175,455,175,456,176,458,177,455,178,453,179,453,179,452,178,451,178,452,178,451,178,449,179,446,178,446,178,446,172,447,172,448,173",zoneName:"AEDT"},{timezone:"Australia/Perth",country:"AU",pin:"411,169",offset:8,points:"424,146,424,145,424,145,425,145,425,144,426,145,426,144,428,145,428,147,428,146,428,147,428,146,429,146,429,168,424,168,424,170,423,171,422,172,417,172,414,174,411,173,410,173,410,172,411,171,411,169,410,165,407,161,408,162,408,160,408,161,409,162,407,159,408,156,409,155,409,156,409,155,412,154,413,154,418,152,420,150,420,149,421,1
 48,422,149,422,148,422,147,423,148,423,148,423,147,423,147,423,147,423,146,424,147,423,146,424,146",zoneName:"AWST"},{timezone:"Australia/Sydney",country:"AU",pin:"460,172",offset:11,points:"459,174,458,175,458,177,456,176,455,175,451,175,449,173,446,172,446,170,447,170,447,169,446,169,446,165,457,165,459,165,460,166,462,164,463,164,462,169,460,172,460,171,460,172,459,174",zoneName:"AEDT"},{timezone:"Europe/Amsterdam",country:"NL",pin:"257,52",offset:1,points:"258,53,258,55,257,53,255,53,256,53,256,53,256,52,258,52,257,52,258,51,260,51,259,52,260,52,259,53,258,53",zoneName:"CET"},{timezone:"Europe/Andorra",country:"AD",pin:"252,66",offset:1,points:"252,66,252,66,252,66",zoneName:"CET"},{timezone:"Europe/Athens",country:"GR",pin:"283,72",offset:2,points:"282,72,283,73,282,73,282,74,281,74,281,74,281,74,280,74,279,72,280,72,282,72,279,72,279,71,279,71,278,70,279,68,287,67,286,68,283,68,284,69,283,69,283,70,281,69,282,71,282,70,282,71,281,71,283,72,283,73,282,72",zoneName:"EET"},{timez
 one:"Europe/Belgrade",country:"RS",pin:"278,63",offset:1,points:"280,63,282,63,281,64,282,65,281,66,279,67,278,66,278,65,277,65,277,64,277,63,276,62,277,62,276,61,278,61,280,63",zoneName:"CET"},{timezone:"Europe/Bucharest",country:"RO",pin:"286,63",offset:2,points:"289,62,291,62,290,64,288,64,284,64,282,64,281,63,282,63,280,63,280,62,278,61,279,61,281,59,282,58,285,59,287,58,289,60,289,62",zoneName:"EET"},{timezone:"Europe/Berlin",country:"DE",pin:"269,52",offset:1,points:"260,57,259,56,258,53,260,52,259,52,260,50,262,51,262,50,264,51,262,50,262,50,263,49,262,49,262,49,264,49,264,50,265,49,265,50,267,49,

<TRUNCATED>

[46/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
deleted file mode 100644
index ec89d9f..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.ts
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * 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.
- */
-
-import {URLSearchParams, Response, ResponseOptions} from '@angular/http';
-import {InMemoryDbService, InMemoryBackendService, createErrorResponse} from 'angular-in-memory-web-api';
-import {Observable} from 'rxjs/Observable';
-import {Subscriber} from 'rxjs/Subscriber';
-import * as moment from 'moment';
-import {mockData} from '@app/mock-data';
-
-export class mockBackendService extends InMemoryBackendService {
-  getLocation(url: string): any {
-    return super.getLocation(url);
-  }
-}
-
-export class mockApiDataService implements InMemoryDbService {
-
-  private readonly filterMap = {
-    'api/v1/service/logs': {
-      pathToCollection: 'logList',
-      totalCountKey: 'totalCount',
-      filters: {
-        clusters: {
-          key: 'cluster',
-          isValuesList: true
-        },
-        mustBe: {
-          key: 'type',
-          isValuesList: true
-        },
-        level: {
-          key: 'level',
-          isValuesList: true
-        },
-        iMessage: {
-          key: 'log_message',
-          filterFunction: (value, filterValue) => value.toLowerCase().indexOf(filterValue.toLowerCase()) > -1
-        },
-        start_time: {
-          key: 'logtime',
-          filterFunction: (value, filterValue) => value >= moment(filterValue).valueOf()
-        },
-        end_time: {
-          key: 'logtime',
-          filterFunction: (value, filterValue) => value < moment(filterValue).valueOf()
-        },
-        host_name: {
-          key: 'host',
-          isValuesList: true
-        }
-      }
-    }
-  };
-
-  parseUrl(url: string): any {
-    const urlLocation = mockBackendService.prototype.getLocation(url),
-      query = urlLocation.search && new URLSearchParams(urlLocation.search.substr(1), {
-          encodeKey: key => key,
-          encodeValue: value => value
-        }),
-      splitUrl = urlLocation.pathname.substr(1).split('/'),
-      urlPartsCount = splitUrl.length,
-      collectionName = splitUrl[urlPartsCount - 1],
-      base = splitUrl.slice(0, urlPartsCount - 1).join('/') + '/';
-    return {
-      base: base,
-      collectionName: collectionName,
-      query: query
-    };
-  }
-
-  get(interceptorArgs: any): Observable<Response> {
-    const query = interceptorArgs.requestInfo.query,
-      path = interceptorArgs.requestInfo.base + interceptorArgs.requestInfo.collectionName,
-      pathArray = path.split('/').filter(part => part !== '');
-    if (query && query.paramsMap.has('static') && interceptorArgs.passThruBackend) {
-      return interceptorArgs.passThruBackend.createConnection(interceptorArgs.requestInfo.req).response;
-    } else {
-      let is404 = false;
-      const allData = pathArray.reduce((currentObject, currentKey, index, array) => {
-        if (!currentObject && index < array.length - 1) {
-          return {};
-        } else if (currentObject.hasOwnProperty(currentKey)) {
-          return currentObject[currentKey];
-        } else {
-          is404 = true;
-          return {};
-        }
-      }, interceptorArgs.db);
-      if (is404) {
-        return new Observable<Response>((subscriber: Subscriber<Response>) => subscriber.error(new Response(createErrorResponse(
-          interceptorArgs.requestInfo.req, 404, 'Not found'
-        ))));
-      } else {
-        let filteredData;
-        const filterMapItem = this.filterMap[path];
-        if (query && filterMapItem) {
-          filteredData = {};
-          const pathToCollection = filterMapItem.pathToCollection,
-            collection = allData[pathToCollection];
-          let filteredCollection = collection.filter(item => {
-            let result = true;
-              query.paramsMap.forEach((value, key) => {
-              const paramValue = decodeURIComponent(value[0]),
-                paramFilter = filterMapItem.filters[key],
-                paramValuesList = paramFilter && paramFilter.isValuesList && paramValue ? paramValue.split(',') : [],
-                currentValue = paramFilter && item[paramFilter.key];
-              if (paramFilter &&
-                ((paramFilter.filterFunction && !paramFilter.filterFunction(currentValue, paramValue)) ||
-                (!paramFilter.filterFunction && !paramFilter.isValuesList && currentValue !== paramValue) ||
-                (!paramFilter.filterFunction && paramFilter.isValuesList && paramValuesList.indexOf(currentValue) === -1))) {
-                result = false;
-              }
-            });
-            return result;
-          });
-          if (query.paramsMap.has('sortBy') && query.paramsMap.has('sortType')) {
-            const sortKey = query.paramsMap.get('sortBy')[0],
-              sortType = query.paramsMap.get('sortType')[0];
-            filteredCollection.sort((a, b) => {
-              const itemA = a[sortKey],
-                itemB = b[sortKey];
-              let ascResult;
-              if (itemA > itemB) {
-                ascResult = 1;
-              } else if (itemA < itemB) {
-                ascResult = -1;
-              } else {
-                ascResult = 0;
-              }
-              return ascResult * Math.pow(-1, Number(sortType === 'desc'));
-            });
-          }
-          if (filterMapItem.totalCountKey) {
-            filteredData[filterMapItem.totalCountKey] = filteredCollection.length;
-          }
-          if (query && query.paramsMap.has('page') && query.paramsMap.has('pageSize')) {
-            const page = parseInt(query.paramsMap.get('page')[0]),
-              pageSize = parseInt(query.paramsMap.get('pageSize')[0]);
-            filteredCollection = filteredCollection.slice(page * pageSize, (page + 1) * pageSize);
-          }
-          filteredData[pathToCollection] = filteredCollection;
-        } else {
-          filteredData = allData;
-        }
-        return new Observable<Response>((subscriber: Subscriber<Response>) => subscriber.next(new Response(new ResponseOptions({
-          status: 200,
-          body: filteredData
-        }))));
-      }
-    }
-  }
-
-  post(interceptorArgs: any) {
-    // TODO implement posting data to mock object except login call
-    return this.get(interceptorArgs);
-  }
-
-  createDb() {
-    return mockData;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
deleted file mode 100644
index 6de9988..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-settings.service.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {defaultSettings} from '@app/models/app-settings.model';
-import {AppStore, ObjectModelService, getObjectReducer} from '@app/models/store.model';
-
-export const modelName = 'appSettings';
-
-@Injectable()
-export class AppSettingsService extends ObjectModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const appSettings = getObjectReducer(modelName, defaultSettings);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
deleted file mode 100644
index d77d80f..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/app-state.service.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {initialState} from '@app/models/app-state.model';
-import {AppStore, ObjectModelService, getObjectReducer} from '@app/models/store.model';
-
-export const modelName = 'appState';
-
-@Injectable()
-export class AppStateService extends ObjectModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const appState = getObjectReducer(modelName, initialState);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs-fields.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs-fields.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs-fields.service.ts
deleted file mode 100644
index bb8c661..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs-fields.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'auditLogsFields';
-
-@Injectable()
-export class AuditLogsFieldsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const auditLogsFields = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
deleted file mode 100644
index bc33bd9..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/audit-logs.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'auditLogs';
-
-@Injectable()
-export class AuditLogsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const auditLogs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/clusters.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/clusters.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/clusters.service.ts
deleted file mode 100644
index f21a8f9..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/clusters.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'clusters';
-
-@Injectable()
-export class ClustersService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const clusters = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/components.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/components.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/components.service.ts
deleted file mode 100644
index 6b2a0ba..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/components.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'components';
-
-@Injectable()
-export class ComponentsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const components = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
deleted file mode 100644
index b850006..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/filters.service.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'filters';
-
-@Injectable()
-export class FiltersService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const filters = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
deleted file mode 100644
index e541444..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/graphs.service.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'graphs';
-
-@Injectable()
-export class GraphsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const graphs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/hosts.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/hosts.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/hosts.service.ts
deleted file mode 100644
index 0cb0a74..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/hosts.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'hosts';
-
-@Injectable()
-export class HostsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const hosts = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/reducers.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/reducers.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/reducers.service.ts
deleted file mode 100644
index 08f237d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/reducers.service.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 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.
- */
-
-import {combineReducers} from '@ngrx/store';
-import {appSettings} from '@app/services/storage/app-settings.service';
-import {appState} from '@app/services/storage/app-state.service';
-import {auditLogs} from '@app/services/storage/audit-logs.service';
-import {clusters} from '@app/services/storage/clusters.service';
-import {components} from '@app/services/storage/components.service';
-import {filters} from '@app/services/storage/filters.service';
-import {graphs} from '@app/services/storage/graphs.service';
-import {hosts} from '@app/services/storage/hosts.service';
-import {serviceLogs} from '@app/services/storage/service-logs.service';
-import {serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
-import {serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {userConfigs} from '@app/services/storage/user-configs.service';
-
-export const reducers = {
-  appSettings,
-  appState,
-  auditLogs,
-  serviceLogs,
-  serviceLogsHistogramData,
-  graphs,
-  hosts,
-  userConfigs,
-  filters,
-  clusters,
-  components,
-  serviceLogsFields,
-  auditLogsFields
-};
-
-export function reducer(state: any, action: any) {
-  return (combineReducers(reducers))(state, action);
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-fields.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-fields.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-fields.service.ts
deleted file mode 100644
index 0082cd6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-fields.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'serviceLogsFields';
-
-@Injectable()
-export class ServiceLogsFieldsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const serviceLogsFields = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-histogram-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-histogram-data.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-histogram-data.service.ts
deleted file mode 100644
index e680777..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs-histogram-data.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'serviceLogsHistogramData';
-
-@Injectable()
-export class ServiceLogsHistogramDataService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const serviceLogsHistogramData = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
deleted file mode 100644
index f0ff0d7..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/service-logs.service.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'serviceLogs';
-
-@Injectable()
-export class ServiceLogsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const serviceLogs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
deleted file mode 100644
index 1596e78..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/storage/user-configs.service.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-
-import {Injectable} from '@angular/core';
-import {Store} from '@ngrx/store';
-import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
-
-export const modelName = 'userConfigs';
-
-@Injectable()
-export class UserConfigsService extends CollectionModelService {
-  constructor(store: Store<AppStore>) {
-    super(modelName, store);
-  }
-}
-
-export const userConfigs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.spec.ts
deleted file mode 100644
index a4a0cf8..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.spec.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-
-import {UtilsService} from './utils.service';
-
-describe('UtilsService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [UtilsService]
-    });
-  });
-
-  it('should create service', inject([UtilsService], (service: UtilsService) => {
-    expect(service).toBeTruthy();
-  }));
-
-  describe('#updateMultiSelectValue()', () => {
-    const cases = [
-      {
-        currentValue: '',
-        value: 'v0',
-        isChecked: true,
-        result: 'v0',
-        title: 'check; no checked items before'
-      },
-      {
-        currentValue: 'v1,v2',
-        value: 'v3',
-        isChecked: true,
-        result: 'v1,v2,v3',
-        title: 'check'
-      },
-      {
-        currentValue: 'v4,v5',
-        value: 'v4',
-        isChecked: false,
-        result: 'v5',
-        title: 'uncheck'
-      },
-      {
-        currentValue: 'v6,v7',
-        value: 'v6',
-        isChecked: true,
-        result: 'v6,v7',
-        title: 'avoid repeating check action'
-      },
-      {
-        currentValue: 'v8,v9',
-        value: 'v10',
-        isChecked: false,
-        result: 'v8,v9',
-        title: 'avoid repeating uncheck action'
-      },
-      {
-        currentValue: 'v11',
-        value: 'v11',
-        isChecked: false,
-        result: '',
-        title: 'uncheck last item'
-      }
-    ];
-
-    cases.forEach(test => {
-      it(test.title, inject([UtilsService], (service: UtilsService) => {
-        expect(service.updateMultiSelectValue(test.currentValue, test.value, test.isChecked)).toEqual(test.result);
-      }));
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.ts
deleted file mode 100644
index 9f6cacd..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/utils.service.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-
-@Injectable()
-export class UtilsService {
-
-  valueHasChanged(currentValue: any, newValue: any): boolean {
-    if (newValue == null) {
-      return false;
-    }
-    if (typeof newValue === 'object') {
-      return JSON.stringify(currentValue) !== JSON.stringify(newValue);
-    } else {
-      return currentValue !== newValue;
-    }
-  }
-
-  updateMultiSelectValue(currentValue: string, value: string, isChecked: boolean): string {
-    let valuesArray = currentValue ? currentValue.split(',') : [],
-      valuePosition = valuesArray.indexOf(value);
-    if (isChecked && valuePosition === -1) {
-      valuesArray.push(value);
-    } else if (!isChecked && valuePosition > -1) {
-      valuesArray.splice(valuePosition, 1);
-    }
-    return valuesArray.join(',');
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web-new/src/assets/i18n/en.json
deleted file mode 100644
index 84c4abc..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/assets/i18n/en.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
-  "common.title": "Log Search",
-
-  "modal.submit": "OK",
-  "modal.cancel": "Cancel",
-
-  "authorization.name": "Username",
-  "authorization.password": "Password",
-  "authorization.signIn": "Sign In",
-  "authorization.error": "<strong>Error!</strong> Invalid User credentials.<br>Please try again.",
-
-  "topMenu.undo": "Undo",
-  "topMenu.redo": "Redo",
-  "topMenu.refresh": "Refresh",
-  "topMenu.history": "History",
-
-  "filter.all": "All",
-
-  "filter.clusters": "Clusters",
-  "filter.message": "Message:",
-  "filter.components": "Components",
-  "filter.levels": "Levels",
-  "filter.capture": "Capture",
-  "filter.excluded": "Excluded",
-  "filter.hosts": "Hosts",
-
-  "filter.timeRange.1hr": "Last 1 hour",
-  "filter.timeRange.24hr": "Last 24 hours",
-  "filter.timeRange.today": "Today",
-  "filter.timeRange.yesterday": "Yesterday",
-  "filter.timeRange.7d": "Last 7 days",
-  "filter.timeRange.30d": "Last 30 days",
-  "filter.timeRange.thisMonth": "This month",
-  "filter.timeRange.lastMonth": "Last month",
-  "filter.timeRange.custom": "Custom range",
-
-  "levels.fatal": "Fatal",
-  "levels.error": "Error",
-  "levels.warn": "Warn",
-  "levels.info": "Info",
-  "levels.debug": "Debug",
-  "levels.trace": "Trace",
-  "levels.unknown": "Unknown",
-
-  "sorting.title": "Sort By",
-  "sorting.level.asc": "Ascending Level",
-  "sorting.level.desc": "Descending Level",
-  "sorting.component.asc": "Ascending Component",
-  "sorting.component.desc": "Descending Component",
-  "sorting.time.asc": "Ascending Time",
-  "sorting.time.desc": "Descending Time",
-
-  "pagination.title": "Rows per page:",
-  "pagination.numbers": "{{startIndex}}-{{endIndex}} of {{totalCount}}",
-
-  "logs.columns": "Columns",
-  "logs.status": "Status",
-  "logs.details": "Details",
-  "logs.message": "Message",
-  "logs.bundleId": "Bundle Id",
-  "logs.caseId": "Case Id",
-  "logs.cluster": "Cluster",
-  "logs.eventCount": "Event Count",
-  "logs.file": "File",
-  "logs.host": "Host",
-  "logs.id": "Id",
-  "logs.ip": "Ip",
-  "logs.level": "Level",
-  "logs.lineNumber": "Line Number",
-  "logs.logType": "Log Type",
-  "logs.logfileLineNumber": "Logfile Line Number",
-  "logs.loggerName": "Logger Name",
-  "logs.method": "Method",
-  "logs.path": "Path",
-  "logs.rowType": "Row Type",
-  "logs.threadName": "Thread",
-  "logs.type": "Type",
-  "logs.enforcer": "Access Enforcer",
-  "logs.accessType": "Access Type",
-  "logs.action": "Action",
-  "logs.agent": "Agent",
-  "logs.agentHost": "Agent Host",
-  "logs.authType": "Auth Type",
-  "logs.clientIp": "Client Ip",
-  "logs.clientType": "Client Type",
-  "logs.dst": "DST",
-  "logs.eventTime": "Event Time",
-  "logs.logMessage": "Log Message",
-  "logs.logTime": "Log Time",
-  "logs.perm": "Perm",
-  "logs.policy": "Policy",
-  "logs.proxyUsers": "Proxy Users",
-  "logs.reason": "Reason",
-  "logs.repo": "Repo",
-  "logs.repoType": "Repo Type",
-  "logs.reqCallerId": "Req Caller Id",
-  "logs.reqContext": "Req Context",
-  "logs.reqData": "Req Data",
-  "logs.reqSelfId": "Req Self Id",
-  "logs.resType": "Res Type",
-  "logs.resource": "Resource",
-  "logs.result": "Result",
-  "logs.session": "Session",
-  "logs.text": "Text",
-  "logs.ugi": "UGI",
-  "logs.user": "User",
-  "logs.baseUrl": "Base URL",
-  "logs.command": "Command",
-  "logs.component": "Component",
-  "logs.details": "Details",
-  "logs.displayName": "Display Name",
-  "logs.os": "OS",
-  "logs.repoId": "Repo Id",
-  "logs.repoVersion": "Repo Version",
-  "logs.repositories": "Repositories",
-  "logs.requestId": "Request Id",
-  "logs.resultStatus": "Result Status",
-  "logs.roles": "Roles",
-  "logs.stackVersion": "Stack Version",
-  "logs.stack": "Stack",
-  "logs.taskId": "Task Id",
-  "logs.versionNote": "Version Note",
-  "logs.versionNumber": "Version Number"
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.prod.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.prod.ts b/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.prod.ts
deleted file mode 100644
index 690ddb1..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.prod.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * 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.
- */
-
-export const environment = {
-  production: true
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.ts b/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.ts
deleted file mode 100644
index e34c67c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/environments/environment.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * 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.
- */
-
-export const environment = {
-  production: false
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/favicon.ico
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/favicon.ico b/ambari-logsearch/ambari-logsearch-web-new/src/favicon.ico
deleted file mode 100644
index 62604cb..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web-new/src/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/index.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/index.html b/ambari-logsearch/ambari-logsearch-web-new/src/index.html
deleted file mode 100644
index f1c1562..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/index.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-  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>
-<html>
-<head>
-  <meta charset="utf-8">
-  <title>LogSearch</title>
-  <base href="/">
-
-  <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link rel="icon" type="image/x-icon" href="favicon.ico">
-</head>
-<body>
-  <app-root>Loading...</app-root>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/main.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/main.ts b/ambari-logsearch/ambari-logsearch-web-new/src/main.ts
deleted file mode 100644
index 5e76e0d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/main.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-import {enableProdMode} from '@angular/core';
-import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
-
-import {AppModule} from '@app/app.module';
-import {environment} from '@envs/environment';
-
-if (environment.production) {
-  enableProdMode();
-}
-
-platformBrowserDynamic().bootstrapModule(AppModule);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/polyfills.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/polyfills.ts b/ambari-logsearch/ambari-logsearch-web-new/src/polyfills.ts
deleted file mode 100644
index 0ab921a..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/polyfills.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 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.
- */
-
-/**
- * This file includes polyfills needed by Angular and is loaded before the app.
- * You can add your own extra polyfills to this file.
- *
- * This file is divided into 2 sections:
- *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
- *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
- *      file.
- *
- * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
- * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
- * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
- *
- * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
- */
-
-/***************************************************************************************************
- * BROWSER POLYFILLS
- */
-
-/** IE9, IE10 and IE11 requires all of the following polyfills. **/
-// import 'core-js/es6/symbol';
-import 'core-js/es6/object';
-// import 'core-js/es6/function';
-// import 'core-js/es6/parse-int';
-// import 'core-js/es6/parse-float';
-// import 'core-js/es6/number';
-// import 'core-js/es6/math';
-import 'core-js/es6/string';
-// import 'core-js/es6/date';
-import 'core-js/es6/array';
-// import 'core-js/es6/regexp';
-// import 'core-js/es6/map';
-// import 'core-js/es6/set';
-
-/** IE10 and IE11 requires the following for NgClass support on SVG elements */
-// import 'classlist.js';  // Run `npm install --save classlist.js`.
-
-/** IE10 and IE11 requires the following to support `@angular/animation`. */
-// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
-
-
-/** Evergreen browsers require these. **/
-import 'core-js/es6/reflect';
-import 'core-js/es7/reflect';
-
-
-/** ALL Firefox browsers require the following to support `@angular/animation`. **/
-// import 'web-animations-js';  // Run `npm install --save web-animations-js`.
-
-
-
-/***************************************************************************************************
- * Zone JS is required by Angular itself.
- */
-import 'zone.js/dist/zone';  // Included with Angular CLI.
-
-
-
-/***************************************************************************************************
- * APPLICATION IMPORTS
- */
-
-/**
- * Date, currency, decimal and percent pipes.
- * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10
- */
-// import 'intl';  // Run `npm install --save intl`.

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/styles.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/styles.less b/ambari-logsearch/ambari-logsearch-web-new/src/styles.less
deleted file mode 100644
index 5d5f1e3..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/styles.less
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * 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.
- */

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/test.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/test.ts b/ambari-logsearch/ambari-logsearch-web-new/src/test.ts
deleted file mode 100644
index 6597b1c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/test.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 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.
- */
-
-// This file is required by karma.conf.js and loads recursively all the .spec and framework files
-
-import 'zone.js/dist/long-stack-trace-zone';
-import 'zone.js/dist/proxy.js';
-import 'zone.js/dist/sync-test';
-import 'zone.js/dist/jasmine-patch';
-import 'zone.js/dist/async-test';
-import 'zone.js/dist/fake-async-test';
-import { getTestBed } from '@angular/core/testing';
-import {
-  BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting
-} from '@angular/platform-browser-dynamic/testing';
-
-// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
-declare var __karma__: any;
-declare var require: any;
-
-// Prevent Karma from running prematurely.
-__karma__.loaded = function () {};
-
-// First, initialize the Angular testing environment.
-getTestBed().initTestEnvironment(
-  BrowserDynamicTestingModule,
-  platformBrowserDynamicTesting()
-);
-// Then we find all the tests.
-const context = require.context('./', true, /\.spec\.ts$/);
-// And load the modules.
-context.keys().map(context);
-// Finally, start Karma to run the tests.
-__karma__.start();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.app.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.app.json b/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.app.json
deleted file mode 100644
index 7166e04..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.app.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/app",
-    "module": "es2015",
-    "baseUrl": ".",
-    "types": []
-  },
-  "exclude": [
-    "test.ts",
-    "**/*.spec.ts"
-  ]
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.spec.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.spec.json b/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.spec.json
deleted file mode 100644
index 510e3f1..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/tsconfig.spec.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/spec",
-    "module": "commonjs",
-    "target": "es5",
-    "baseUrl": "",
-    "types": [
-      "jasmine",
-      "node"
-    ]
-  },
-  "files": [
-    "test.ts"
-  ],
-  "include": [
-    "**/*.spec.ts",
-    "**/*.d.ts"
-  ]
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/typings.d.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/typings.d.ts b/ambari-logsearch/ambari-logsearch-web-new/src/typings.d.ts
deleted file mode 100644
index e4a302b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/typings.d.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.
- */
-
-/* SystemJS module definition */
-declare var module: NodeModule;
-interface NodeModule {
-  id: string;
-}


[26/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-bootstrap.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-bootstrap.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-bootstrap.css
deleted file mode 100644
index 05c35ba..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-bootstrap.css
+++ /dev/null
@@ -1,2549 +0,0 @@
-/*!
- * jQuery UI Bootstrap (1.0 alpha)
- * http://addyosmani.github.io/jquery-ui-bootstrap/
- *
- * Copyright 2012 - 2013, Addy Osmani
- * Dual licensed under the MIT or GPL Version 2 licenses.
- *
- * Portions copyright jQuery UI & Twitter Bootstrap
- */
-
-/********** VJ - Move to Less - Start *************/
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
-	display: none;
-}
-
-.ui-helper-hidden-accessible {
-	border: 0;
-	clip: rect(0 0 0 0);
-	height: 1px;
-	margin: -1px;
-	overflow: hidden;
-	padding: 0;
-	position: absolute;
-	width: 1px;
-}
-
-.ui-helper-reset {
-	margin: 0;
-	padding: 0;
-	border: 0;
-	outline: 0;
-	line-height: 1.3;
-	text-decoration: none;
-	font-size: 100%;
-	list-style: none;
-}
-
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
-	content: "";
-	display: table;
-	border-collapse: collapse;
-}
-
-.ui-helper-clearfix:after {
-	content: ".";
-	display: block;
-	height: 0;
-	clear: both;
-	visibility: hidden;
-}
-
-.ui-helper-clearfix {
-	/*display: inline-block; */
-	display: block;
-	min-height: 0; /* support: IE7 */
-}
-
-/* required comment for clearfix to work in Opera \*/
-* html .ui-helper-clearfix {
-	height:1%;
-}
-
-/* end clearfix */
-.ui-helper-zfix {
-	width: 100%;
-	height: 100%;
-	top: 0;
-	left: 0;
-	position: absolute;
-	opacity: 0;
-	filter:Alpha(Opacity=0);
-}
-.ui-front {
-	z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
-	cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
-	display: block;
-	text-indent: -99999px;
-	overflow: hidden;
-	background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-
-.ui-widget-overlay {
-	position: absolute;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-}
-
-
-/*
- * jQuery UI Resizable 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/resizable/
- */
-
-.ui-resizable {
-	position: relative;
-}
-
-.ui-resizable-handle {
-	position: absolute;
-	font-size: 0.1px;
-	z-index: 99999;
-	display: block;
-}
-
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
-	display: none;
-}
-
-.ui-resizable-n {
-	cursor: n-resize;
-	height: 7px;
-	width: 100%;
-	top: -5px;
-	left: 0;
-}
-
-.ui-resizable-s {
-	cursor: s-resize;
-	height: 7px;
-	width: 100%;
-	bottom: -5px;
-	left: 0;
-}
-
-.ui-resizable-e {
-	cursor: e-resize;
-	width: 7px;
-	right: -5px;
-	top: 0;
-	height: 100%;
-}
-
-.ui-resizable-w {
-	cursor: w-resize;
-	width: 7px;
-	left: -5px;
-	top: 0;
-	height: 100%;
-}
-
-.ui-resizable-se {
-	cursor: se-resize;
-	width: 12px;
-	height: 12px;
-	right: 1px;
-	bottom: 1px;
-}
-
-.ui-resizable-sw {
-	cursor: sw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	bottom: -5px;
-}
-
-.ui-resizable-nw {
-	cursor: nw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	top: -5px;
-}
-
-.ui-resizable-ne {
-	cursor: ne-resize;
-	width: 9px;
-	height: 9px;
-	right: -5px;
-	top: -5px;
-}
-
-/*
- * jQuery UI Selectable 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/selectable/
- */
-
-.ui-selectable-helper {
-	position: absolute;
-	z-index: 100;
-	border: 1px dotted black;
-}
-
-
-/*
- * jQuery UI CSS Framework 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * 
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/
- */
-
-/* Component containers
-----------------------------------*/
-
-.ui-widget {
-	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-	font-size: 13px;
-}
-
-.ui-widget .ui-widget {
-	font-size: 13px;
-}
-
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
-	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-	font-size: inherit;
-}
-
-.ui-widget-content {
-	border: 1px solid #aaaaaa;
-	background: #ffffff url("images/ui-bg_glass_75_ffffff_1x400.png") 50% 50% repeat-x;
-	color: #404040;
-}
-
-.ui-widget-header {
-	font-weight: bold;
-    background-color: #F5F5F5;
-    border-color: #DDDDDD;
-    color: #333333;
-
-}
-
-.ui-widget-header a {
-	color: #222222;
-}
-
-/* Interaction states
-----------------------------------*/
-
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
-   color: #333333;
-   background-color: #ffffff;
-   font-weight: normal;
-   border: 1px solid #cccccc;
-}
-
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
-	color: #555555;
-	text-decoration: none;
-}
-
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
-	color: #333333;
-    background-color: #ebebeb;
-    border-color: #adadad;
-	text-decoration: none;
-}
-
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited {
-	color: #333333;
-	text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
-	border: 1px solid #adadad;
-	font-weight: normal;
-	color: #333333;
-}
-
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
-	color: #333333;
-	text-decoration: none;
-}
-
-.ui-widget :active {
-	outline: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-
-.ui-state-highlight,
-.ui-state-error,
-.ui-state-default {
-	position: relative;
-	border-width: 1px;
-	border-style: solid;
-}
-
-.ui-state-highlight p,
-.ui-state-error p,
-.ui-state-default p {
-	font-size: 13px;
-	font-weight: normal;
-	line-height: 18px;
-	margin:7px 15px;
-}
-
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
-	color: #3a87ad;
-    background-color: #d9edf7;
-    border-color: #bce8f1;
-}
-
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
-	color: #2d6987;
-}
-
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
-	color: #b94a48;
-    background-color: #f2dede;
-    border-color: #eed3d7;
-}
-
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
-	color: #953b39;
-}
-
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
-	color: #953b39;
-}
-
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
-	font-weight: bold;
-}
-
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
-	opacity: .7;
-	filter:Alpha(Opacity=70);
-	font-weight: normal;
-}
-
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
-	opacity: .35;
-	filter:Alpha(Opacity=35);
-	background-image: none;
-}
-
-.ui-state-disabled .ui-icon {
-	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-
-.ui-icon {
-	width: 16px;
-	height: 16px;
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-
-.ui-widget-content .ui-icon {
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-
-.ui-widget-header .ui-icon {
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-
-.ui-state-default .ui-icon {
-	background-image: url("images/ui-icons_888888_256x240.png");
-}
-
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
-	background-image: url("images/ui-icons_454545_256x240.png");
-}
-
-.ui-state-active .ui-icon {
-	background-image: url("images/ui-icons_454545_256x240.png");
-}
-
-.ui-state-highlight .ui-icon {
-	background-image: url("images/ui-icons_2e83ff_256x240.png");
-}
-
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
-	background-image: url("images/ui-icons_f6cf3b_256x240.png");
-}
-
-/* positioning */
-
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-
-.ui-corner-all {
-	-webkit-border-radius: 4px; /* Safari 4 */
-	-moz-border-radius: 4px; /* Firefox 3.6 */
-	border-radius: 4px;
-}
-
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
-	-webkit-border-top-left-radius: 4px; /* Safari 4 */
-	-moz-border-radius-topleft: 4px; /* Firefox 3.6 */
-	border-top-left-radius: 4px;
-}
-
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
-	-webkit-border-top-right-radius: 4px; /* Safari 4 */
-	-moz-border-radius-topright: 4px; /* Firefox 3.6 */
-	border-top-right-radius: 4px;
-}
-
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
-	-webkit-border-bottom-left-radius: 4px; /* Safari 4 */
-	-moz-border-radius-bottomleft: 4px; /* Firefox 3.6 */
-	border-bottom-left-radius: 4px;
-}
-
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
-	-webkit-border-bottom-right-radius: 4px; /* Safari 4 */
-	-moz-border-radius-bottomright: 4px; /* Firefox 3.6 */
-	border-bottom-right-radius: 4px;
-}
-
-/* Overlays */
-
-.ui-widget-overlay {
-	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
-	opacity: .30;
-	filter:Alpha(Opacity=30);
-}
-
-.ui-widget-shadow {
-	margin: -8px 0 0 -8px;
-	padding: 8px;
-	background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
-	opacity: .30;
-	filter:Alpha(Opacity=30);
-	-webkit-border-radius: 8px; /* Safari 4 */
-	-moz-border-radius: 8px; /* Firefox 3.6 */
-	border-radius: 8px;
-}
-
-/*
- * jQuery UI Accordion 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/accordion/
- */
-
-/* IE/Win - Fix animation bug - #4615 */
-.ui-accordion {
-	width: 100%;
-}
-
-.ui-accordion .ui-accordion-li-fix {
-	display: inline;
-}
-
-.ui-accordion .ui-accordion-header-active {
-	border-bottom: 0 !important;
-}
-
-.ui-accordion .ui-accordion-header {
-	display: block;
-	cursor: pointer;
-	position: relative;
-	margin-top: 2px;
-	padding: .5em .5em .5em .7em;
-	min-height: 0; /* support: IE7 */
-}
-
-.ui-accordion .ui-accordion-icons {
-	padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-noicons {
-	padding-left: .7em;
-}
-.ui-accordion .ui-accordion-icons .ui-accordion-icons {
-	padding-left: 2.2em;
-}
-.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
-	position: absolute;
-	left: .5em;
-	top: 50%;
-	margin-top: -8px;
-}
-
-.ui-accordion .ui-accordion-content {
-	padding: 1em 2.2em;
-    border-top: 0 none;
-	margin-top: -3px;
-	position: relative;
-	top: 1px;
-	margin-bottom: 2px;
-	overflow: auto;
-	display: none;
-}
-
-.ui-accordion .ui-accordion-content-active {
-	display: block;
-}
-
-
-/*
- * jQuery UI Autocomplete 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/autocomplete/
- */
-
-.ui-autocomplete {
-	position: absolute;
-	top: 0;
-	left: 0;
-	cursor: default;
-}
-
-
-/*
- * jQuery UI Button 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button#theming
- */
-
-.ui-button {
-	cursor: pointer;
-	display: inline-block;
-	padding: 6px 12px;
-  	margin-bottom: 0;
-	font-size: 14px;
-	font-weight: normal;
-	line-height: 1.428571429;
-	text-align: center;
-	white-space: nowrap;
-	vertical-align: middle;
-	cursor: pointer;
-	border: 1px solid #ccc;
-	-webkit-user-select: none;
-	 -moz-user-select: none;
-	  -ms-user-select: none;
-	   -o-user-select: none;
-	      user-select: none;
-}
-
-.ui-button:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-
-.ui-button:focus,
-.ui-button:hover {
-	color: #333333;
-    background-color: #ebebeb;
-    border-color: #adadad;
-    text-decoration: none;
-}
-
-ui-button.disabled,
-ui-button[disabled],
-fieldset[disabled] ui-button,
-ui-button.disabled:hover,
-ui-button[disabled]:hover,
-fieldset[disabled] ui-button:hover,
-ui-button.disabled:focus,
-ui-button[disabled]:focus,
-fieldset[disabled] ui-button:focus,
-ui-button.disabled:active,
-ui-button[disabled]:active,
-fieldset[disabled] ui-button:active,
-ui-button.disabled.active,
-ui-button[disabled].active,
-fieldset[disabled] ui-button.ui-state-active {
-  background-color: #ffffff;
-  border-color: #cccccc;
-}
-
-.ui-btn-lg{
-	padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.33;
-  border-radius: 6px;
-}
-
-.ui-btn-sm,
-.ui-btn-xs {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-
-.ui-btn-xs {
-  padding: 1px 5px;
-}
-
-.ui-btn-block {
-  display: block;
-  width: 100%;
-  padding-right: 0;
-  padding-left: 0;
-}
-
-.ui-btn-block + .ui-btn-block {
-  margin-top: 5px;
-}
-
-input[type="submit"].ui-btn-block,
-input[type="reset"].ui-btn-block,
-input[type="button"].ui-btn-block {
-  width: 100%;
-}
-
-.ui-button-text-icon-primary 
-.ui-button-icon-primary {
-    float:left;
-}
-
-.ui-button-text-icon-primary {
-    padding:2px 7px 3px;
-}
-
-.ui-button-primary {
-	color: #ffffff;
-    background-color: #428bca;
-    border-color: #357ebd;
-}
-
-.ui-button-warning {
-	color: #ffffff;
-	background-color: #f0ad4e;
-	border-color: #eea236;
-}
-
-.ui-button-info {
-  color: #ffffff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.ui-button-danger {
-	color: #ffffff;
-	background-color: #d9534f;
-	border-color: #d43f3a;
-}
-
-.ui-button-inverse {
-	color: #ffffff;
-	background-color: #222222;
-    border-color: #080808;
-}
-
-.ui-button-success {
-  color: #ffffff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-
-.ui-button-error {
-	color: #ffffff;
-	background-color: #c43c35;
-	border-color: #882a25;
-}
-
-.ui-button-primary:hover,
-.ui-button-success:hover,
-.ui-button-info:hover,
-.ui-button-danger:hover, 
-.ui-button-warning:hover,
-.ui-button-inverse:hover{
-	color: #ffffff;
-	text-decoration: none;
-}
-
-.ui-button-primary:hover,
-.ui-button-primary:focus {
-	color: #ffffff;
-	background-color: #3276b1;
-	border-color: #285e8e;
-}
-.ui-button-success:hover{
-  color: #ffffff;
-  background-color: #47a447;
-  border-color: #398439;
-}
-
-.ui-button-info:hover{
-  color: #ffffff;
-  background-color: #39b3d7;
-  border-color: #269abc;
-}
-
-.ui-button-danger:hover{
-  color: #ffffff;
-  background-color: #d2322d;
-  border-color: #ac2925;
-}
-
-.ui-button-warning:hover{
-	color: #ffffff;
-	background-color: #ed9c28;
-	border-color: #d58512;
-}
-
-.ui-button-inverse:hover{
-	color: #ffffff;
-	background-color: #363636;
-	border-color: #000000;
-}
-
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
-	width: 2.2em;
-}
-
-/* button elements seem to need a little more width */
-.ui-button-icons-only {
-	width: 3.4em;
-}
-
-button.ui-button-icons-only {
-	width: 3.7em;
-}
-
-.ui-button-text-icon-primary .ui-button-icon-primary.ui-icon {
-    margin-top:5px;
-}
-/*button text element */
-
-.ui-button .ui-button-text {
-	display: block;
-	line-height: normal;
-}
-
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
-	padding: .4em;
-	text-indent: -9999px;
-	display:none; /*tempfix*/
-}
-
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 1em .4em 2.1em;
-}
-
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 2.1em .4em 1em;
-}
-
-.ui-button-text-icons .ui-button-text {
-	padding-left: 2.1em;
-	padding-right: 2.1em;
-}
-
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
-	padding: .4em 1em;
-}
-
-/*button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
-    margin-bottom: 0;
-    margin-top: 0;
-    top: 50%;
-}
-
-.ui-button-icon-only .ui-icon {
-	left: 50%;
-	/* chrome margin*/
-	margin-left: -8px;
-	/* firefox margin*/
-    margin-right: -6px;
-}
-
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
-	left: .5em;
-}
-
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-	right: .5em;
-}
-
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-	right: .5em;
-}
-
-/*button sets*/
-
-.ui-buttonset {
-	margin-right: 7px;
-}
-
-.ui-buttonset .ui-state-active {
-  color: #ffffff;
-  background-color: #428bca;
-  border-color: #357ebd;
-}
-
-.ui-buttonset .ui-state-active.ui-state-hover {
-  color: #ffffff;
-  background-color: #3276b1;
-  border-color: #285e8e;
-}
-
-.ui-buttonset .ui-button {
-	margin-left: 0;
-	margin-right: -.4em;
-}
-
-/* reset extra padding in Firefox */
-button.ui-button::-moz-focus-inner {
-	border: 0;
-	padding: 0;
-} 
-
-
-/*
- * jQuery UI Menu 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-
-.ui-menu {
-	list-style: none;
-	padding: 2px;
-	margin: 0;
-	display: block;
-	outline: none;
-}
-
-.ui-menu .ui-menu{
-	margin-top: -3px;
-	position: absolute;
-	list-style:none;
-}
-
-/*
-* Bug inline with IE sub menu
-*/
-/* IE9, IE10 */
-@media screen and (min-width:0\0) {
-	.ui-menu li {
-	  list-style-type: none;
-	  display: inline;
-	  line-height: 0;
-	}
-
-	li.ui-menu-item { 
-	  /* This fixes the IE10 issue (jQuery UI Issue #8844)*/
-	  list-style-type: none;
-	}
-}
-
-.ui-menu .ui-menu-item {
-	margin: 0;
-	padding: 0;
-	width: 100%;
-	list-style:none;
-	/* support: IE10, see #8844 */
-	list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
-}
-
-.ui-menu .ui-menu-divider {
-	margin: 5px -2px 5px -2px;
-	height: 0;
-	font-size: 0;
-	line-height: 0;
-	border-width: 1px 0 0 0;
-}
-
-.ui-menu .ui-menu-item a {
-	text-decoration: none;
-	display: block;
-	padding: 2px .4em;
-	line-height: 1.5;
-	min-height: 0; /* support: IE7 */
-	font-weight: normal;
-}
-
-.ui-menu .ui-menu-item a.ui-corner-all{
-	-webkit-border-radius: 0px; /* Safari 4 */
-    -moz-border-radius: 0px; /* Firefox 3.6 */
-    border-radius: 0px;
-}
-
-.ui-menu .ui-menu-item a.ui-state-focus,
-.ui-menu .ui-menu-item a.ui-state-active,
-.ui-menu .ui-menu-item a.ui-widget-content{
-	font-weight: bold;
-	margin: 0;
-    background-color: #428BCA;
-    border-color: #357EBD;
-    color: #FFFFFF;
-    display: block;
-    white-space: nowrap;
-}
-
-/* Fix problem with border in ui-state-active */
-.ui-menu .ui-menu-item a.ui-state-active {
-	padding: 1px .4em;
-}
-
-.ui-menu .ui-state-disabled {
-	font-weight: normal;
-	margin: .4em 0 .2em;
-	line-height: 1.5;
-}
-
-.ui-menu .ui-state-disabled a {
-	cursor: default;
-}
-
-/* icon support */
-.ui-menu-icons {
-	position: relative;
-}
-
-.ui-menu-icons .ui-menu-item a {
-	position: relative;
-	padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
-	position: absolute;
-	top: .2em;
-	left: .2em;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
-	position: static;
-	float: right;
-}
-
-.ui-menu {
-	/*width: 200px;*/
-	margin-bottom: 2em;
-}
-
-
-/*
- * jQuery UI spinner 1.10.3
- *
-* Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Menu#theming
- */
-
-.ui-spinner {
-	position: relative;
-	display: inline-block;
-	overflow: hidden;
-	padding: 0;
-	vertical-align: middle;
-}
-
-.ui-spinner-input {
-	border: none;
-	background: none;
-	padding: 0;
-	margin: .2em 0;
-	vertical-align: middle;
-	margin-left: .4em;
-	margin-right: 22px;
-}
-
-.ui-spinner-button {
-	width: 16px;
-	height: 50%;
-	font-size: .5em;
-	padding: 0;
-	margin: 0;
-	text-align: center;
-	position: absolute;
-	cursor: default;
-	display: block;
-	overflow: hidden;
-	right: 0;
-}
-
-/* more specificity required here to overide default borders */
-.ui-spinner a.ui-spinner-button {
-	border-top: none;
-	border-bottom: none;
-	border-right: none;
-}
-
-/* vertical centre icon */
-.ui-spinner .ui-icon {
-	position: absolute;
-	margin-top: -8px;
-	top: 50%;
-	left: 0;
-}
-
-.ui-spinner-up {
-	top: 0;
-}
-
-.ui-spinner-down {
-	bottom: 0;
-}
-
-/* need to fix icons sprite */
-.ui-spinner .ui-icon-triangle-1-s {
-	background-position: -65px -16px;
-}
-
-/*
- * jQuery UI Dialog 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog#theming
- */
-
-.ui-dialog {
-	position: absolute;
-	top: 0;
-	left: 0;
-	padding: .2em;
-	width: 300px;
-	overflow: hidden;
-	outline: 0;
-	background-clip: padding-box;
-	background-color: #ffffff;
-	border: 1px solid rgba(0, 0, 0, 0.3);
-	border-radius: 6px 6px 6px 6px;
-	-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); /* Safari 4 */
-	-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); /* Firefox 3.6 */
-	box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-	/*left: 50%;
-	margin-left: -280px;*/
-	outline: medium none;
-	/*top: 10%;
-	width: 560px;*/
-	z-index: 1050;
-}
-
-.ui-dialog .ui-dialog-titlebar {
-	/*padding: .4em 1em;*/
-	position: relative;
-	padding: 5px 15px;
-	border: 0 0 0 1px solid;
-	border-color: white;
-	padding: 5px 15px;
-	font-size: 18px;
-	text-decoration: none;
-	-webkit-border-bottom-right-radius: 0; /* Safari 4 */
-	-moz-border-radius-bottomright: 0; /* Firefox 3.6 */
-	border-bottom-right-radius: 0;
-	-webkit-border-bottom-left-radius: 0; /* Safari 4 */
-	-moz-border-radius-bottomleft: 0; /* Firefox 3.6 */
-	border-bottom-left-radius: 0;
-	border-bottom: 1px solid #ccc;
-}
-
-.ui-dialog .ui-dialog-title {
-	float: left;
-	color: #404040;
-	font-weight: bold;
-	text-overflow: ellipsis;
-	overflow: hidden;
-}
-
-.ui-dialog .ui-dialog-titlebar-close {
-	position: absolute;
-	right: .3em;
-	top: 50%;
-	width: 19px;
-	margin: -20px 0 0 0;
-	padding: 1px;
-	height: 18px;
-	font-size: 20px;
-	font-weight: bold;
-	line-height: 13.5px;
-	text-shadow: 0 1px 0 #ffffff;
-	filter:alpha(opacity=25);
-	-khtml-opacity: 0.25;
-	-moz-opacity: 0.25;
-	opacity: 0.25;
-	background: none;
-	border-width: 0;
-	border: none;
-	-webkit-box-shadow: none; /* Safari 4 */
-	-moz-box-shadow: none; /* Firefox 3.6 */
-	box-shadow: none;
-}
-
-.ui-dialog .ui-dialog-titlebar-close span {
-	display: block;
-	margin: 1px;
-	text-indent: 9999px;
-}
-
-.ui-dialog .ui-dialog-titlebar-close:hover,
-.ui-dialog .ui-dialog-titlebar-close:focus {
-	padding: 1px;
-	filter:alpha(opacity=90);
-	-moz-opacity: 0.90;
-	opacity: 0.90;	 
-}
-
-.ui-dialog .ui-dialog-content {
-	position: relative;
-	border: 0;
-	padding: .5em 1em;
-	background: none;
-	overflow: auto;
-}
-
-.ui-dialog .ui-dialog-buttonpane {
-	text-align: left;
-	border-width: 1px 0 0 0;
-	background-image: none;
-	margin: .5em 0 0 0;
-	background-color: #ffffff;
-	padding: 5px 15px 5px;
-	border-top: 1px solid #ddd;
-	-webkit-border-radius: 0 0 6px 6px; /* Safari 4 */
-	-moz-border-radius: 0 0 6px 6px; /* Firefox 3.6 */
-	border-radius: 0 0 6px 6px;
-	-webkit-box-shadow: inset 0 1px 0 #ffffff; /* Safari 4 */
-	-moz-box-shadow: inset 0 1px 0 #ffffff; /* Firefox 3.6 */
-	box-shadow: inset 0 1px 0 #ffffff;
-	margin-bottom: 0;
-
-}
-
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
-	float: right;
-}
-
-.ui-dialog .ui-dialog-buttonpane button {
-	margin: .5em .4em .5em 0;
-	cursor: pointer;
-}
-
-.ui-dialog .ui-resizable-se {
-	width: 14px;
-	height: 14px;
-	right: 3px;
-	bottom: 3px;
-}
-
-.ui-draggable .ui-dialog-titlebar {
-	cursor: move;
-}
-
-.ui-dialog-buttonpane .ui-dialog-buttonset .ui-button {
-    color: #ffffff;
-    background-color: #496A84;
-    border-color: #315D80;
-}
-
-.ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover{
-    color: #ffffff;
-    background-color: #42617A;
-    border-color: #315D80;
-}
-
-/***Dialog fixes**/
-
-.ui-dialog-buttonset .ui-button:not(:first-child) {
-    cursor: pointer;
-    display: inline-block;
-    color: #333333;
-    background-color: #ffffff;
-    border: 1px solid #cccccc;
-    -webkit-transition: 0.1s linear all;
-    -moz-transition: 0.1s linear all;
-    -o-transition: 0.1s linear all;
-    transition: 0.1s linear all;
-    overflow: visible;
-}
-
-.ui-dialog-buttonset .ui-button:not(:first-child).ui-state-hover{
-    color: #333333;
-    background-color: #ebebeb;
-    border-color: #adadad;
-    text-decoration: none;
-}
-
-/* ui-dialog-buttonset UI info */
-.ui-dialog-buttonset .ui-button.ui-button-info{
-	color: #ffffff;
-	background-color: #5bc0de;
-	border-color: #46b8da;
-}
-
-.ui-dialog-buttonset .ui-button.ui-button-info.ui-state-hover{
-	color: #ffffff;
-	background-color: #39b3d7;
-	border-color: #269abc;
-}
-
-/* ui-dialog-buttonset UI success */
-.ui-dialog-buttonset .ui-button.ui-button-success{
-	color: #ffffff;
-	background-color: #5cb85c;
-	border-color: #4cae4c;
-}
-
-.ui-dialog-buttonset .ui-button.ui-button-success.ui-state-hover{
-	color: #ffffff;
-	background-color: #47a447;
-	border-color: #398439;
-}
-
-/* ui-dialog-buttonset UI warning */
-.ui-dialog-buttonset .ui-button.ui-button-warning{
-	color: #ffffff;
-	background-color: #f0ad4e;
-	border-color: #eea236;
-}
-
-.ui-dialog-buttonset .ui-button.ui-button-warning.ui-state-hover{
-    color: #ffffff;
-	background-color: #ed9c28;
-	border-color: #d58512;
-}
-
-/* ui-dialog-buttonset UI Danger */
-.ui-dialog-buttonset .ui-button.ui-button-danger{
-	color: #ffffff;
-	background-color: #d9534f;
-	border-color: #d43f3a;
-}
-
-.ui-dialog-buttonset .ui-button.ui-button-danger.ui-state-hover{
-	color: #ffffff;
-	background-color: #d2322d;
-	border-color: #ac2925;
-}
-
-/* ui-dialog-buttonset UI Inverse */
-.ui-dialog-buttonset .ui-button.ui-button-inverse{
-	color: #ffffff;
-	background-color: #222222;
-    border-color: #080808;
-}
-
-.ui-dialog-buttonset .ui-button.ui-button-inverse.ui-state-hover{
-	color: #ffffff;
-	background-color: #363636;
-	border-color: #000000;
-}
-
-/*
- * jQuery UI Slider 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider#theming
- */
-
-.ui-slider {
-	position: relative;
-	text-align: left;
-}
-
-/* For IE8 - See #6727 */
-.ui-slider.ui-state-disabled .ui-slider-handle,
-.ui-slider.ui-state-disabled .ui-slider-range {
-	filter: inherit;
-}
-
-.ui-slider .ui-slider-handle {
-	position: absolute;
-	z-index: 2;
-	width: 1.2em;
-	height: 1.2em;
-	cursor: default;
-}
-
-.ui-slider .ui-slider-range {
-	position: absolute;
-	z-index: 1;
-	font-size: .7em;
-	display: block;
-	border: 0;
-	background-position: 0 0;
-	color: #ffffff;
-	background-color: #0e90d2;
-	background-image: -moz-linear-gradient(top, #149bdf, #0480be);
-	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
-	background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
-	background-image: -o-linear-gradient(top, #149bdf, #0480be);
-	background-image: linear-gradient(to bottom, #149bdf, #0480be);
-	background-repeat: repeat-x;
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
-	-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-	-moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-	box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	-webkit-transition: width 0.6s ease;
-	-moz-transition: width 0.6s ease;
-	-o-transition: width 0.6s ease;
-	transition: width 0.6s ease;
-}
-
-.ui-slider-horizontal {
-	height: .8em;
-}
-
-.ui-slider-horizontal .ui-slider-handle {
-	top: -.3em;
-	margin-left: -.6em;
-}
-
-.ui-slider-horizontal .ui-slider-range {
-	top: 0;
-	height: 100%;
-}
-
-.ui-slider-horizontal .ui-slider-range-min {
-	left: 0;
-}
-
-.ui-slider-horizontal .ui-slider-range-max {
-	right: 0;
-}
-
-.ui-slider-vertical {
-	width: .8em;
-	height: 100px;
-}
-
-.ui-slider-vertical .ui-slider-handle {
-	left: -.3em;
-	margin-left: 0;
-	margin-bottom: -.6em;
-}
-
-.ui-slider-vertical .ui-slider-range {
-	left: 0;
-	width: 100%;
-}
-
-.ui-slider-vertical .ui-slider-range-min {
-	bottom: 0;
-}
-
-.ui-slider-vertical .ui-slider-range-max {
-	top: 0;
-}
-
-/*
- * jQuery UI Tabs 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/tabs/
- */
-
-.ui-tabs {
-	position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
-	border: 0;
-	-webkit-border-radius: 0; /* Safari 4 */
-	-moz-border-radius: 0; /* Firefox 3.6 */
-	border-radius: 0;
-}
-
-.ui-tabs .ui-tabs-nav {
-	margin-bottom: 5px;
-	border: solid #ddd;
-	border-width: 0 0 1px 0;
-	-webkit-border-radius: 0; /* Safari 4 */
-	-moz-border-radius: 0; /* Firefox 3.6 */
-	border-radius: 0;
-	background: none;
-}
-
-.ui-tabs .ui-tabs-nav li {
-	position: relative;
-	top: 0;
-	float: left;
-	margin-right: 2px;
-	margin-bottom: -1px;
-	border: 0;
-	list-style: none;
-	white-space: nowrap;
-	background: none;
-}
-
-.ui-tabs-nav .ui-state-default {
-	border: 0;
-	-webkit-box-shadow: none;  /* Safari 4 */
-	-moz-box-shadow: none;  /* Firefox 3.6 */
-	box-shadow: none;
-}
-
-.ui-tabs .ui-tabs-nav li a {
-	float: left;
-	border: 1px solid #fff;
-	border-bottom: 1px solid #ddd;
-	-webkit-border-radius: 4px 4px 0 0; /* Safari 4 */
-	-moz-border-radius: 4px 4px 0 0; /* Firefox 3.6 */
-	border-radius: 4px 4px 0 0;
-	padding: 8px 12px;
-	font-weight: normal;
-	text-decoration: none;
-	outline: none;
-	color: #0069D6;
-	background: none;
-}
-
-.ui-tabs .ui-tabs-nav li a:hover {
-	border: 1px solid whiteSmoke;
-	border-bottom: 1px solid #ddd;
-	background-color: whiteSmoke;
-}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-active a {
-	border: 1px solid #ddd;
-	border-bottom: 1px solid #fff;
-	background-color: #fff;
-	color: #555;
-}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-active:hover {
-	background: #fff;
-	cursor: text;
-}
-
-.ui-tabs .ui-tabs-nav li.ui-tabs-active a,
-.ui-tabs .ui-tabs-nav li.ui-state-disabled a,
-.ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
-	cursor: text;
-}
-
-/* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
-.ui-tabs .ui-tabs-panel {
-	display: block;
-	margin: 1em 0;
-	border: 0;
-	-webkit-border-radius: 0; /* Safari 4 */
-	-moz-border-radius: 0; /* Firefox 3.6 */
-	border-radius: 0;
-	padding: 1px 0;
-	background: none;
-}
-
-.ui-tabs .ui-tabs-hide {
-	display: none !important;
-}
-
-/* IE fix for background inheritance from ui-widget */
-.ui-tabs .ui-tabs-nav li {
-	filter:none;
-}
-
-/*
- * jQuery UI Tooltip 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/tooltip/
- */
-
-.ui-tooltip {
-    display: block;
-    font-size: 11px;
-    opacity: 0.8;
-    position: absolute;
-    visibility: visible;
-    z-index: 1024;
-    max-width: 200px;
-}
-
-.ui-tooltip {
-    background: #000000;
-    border: 1px solid #000000;
-}
-
-.ui-tooltip {
-    color: #FFFFFF;
-    padding: 3px 8px;
-    text-align: center;
-    text-decoration: none;
-    -webkit-box-shadow: inset 0 1px 0 #000000; /* Safari 4 */
-    -moz-box-shadow: inset 0 1px 0 #000000; /* Firefox 3.6 */
-    box-shadow: inset 0 1px 0 #000000;
-    border-radius: 4px 4px 4px 4px;
-}
-
-body .ui-tooltip {
-	border-width: 1px;
-}
-
-.arrow {
-    overflow: hidden;
-    position: absolute;
-    margin-left: 0;
-    height: 20px;
-    width: 20px;
-}
-
-.arrow.bottom {
-    top: 100%;
-    left: 38%;
-}
-
-.arrow.top {
-    top: -50%;
-    bottom: 22px;
-    left: 42%;
-}
-
-.arrow.left {
-    top : 25%;
-    left: -15%;
-    right: 0;
-    bottom:-16px;
-}
-
-.arrow.right {
-    top: 26%;
-    left: 100%;
-    right: 0;
-    bottom:-16px;
-    margin-left: 1px;
-}
-
-.arrow:after {
-    content : " " ;
-    position : absolute ;
-    height : 0 ;
-    left:0;
-    top: 0;
-    width: 0;
-    margin-left : 0 ;
-    bottom : 12px ;
-    box-shadow: 6px 5px 9px -9px black;
-}
-
-.arrow.bottom:after {
-    border-top:8px solid #000000;
-    border-right:8px solid transparent;
-    border-bottom:8px solid transparent;
-    border-left:8px solid transparent;
-}
-
-.arrow.top:after {
-    border-top:6px solid transparent;
-    border-right:6px solid transparent;
-    border-bottom:6px solid #000000;
-    border-left:6px solid transparent;
-}
-
-.arrow.left:after{
-    width:0;
-    border-top: 6px solid transparent;
-    border-right: 6px solid #000000;
-    border-bottom: 6px solid transparent;
-    border-left: 6px solid transparent;
-}
-
-.arrow.right:after{
-    width:0;
-    border-top: 6px solid transparent;
-    border-right: 6px solid transparent;
-    border-bottom: 6px solid transparent;
-    border-left: 6px solid #000000;
-}
-
-/*
- * jQuery UI Datepicker 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://jqueryui.com/datepicker/
- */
-
-.ui-datepicker {
-	width: 17em;
-	padding: .2em .2em 0;
-	display: none;
-}
-
-.ui-datepicker .ui-datepicker-header {
-	position:relative;
-	padding: .2em 0;
-	border: 0;
-	font-weight: bold;
-	width: 100%;
-	padding: 4px 0;
-	background-color: #f5f5f5;
-	color: #808080;
-}
-
-.ui-datepicker .ui-datepicker-prev,
-.ui-datepicker .ui-datepicker-next {
-	position: absolute;
-	top: 2px;
-	width: 1.8em;
-	height: 1.8em;
-}
-
-.ui-datepicker .ui-datepicker-prev-hover,
-.ui-datepicker .ui-datepicker-next-hover {
-	/*top: 1px;*/
-}
-
-.ui-datepicker .ui-datepicker-prev {
-	left: 2px;
-}
-
-.ui-datepicker .ui-datepicker-next {
-	right: 2px;
-}
-
-.ui-datepicker .ui-datepicker-prev-hover {
-	/*left:1px;*/
-}
-
-.ui-datepicker .ui-datepicker-next-hover {
-	/*right:1px;*/
-}
-
-.ui-datepicker .ui-datepicker-prev span,
-.ui-datepicker .ui-datepicker-next span {
-	display: block;
-	position: absolute;
-	left: 50%;
-	margin-left: -8px;
-	top: 50%;
-	margin-top: -8px;
-}
-
-.ui-datepicker .ui-datepicker-title {
-	margin: 0 2.3em;
-	line-height: 1.8em;
-	text-align: center;
-}
-
-.ui-datepicker .ui-datepicker-title select {
-	font-size: 1em;
-	margin: 1px 0;
-}
-
-.ui-datepicker select.ui-datepicker-month-year {
-	width: 100%;
-}
-
-.ui-datepicker select.ui-datepicker-month,
-.ui-datepicker select.ui-datepicker-year {
-	width: 49%;
-}
-
-.ui-datepicker table {
-	width: 100%;
-	font-size: .9em;
-	border-collapse: collapse;
-	margin:0 0 .4em;
-}
-
-.ui-datepicker th {
-	padding: .7em .3em;
-	text-align: center;
-	font-weight: bold;
-	border: 0;
-}
-
-.ui-datepicker td {
-	border: 0;
-	padding: 1px;
-}
-
-.ui-datepicker td span,
-.ui-datepicker td a {
-	display: block;
-	padding: .2em;
-	text-align: right;
-	text-decoration: none;
-}
-
-.ui-datepicker .ui-datepicker-buttonpane {
-	background-image: none;
-	margin: .7em 0 0 0;
-	padding:0 .2em;
-	border-left: 0;
-	border-right: 0;
-	border-bottom: 0;
-}
-
-.ui-datepicker .ui-datepicker-buttonpane button {
-	float: right;
-	margin: .5em .2em .4em;
-	cursor: pointer;
-	padding: .2em .6em .3em .6em;
-	width: auto;
-	overflow:visible;
-}
-
-.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
-	float: left;
-}
-
-/* with multiple calendars */
-
-.ui-datepicker.ui-datepicker-multi {
-	width: auto;
-}
-
-.ui-datepicker-multi .ui-datepicker-group {
-	float: left;
-}
-
-.ui-datepicker-multi .ui-datepicker-group table {
-	width: 95%;
-	margin: 0 auto .4em;
-}
-
-.ui-datepicker-multi-2 .ui-datepicker-group {
-	width: 50%;
-}
-
-.ui-datepicker-multi-3 .ui-datepicker-group {
-	width: 33.3%;
-}
-
-.ui-datepicker-multi-4 .ui-datepicker-group {
-	width: 25%;
-}
-
-.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header {
-	border-left-width: 0;
-}
-
-.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
-	border-left-width: 0;
-}
-
-.ui-datepicker-multi .ui-datepicker-buttonpane {
-	clear: left;
-}
-
-.ui-datepicker-row-break {
-	clear: both;
-	width: 100%;
-	font-size: 0em;
-}
-
-/* RTL support */
-
-.ui-datepicker-rtl {
-	direction: rtl;
-}
-
-.ui-datepicker-rtl .ui-datepicker-prev {
-	right: 2px;
-	left: auto;
-}
-
-.ui-datepicker-rtl .ui-datepicker-next {
-	left: 2px;
-	right: auto;
-}
-
-.ui-datepicker-rtl .ui-datepicker-prev:hover {
-	right: 1px;
-	left: auto;
-}
-
-.ui-datepicker-rtl .ui-datepicker-next:hover {
-	left: 1px;
-	right: auto;
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane {
-	clear: right;
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane button {
-	float: left;
-}
-
-.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current {
-	float: right;
-}
-
-.ui-datepicker-rtl .ui-datepicker-group {
-	float: right;
-}
-
-.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header {
-	border-right-width: 0;
-	border-left-width: 1px;
-}
-
-.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
-	border-right-width: 0;
-	border-left-width: 1px;
-}
-
-/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
-.ui-datepicker-cover {
-	display: none; /*sorry for IE5*/
-	display/**/: block; /*sorry for IE5*/
-	position: absolute; /*must have*/
-	z-index: -1; /*must have*/
-	filter: mask(); /*must have*/
-	top: -4px; /*must have*/
-	left: -4px; /*must have*/
-	width: 200px; /*must have*/
-	height: 200px; /*must have*/
-}
-
-.ui-datepicker th {
-	font-weight: bold;
-	color: gray;
-}
-
-.ui-datepicker-today a:hover {
-	background-color: #808080;
-	color: #ffffff;
-
-}
-.ui-datepicker-today a {
-	background-color: #BFBFBF;
-	cursor: pointer;
-	padding: 0 4px;
-	margin-bottom: 0;
-}
-
-.ui-datepicker td a {
-	margin-bottom: 0;
-	border: 0;
-}
-
-.ui-datepicker td:hover {
-	color: #ffffff;
-}
-
-.ui-datepicker td .ui-state-default {
-	border: 0;
-	background:none;
-	margin-bottom: 0;
-	padding: 5px;
-	color: gray;
-	text-align: center;
-	filter: none;
-}
-
-.ui-datepicker td .ui-state-highlight{
-	color: #ffffff;
-	background-color: #5bc0de;
-	border-color: #46b8da;
-	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	-webkit-border-radius: 4px; /* Safari 4 */
-	-moz-border-radius: 4px; /* Firefox 3.6 */
-	border-radius: 4px;
-}
-
-.ui-datepicker td .ui-state-active {
-	color: #333333;
-    background-color: #ebebeb;
-    border-color: #adadad;
-	margin-bottom: 0;
-	font-size: normal;
-	text-shadow: 0;
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	-webkit-border-radius: 4px; /* Safari 4 */
-	-moz-border-radius: 4px; /* Firefox 3.6 */
-	border-radius: 4px;
-}
-
-.ui-datepicker td .ui-state-hover {
-	color: #ffffff;
-	background: #428bca;
-	background-color: #428bca;
-	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-	border-color: #357ebd;
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	-webkit-border-radius: 4px; /* Safari 4 */
-	-moz-border-radius: 4px; /* Firefox 3.6 */
-	border-radius: 4px;
-}
-
-
-/*
- * jQuery UI Progressbar 1.10.3
- *
- * Copyright 2013, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar#theming
- */
-
-.ui-progressbar {
-	height:2em;
-	margin-bottom: 20px;
-	border:0px;
-	overflow: hidden;
-	background-color: #f7f7f7;
-	background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
-	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
-	background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
-	background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
-	background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
-	background-repeat: repeat-x;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
-	-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-	-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-	box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-
-.ui-progressbar .ui-progressbar-value {
-	margin: 0px;
-	height: 100%;
-	height:100%;
-	color: #ffffff; /*this can be removed if ui-widget-header is blue*/
-	background-color: #428BCA;
-	-webkit-box-sizing: border-box;
-	-moz-box-sizing: border-box;
-	box-sizing: border-box;
-	-webkit-transition: width 0.6s ease;
-	transition: width 0.6s ease;
-}
-
-.ui-progressbar .ui-progressbar-overlay {
-	background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
-	background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-	background-size: 40px 40px;
-	-webkit-animation: progress-bar-stripes 2s linear infinite;
-	-moz-animation: progress-bar-stripes 2s linear infinite;
-	-ms-animation: progress-bar-stripes 2s linear infinite;
-	-o-animation: progress-bar-stripes 2s linear infinite;
-	animation: progress-bar-stripes 2s linear infinite;
-}
-
-.ui-progressbar-indeterminate .ui-progressbar-value {
-	background-image: none;
-}
-
-/*** Input field styling from Bootstrap **/
-
- input, textarea {
-	-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-	-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-	-o-transition: border linear 0.2s, box-shadow linear 0.2s;
-	transition: border linear 0.2s, box-shadow linear 0.2s;
-}
-
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-
-input:focus, textarea:focus {
-	outline: 0;
-	border-color: rgba(82, 168, 236, 0.8);
-	-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); /* Safari 4 */
-	-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); /* Firefox 3.6 */
-	box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
-}
-input[type=file]:focus, input[type=checkbox]:focus, select:focus {
-	-webkit-box-shadow: none; /* Safari 4 */
-	-moz-box-shadow: none; /* Firefox 3.6 */
-	box-shadow: none;
-	outline: 1px dotted #666;
-}
-
-input[type="text"],
-input[type="email"],
-input[type="tel"],
-input[type="search"],
-input[type="url"],
-input[type="password"],
-.ui-autocomplete-input,
-textarea,
-.uneditable-input {
-	display: inline-block;
-	padding: 4px;
-	font-size: 13px;
-	line-height: 18px;
-	color: #555555;
-	border: 1px solid #ccc;
-	-webkit-border-radius: 3px; /* Safari 4 */
-	-moz-border-radius: 3px; /* Firefox 3.6 */
-	border-radius: 3px;
-}
-
-input[type="search"] {
-  -webkit-appearance: textfield;
-  -moz-box-sizing: content-box;
-  -webkit-box-sizing: content-box;
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-
-/**Toolbar**/
-
-.ui-toolbar {
-	padding: 7px 14px;
-	margin: 0 0 18px;
-	background-color: #f5f5f5;
-	background-repeat: repeat-x;
-	background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); /* Safari 5.1+, Chrome 10+ */
-	background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); /* Firefox 3.6 */
-	background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); /* Opera 11.10+ */
-	background-image: linear-gradient(top, #ffffff, #f5f5f5); /* CSS3 Compliant */
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); /* IE8 */
-	border: 1px solid #ddd;
-	-webkit-border-radius: 3px; /* Safari 4 */
-	-moz-border-radius: 3px; /* Firefox 3.6 */
-	border-radius: 3px;
-	-webkit-box-shadow: inset 0 1px 0 #ffffff; /* Safari 4 */
-	-moz-box-shadow: inset 0 1px 0 #ffffff; /* Firefox 3.6 */
-	box-shadow: inset 0 1px 0 #ffffff;
-}
-
-/********** VJ - Move to Less - End *************/
-
-/** File Input **/
-
-.customfile-button{
-    padding: 6px 12px;
-    margin-bottom: 0;
-    font-size: 14px;
-    font-weight: normal;
-    line-height: 1.428571429;
-    text-align: center;
-    white-space: nowrap;
-    vertical-align: middle;
-    cursor: pointer;
-    border: 1px solid #ccc;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    -o-user-select: none;
-    user-select: none;
-}
-/***Wijmo Theming**/
-
-div.wijmo-wijmenu {
-	padding:0 20px;
-	background-color: #222222;
-	background-repeat: repeat-x;
-	background-image: -webkit-linear-gradient(top, #333333, #222222); /* Safari 5.1+, Chrome 10+ */
-	background-image: -moz-linear-gradient(top, #333333, #222222); /* Firefox 3.6 */
-	background-image: -o-linear-gradient(top, #333333, #222222); /* Opera 11.10+ */
-	background-image: linear-gradient(top, #333333, #222222); /* CSS3 Compliant */
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); /* IE8 */
-	-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); /* Safari 4 */
-	-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); /* Firefox 3.6 */
-	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-
-.wijmo-wijmenu .ui-state-default {
-	-webkit-box-shadow: none; /* Safari 4 */
-	-moz-box-shadow: none; /* Firefox 3.6 */
-	box-shadow: none;
-	color: #bfbfbf;
-}
-
-.wijmo-wijmenu .ui-state-default .wijmo-wijmenu-text {
-	color: #bfbfbf;
-}
-
-.wijmo-wijmenu .ui-state-hover {
-	background: #444;
-	background: rgba(255, 255, 255, 0.05);
-}
-
-.wijmo-wijmenu .ui-state-hover .wijmo-wijmenu-text {
-	color: #ffffff;
-}
-
-div.wijmo-wijmenu .ui-widget-header h3 {
-	position: relative;
-	margin-top: 1px;
-	padding: 0;
-}
-
-.wijmo-wijmenu h3 a {
-	color: #ffffff;
-	display: block;
-	float: left;
-	font-size: 20px;
-	font-weight: 200;
-	line-height: 1;
-	margin-left: -20px;
-	margin-top: 1px;
-	padding: 8px 20px 12px;
-}
-
-.wijmo-wijmenu h3 a:hover{
-	background-color: rgba(255, 255, 255, 0.05);
-	color: #ffffff;
-	text-decoration: none;
-}
-
-.wijmo-wijmenu .ui-widget-header {
-	border: 0;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-parent .wijmo-wijmenu-child {
-	padding: 0.3em 0;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child {
-	background: #333;
-	border: 0;
-	margin: 0;
-	padding: 6px 0;
-	width: 160px;
-	-webkit-border-radius: 0 0 6px 6px; /* Safari 4 */
-	-moz-border-radius: 0 0 6px 6px; /* Firefox 3.6 */
-	border-radius: 0 0 6px 6px;
-	-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* Safari 4 */
-	-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* Firefox 3.6 */
-	box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-item {
-	margin: 0;
-	border: 0;
-}
-
-.wijmo-wijmenu a.wijmo-wijmenu-link {
-	margin: 0;
-	line-height: 19px;
-	padding: 10px 10px 11px;
-	border: 0;
-	-webkit-border-radius: 0; /* Safari 4 */
-	-moz-border-radius: 0; /* Firefox 3.6 */
-	border-radius: 0;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-link {
-	display: block;
-	float: none;
-	padding: 4px 15px;
-	width: auto;
-}
-
-div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-text {
-	float: none;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child .ui-state-hover {
-	background: #191919;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-separator {
-	padding: 5px 0;
-	background-image: none;
-	background-color: #222;
-	border-top: 1px solid #444;
-	border-bottom: 0;
-	border-left: 0;
-	border-right: 0;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input {
-	-moz-transition: none 0s ease 0s;
-	background-color: rgba(255, 255, 255, 0.3);
-	border: 1px solid #111111;
-	border-radius: 4px 4px 4px 4px;
-	-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.25); /* Safari 4 */
-	-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.25); /* Firefox 3.6 */
-	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.25);
-	color: rgba(255, 255, 255, 0.75);
-	font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-	line-height: 1;
-	margin: 5px 10px 0 10px;
-	padding: 4px 9px;
-	width: 100px;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input:hover {
-	background-color: rgba(255, 255, 255, 0.5);
-	color: #ffffff;
-}
-
-.wijmo-wijmenu .wijmo-wijmenu-item input:focus {
-	background-color: #ffffff;
-	border: 0 none;
-	-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); /* Safari 4 */
-	-moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); /* Firefox 3.6 */
-	box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-	color: #404040;
-	outline: 0 none;
-	padding: 5px 10px;
-	text-shadow: 0 1px 0 #ffffff;
-}
-
-.wijmo-wijmenu .ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
-	text-shadow:none;
-}
-
-.wijmo-wijmenu .ui-state-default {
-	-webkit-box-shadow: none; /* Safari 4 */
-	-moz-box-shadow: none; /* Firefox 3.6 */
-	box-shadow: none;
-	color: #bfbfbf;
-	filter: none;
-}
-
-/**
-* Font Awesome in jQuery UI
-* @author Gerits Aurelien
-*
-**/
-
-.ui-button-icon-primary.ui-icon[class^="icon-"]:before,
-.ui-button-icon-primary.ui-icon[class*=" icon-"]:before,
-.ui-button-icon-secondary.ui-icon[class^="icon-"]:before,
-.ui-button-icon-secondary.ui-icon[class*=" icon-"]:before {
-    font-size: inherit;
-    margin-left: 7px!important;
-    margin-left: 5px;
-    display: inline;
-    text-decoration: inherit;
-    color:inherit;
-}
-
-/* **
-* If you use "Font awesome" is disable UI icons in element
-** */
-.ui-state-default .ui-icon[class*=" icon-"]{
-    /* Reset background with font Awesome */
-    background:none;
-    margin-left:-12px; /*fix for margin issue with font awesome buttons*/
-}
-
-/* If you do not use ui-icon uncomment the lines */
-/*
-.ui-button .ui-button-text{
-    display: inline-block;
-    padding: 0px;
-}
-
-.ui-button-text-icon-primary .ui-button-icon-primary{
-    float:none;
-}*/
\ No newline at end of file


[27/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.css
deleted file mode 100644
index aa07732..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.css
+++ /dev/null
@@ -1,850 +0,0 @@
-/*! jQuery UI - v1.11.4 - 2015-10-14
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, autocomplete.css, button.css, dialog.css, menu.css, spinner.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighl
 ight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-/* Layout helpers
-----------------------------------*/
-.ui-helper-hidden {
-	display: none;
-}
-.ui-helper-hidden-accessible {
-	border: 0;
-	clip: rect(0 0 0 0);
-	height: 1px;
-	margin: -1px;
-	overflow: hidden;
-	padding: 0;
-	position: absolute;
-	width: 1px;
-}
-.ui-helper-reset {
-	margin: 0;
-	padding: 0;
-	border: 0;
-	outline: 0;
-	line-height: 1.3;
-	text-decoration: none;
-	font-size: 100%;
-	list-style: none;
-}
-.ui-helper-clearfix:before,
-.ui-helper-clearfix:after {
-	content: "";
-	display: table;
-	border-collapse: collapse;
-}
-.ui-helper-clearfix:after {
-	clear: both;
-}
-.ui-helper-clearfix {
-	min-height: 0; /* support: IE7 */
-}
-.ui-helper-zfix {
-	width: 100%;
-	height: 100%;
-	top: 0;
-	left: 0;
-	position: absolute;
-	opacity: 0;
-	filter:Alpha(Opacity=0); /* support: IE8 */
-}
-
-.ui-front {
-	z-index: 100;
-}
-
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-disabled {
-	cursor: default !important;
-}
-
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
-	display: block;
-	text-indent: -99999px;
-	overflow: hidden;
-	background-repeat: no-repeat;
-}
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Overlays */
-.ui-widget-overlay {
-	position: fixed;
-	top: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-}
-.ui-draggable-handle {
-	-ms-touch-action: none;
-	touch-action: none;
-}
-.ui-resizable {
-	position: relative;
-}
-.ui-resizable-handle {
-	position: absolute;
-	font-size: 0.1px;
-	display: block;
-	-ms-touch-action: none;
-	touch-action: none;
-}
-.ui-resizable-disabled .ui-resizable-handle,
-.ui-resizable-autohide .ui-resizable-handle {
-	display: none;
-}
-.ui-resizable-n {
-	cursor: n-resize;
-	height: 7px;
-	width: 100%;
-	top: -5px;
-	left: 0;
-}
-.ui-resizable-s {
-	cursor: s-resize;
-	height: 7px;
-	width: 100%;
-	bottom: -5px;
-	left: 0;
-}
-.ui-resizable-e {
-	cursor: e-resize;
-	width: 7px;
-	right: -5px;
-	top: 0;
-	height: 100%;
-}
-.ui-resizable-w {
-	cursor: w-resize;
-	width: 7px;
-	left: -5px;
-	top: 0;
-	height: 100%;
-}
-.ui-resizable-se {
-	cursor: se-resize;
-	width: 12px;
-	height: 12px;
-	right: 1px;
-	bottom: 1px;
-}
-.ui-resizable-sw {
-	cursor: sw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	bottom: -5px;
-}
-.ui-resizable-nw {
-	cursor: nw-resize;
-	width: 9px;
-	height: 9px;
-	left: -5px;
-	top: -5px;
-}
-.ui-resizable-ne {
-	cursor: ne-resize;
-	width: 9px;
-	height: 9px;
-	right: -5px;
-	top: -5px;
-}
-.ui-selectable {
-	-ms-touch-action: none;
-	touch-action: none;
-}
-.ui-selectable-helper {
-	position: absolute;
-	z-index: 100;
-	border: 1px dotted black;
-}
-.ui-sortable-handle {
-	-ms-touch-action: none;
-	touch-action: none;
-}
-.ui-autocomplete {
-	position: absolute;
-	top: 0;
-	left: 0;
-	cursor: default;
-}
-.ui-button {
-	display: inline-block;
-	position: relative;
-	padding: 0;
-	line-height: normal;
-	margin-right: .1em;
-	cursor: pointer;
-	vertical-align: middle;
-	text-align: center;
-	overflow: visible; /* removes extra width in IE */
-}
-.ui-button,
-.ui-button:link,
-.ui-button:visited,
-.ui-button:hover,
-.ui-button:active {
-	text-decoration: none;
-}
-/* to make room for the icon, a width needs to be set here */
-.ui-button-icon-only {
-	width: 2.2em;
-}
-/* button elements seem to need a little more width */
-button.ui-button-icon-only {
-	width: 2.4em;
-}
-.ui-button-icons-only {
-	width: 3.4em;
-}
-button.ui-button-icons-only {
-	width: 3.7em;
-}
-
-/* button text element */
-.ui-button .ui-button-text {
-	display: block;
-	line-height: normal;
-}
-.ui-button-text-only .ui-button-text {
-	padding: .4em 1em;
-}
-.ui-button-icon-only .ui-button-text,
-.ui-button-icons-only .ui-button-text {
-	padding: .4em;
-	text-indent: -9999999px;
-}
-.ui-button-text-icon-primary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 1em .4em 2.1em;
-}
-.ui-button-text-icon-secondary .ui-button-text,
-.ui-button-text-icons .ui-button-text {
-	padding: .4em 2.1em .4em 1em;
-}
-.ui-button-text-icons .ui-button-text {
-	padding-left: 2.1em;
-	padding-right: 2.1em;
-}
-/* no icon support for input elements, provide padding by default */
-input.ui-button {
-	padding: .4em 1em;
-}
-
-/* button icon element(s) */
-.ui-button-icon-only .ui-icon,
-.ui-button-text-icon-primary .ui-icon,
-.ui-button-text-icon-secondary .ui-icon,
-.ui-button-text-icons .ui-icon,
-.ui-button-icons-only .ui-icon {
-	position: absolute;
-	top: 50%;
-	margin-top: -8px;
-}
-.ui-button-icon-only .ui-icon {
-	left: 50%;
-	margin-left: -8px;
-}
-.ui-button-text-icon-primary .ui-button-icon-primary,
-.ui-button-text-icons .ui-button-icon-primary,
-.ui-button-icons-only .ui-button-icon-primary {
-	left: .5em;
-}
-.ui-button-text-icon-secondary .ui-button-icon-secondary,
-.ui-button-text-icons .ui-button-icon-secondary,
-.ui-button-icons-only .ui-button-icon-secondary {
-	right: .5em;
-}
-
-/* button sets */
-.ui-buttonset {
-	margin-right: 7px;
-}
-.ui-buttonset .ui-button {
-	margin-left: 0;
-	margin-right: -.3em;
-}
-
-/* workarounds */
-/* reset extra padding in Firefox, see h5bp.com/l */
-input.ui-button::-moz-focus-inner,
-button.ui-button::-moz-focus-inner {
-	border: 0;
-	padding: 0;
-}
-.ui-dialog {
-	overflow: hidden;
-	position: absolute;
-	top: 0;
-	left: 0;
-	padding: .2em;
-	outline: 0;
-}
-.ui-dialog .ui-dialog-titlebar {
-	padding: .4em 1em;
-	position: relative;
-}
-.ui-dialog .ui-dialog-title {
-	float: left;
-	margin: .1em 0;
-	white-space: nowrap;
-	width: 90%;
-	overflow: hidden;
-	text-overflow: ellipsis;
-}
-.ui-dialog .ui-dialog-titlebar-close {
-	position: absolute;
-	right: .3em;
-	top: 50%;
-	width: 20px;
-	margin: -10px 0 0 0;
-	padding: 1px;
-	height: 20px;
-}
-.ui-dialog .ui-dialog-content {
-	position: relative;
-	border: 0;
-	padding: .5em 1em;
-	background: none;
-	overflow: auto;
-}
-.ui-dialog .ui-dialog-buttonpane {
-	text-align: left;
-	border-width: 1px 0 0 0;
-	background-image: none;
-	margin-top: .5em;
-	padding: .3em 1em .5em .4em;
-}
-.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
-	float: right;
-}
-.ui-dialog .ui-dialog-buttonpane button {
-	margin: .5em .4em .5em 0;
-	cursor: pointer;
-}
-.ui-dialog .ui-resizable-se {
-	width: 12px;
-	height: 12px;
-	right: -5px;
-	bottom: -5px;
-	background-position: 16px 16px;
-}
-.ui-draggable .ui-dialog-titlebar {
-	cursor: move;
-}
-.ui-menu {
-	list-style: none;
-	padding: 0;
-	margin: 0;
-	display: block;
-	outline: none;
-}
-.ui-menu .ui-menu {
-	position: absolute;
-}
-.ui-menu .ui-menu-item {
-	position: relative;
-	margin: 0;
-	padding: 3px 1em 3px .4em;
-	cursor: pointer;
-	min-height: 0; /* support: IE7 */
-	/* support: IE10, see #8844 */
-	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
-}
-.ui-menu .ui-menu-divider {
-	margin: 5px 0;
-	height: 0;
-	font-size: 0;
-	line-height: 0;
-	border-width: 1px 0 0 0;
-}
-.ui-menu .ui-state-focus,
-.ui-menu .ui-state-active {
-	margin: -1px;
-}
-
-/* icon support */
-.ui-menu-icons {
-	position: relative;
-}
-.ui-menu-icons .ui-menu-item {
-	padding-left: 2em;
-}
-
-/* left-aligned */
-.ui-menu .ui-icon {
-	position: absolute;
-	top: 0;
-	bottom: 0;
-	left: .2em;
-	margin: auto 0;
-}
-
-/* right-aligned */
-.ui-menu .ui-menu-icon {
-	left: auto;
-	right: 0;
-}
-.ui-spinner {
-	position: relative;
-	display: inline-block;
-	overflow: hidden;
-	padding: 0;
-	vertical-align: middle;
-}
-.ui-spinner-input {
-	border: none;
-	background: none;
-	color: inherit;
-	padding: 0;
-	margin: .2em 0;
-	vertical-align: middle;
-	margin-left: .4em;
-	margin-right: 22px;
-}
-.ui-spinner-button {
-	width: 16px;
-	height: 50%;
-	font-size: .5em;
-	padding: 0;
-	margin: 0;
-	text-align: center;
-	position: absolute;
-	cursor: default;
-	display: block;
-	overflow: hidden;
-	right: 0;
-}
-/* more specificity required here to override default borders */
-.ui-spinner a.ui-spinner-button {
-	border-top: none;
-	border-bottom: none;
-	border-right: none;
-}
-/* vertically center icon */
-.ui-spinner .ui-icon {
-	position: absolute;
-	margin-top: -8px;
-	top: 50%;
-	left: 0;
-}
-.ui-spinner-up {
-	top: 0;
-}
-.ui-spinner-down {
-	bottom: 0;
-}
-
-/* TR overrides */
-.ui-spinner .ui-icon-triangle-1-s {
-	/* need to fix icons sprite */
-	background-position: -65px -16px;
-}
-
-/* Component containers
-----------------------------------*/
-.ui-widget {
-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
-	font-size: 1.1em;
-}
-.ui-widget .ui-widget {
-	font-size: 1em;
-}
-.ui-widget input,
-.ui-widget select,
-.ui-widget textarea,
-.ui-widget button {
-	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
-	font-size: 1em;
-}
-.ui-widget-content {
-	border: 1px solid #dddddd;
-	background: #eeeeee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;
-	color: #333333;
-}
-.ui-widget-content a {
-	color: #333333;
-}
-.ui-widget-header {
-	border: 1px solid #e78f08;
-	background: #f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;
-	color: #ffffff;
-	font-weight: bold;
-}
-.ui-widget-header a {
-	color: #ffffff;
-}
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default,
-.ui-widget-content .ui-state-default,
-.ui-widget-header .ui-state-default {
-	border: 1px solid #cccccc;
-	background: #f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;
-	font-weight: bold;
-	color: #1c94c4;
-}
-.ui-state-default a,
-.ui-state-default a:link,
-.ui-state-default a:visited {
-	color: #1c94c4;
-	text-decoration: none;
-}
-.ui-state-hover,
-.ui-widget-content .ui-state-hover,
-.ui-widget-header .ui-state-hover,
-.ui-state-focus,
-.ui-widget-content .ui-state-focus,
-.ui-widget-header .ui-state-focus {
-	border: 1px solid #fbcb09;
-	background: #fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;
-	font-weight: bold;
-	color: #c77405;
-}
-.ui-state-hover a,
-.ui-state-hover a:hover,
-.ui-state-hover a:link,
-.ui-state-hover a:visited,
-.ui-state-focus a,
-.ui-state-focus a:hover,
-.ui-state-focus a:link,
-.ui-state-focus a:visited {
-	color: #c77405;
-	text-decoration: none;
-}
-.ui-state-active,
-.ui-widget-content .ui-state-active,
-.ui-widget-header .ui-state-active {
-	border: 1px solid #fbd850;
-	background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
-	font-weight: bold;
-	color: #eb8f00;
-}
-.ui-state-active a,
-.ui-state-active a:link,
-.ui-state-active a:visited {
-	color: #eb8f00;
-	text-decoration: none;
-}
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight,
-.ui-widget-content .ui-state-highlight,
-.ui-widget-header .ui-state-highlight {
-	border: 1px solid #fed22f;
-	background: #ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
-	color: #363636;
-}
-.ui-state-highlight a,
-.ui-widget-content .ui-state-highlight a,
-.ui-widget-header .ui-state-highlight a {
-	color: #363636;
-}
-.ui-state-error,
-.ui-widget-content .ui-state-error,
-.ui-widget-header .ui-state-error {
-	border: 1px solid #cd0a0a;
-	background: #b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;
-	color: #ffffff;
-}
-.ui-state-error a,
-.ui-widget-content .ui-state-error a,
-.ui-widget-header .ui-state-error a {
-	color: #ffffff;
-}
-.ui-state-error-text,
-.ui-widget-content .ui-state-error-text,
-.ui-widget-header .ui-state-error-text {
-	color: #ffffff;
-}
-.ui-priority-primary,
-.ui-widget-content .ui-priority-primary,
-.ui-widget-header .ui-priority-primary {
-	font-weight: bold;
-}
-.ui-priority-secondary,
-.ui-widget-content .ui-priority-secondary,
-.ui-widget-header .ui-priority-secondary {
-	opacity: .7;
-	filter:Alpha(Opacity=70); /* support: IE8 */
-	font-weight: normal;
-}
-.ui-state-disabled,
-.ui-widget-content .ui-state-disabled,
-.ui-widget-header .ui-state-disabled {
-	opacity: .35;
-	filter:Alpha(Opacity=35); /* support: IE8 */
-	background-image: none;
-}
-.ui-state-disabled .ui-icon {
-	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
-}
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon {
-	width: 16px;
-	height: 16px;
-}
-.ui-icon,
-.ui-widget-content .ui-icon {
-	background-image: url("images/ui-icons_222222_256x240.png");
-}
-.ui-widget-header .ui-icon {
-	background-image: url("images/ui-icons_ffffff_256x240.png");
-}
-.ui-state-default .ui-icon {
-	background-image: url("images/ui-icons_ef8c08_256x240.png");
-}
-.ui-state-hover .ui-icon,
-.ui-state-focus .ui-icon {
-	background-image: url("images/ui-icons_ef8c08_256x240.png");
-}
-.ui-state-active .ui-icon {
-	background-image: url("images/ui-icons_ef8c08_256x240.png");
-}
-.ui-state-highlight .ui-icon {
-	background-image: url("images/ui-icons_228ef1_256x240.png");
-}
-.ui-state-error .ui-icon,
-.ui-state-error-text .ui-icon {
-	background-image: url("images/ui-icons_ffd27a_256x240.png");
-}
-
-/* positioning */
-.ui-icon-blank { background-position: 16px 16px; }
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-on { background-position: -96px -144px; }
-.ui-icon-radio-off { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-left,
-.ui-corner-tl {
-	border-top-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-top,
-.ui-corner-right,
-.ui-corner-tr {
-	border-top-right-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-left,
-.ui-corner-bl {
-	border-bottom-left-radius: 4px;
-}
-.ui-corner-all,
-.ui-corner-bottom,
-.ui-corner-right,
-.ui-corner-br {
-	border-bottom-right-radius: 4px;
-}
-
-/* Overlays */
-.ui-widget-overlay {
-	background: #666666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;
-	opacity: .5;
-	filter: Alpha(Opacity=50); /* support: IE8 */
-}
-.ui-widget-shadow {
-	margin: -5px 0 0 -5px;
-	padding: 5px;
-	background: #000000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;
-	opacity: .2;
-	filter: Alpha(Opacity=20); /* support: IE8 */
-	border-radius: 5px;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.min.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.min.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.min.css
deleted file mode 100644
index e750492..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/jquery-ui-1.11.4.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*! jQuery UI - v1.11.4 - 2015-10-14
-* http://jqueryui.com
-* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, autocomplete.css, button.css, dialog.css, menu.css, spinner.css, theme.css
-* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighl
 ight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-re
 sizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;
 line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-te
 xt-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:
 absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-h
 eight:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-widget{font-family:Trebuchet MS,
 Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .
 ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
 color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-d
 isabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{backgroun
 d-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-positi
 on:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -4
 8px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-p
 osition:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed
 {background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-positi
 on:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-2
 08px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.
 ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{backg
 round-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip
 -diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px}
\ No newline at end of file


[20/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/sparkline/jquery.sparkline.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/sparkline/jquery.sparkline.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/sparkline/jquery.sparkline.js
deleted file mode 100644
index 43b24c0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/sparkline/jquery.sparkline.js
+++ /dev/null
@@ -1,3054 +0,0 @@
-/**
-*
-* jquery.sparkline.js
-*
-* v2.1.2
-* (c) Splunk, Inc
-* Contact: Gareth Watts (gareth@splunk.com)
-* http://omnipotent.net/jquery.sparkline/
-*
-* Generates inline sparkline charts from data supplied either to the method
-* or inline in HTML
-*
-* Compatible with Internet Explorer 6.0+ and modern browsers equipped with the canvas tag
-* (Firefox 2.0+, Safari, Opera, etc)
-*
-* License: New BSD License
-*
-* Copyright (c) 2012, Splunk Inc.
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without modification,
-* are permitted provided that the following conditions are met:
-*
-*     * Redistributions of source code must retain the above copyright notice,
-*       this list of conditions and the following disclaimer.
-*     * Redistributions in binary form must reproduce the above copyright notice,
-*       this list of conditions and the following disclaimer in the documentation
-*       and/or other materials provided with the distribution.
-*     * Neither the name of Splunk Inc nor the names of its contributors may
-*       be used to endorse or promote products derived from this software without
-*       specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-* SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*
-*
-* Usage:
-*  $(selector).sparkline(values, options)
-*
-* If values is undefined or set to 'html' then the data values are read from the specified tag:
-*   <p>Sparkline: <span class="sparkline">1,4,6,6,8,5,3,5</span></p>
-*   $('.sparkline').sparkline();
-* There must be no spaces in the enclosed data set
-*
-* Otherwise values must be an array of numbers or null values
-*    <p>Sparkline: <span id="sparkline1">This text replaced if the browser is compatible</span></p>
-*    $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
-*    $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
-*
-* Values can also be specified in an HTML comment, or as a values attribute:
-*    <p>Sparkline: <span class="sparkline"><!--1,4,6,6,8,5,3,5 --></span></p>
-*    <p>Sparkline: <span class="sparkline" values="1,4,6,6,8,5,3,5"></span></p>
-*    $('.sparkline').sparkline();
-*
-* For line charts, x values can also be specified:
-*   <p>Sparkline: <span class="sparkline">1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5</span></p>
-*    $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
-*
-* By default, options should be passed in as teh second argument to the sparkline function:
-*   $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
-*
-* Options can also be set by passing them on the tag itself.  This feature is disabled by default though
-* as there's a slight performance overhead:
-*   $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
-*   <p>Sparkline: <span class="sparkline" sparkType="bar" sparkBarColor="red">loading</span></p>
-* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix)
-*
-* Supported options:
-*   lineColor - Color of the line used for the chart
-*   fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
-*   width - Width of the chart - Defaults to 3 times the number of values in pixels
-*   height - Height of the chart - Defaults to the height of the containing element
-*   chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
-*   chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
-*   chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
-*   chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
-*   chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
-*   composite - If true then don't erase any existing chart attached to the tag, but draw
-*           another chart over the top - Note that width and height are ignored if an
-*           existing chart is detected.
-*   tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
-*   enableTagOptions - Whether to check tags for sparkline options
-*   tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
-*   disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a
-*           hidden dom element, avoding a browser reflow
-*   disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,
-*       making the plugin perform much like it did in 1.x
-*   disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)
-*   disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled
-*       defaults to false (highlights enabled)
-*   highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase
-*   tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body
-*   tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied
-*   tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis
-*   tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis
-*   tooltipFormatter  - Optional callback that allows you to override the HTML displayed in the tooltip
-*       callback is given arguments of (sparkline, options, fields)
-*   tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title
-*   tooltipFormat - A format string or SPFormat object  (or an array thereof for multiple entries)
-*       to control the format of the tooltip
-*   tooltipPrefix - A string to prepend to each field displayed in a tooltip
-*   tooltipSuffix - A string to append to each field displayed in a tooltip
-*   tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)
-*   tooltipValueLookups - An object or range map to map field values to tooltip strings
-*       (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win")
-*   numberFormatter - Optional callback for formatting numbers in tooltips
-*   numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to ","
-*   numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "."
-*   numberDigitGroupCount - Number of digits between group separator - Defaults to 3
-*
-* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
-* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
-*    line - Line chart.  Options:
-*       spotColor - Set to '' to not end each line in a circular spot
-*       minSpotColor - If set, color of spot at minimum value
-*       maxSpotColor - If set, color of spot at maximum value
-*       spotRadius - Radius in pixels
-*       lineWidth - Width of line in pixels
-*       normalRangeMin
-*       normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
-*                      or expected range of values
-*       normalRangeColor - Color to use for the above bar
-*       drawNormalOnTop - Draw the normal range above the chart fill color if true
-*       defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
-*       highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable
-*       highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable
-*       valueSpots - Specify which points to draw spots on, and in which color.  Accepts a range map
-*
-*   bar - Bar chart.  Options:
-*       barColor - Color of bars for postive values
-*       negBarColor - Color of bars for negative values
-*       zeroColor - Color of bars with zero values
-*       nullColor - Color of bars with null values - Defaults to omitting the bar entirely
-*       barWidth - Width of bars in pixels
-*       colorMap - Optional mappnig of values to colors to override the *BarColor values above
-*                  can be an Array of values to control the color of individual bars or a range map
-*                  to specify colors for individual ranges of values
-*       barSpacing - Gap between bars in pixels
-*       zeroAxis - Centers the y-axis around zero if true
-*
-*   tristate - Charts values of win (>0), lose (<0) or draw (=0)
-*       posBarColor - Color of win values
-*       negBarColor - Color of lose values
-*       zeroBarColor - Color of draw values
-*       barWidth - Width of bars in pixels
-*       barSpacing - Gap between bars in pixels
-*       colorMap - Optional mappnig of values to colors to override the *BarColor values above
-*                  can be an Array of values to control the color of individual bars or a range map
-*                  to specify colors for individual ranges of values
-*
-*   discrete - Options:
-*       lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
-*       thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
-*       thresholdColor
-*
-*   bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
-*       options:
-*       targetColor - The color of the vertical target marker
-*       targetWidth - The width of the target marker in pixels
-*       performanceColor - The color of the performance measure horizontal bar
-*       rangeColors - Colors to use for each qualitative range background color
-*
-*   pie - Pie chart. Options:
-*       sliceColors - An array of colors to use for pie slices
-*       offset - Angle in degrees to offset the first slice - Try -90 or +90
-*       borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)
-*       borderColor - Color to use for the pie chart border - Defaults to #000
-*
-*   box - Box plot. Options:
-*       raw - Set to true to supply pre-computed plot points as values
-*             values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
-*             When set to false you can supply any number of values and the box plot will
-*             be computed for you.  Default is false.
-*       showOutliers - Set to true (default) to display outliers as circles
-*       outlierIQR - Interquartile range used to determine outliers.  Default 1.5
-*       boxLineColor - Outline color of the box
-*       boxFillColor - Fill color for the box
-*       whiskerColor - Line color used for whiskers
-*       outlierLineColor - Outline color of outlier circles
-*       outlierFillColor - Fill color of the outlier circles
-*       spotRadius - Radius of outlier circles
-*       medianColor - Line color of the median line
-*       target - Draw a target cross hair at the supplied value (default undefined)
-*
-*
-*
-*   Examples:
-*   $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
-*   $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
-*   $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
-*   $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
-*   $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
-*   $('#pie').sparkline([1,1,2], { type:'pie' });
-*/
-
-/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */
-
-(function(document, Math, undefined) { // performance/minified-size optimization
-(function(factory) {
-    if(typeof define === 'function' && define.amd) {
-        define(['jquery'], factory);
-    } else if (jQuery && !jQuery.fn.sparkline) {
-        factory(jQuery);
-    }
-}
-(function($) {
-    'use strict';
-
-    var UNSET_OPTION = {},
-        getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,
-        remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,
-        MouseHandler, Tooltip, barHighlightMixin,
-        line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,
-        VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;
-
-    /**
-     * Default configuration settings
-     */
-    getDefaults = function () {
-        return {
-            // Settings common to most/all chart types
-            common: {
-                type: 'line',
-                lineColor: '#00f',
-                fillColor: '#cdf',
-                defaultPixelsPerValue: 3,
-                width: 'auto',
-                height: 'auto',
-                composite: false,
-                tagValuesAttribute: 'values',
-                tagOptionsPrefix: 'spark',
-                enableTagOptions: false,
-                enableHighlight: true,
-                highlightLighten: 1.4,
-                tooltipSkipNull: true,
-                tooltipPrefix: '',
-                tooltipSuffix: '',
-                disableHiddenCheck: false,
-                numberFormatter: false,
-                numberDigitGroupCount: 3,
-                numberDigitGroupSep: ',',
-                numberDecimalMark: '.',
-                disableTooltips: false,
-                disableInteraction: false
-            },
-            // Defaults for line charts
-            line: {
-                spotColor: '#f80',
-                highlightSpotColor: '#5f5',
-                highlightLineColor: '#f22',
-                spotRadius: 1.5,
-                minSpotColor: '#f80',
-                maxSpotColor: '#f80',
-                lineWidth: 1,
-                normalRangeMin: undefined,
-                normalRangeMax: undefined,
-                normalRangeColor: '#ccc',
-                drawNormalOnTop: false,
-                chartRangeMin: undefined,
-                chartRangeMax: undefined,
-                chartRangeMinX: undefined,
-                chartRangeMaxX: undefined,
-                tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')
-            },
-            // Defaults for bar charts
-            bar: {
-                barColor: '#3366cc',
-                negBarColor: '#f44',
-                stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
-                    '#dd4477', '#0099c6', '#990099'],
-                zeroColor: undefined,
-                nullColor: undefined,
-                zeroAxis: true,
-                barWidth: 4,
-                barSpacing: 1,
-                chartRangeMax: undefined,
-                chartRangeMin: undefined,
-                chartRangeClip: false,
-                colorMap: undefined,
-                tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')
-            },
-            // Defaults for tristate charts
-            tristate: {
-                barWidth: 4,
-                barSpacing: 1,
-                posBarColor: '#6f6',
-                negBarColor: '#f44',
-                zeroBarColor: '#999',
-                colorMap: {},
-                tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),
-                tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }
-            },
-            // Defaults for discrete charts
-            discrete: {
-                lineHeight: 'auto',
-                thresholdColor: undefined,
-                thresholdValue: 0,
-                chartRangeMax: undefined,
-                chartRangeMin: undefined,
-                chartRangeClip: false,
-                tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')
-            },
-            // Defaults for bullet charts
-            bullet: {
-                targetColor: '#f33',
-                targetWidth: 3, // width of the target bar in pixels
-                performanceColor: '#33f',
-                rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],
-                base: undefined, // set this to a number to change the base start number
-                tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),
-                tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }
-            },
-            // Defaults for pie charts
-            pie: {
-                offset: 0,
-                sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
-                    '#dd4477', '#0099c6', '#990099'],
-                borderWidth: 0,
-                borderColor: '#000',
-                tooltipFormat: new SPFormat('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')
-            },
-            // Defaults for box plots
-            box: {
-                raw: false,
-                boxLineColor: '#000',
-                boxFillColor: '#cdf',
-                whiskerColor: '#000',
-                outlierLineColor: '#333',
-                outlierFillColor: '#fff',
-                medianColor: '#f00',
-                showOutliers: true,
-                outlierIQR: 1.5,
-                spotRadius: 1.5,
-                target: undefined,
-                targetColor: '#4a2',
-                chartRangeMax: undefined,
-                chartRangeMin: undefined,
-                tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),
-                tooltipFormatFieldlistKey: 'field',
-                tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',
-                    uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',
-                    lw: 'Left Whisker', rw: 'Right Whisker'} }
-            }
-        };
-    };
-
-    // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname
-    defaultStyles = '.jqstooltip { ' +
-            'position: absolute;' +
-            'left: 0px;' +
-            'top: 0px;' +
-            'visibility: hidden;' +
-            'background: rgb(0, 0, 0) transparent;' +
-            'background-color: rgba(0,0,0,0.6);' +
-            'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +
-            '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' +
-            'color: white;' +
-            'font: 10px arial, san serif;' +
-            'text-align: left;' +
-            'white-space: nowrap;' +
-            'padding: 5px;' +
-            'border: 1px solid white;' +
-            'z-index: 10000;' +
-            '}' +
-            '.jqsfield { ' +
-            'color: white;' +
-            'font: 10px arial, san serif;' +
-            'text-align: left;' +
-            '}';
-
-    /**
-     * Utilities
-     */
-
-    createClass = function (/* [baseclass, [mixin, ...]], definition */) {
-        var Class, args;
-        Class = function () {
-            this.init.apply(this, arguments);
-        };
-        if (arguments.length > 1) {
-            if (arguments[0]) {
-                Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);
-                Class._super = arguments[0].prototype;
-            } else {
-                Class.prototype = arguments[arguments.length - 1];
-            }
-            if (arguments.length > 2) {
-                args = Array.prototype.slice.call(arguments, 1, -1);
-                args.unshift(Class.prototype);
-                $.extend.apply($, args);
-            }
-        } else {
-            Class.prototype = arguments[0];
-        }
-        Class.prototype.cls = Class;
-        return Class;
-    };
-
-    /**
-     * Wraps a format string for tooltips
-     * {{x}}
-     * {{x.2}
-     * {{x:months}}
-     */
-    $.SPFormatClass = SPFormat = createClass({
-        fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
-        precre: /(\w+)\.(\d+)/,
-
-        init: function (format, fclass) {
-            this.format = format;
-            this.fclass = fclass;
-        },
-
-        render: function (fieldset, lookups, options) {
-            var self = this,
-                fields = fieldset,
-                match, token, lookupkey, fieldvalue, prec;
-            return this.format.replace(this.fre, function () {
-                var lookup;
-                token = arguments[1];
-                lookupkey = arguments[3];
-                match = self.precre.exec(token);
-                if (match) {
-                    prec = match[2];
-                    token = match[1];
-                } else {
-                    prec = false;
-                }
-                fieldvalue = fields[token];
-                if (fieldvalue === undefined) {
-                    return '';
-                }
-                if (lookupkey && lookups && lookups[lookupkey]) {
-                    lookup = lookups[lookupkey];
-                    if (lookup.get) { // RangeMap
-                        return lookups[lookupkey].get(fieldvalue) || fieldvalue;
-                    } else {
-                        return lookups[lookupkey][fieldvalue] || fieldvalue;
-                    }
-                }
-                if (isNumber(fieldvalue)) {
-                    if (options.get('numberFormatter')) {
-                        fieldvalue = options.get('numberFormatter')(fieldvalue);
-                    } else {
-                        fieldvalue = formatNumber(fieldvalue, prec,
-                            options.get('numberDigitGroupCount'),
-                            options.get('numberDigitGroupSep'),
-                            options.get('numberDecimalMark'));
-                    }
-                }
-                return fieldvalue;
-            });
-        }
-    });
-
-    // convience method to avoid needing the new operator
-    $.spformat = function(format, fclass) {
-        return new SPFormat(format, fclass);
-    };
-
-    clipval = function (val, min, max) {
-        if (val < min) {
-            return min;
-        }
-        if (val > max) {
-            return max;
-        }
-        return val;
-    };
-
-    quartile = function (values, q) {
-        var vl;
-        if (q === 2) {
-            vl = Math.floor(values.length / 2);
-            return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;
-        } else {
-            if (values.length % 2 ) { // odd
-                vl = (values.length * q + q) / 4;
-                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];
-            } else { //even
-                vl = (values.length * q + 2) / 4;
-                return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 :  values[vl-1];
-
-            }
-        }
-    };
-
-    normalizeValue = function (val) {
-        var nf;
-        switch (val) {
-            case 'undefined':
-                val = undefined;
-                break;
-            case 'null':
-                val = null;
-                break;
-            case 'true':
-                val = true;
-                break;
-            case 'false':
-                val = false;
-                break;
-            default:
-                nf = parseFloat(val);
-                if (val == nf) {
-                    val = nf;
-                }
-        }
-        return val;
-    };
-
-    normalizeValues = function (vals) {
-        var i, result = [];
-        for (i = vals.length; i--;) {
-            result[i] = normalizeValue(vals[i]);
-        }
-        return result;
-    };
-
-    remove = function (vals, filter) {
-        var i, vl, result = [];
-        for (i = 0, vl = vals.length; i < vl; i++) {
-            if (vals[i] !== filter) {
-                result.push(vals[i]);
-            }
-        }
-        return result;
-    };
-
-    isNumber = function (num) {
-        return !isNaN(parseFloat(num)) && isFinite(num);
-    };
-
-    formatNumber = function (num, prec, groupsize, groupsep, decsep) {
-        var p, i;
-        num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');
-        p = (p = $.inArray('.', num)) < 0 ? num.length : p;
-        if (p < num.length) {
-            num[p] = decsep;
-        }
-        for (i = p - groupsize; i > 0; i -= groupsize) {
-            num.splice(i, 0, groupsep);
-        }
-        return num.join('');
-    };
-
-    // determine if all values of an array match a value
-    // returns true if the array is empty
-    all = function (val, arr, ignoreNull) {
-        var i;
-        for (i = arr.length; i--; ) {
-            if (ignoreNull && arr[i] === null) continue;
-            if (arr[i] !== val) {
-                return false;
-            }
-        }
-        return true;
-    };
-
-    // sums the numeric values in an array, ignoring other values
-    sum = function (vals) {
-        var total = 0, i;
-        for (i = vals.length; i--;) {
-            total += typeof vals[i] === 'number' ? vals[i] : 0;
-        }
-        return total;
-    };
-
-    ensureArray = function (val) {
-        return $.isArray(val) ? val : [val];
-    };
-
-    // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/
-    addCSS = function(css) {
-        var tag;
-        //if ('\v' == 'v') /* ie only */ {
-        if (document.createStyleSheet) {
-            document.createStyleSheet().cssText = css;
-        } else {
-            tag = document.createElement('style');
-            tag.type = 'text/css';
-            document.getElementsByTagName('head')[0].appendChild(tag);
-            tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;
-        }
-    };
-
-    // Provide a cross-browser interface to a few simple drawing primitives
-    $.fn.simpledraw = function (width, height, useExisting, interact) {
-        var target, mhandler;
-        if (useExisting && (target = this.data('_jqs_vcanvas'))) {
-            return target;
-        }
-
-        if ($.fn.sparkline.canvas === false) {
-            // We've already determined that neither Canvas nor VML are available
-            return false;
-
-        } else if ($.fn.sparkline.canvas === undefined) {
-            // No function defined yet -- need to see if we support Canvas or VML
-            var el = document.createElement('canvas');
-            if (!!(el.getContext && el.getContext('2d'))) {
-                // Canvas is available
-                $.fn.sparkline.canvas = function(width, height, target, interact) {
-                    return new VCanvas_canvas(width, height, target, interact);
-                };
-            } else if (document.namespaces && !document.namespaces.v) {
-                // VML is available
-                document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');
-                $.fn.sparkline.canvas = function(width, height, target, interact) {
-                    return new VCanvas_vml(width, height, target);
-                };
-            } else {
-                // Neither Canvas nor VML are available
-                $.fn.sparkline.canvas = false;
-                return false;
-            }
-        }
-
-        if (width === undefined) {
-            width = $(this).innerWidth();
-        }
-        if (height === undefined) {
-            height = $(this).innerHeight();
-        }
-
-        target = $.fn.sparkline.canvas(width, height, this, interact);
-
-        mhandler = $(this).data('_jqs_mhandler');
-        if (mhandler) {
-            mhandler.registerCanvas(target);
-        }
-        return target;
-    };
-
-    $.fn.cleardraw = function () {
-        var target = this.data('_jqs_vcanvas');
-        if (target) {
-            target.reset();
-        }
-    };
-
-    $.RangeMapClass = RangeMap = createClass({
-        init: function (map) {
-            var key, range, rangelist = [];
-            for (key in map) {
-                if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {
-                    range = key.split(':');
-                    range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);
-                    range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);
-                    range[2] = map[key];
-                    rangelist.push(range);
-                }
-            }
-            this.map = map;
-            this.rangelist = rangelist || false;
-        },
-
-        get: function (value) {
-            var rangelist = this.rangelist,
-                i, range, result;
-            if ((result = this.map[value]) !== undefined) {
-                return result;
-            }
-            if (rangelist) {
-                for (i = rangelist.length; i--;) {
-                    range = rangelist[i];
-                    if (range[0] <= value && range[1] >= value) {
-                        return range[2];
-                    }
-                }
-            }
-            return undefined;
-        }
-    });
-
-    // Convenience function
-    $.range_map = function(map) {
-        return new RangeMap(map);
-    };
-
-    MouseHandler = createClass({
-        init: function (el, options) {
-            var $el = $(el);
-            this.$el = $el;
-            this.options = options;
-            this.currentPageX = 0;
-            this.currentPageY = 0;
-            this.el = el;
-            this.splist = [];
-            this.tooltip = null;
-            this.over = false;
-            this.displayTooltips = !options.get('disableTooltips');
-            this.highlightEnabled = !options.get('disableHighlight');
-        },
-
-        registerSparkline: function (sp) {
-            this.splist.push(sp);
-            if (this.over) {
-                this.updateDisplay();
-            }
-        },
-
-        registerCanvas: function (canvas) {
-            var $canvas = $(canvas.canvas);
-            this.canvas = canvas;
-            this.$canvas = $canvas;
-            $canvas.mouseenter($.proxy(this.mouseenter, this));
-            $canvas.mouseleave($.proxy(this.mouseleave, this));
-            $canvas.click($.proxy(this.mouseclick, this));
-        },
-
-        reset: function (removeTooltip) {
-            this.splist = [];
-            if (this.tooltip && removeTooltip) {
-                this.tooltip.remove();
-                this.tooltip = undefined;
-            }
-        },
-
-        mouseclick: function (e) {
-            var clickEvent = $.Event('sparklineClick');
-            clickEvent.originalEvent = e;
-            clickEvent.sparklines = this.splist;
-            this.$el.trigger(clickEvent);
-        },
-
-        mouseenter: function (e) {
-            $(document.body).unbind('mousemove.jqs');
-            $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));
-            this.over = true;
-            this.currentPageX = e.pageX;
-            this.currentPageY = e.pageY;
-            this.currentEl = e.target;
-            if (!this.tooltip && this.displayTooltips) {
-                this.tooltip = new Tooltip(this.options);
-                this.tooltip.updatePosition(e.pageX, e.pageY);
-            }
-            this.updateDisplay();
-        },
-
-        mouseleave: function () {
-            $(document.body).unbind('mousemove.jqs');
-            var splist = this.splist,
-                 spcount = splist.length,
-                 needsRefresh = false,
-                 sp, i;
-            this.over = false;
-            this.currentEl = null;
-
-            if (this.tooltip) {
-                this.tooltip.remove();
-                this.tooltip = null;
-            }
-
-            for (i = 0; i < spcount; i++) {
-                sp = splist[i];
-                if (sp.clearRegionHighlight()) {
-                    needsRefresh = true;
-                }
-            }
-
-            if (needsRefresh) {
-                this.canvas.render();
-            }
-        },
-
-        mousemove: function (e) {
-            this.currentPageX = e.pageX;
-            this.currentPageY = e.pageY;
-            this.currentEl = e.target;
-            if (this.tooltip) {
-                this.tooltip.updatePosition(e.pageX, e.pageY);
-            }
-            this.updateDisplay();
-        },
-
-        updateDisplay: function () {
-            var splist = this.splist,
-                 spcount = splist.length,
-                 needsRefresh = false,
-                 offset = this.$canvas.offset(),
-                 localX = this.currentPageX - offset.left,
-                 localY = this.currentPageY - offset.top,
-                 tooltiphtml, sp, i, result, changeEvent;
-            if (!this.over) {
-                return;
-            }
-            for (i = 0; i < spcount; i++) {
-                sp = splist[i];
-                result = sp.setRegionHighlight(this.currentEl, localX, localY);
-                if (result) {
-                    needsRefresh = true;
-                }
-            }
-            if (needsRefresh) {
-                changeEvent = $.Event('sparklineRegionChange');
-                changeEvent.sparklines = this.splist;
-                this.$el.trigger(changeEvent);
-                if (this.tooltip) {
-                    tooltiphtml = '';
-                    for (i = 0; i < spcount; i++) {
-                        sp = splist[i];
-                        tooltiphtml += sp.getCurrentRegionTooltip();
-                    }
-                    this.tooltip.setContent(tooltiphtml);
-                }
-                if (!this.disableHighlight) {
-                    this.canvas.render();
-                }
-            }
-            if (result === null) {
-                this.mouseleave();
-            }
-        }
-    });
-
-
-    Tooltip = createClass({
-        sizeStyle: 'position: static !important;' +
-            'display: block !important;' +
-            'visibility: hidden !important;' +
-            'float: left !important;',
-
-        init: function (options) {
-            var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),
-                sizetipStyle = this.sizeStyle,
-                offset;
-            this.container = options.get('tooltipContainer') || document.body;
-            this.tooltipOffsetX = options.get('tooltipOffsetX', 10);
-            this.tooltipOffsetY = options.get('tooltipOffsetY', 12);
-            // remove any previous lingering tooltip
-            $('#jqssizetip').remove();
-            $('#jqstooltip').remove();
-            this.sizetip = $('<div/>', {
-                id: 'jqssizetip',
-                style: sizetipStyle,
-                'class': tooltipClassname
-            });
-            this.tooltip = $('<div/>', {
-                id: 'jqstooltip',
-                'class': tooltipClassname
-            }).appendTo(this.container);
-            // account for the container's location
-            offset = this.tooltip.offset();
-            this.offsetLeft = offset.left;
-            this.offsetTop = offset.top;
-            this.hidden = true;
-            $(window).unbind('resize.jqs scroll.jqs');
-            $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));
-            this.updateWindowDims();
-        },
-
-        updateWindowDims: function () {
-            this.scrollTop = $(window).scrollTop();
-            this.scrollLeft = $(window).scrollLeft();
-            this.scrollRight = this.scrollLeft + $(window).width();
-            this.updatePosition();
-        },
-
-        getSize: function (content) {
-            this.sizetip.html(content).appendTo(this.container);
-            this.width = this.sizetip.width() + 1;
-            this.height = this.sizetip.height();
-            this.sizetip.remove();
-        },
-
-        setContent: function (content) {
-            if (!content) {
-                this.tooltip.css('visibility', 'hidden');
-                this.hidden = true;
-                return;
-            }
-            this.getSize(content);
-            this.tooltip.html(content)
-                .css({
-                    'width': this.width,
-                    'height': this.height,
-                    'visibility': 'visible'
-                });
-            if (this.hidden) {
-                this.hidden = false;
-                this.updatePosition();
-            }
-        },
-
-        updatePosition: function (x, y) {
-            if (x === undefined) {
-                if (this.mousex === undefined) {
-                    return;
-                }
-                x = this.mousex - this.offsetLeft;
-                y = this.mousey - this.offsetTop;
-
-            } else {
-                this.mousex = x = x - this.offsetLeft;
-                this.mousey = y = y - this.offsetTop;
-            }
-            if (!this.height || !this.width || this.hidden) {
-                return;
-            }
-
-            y -= this.height + this.tooltipOffsetY;
-            x += this.tooltipOffsetX;
-
-            if (y < this.scrollTop) {
-                y = this.scrollTop;
-            }
-            if (x < this.scrollLeft) {
-                x = this.scrollLeft;
-            } else if (x + this.width > this.scrollRight) {
-                x = this.scrollRight - this.width;
-            }
-
-            this.tooltip.css({
-                'left': x,
-                'top': y
-            });
-        },
-
-        remove: function () {
-            this.tooltip.remove();
-            this.sizetip.remove();
-            this.sizetip = this.tooltip = undefined;
-            $(window).unbind('resize.jqs scroll.jqs');
-        }
-    });
-
-    initStyles = function() {
-        addCSS(defaultStyles);
-    };
-
-    $(initStyles);
-
-    pending = [];
-    $.fn.sparkline = function (userValues, userOptions) {
-        return this.each(function () {
-            var options = new $.fn.sparkline.options(this, userOptions),
-                 $this = $(this),
-                 render, i;
-            render = function () {
-                var values, width, height, tmp, mhandler, sp, vals;
-                if (userValues === 'html' || userValues === undefined) {
-                    vals = this.getAttribute(options.get('tagValuesAttribute'));
-                    if (vals === undefined || vals === null) {
-                        vals = $this.html();
-                    }
-                    values = vals.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, '').split(',');
-                } else {
-                    values = userValues;
-                }
-
-                width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');
-                if (options.get('height') === 'auto') {
-                    if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {
-                        // must be a better way to get the line height
-                        tmp = document.createElement('span');
-                        tmp.innerHTML = 'a';
-                        $this.html(tmp);
-                        height = $(tmp).innerHeight() || $(tmp).height();
-                        $(tmp).remove();
-                        tmp = null;
-                    }
-                } else {
-                    height = options.get('height');
-                }
-
-                if (!options.get('disableInteraction')) {
-                    mhandler = $.data(this, '_jqs_mhandler');
-                    if (!mhandler) {
-                        mhandler = new MouseHandler(this, options);
-                        $.data(this, '_jqs_mhandler', mhandler);
-                    } else if (!options.get('composite')) {
-                        mhandler.reset();
-                    }
-                } else {
-                    mhandler = false;
-                }
-
-                if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {
-                    if (!$.data(this, '_jqs_errnotify')) {
-                        alert('Attempted to attach a composite sparkline to an element with no existing sparkline');
-                        $.data(this, '_jqs_errnotify', true);
-                    }
-                    return;
-                }
-
-                sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);
-
-                sp.render();
-
-                if (mhandler) {
-                    mhandler.registerSparkline(sp);
-                }
-            };
-            if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {
-                if (!options.get('composite') && $.data(this, '_jqs_pending')) {
-                    // remove any existing references to the element
-                    for (i = pending.length; i; i--) {
-                        if (pending[i - 1][0] == this) {
-                            pending.splice(i - 1, 1);
-                        }
-                    }
-                }
-                pending.push([this, render]);
-                $.data(this, '_jqs_pending', true);
-            } else {
-                render.call(this);
-            }
-        });
-    };
-
-    $.fn.sparkline.defaults = getDefaults();
-
-
-    $.sparkline_display_visible = function () {
-        var el, i, pl;
-        var done = [];
-        for (i = 0, pl = pending.length; i < pl; i++) {
-            el = pending[i][0];
-            if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {
-                pending[i][1].call(el);
-                $.data(pending[i][0], '_jqs_pending', false);
-                done.push(i);
-            } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {
-                // element has been inserted and removed from the DOM
-                // If it was not yet inserted into the dom then the .data request
-                // will return true.
-                // removing from the dom causes the data to be removed.
-                $.data(pending[i][0], '_jqs_pending', false);
-                done.push(i);
-            }
-        }
-        for (i = done.length; i; i--) {
-            pending.splice(done[i - 1], 1);
-        }
-    };
-
-
-    /**
-     * User option handler
-     */
-    $.fn.sparkline.options = createClass({
-        init: function (tag, userOptions) {
-            var extendedOptions, defaults, base, tagOptionType;
-            this.userOptions = userOptions = userOptions || {};
-            this.tag = tag;
-            this.tagValCache = {};
-            defaults = $.fn.sparkline.defaults;
-            base = defaults.common;
-            this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);
-
-            tagOptionType = this.getTagSetting('type');
-            if (tagOptionType === UNSET_OPTION) {
-                extendedOptions = defaults[userOptions.type || base.type];
-            } else {
-                extendedOptions = defaults[tagOptionType];
-            }
-            this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);
-        },
-
-
-        getTagSetting: function (key) {
-            var prefix = this.tagOptionsPrefix,
-                val, i, pairs, keyval;
-            if (prefix === false || prefix === undefined) {
-                return UNSET_OPTION;
-            }
-            if (this.tagValCache.hasOwnProperty(key)) {
-                val = this.tagValCache.key;
-            } else {
-                val = this.tag.getAttribute(prefix + key);
-                if (val === undefined || val === null) {
-                    val = UNSET_OPTION;
-                } else if (val.substr(0, 1) === '[') {
-                    val = val.substr(1, val.length - 2).split(',');
-                    for (i = val.length; i--;) {
-                        val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, ''));
-                    }
-                } else if (val.substr(0, 1) === '{') {
-                    pairs = val.substr(1, val.length - 2).split(',');
-                    val = {};
-                    for (i = pairs.length; i--;) {
-                        keyval = pairs[i].split(':', 2);
-                        val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, ''));
-                    }
-                } else {
-                    val = normalizeValue(val);
-                }
-                this.tagValCache.key = val;
-            }
-            return val;
-        },
-
-        get: function (key, defaultval) {
-            var tagOption = this.getTagSetting(key),
-                result;
-            if (tagOption !== UNSET_OPTION) {
-                return tagOption;
-            }
-            return (result = this.mergedOptions[key]) === undefined ? defaultval : result;
-        }
-    });
-
-
-    $.fn.sparkline._base = createClass({
-        disabled: false,
-
-        init: function (el, values, options, width, height) {
-            this.el = el;
-            this.$el = $(el);
-            this.values = values;
-            this.options = options;
-            this.width = width;
-            this.height = height;
-            this.currentRegion = undefined;
-        },
-
-        /**
-         * Setup the canvas
-         */
-        initTarget: function () {
-            var interactive = !this.options.get('disableInteraction');
-            if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {
-                this.disabled = true;
-            } else {
-                this.canvasWidth = this.target.pixelWidth;
-                this.canvasHeight = this.target.pixelHeight;
-            }
-        },
-
-        /**
-         * Actually render the chart to the canvas
-         */
-        render: function () {
-            if (this.disabled) {
-                this.el.innerHTML = '';
-                return false;
-            }
-            return true;
-        },
-
-        /**
-         * Return a region id for a given x/y co-ordinate
-         */
-        getRegion: function (x, y) {
-        },
-
-        /**
-         * Highlight an item based on the moused-over x,y co-ordinate
-         */
-        setRegionHighlight: function (el, x, y) {
-            var currentRegion = this.currentRegion,
-                highlightEnabled = !this.options.get('disableHighlight'),
-                newRegion;
-            if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {
-                return null;
-            }
-            newRegion = this.getRegion(el, x, y);
-            if (currentRegion !== newRegion) {
-                if (currentRegion !== undefined && highlightEnabled) {
-                    this.removeHighlight();
-                }
-                this.currentRegion = newRegion;
-                if (newRegion !== undefined && highlightEnabled) {
-                    this.renderHighlight();
-                }
-                return true;
-            }
-            return false;
-        },
-
-        /**
-         * Reset any currently highlighted item
-         */
-        clearRegionHighlight: function () {
-            if (this.currentRegion !== undefined) {
-                this.removeHighlight();
-                this.currentRegion = undefined;
-                return true;
-            }
-            return false;
-        },
-
-        renderHighlight: function () {
-            this.changeHighlight(true);
-        },
-
-        removeHighlight: function () {
-            this.changeHighlight(false);
-        },
-
-        changeHighlight: function (highlight)  {},
-
-        /**
-         * Fetch the HTML to display as a tooltip
-         */
-        getCurrentRegionTooltip: function () {
-            var options = this.options,
-                header = '',
-                entries = [],
-                fields, formats, formatlen, fclass, text, i,
-                showFields, showFieldsKey, newFields, fv,
-                formatter, format, fieldlen, j;
-            if (this.currentRegion === undefined) {
-                return '';
-            }
-            fields = this.getCurrentRegionFields();
-            formatter = options.get('tooltipFormatter');
-            if (formatter) {
-                return formatter(this, options, fields);
-            }
-            if (options.get('tooltipChartTitle')) {
-                header += '<div class="jqs jqstitle">' + options.get('tooltipChartTitle') + '</div>\n';
-            }
-            formats = this.options.get('tooltipFormat');
-            if (!formats) {
-                return '';
-            }
-            if (!$.isArray(formats)) {
-                formats = [formats];
-            }
-            if (!$.isArray(fields)) {
-                fields = [fields];
-            }
-            showFields = this.options.get('tooltipFormatFieldlist');
-            showFieldsKey = this.options.get('tooltipFormatFieldlistKey');
-            if (showFields && showFieldsKey) {
-                // user-selected ordering of fields
-                newFields = [];
-                for (i = fields.length; i--;) {
-                    fv = fields[i][showFieldsKey];
-                    if ((j = $.inArray(fv, showFields)) != -1) {
-                        newFields[j] = fields[i];
-                    }
-                }
-                fields = newFields;
-            }
-            formatlen = formats.length;
-            fieldlen = fields.length;
-            for (i = 0; i < formatlen; i++) {
-                format = formats[i];
-                if (typeof format === 'string') {
-                    format = new SPFormat(format);
-                }
-                fclass = format.fclass || 'jqsfield';
-                for (j = 0; j < fieldlen; j++) {
-                    if (!fields[j].isNull || !options.get('tooltipSkipNull')) {
-                        $.extend(fields[j], {
-                            prefix: options.get('tooltipPrefix'),
-                            suffix: options.get('tooltipSuffix')
-                        });
-                        text = format.render(fields[j], options.get('tooltipValueLookups'), options);
-                        entries.push('<div class="' + fclass + '">' + text + '</div>');
-                    }
-                }
-            }
-            if (entries.length) {
-                return header + entries.join('\n');
-            }
-            return '';
-        },
-
-        getCurrentRegionFields: function () {},
-
-        calcHighlightColor: function (color, options) {
-            var highlightColor = options.get('highlightColor'),
-                lighten = options.get('highlightLighten'),
-                parse, mult, rgbnew, i;
-            if (highlightColor) {
-                return highlightColor;
-            }
-            if (lighten) {
-                // extract RGB values
-                parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);
-                if (parse) {
-                    rgbnew = [];
-                    mult = color.length === 4 ? 16 : 1;
-                    for (i = 0; i < 3; i++) {
-                        rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);
-                    }
-                    return 'rgb(' + rgbnew.join(',') + ')';
-                }
-
-            }
-            return color;
-        }
-
-    });
-
-    barHighlightMixin = {
-        changeHighlight: function (highlight) {
-            var currentRegion = this.currentRegion,
-                target = this.target,
-                shapeids = this.regionShapes[currentRegion],
-                newShapes;
-            // will be null if the region value was null
-            if (shapeids) {
-                newShapes = this.renderRegion(currentRegion, highlight);
-                if ($.isArray(newShapes) || $.isArray(shapeids)) {
-                    target.replaceWithShapes(shapeids, newShapes);
-                    this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {
-                        return newShape.id;
-                    });
-                } else {
-                    target.replaceWithShape(shapeids, newShapes);
-                    this.regionShapes[currentRegion] = newShapes.id;
-                }
-            }
-        },
-
-        render: function () {
-            var values = this.values,
-                target = this.target,
-                regionShapes = this.regionShapes,
-                shapes, ids, i, j;
-
-            if (!this.cls._super.render.call(this)) {
-                return;
-            }
-            for (i = values.length; i--;) {
-                shapes = this.renderRegion(i);
-                if (shapes) {
-                    if ($.isArray(shapes)) {
-                        ids = [];
-                        for (j = shapes.length; j--;) {
-                            shapes[j].append();
-                            ids.push(shapes[j].id);
-                        }
-                        regionShapes[i] = ids;
-                    } else {
-                        shapes.append();
-                        regionShapes[i] = shapes.id; // store just the shapeid
-                    }
-                } else {
-                    // null value
-                    regionShapes[i] = null;
-                }
-            }
-            target.render();
-        }
-    };
-
-    /**
-     * Line charts
-     */
-    $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {
-        type: 'line',
-
-        init: function (el, values, options, width, height) {
-            line._super.init.call(this, el, values, options, width, height);
-            this.vertices = [];
-            this.regionMap = [];
-            this.xvalues = [];
-            this.yvalues = [];
-            this.yminmax = [];
-            this.hightlightSpotId = null;
-            this.lastShapeId = null;
-            this.initTarget();
-        },
-
-        getRegion: function (el, x, y) {
-            var i,
-                regionMap = this.regionMap; // maps regions to value positions
-            for (i = regionMap.length; i--;) {
-                if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {
-                    return regionMap[i][2];
-                }
-            }
-            return undefined;
-        },
-
-        getCurrentRegionFields: function () {
-            var currentRegion = this.currentRegion;
-            return {
-                isNull: this.yvalues[currentRegion] === null,
-                x: this.xvalues[currentRegion],
-                y: this.yvalues[currentRegion],
-                color: this.options.get('lineColor'),
-                fillColor: this.options.get('fillColor'),
-                offset: currentRegion
-            };
-        },
-
-        renderHighlight: function () {
-            var currentRegion = this.currentRegion,
-                target = this.target,
-                vertex = this.vertices[currentRegion],
-                options = this.options,
-                spotRadius = options.get('spotRadius'),
-                highlightSpotColor = options.get('highlightSpotColor'),
-                highlightLineColor = options.get('highlightLineColor'),
-                highlightSpot, highlightLine;
-
-            if (!vertex) {
-                return;
-            }
-            if (spotRadius && highlightSpotColor) {
-                highlightSpot = target.drawCircle(vertex[0], vertex[1],
-                    spotRadius, undefined, highlightSpotColor);
-                this.highlightSpotId = highlightSpot.id;
-                target.insertAfterShape(this.lastShapeId, highlightSpot);
-            }
-            if (highlightLineColor) {
-                highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],
-                    this.canvasTop + this.canvasHeight, highlightLineColor);
-                this.highlightLineId = highlightLine.id;
-                target.insertAfterShape(this.lastShapeId, highlightLine);
-            }
-        },
-
-        removeHighlight: function () {
-            var target = this.target;
-            if (this.highlightSpotId) {
-                target.removeShapeId(this.highlightSpotId);
-                this.highlightSpotId = null;
-            }
-            if (this.highlightLineId) {
-                target.removeShapeId(this.highlightLineId);
-                this.highlightLineId = null;
-            }
-        },
-
-        scanValues: function () {
-            var values = this.values,
-                valcount = values.length,
-                xvalues = this.xvalues,
-                yvalues = this.yvalues,
-                yminmax = this.yminmax,
-                i, val, isStr, isArray, sp;
-            for (i = 0; i < valcount; i++) {
-                val = values[i];
-                isStr = typeof(values[i]) === 'string';
-                isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;
-                sp = isStr && values[i].split(':');
-                if (isStr && sp.length === 2) { // x:y
-                    xvalues.push(Number(sp[0]));
-                    yvalues.push(Number(sp[1]));
-                    yminmax.push(Number(sp[1]));
-                } else if (isArray) {
-                    xvalues.push(val[0]);
-                    yvalues.push(val[1]);
-                    yminmax.push(val[1]);
-                } else {
-                    xvalues.push(i);
-                    if (values[i] === null || values[i] === 'null') {
-                        yvalues.push(null);
-                    } else {
-                        yvalues.push(Number(val));
-                        yminmax.push(Number(val));
-                    }
-                }
-            }
-            if (this.options.get('xvalues')) {
-                xvalues = this.options.get('xvalues');
-            }
-
-            this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);
-            this.miny = this.minyorg = Math.min.apply(Math, yminmax);
-
-            this.maxx = Math.max.apply(Math, xvalues);
-            this.minx = Math.min.apply(Math, xvalues);
-
-            this.xvalues = xvalues;
-            this.yvalues = yvalues;
-            this.yminmax = yminmax;
-
-        },
-
-        processRangeOptions: function () {
-            var options = this.options,
-                normalRangeMin = options.get('normalRangeMin'),
-                normalRangeMax = options.get('normalRangeMax');
-
-            if (normalRangeMin !== undefined) {
-                if (normalRangeMin < this.miny) {
-                    this.miny = normalRangeMin;
-                }
-                if (normalRangeMax > this.maxy) {
-                    this.maxy = normalRangeMax;
-                }
-            }
-            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {
-                this.miny = options.get('chartRangeMin');
-            }
-            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {
-                this.maxy = options.get('chartRangeMax');
-            }
-            if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {
-                this.minx = options.get('chartRangeMinX');
-            }
-            if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {
-                this.maxx = options.get('chartRangeMaxX');
-            }
-
-        },
-
-        drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {
-            var normalRangeMin = this.options.get('normalRangeMin'),
-                normalRangeMax = this.options.get('normalRangeMax'),
-                ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),
-                height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);
-            this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();
-        },
-
-        render: function () {
-            var options = this.options,
-                target = this.target,
-                canvasWidth = this.canvasWidth,
-                canvasHeight = this.canvasHeight,
-                vertices = this.vertices,
-                spotRadius = options.get('spotRadius'),
-                regionMap = this.regionMap,
-                rangex, rangey, yvallast,
-                canvasTop, canvasLeft,
-                vertex, path, paths, x, y, xnext, xpos, xposnext,
-                last, next, yvalcount, lineShapes, fillShapes, plen,
-                valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;
-
-            if (!line._super.render.call(this)) {
-                return;
-            }
-
-            this.scanValues();
-            this.processRangeOptions();
-
-            xvalues = this.xvalues;
-            yvalues = this.yvalues;
-
-            if (!this.yminmax.length || this.yvalues.length < 2) {
-                // empty or all null valuess
-                return;
-            }
-
-            canvasTop = canvasLeft = 0;
-
-            rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;
-            rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;
-            yvallast = this.yvalues.length - 1;
-
-            if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {
-                spotRadius = 0;
-            }
-            if (spotRadius) {
-                // adjust the canvas size as required so that spots will fit
-                hlSpotsEnabled = options.get('highlightSpotColor') &&  !options.get('disableInteraction');
-                if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {
-                    canvasHeight -= Math.ceil(spotRadius);
-                }
-                if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {
-                    canvasHeight -= Math.ceil(spotRadius);
-                    canvasTop += Math.ceil(spotRadius);
-                }
-                if (hlSpotsEnabled ||
-                     ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {
-                    canvasLeft += Math.ceil(spotRadius);
-                    canvasWidth -= Math.ceil(spotRadius);
-                }
-                if (hlSpotsEnabled || options.get('spotColor') ||
-                    (options.get('minSpotColor') || options.get('maxSpotColor') &&
-                        (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {
-                    canvasWidth -= Math.ceil(spotRadius);
-                }
-            }
-
-
-            canvasHeight--;
-
-            if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {
-                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
-            }
-
-            path = [];
-            paths = [path];
-            last = next = null;
-            yvalcount = yvalues.length;
-            for (i = 0; i < yvalcount; i++) {
-                x = xvalues[i];
-                xnext = xvalues[i + 1];
-                y = yvalues[i];
-                xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));
-                xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;
-                next = xpos + ((xposnext - xpos) / 2);
-                regionMap[i] = [last || 0, next, i];
-                last = next;
-                if (y === null) {
-                    if (i) {
-                        if (yvalues[i - 1] !== null) {
-                            path = [];
-                            paths.push(path);
-                        }
-                        vertices.push(null);
-                    }
-                } else {
-                    if (y < this.miny) {
-                        y = this.miny;
-                    }
-                    if (y > this.maxy) {
-                        y = this.maxy;
-                    }
-                    if (!path.length) {
-                        // previous value was null
-                        path.push([xpos, canvasTop + canvasHeight]);
-                    }
-                    vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];
-                    path.push(vertex);
-                    vertices.push(vertex);
-                }
-            }
-
-            lineShapes = [];
-            fillShapes = [];
-            plen = paths.length;
-            for (i = 0; i < plen; i++) {
-                path = paths[i];
-                if (path.length) {
-                    if (options.get('fillColor')) {
-                        path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);
-                        fillShapes.push(path.slice(0));
-                        path.pop();
-                    }
-                    // if there's only a single point in this path, then we want to display it
-                    // as a vertical line which means we keep path[0]  as is
-                    if (path.length > 2) {
-                        // else we want the first value
-                        path[0] = [path[0][0], path[1][1]];
-                    }
-                    lineShapes.push(path);
-                }
-            }
-
-            // draw the fill first, then optionally the normal range, then the line on top of that
-            plen = fillShapes.length;
-            for (i = 0; i < plen; i++) {
-                target.drawShape(fillShapes[i],
-                    options.get('fillColor'), options.get('fillColor')).append();
-            }
-
-            if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {
-                this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
-            }
-
-            plen = lineShapes.length;
-            for (i = 0; i < plen; i++) {
-                target.drawShape(lineShapes[i], options.get('lineColor'), undefined,
-                    options.get('lineWidth')).append();
-            }
-
-            if (spotRadius && options.get('valueSpots')) {
-                valueSpots = options.get('valueSpots');
-                if (valueSpots.get === undefined) {
-                    valueSpots = new RangeMap(valueSpots);
-                }
-                for (i = 0; i < yvalcount; i++) {
-                    color = valueSpots.get(yvalues[i]);
-                    if (color) {
-                        target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),
-                            canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),
-                            spotRadius, undefined,
-                            color).append();
-                    }
-                }
-
-            }
-            if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {
-                target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),
-                    canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),
-                    spotRadius, undefined,
-                    options.get('spotColor')).append();
-            }
-            if (this.maxy !== this.minyorg) {
-                if (spotRadius && options.get('minSpotColor')) {
-                    x = xvalues[$.inArray(this.minyorg, yvalues)];
-                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
-                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),
-                        spotRadius, undefined,
-                        options.get('minSpotColor')).append();
-                }
-                if (spotRadius && options.get('maxSpotColor')) {
-                    x = xvalues[$.inArray(this.maxyorg, yvalues)];
-                    target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
-                        canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),
-                        spotRadius, undefined,
-                        options.get('maxSpotColor')).append();
-                }
-            }
-
-            this.lastShapeId = target.getLastShapeId();
-            this.canvasTop = canvasTop;
-            target.render();
-        }
-    });
-
-    /**
-     * Bar charts
-     */
-    $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {
-        type: 'bar',
-
-        init: function (el, values, options, width, height) {
-            var barWidth = parseInt(options.get('barWidth'), 10),
-                barSpacing = parseInt(options.get('barSpacing'), 10),
-                chartRangeMin = options.get('chartRangeMin'),
-                chartRangeMax = options.get('chartRangeMax'),
-                chartRangeClip = options.get('chartRangeClip'),
-                stackMin = Infinity,
-                stackMax = -Infinity,
-                isStackString, groupMin, groupMax, stackRanges,
-                numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,
-                stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;
-            bar._super.init.call(this, el, values, options, width, height);
-
-            // scan values to determine whether to stack bars
-            for (i = 0, vlen = values.length; i < vlen; i++) {
-                val = values[i];
-                isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;
-                if (isStackString || $.isArray(val)) {
-                    stacked = true;
-                    if (isStackString) {
-                        val = values[i] = normalizeValues(val.split(':'));
-                    }
-                    val = remove(val, null); // min/max will treat null as zero
-                    groupMin = Math.min.apply(Math, val);
-                    groupMax = Math.max.apply(Math, val);
-                    if (groupMin < stackMin) {
-                        stackMin = groupMin;
-                    }
-                    if (groupMax > stackMax) {
-                        stackMax = groupMax;
-                    }
-                }
-            }
-
-            this.stacked = stacked;
-            this.regionShapes = {};
-            this.barWidth = barWidth;
-            this.barSpacing = barSpacing;
-            this.totalBarWidth = barWidth + barSpacing;
-            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
-
-            this.initTarget();
-
-            if (chartRangeClip) {
-                clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;
-                clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;
-            }
-
-            numValues = [];
-            stackRanges = stacked ? [] : numValues;
-            var stackTotals = [];
-            var stackRangesNeg = [];
-            for (i = 0, vlen = values.length; i < vlen; i++) {
-                if (stacked) {
-                    vlist = values[i];
-                    values[i] = svals = [];
-                    stackTotals[i] = 0;
-                    stackRanges[i] = stackRangesNeg[i] = 0;
-                    for (j = 0, slen = vlist.length; j < slen; j++) {
-                        val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];
-                        if (val !== null) {
-                            if (val > 0) {
-                                stackTotals[i] += val;
-                            }
-                            if (stackMin < 0 && stackMax > 0) {
-                                if (val < 0) {
-                                    stackRangesNeg[i] += Math.abs(val);
-                                } else {
-                                    stackRanges[i] += val;
-                                }
-                            } else {
-                                stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));
-                            }
-                            numValues.push(val);
-                        }
-                    }
-                } else {
-                    val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];
-                    val = values[i] = normalizeValue(val);
-                    if (val !== null) {
-                        numValues.push(val);
-                    }
-                }
-            }
-            this.max = max = Math.max.apply(Math, numValues);
-            this.min = min = Math.min.apply(Math, numValues);
-            this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;
-            this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;
-
-            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {
-                min = options.get('chartRangeMin');
-            }
-            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {
-                max = options.get('chartRangeMax');
-            }
-
-            this.zeroAxis = zeroAxis = options.get('zeroAxis', true);
-            if (min <= 0 && max >= 0 && zeroAxis) {
-                xaxisOffset = 0;
-            } else if (zeroAxis == false) {
-                xaxisOffset = min;
-            } else if (min > 0) {
-                xaxisOffset = min;
-            } else {
-                xaxisOffset = max;
-            }
-            this.xaxisOffset = xaxisOffset;
-
-            range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;
-
-            // as we plot zero/min values a single pixel line, we add a pixel to all other
-            // values - Reduce the effective canvas size to suit
-            this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;
-
-            if (min < xaxisOffset) {
-                yMaxCalc = (stacked && max >= 0) ? stackMax : max;
-                yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;
-                if (yoffset !== Math.ceil(yoffset)) {
-                    this.canvasHeightEf -= 2;
-                    yoffset = Math.ceil(yoffset);
-                }
-            } else {
-                yoffset = this.canvasHeight;
-            }
-            this.yoffset = yoffset;
-
-            if ($.isArray(options.get('colorMap'))) {
-                this.colorMapByIndex = options.get('colorMap');
-                this.colorMapByValue = null;
-            } else {
-                this.colorMapByIndex = null;
-                this.colorMapByValue = options.get('colorMap');
-                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
-                    this.colorMapByValue = new RangeMap(this.colorMapByValue);
-                }
-            }
-
-            this.range = range;
-        },
-
-        getRegion: function (el, x, y) {
-            var result = Math.floor(x / this.totalBarWidth);
-            return (result < 0 || result >= this.values.length) ? undefined : result;
-        },
-
-        getCurrentRegionFields: function () {
-            var currentRegion = this.currentRegion,
-                values = ensureArray(this.values[currentRegion]),
-                result = [],
-                value, i;
-            for (i = values.length; i--;) {
-                value = values[i];
-                result.push({
-                    isNull: value === null,
-                    value: value,
-                    color: this.calcColor(i, value, currentRegion),
-                    offset: currentRegion
-                });
-            }
-            return result;
-        },
-
-        calcColor: function (stacknum, value, valuenum) {
-            var colorMapByIndex = this.colorMapByIndex,
-                colorMapByValue = this.colorMapByValue,
-                options = this.options,
-                color, newColor;
-            if (this.stacked) {
-                color = options.get('stackedBarColor');
-            } else {
-                color = (value < 0) ? options.get('negBarColor') : options.get('barColor');
-            }
-            if (value === 0 && options.get('zeroColor') !== undefined) {
-                color = options.get('zeroColor');
-            }
-            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
-                color = newColor;
-            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
-                color = colorMapByIndex[valuenum];
-            }
-            return $.isArray(color) ? color[stacknum % color.length] : color;
-        },
-
-        /**
-         * Render bar(s) for a region
-         */
-        renderRegion: function (valuenum, highlight) {
-            var vals = this.values[valuenum],
-                options = this.options,
-                xaxisOffset = this.xaxisOffset,
-                result = [],
-                range = this.range,
-                stacked = this.stacked,
-                target = this.target,
-                x = valuenum * this.totalBarWidth,
-                canvasHeightEf = this.canvasHeightEf,
-                yoffset = this.yoffset,
-                y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;
-
-            vals = $.isArray(vals) ? vals : [vals];
-            valcount = vals.length;
-            val = vals[0];
-            isNull = all(null, vals);
-            allMin = all(xaxisOffset, vals, true);
-
-            if (isNull) {
-                if (options.get('nullColor')) {
-                    color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);
-                    y = (yoffset > 0) ? yoffset - 1 : yoffset;
-                    return target.drawRect(x, y, this.barWidth - 1, 0, color, color);
-                } else {
-                    return undefined;
-                }
-            }
-            yoffsetNeg = yoffset;
-            for (i = 0; i < valcount; i++) {
-                val = vals[i];
-
-                if (stacked && val === xaxisOffset) {
-                    if (!allMin || minPlotted) {
-                        continue;
-                    }
-                    minPlotted = true;
-                }
-
-                if (range > 0) {
-                    height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;
-                } else {
-                    height = 1;
-                }
-                if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {
-                    y = yoffsetNeg;
-                    yoffsetNeg += height;
-                } else {
-                    y = yoffset - height;
-                    yoffset -= height;
-                }
-                color = this.calcColor(i, val, valuenum);
-                if (highlight) {
-                    color = this.calcHighlightColor(color, options);
-                }
-                result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));
-            }
-            if (result.length === 1) {
-                return result[0];
-            }
-            return result;
-        }
-    });
-
-    /**
-     * Tristate charts
-     */
-    $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {
-        type: 'tristate',
-
-        init: function (el, values, options, width, height) {
-            var barWidth = parseInt(options.get('barWidth'), 10),
-                barSpacing = parseInt(options.get('barSpacing'), 10);
-            tristate._super.init.call(this, el, values, options, width, height);
-
-            this.regionShapes = {};
-            this.barWidth = barWidth;
-            this.barSpacing = barSpacing;
-            this.totalBarWidth = barWidth + barSpacing;
-            this.values = $.map(values, Number);
-            this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
-
-            if ($.isArray(options.get('colorMap'))) {
-                this.colorMapByIndex = options.get('colorMap');
-                this.colorMapByValue = null;
-            } else {
-                this.colorMapByIndex = null;
-                this.colorMapByValue = options.get('colorMap');
-                if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
-                    this.colorMapByValue = new RangeMap(this.colorMapByValue);
-                }
-            }
-            this.initTarget();
-        },
-
-        getRegion: function (el, x, y) {
-            return Math.floor(x / this.totalBarWidth);
-        },
-
-        getCurrentRegionFields: function () {
-            var currentRegion = this.currentRegion;
-            return {
-                isNull: this.values[currentRegion] === undefined,
-                value: this.values[currentRegion],
-                color: this.calcColor(this.values[currentRegion], currentRegion),
-                offset: currentRegion
-            };
-        },
-
-        calcColor: function (value, valuenum) {
-            var values = this.values,
-                options = this.options,
-                colorMapByIndex = this.colorMapByIndex,
-                colorMapByValue = this.colorMapByValue,
-                color, newColor;
-
-            if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
-                color = newColor;
-            } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
-                color = colorMapByIndex[valuenum];
-            } else if (values[valuenum] < 0) {
-                color = options.get('negBarColor');
-            } else if (values[valuenum] > 0) {
-                color = options.get('posBarColor');
-            } else {
-                color = options.get('zeroBarColor');
-            }
-            return color;
-        },
-
-        renderRegion: function (valuenum, highlight) {
-            var values = this.values,
-                options = this.options,
-                target = this.target,
-                canvasHeight, height, halfHeight,
-                x, y, color;
-
-            canvasHeight = target.pixelHeight;
-            halfHeight = Math.round(canvasHeight / 2);
-
-            x = valuenum * this.totalBarWidth;
-            if (values[valuenum] < 0) {
-                y = halfHeight;
-                height = halfHeight - 1;
-            } else if (values[valuenum] > 0) {
-                y = 0;
-                height = halfHeight - 1;
-            } else {
-                y = halfHeight - 1;
-                height = 2;
-            }
-            color = this.calcColor(values[valuenum], valuenum);
-            if (color === null) {
-                return;
-            }
-            if (highlight) {
-                color = this.calcHighlightColor(color, options);
-            }
-            return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);
-        }
-    });
-
-    /**
-     * Discrete charts
-     */
-    $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {
-        type: 'discrete',
-
-        init: function (el, values, options, width, height) {
-            discrete._super.init.call(this, el, values, options, width, height);
-
-            this.regionShapes = {};
-            this.values = values = $.map(values, Number);
-            this.min = Math.min.apply(Math, values);
-            this.max = Math.max.apply(Math, values);
-            this.range = this.max - this.min;
-            this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;
-            this.interval = Math.floor(width / values.length);
-            this.itemWidth = width / values.length;
-            if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {
-                this.min = options.get('chartRangeMin');
-            }
-            if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {
-                this.max = options.get('chartRangeMax');
-            }
-            this.initTarget();
-            if (this.target) {
-                this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');
-            }
-        },
-
-        getRegion: function (el, x, y) {
-            return Math.floor(x / this.itemWidth);
-        },
-
-        getCurrentRegionFields: function () {
-            var currentRegion = this.currentRegion;
-            return {
-                isNull: this.values[currentRegion] === undefined,
-                value: this.values[currentRegion],
-                offset: currentRegion
-            };
-        },
-
-        renderRegion: function (valuenum, highlight) {
-            var values = this.values,
-                options = this.options,
-                min = this.min,
-                max = this.max,
-                range = this.range,
-                interval = this.interval,
-                target = this.target,
-                canvasHeight = this.canvasHeight,
-                lineHeight = this.lineHeight,
-                pheight = canvasHeight - lineHeight,
-                ytop, val, color, x;
-
-            val = clipval(values[valuenum], min, max);
-            x = valuenum * interval;
-            ytop = Math.round(pheight - pheight * ((val - min) / range));
-            color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');
-            if (highlight) {
-                color = this.calcHighlightColor(color, options);
-            }
-            return target.drawLine(x, ytop, x, ytop + lineHeight, color);
-        }
-    });
-
-    /**
-     * Bullet charts
-     */
-    $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {
-        type: 'bullet',
-
-        init: function (el, values, options, width, height) {
-            var min, max, vals;
-            bullet._super.init.call(this, el, values, options, width, height);
-
-            // values: target, performan

<TRUNCATED>

[11/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditTabLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditTabLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditTabLayoutView.js
deleted file mode 100644
index 7710156..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/audit/AuditTabLayoutView.js
+++ /dev/null
@@ -1,429 +0,0 @@
-/**
- * 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',
-  'backbone',
-  'utils/Globals',
-  'utils/Utils',
-  'utils/ViewUtils',
-  'collections/VGroupList',
-  'collections/VAuditLogList',
-  'models/VAuditLog',
-  'hbs!tmpl/audit/AuditTabLayoutView_tmpl',
-  'moment'
-], function (require, Backbone, Globals, Utils, ViewUtils, VGroupList, VAuditLogList, VAuditLog, AuditTabLayoutViewTmpl, moment) {
-
-  'use strict';
-
-  return Backbone.Marionette.Layout.extend(
-    {
-      _viewName: 'AuditTabLayoutView',
-
-      template: AuditTabLayoutViewTmpl,
-
-      /** Layout sub regions */
-      regions: {
-        RAuditTable: "[data-id='auditTable']",
-        RVisualSearch: "#r_vsSearch",
-        RVisualSearchInc: "#r_vsSearchInc",
-        RVisualSearchEx: "#r_vsSearchEx",
-        RAuditLine: "#r_AuditLine",
-        RAuditAggregated: "[data-id='auditAggregated']",
-      },
-
-      /** ui selector cache */
-      ui: {
-        viewType: "input[name='viewTypeAudit']",
-        excludeComponents: "#excludeComponents",
-        includeComponents: "#includeComponents",
-        collapseArrowClick: "a.collapse-link.chkArrow"
-      },
-
-      /** ui events hash */
-      events: function () {
-        var events = {};
-        events['click [data-id="refresh-tab-audit"]'] = 'onAuditTabRefresh';
-        events['change ' + this.ui.viewType] = 'onViewTypeChange';
-        events['click ' + this.ui.collapseArrowClick] = function (e) {
-          if ($(e.currentTarget).find('i').hasClass('fa-chevron-down')) {
-            if (this.RAuditAggregated.currentView) {
-              this.RAuditAggregated.currentView.trigger("button:min:max");
-            }
-          }
-        };
-        return events;
-      },
-      initialize: function (options) {
-        _.extend(this, _.pick(options, 'globalVent'));
-        this.defaultParams = ViewUtils.getDefaultParamsForHierarchy();
-        delete this.defaultParams.level;
-        this.vent = new Backbone.Wreqr.EventAggregator();
-        this.initializeCollections();
-        this.columns = [];
-        this.bindEvents();
-      },
-      initializeCollections: function () {
-        this.auditModel = new VAuditLog();
-        this.collection = new VAuditLogList([], {
-          state: {
-            firstPage: 0,
-            pageSize: 25
-          }
-        });
-
-        this.componentsList = new VGroupList([], {
-          state: {
-            firstPage: 0,
-            pageSize: 99999
-          }
-        });
-        this.componentsList.url = Globals.baseURL + "audit/logs/components";
-      },
-      bindEvents: function () {
-        this.listenTo(this.componentsList, "reset", function (col, abc) {
-          this.setupSelect2Fields(col, "type", 'type', 'excludeComponents', 'Exclude Components');
-          this.setupSelect2Fields(col, "type", 'type', 'includeComponents', 'Include Components');
-        }, this);
-        this.listenTo(this.vent, "search:audit:query auditComponents:include auditComponents:exclude search:audit:include search:audit:exclude logtime:filter", function (value) {
-          _.extend(this.defaultParams, value);
-          this.fetchAuditLogs(value);
-        }, this);
-        this.listenTo(this.vent, "reinitialize:filter:mustBe", function (value) {
-          this.reinitializeFilterMustBe(value);
-        }, this);
-        this.listenTo(this.vent, "reinitialize:filter:mustNot", function (value) {
-          this.reinitializeFilterMustNot(value);
-        }, this);
-
-        this.listenTo(this.globalVent, "reinitialize:auditLogs", function (options) {
-          this.vent.trigger("reinitialize:filter:mustNot reinitialize:filter:mustBe reinitialize:filter:logtime " +
-            "reinitialize:TopTenGraph", options);
-          this.fetchAuditLogs(options);
-        }, this);
-
-      },
-      onRender: function () {
-        this.renderHistogram();
-        this.renderAuditAggregatedInfo();
-        this.fetchAuditColumns();
-        this.fetchAuditLogs((this.defaultParams) ? this.defaultParams : {q: "*:*"});
-        this.componentsList.fetch({reset: true});
-      },
-      renderHistogram: function () {
-        var that = this;
-        require(['views/graphs/GraphLayoutView'], function (GraphLayoutView) {
-          that.RAuditLine.show(new GraphLayoutView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams,
-            viewType: Globals.graphType.MULTILINE.value,
-            showDatePicker: true,
-            futureDate: false
-          }));
-        })
-      },
-      renderAuditAggregatedInfo: function () {
-        var that = this;
-        require(['views/audit/AuditAggregatedView'], function (AuditAggregatedView) {
-          that.RAuditAggregated.show(new AuditAggregatedView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        })
-
-      },
-      fetchAuditColumns: function () {
-        var that = this;
-        this.collection.getAuditSchemaFieldsName({}, {
-          beforeSend: function () {
-            that.$("#loaderAudit").show();
-          },
-          success: function (data) {
-            that.columns = ViewUtils.getLogSchemaFields(data, Globals.defaultAuditLogMappings, Globals.defaultAuditLogExcludes);
-          },
-          error: function (error, data, status) {
-            var obj = JSON.parse(error.responseText);
-            if (obj)
-              Utils.notifyError({content: obj.msgDesc});
-          },
-          complete: function () {
-            that.renderAuditTable();
-            that.renderVSSearch();
-            that.$("#loaderAudit").hide();
-          }
-        });
-      },
-      fetchAuditLogs: function (params) {
-        $.extend(this.collection.queryParams, params);
-        this.collection.getFirstPage({reset: true});
-      },
-      renderVSSearch: function () {
-        var that = this;
-        require(['views/tabs/VisualSearchView'], function (VisualSearchView) {
-
-          _.each(that.columns, function (v, i) {
-            if (v.toLowerCase().indexOf("time") > 0) {
-              delete that.columns[v]
-            }
-          });
-          that.RVisualSearchInc.show(new VisualSearchView({
-            viewName: "includeColumns",
-            placeholder: "Include Search",
-            vent: that.vent,
-            globalVent: that.globalVent,
-            customOptions: _.values(that.columns),
-            eventName: "search:audit:include",
-            myFormatData: function (query, searchCollection) {
-              var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedAuditLogMappings, true);
-              return {
-                includeQuery: JSON.stringify(obj),
-                query: query
-              }
-            }
-          }));
-          that.RVisualSearchEx.show(new VisualSearchView({
-            placeholder: "Exclude Search",
-            vent: that.vent,
-            globalVent: that.globalVent,
-            customOptions: _.values(that.columns),
-            eventName: "search:audit:exclude",
-            myFormatData: function (query, searchCollection) {
-              var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedAuditLogMappings, true);
-              return {
-                excludeQuery: JSON.stringify(obj),
-                query: query
-              }
-            }
-          }));
-        });
-      },
-      renderAuditTable: function () {
-        var that = this;
-        require(['views/common/TableLayout'], function (TableLayout) {
-          var cols = new Backgrid.Columns(that.getColumns());
-          that.RAuditTable.show(new TableLayout({
-            columns: cols,
-            collection: that.collection,
-            includeFilter: false,
-            includePagination: true,
-            includePageSize: true,
-            includeFooterRecords: true,
-            includeColumnManager: true,
-            columnOpts: {
-              initialColumnsVisible: 9,
-              saveState: false
-            },
-            gridOpts: {
-              className: "table table-bordered table-hover table-condensed backgrid",
-              emptyText: 'No records found!'
-            },
-            filterOpts: {},
-            paginatorOpts: {}
-          }));
-        });
-      },
-      getColumns: function () {
-        var cols = {};
-        var that = this;
-        var columns = {
-          evtTime: {
-            label: "Event Time",
-            cell: "String",
-            sortType: 'toggle',
-            editable: false,
-            formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-              fromRaw: function (rawValue, model) {
-                return moment(rawValue).format("YYYY-MM-DD HH:mm:ss,SSS");
-              }
-            })
-          },
-          reqUser: {
-            label: "User",
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          repo: {
-            label: 'Repo',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          resource: {
-            label: 'Resource',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          access: {
-            label: 'Access Type',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          result: {
-            label: 'Result',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false,
-            formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-              fromRaw: function (rawValue, model) {
-                return (rawValue === 1) ? "Allowed" : "Denied";
-              }
-            })
-          },
-          enforcer: {
-            label: 'Access Enforcer',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          cliIP: {
-            label: 'Client IP',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          },
-          event_count: {
-            label: 'Event Count',
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          }
-        };
-        _.each(this.columns, function(value){
-          var name = Globals.invertedAuditLogMappings[value];
-          if (columns[name] === undefined && value != "_version_") {
-            var columnObj = {
-              name: Globals.invertedAuditLogMappings[value],
-              label: value,
-              cell: "String",
-              sortType: 'toggle',
-              editable: false
-            };
-            columns[name] = columnObj;
-          } else {
-            if (columns[name] && columns[name].label) {
-              columns[name].label = value;
-            }
-          }
-        });
-        return this.collection.constructor.getTableCols(columns, this.collection);
-      },
-      onAuditTabRefresh: function (e) {
-        ViewUtils.setLatestTimeParams(this.defaultParams);
-        $.extend(this.collection.queryParams, this.defaultParams);
-        this.collection.fetch({reset: true});
-        this.vent.trigger("tab:refresh", this.defaultParams);
-      },
-      onViewTypeChange: function (e) {
-        var that = this;
-        var val = that.$("[name='viewTypeAudit']:checked").val();
-        this.toggleViewType(val);
-      },
-      toggleViewType: function (val) {
-        if (val === "A") {
-          this.$("[data-id='auditTable']").show();
-          this.$('[data-id="auditAggregated"]').hide();
-        } else {
-          this.$('[data-id="auditAggregated"]').show();
-          this.$("[data-id='auditTable']").hide();
-          if (this.RAuditAggregated.currentView)
-            this.RAuditAggregated.currentView.$el.resize();
-        }
-      },
-      setupSelect2Fields: function (col, idKey, textKey, selectTagId, placeHolder) {
-        var that = this, data = [];
-        data = _.pluck(col.models, 'attributes');
-        for (var i = 0; i < data.length; i++) {
-          data[i].id = data[i].type;
-        }
-        this.ui[selectTagId].select2({
-          placeholder: (placeHolder) ? placeHolder : 'Select',
-          tags: true,
-          allowClear: true,
-          width: '100%',
-          data: {results: data, text: textKey},
-          formatSelection: function (item) {
-            return item[textKey];
-          },
-          formatResult: function (item) {
-            return item[textKey];
-          }
-        }).on("change", function (e) {
-          var data = that.ui[selectTagId].select2("data").map(function (d) {
-            return d.type
-          });
-          if (selectTagId === "excludeComponents") {
-            that.vent.trigger("auditComponents:exclude", {mustNot: data.toString()});
-          }
-          if (selectTagId === "includeComponents")
-            that.vent.trigger("auditComponents:include", {mustBe: data.toString()});
-        });
-      },
-      startPoll: function () {
-        var that = this;
-        setInterval(function () {
-          that.pollLiveFeed();
-        }, 5000);
-      },
-      pollLiveFeed: function () {
-        var that = this;
-        if (this.pollXhr) {
-          if (this.pollXhr.readyState > 0 && this.pollXhr.readyState < 4)
-            return
-        }
-        this.pollXhr = this.auditModel.auditLiveFeed({}, {
-          beforeSend: function () {
-            that.$("#loaderFeed").show();
-          },
-          success: function (data) {
-            var dd = [];
-            that.$("#spark").parent().show();
-            _.each(data.vnameValues, function (d) {
-              dd.push(d.value);
-            });
-            that.$("#spark").sparkline(dd, {lineColor: '#5A8DB6', width: "100px"});
-          },
-          error: function () {
-            that.$("#spark").parent().hide();
-          },
-          complete: function () {
-            setTimeout(function () {
-              that.$("#loaderFeed").hide();
-            }, 1000);
-          }
-        });
-      },
-      reinitializeFilterMustBe: function (values) {
-        if (values.mustBe) {
-          this.ui.includeComponents.select2('val', values.mustBe.split(","));
-        } else {
-          this.ui.includeComponents.select2('val', []);
-        }
-      },
-      reinitializeFilterMustNot: function (values) {
-        if (values.mustNot) {
-          this.ui.excludeComponents.select2('val', values.mustNot.split(","));
-        } else {
-          this.ui.excludeComponents.select2('val', []);
-        }
-      }
-    });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/AdvanceSearchLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/AdvanceSearchLayout.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/AdvanceSearchLayout.js
deleted file mode 100644
index c05caa7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/AdvanceSearchLayout.js
+++ /dev/null
@@ -1,146 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'utils/Globals',
-    'hbs!tmpl/common/AdvanceSearchLayout_tmpl'
-], function(require, backbone, Utils, Globals, AdvanceSearchLayoutTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends AdvanceSearchLayout */
-        {
-            _viewName: 'AdvanceSearchLayout',
-
-            template: AdvanceSearchLayoutTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                searchArea : '[data-id="searchArea"]',
-                searchInput: '[data-id="searchInput"]',
-                suggesterBox: '[data-id="suggesterBox"]',
-                suggesterList: '[data-id="suggesterList"]'
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events["click " + this.ui.startStop] = 'onStartStopClick';
-                events["change " + this.ui.searchArea] = 'advancedSearch';
-                /*  events["click " + this.ui.start] = 'onStartClick';
-                  events["click " + this.ui.stop] = 'onStopClick';*/
-                return events;
-            },
-
-            /**
-             * intialize a new AdvanceSearchLayout Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'globalVent', 'params'));
-                this.dateUtil = Utils.dateUtil;
-            },
-            bindEvents: function() {},
-            onRender: function() {
-                var that = this;
-
-                var li = this.elementGenerator(Globals.serviceLogsColumns)
-                that.ui.suggesterList.html(li);
-                this.ui.searchInput.on('focusin', function() {
-                    that.ui.suggesterBox.show();
-                    that.ui.suggesterBox.addClass('advanceSearchActive');
-                });
-
-                this.$('.advanceSearchList').on('click', 'li', function(e) {
-                    var value = that.ui.searchInput.val();
-                    that.ui.searchInput.val(value + $(this).data().value);
-                });
-                this.ui.searchInput.on('focusout', function() {
-                    that.ui.suggesterBox.hide();
-                    that.ui.suggesterBox.removeClass('advanceSearchActive')
-                });
-            },
-            elementGenerator: function(serviceLogsColumns) {
-                var li = "";
-                _.keys(serviceLogsColumns).map(function(object) {
-                    li += '<li data-value="' + object + '">' + serviceLogsColumns[object] + '(' + object + ')</li>'
-                });
-                return li;
-            },
-            advancedSearch : function(){
-               var that = this,textareaValue = '';
-
-               if(that.ui.searchArea.val() != ""){
-                textareaValue = that.ui.searchArea.val();
-               }
-               textareaValue = textareaValue.replace(/\&/g,'}{');
-              // that.vent.trigger('main:search',{advanceSearch : textareaValue});
-            }
-            /* suggester*/
-            /*elementGenerator: function(text) {
-                this.$('.advanceSearchList').on('click keydown', 'li', function(e) {
-                var value = that.ui.searchInput.val();
-                if (that.lastSpchar) {
-                    var splitArray = value.split(that.lastSpchar[0])
-                    splitArray[splitArray.length - 1] = $(this).data().value;
-                    that.ui.searchInput.val(splitArray.join(that.lastSpchar));
-                } else {
-                    that.ui.searchInput.val($(this).data().value);
-                }
-
-            })
-                var checkLastLatter = text.slice(-1).match(/^[ :~?\}\{\[\]!@#\$%\^\&*\)\(+=._-]+$/g);
-                if (checkLastLatter) {
-                    this.lastSpchar = checkLastLatter;
-                    var splitArray = text.split(this.lastSpchar[0])
-                    text = splitArray[splitArray.length - 1];
-                } else {
-                    if (this.lastSpchar) {
-                        var splitArray = text.split(this.lastSpchar[0])
-                        text = splitArray[splitArray.length - 1];
-                    }
-                }
-                var li = "";
-                if (text != '') {
-                    _.each(this.availableTags, function(object) {
-                        var regex = new RegExp(text.replace(/(\S+)/g, function(s) {
-                            return "\\b(" + s + ")(.*)"
-                        }).replace(/\s+/g, ''), "gi");
-                        var matches = regex.exec(object);
-                        var result = '';
-                        if (matches && matches.length) {
-                            for (var i = 1; i < matches.length; i++) {
-                                if (i % 2 == 1)
-                                    result += '<b>' + matches[i] + '</b>';
-                                else
-                                    result += matches[i];
-                            }
-                            li += '<li data-value="' + object + '">' + result + '</li>'
-                        }
-                    });
-                    return li
-                }
-
-            },*/
-
-
-        });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/BreadCrumbs.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/BreadCrumbs.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/BreadCrumbs.js
deleted file mode 100644
index bf05758..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/BreadCrumbs.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-
- /**
- * 
- * BreadCrumbs Veiw  
- * BreadCrumbs is directly accessible through App object .But can also create a instance of it.
- * @array 
- */
-
-define(['require',
-	'backbone.marionette',
-	'hbs!tmpl/common/breadcrumbs',
-	'App'
-],function(require,Marionette,tmpl,App) {
-
-
-	var BreadCrumbs = Marionette.ItemView.extend({
-		template : tmpl,
-		templateHelpers : function(){
-			return {
-				breadcrumb : this.setLast(this.breadcrumb)
-			};
-		},
-		initialize : function(options){
-			this.breadcrumb = [];
-			if(typeof options !== 'undefined'){
-				this.breadcrumb = options.breadcrumb;
-			}
-			//In docs the breadcrubs region stays constant only inner content changes
-	/*		this.listenTo(Vent,'draw:docs:breadcrumbs',function(breads){
-				this.breadcrumb = breads;
-				this.reRenderBookmarks();
-			},this);*/
-		},
-		onRender : function(){
-
-		},
-		reRenderBookmarks : function(){
-			this.breadcrumb = this.setLast(this.breadcrumb);
-			this.render();
-		},
-		setLast : function(breadcrumb){
-			if(breadcrumb.length > 0){
-				//breadcrumb[breadcrumb.length -1].isLast = true;
-				breadcrumb[breadcrumb.length -1] = _.extend({},breadcrumb[breadcrumb.length -1],{isLast : true});
-			}
-			return breadcrumb;
-		},
-		// showBreadCrumbs : function(view,breadcrumb){
-			// var brRgn = view.$el.find('#brdCrumbs');
-			// if(brRgn){
-				// $(brRgn).html(Marionette.Renderer.render(tmpl,{breadcrumb : this.setLast(breadcrumb)}));	
-			// }/*else{*/
-			   // ////throw new Error('This view does not have a  #brdCrumbs id'); 
-			// /*}*/
-		// },
-		onClose : function(){       
-			console.log('OnItemClosed called of BreadCrumbs');
-		//	this.stopListening(Vent);
-		}
-	});
-
-	App.BreadCrumbs = new BreadCrumbs();	
-
-	return BreadCrumbs;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/CustomBackgrid.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/CustomBackgrid.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/CustomBackgrid.js
deleted file mode 100644
index 83b756b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/CustomBackgrid.js
+++ /dev/null
@@ -1,284 +0,0 @@
-/**
- * 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',
-	'backbone',
-	'utils/Utils',
-	'backgrid-filter',
-	'backgrid-paginator',
-	'select2'
-],function(require,Backbone,Util){
-    'use strict';
-
-	var HeaderSearchCell = Backbone.View.extend({
-
-		tagName: "td",
-
-		className: "backgrid-filter",
-
-		template: _.template('<input type="search" <% if (placeholder) { %> placeholder="<%- placeholder %>" <% } %> name="<%- name %>" <% if (style) { %> style="<%- style %>" <% } %> />'),
-							 //<a class="clear" href="#">&times;</a>'),
-
-		placeholder: "",
-
-		events: {
-			"keyup input": "evKeyUp",
-			"submit": "search"
-		},
-
-		initialize: function (options) {
-			_.extend(this, _.pick(options, 'column'));
-			this.name = this.column.get('name');
-			if(this.column.get('reName') != undefined)
-				this.name = this.column.get('reName');
-				
-
-			var collection = this.collection, self = this;
-			if (Backbone.PageableCollection && collection instanceof Backbone.PageableCollection ) {
-				collection.queryParams[this.name] = function () {
-					return self.searchBox().val() || null;
-				};
-			}
-		},
-
-		render: function () {
-			this.$el.empty().append(this.template({
-				name: this.column.get('name'),
-				placeholder: this.column.get('placeholder') || "Search",
-				style : this.column.get('headerSearchStyle')
-			}));
-			this.$el.addClass('renderable');
-			this.delegateEvents();
-			return this;
-
-		},
-
-		evKeyUp: function (e) {
-			var $clearButton = this.clearButton();
-			var searchTerms = this.searchBox().val();
-
-			if(!e.shiftKey) {
-				this.search();
-			}
-			
-			if (searchTerms) {
-				$clearButton.show();
-			} else {
-				$clearButton.hide();
-			}
-		},
-
-		searchBox: function () {
-			return this.$el.find("input[type=search]");
-		},
-
-		clearButton: function () {
-			return this.$el.find(".clear");
-		},
-
-		search: function () {
-
-			var data = {};
-
-			// go back to the first page on search
-			var collection = this.collection;
-			if (Backbone.PageableCollection &&
-				collection instanceof Backbone.PageableCollection &&
-					collection.mode == "server") {
-				collection.state.currentPage = collection.state.firstPage;
-			}
-			var query = this.searchBox().val();
-			if (query) data[this.name] = query;
-			if(collection.extraSearchParams){
-				_.extend(data, collection.extraSearchParams);
-			}
-			collection.fetch({
-				data: data,
-				reset: true,
-				success : function(){},
-				error  : function(msResponse){
-					Util.notifyError('Error', 'Invalid input data!');
-				}
-			});
-		},
-
-		clear: function (e) {
-			if (e) e.preventDefault();
-			this.searchBox().val(null);
-			this.collection.fetch({reset: true});
-		}
-
-	});
-	
-	var HeaderFilterCell = Backbone.View.extend({
-
-		tagName: "td",
-
-		className: "backgrid-filter",
-
-		template: _.template('<select >  <option>ALL</option>' +
-				 				'<% _.each(list, function(data) {' +
-				 						'if(_.isObject(data)){ %>' +
-				 							'<option value="<%= data.value %>"><%= data.label %></option>' +
-				 						'<% }else{ %>' +
-												'<option value="<%= data %>"><%= data %></option>' +
-				 						'<% } %>' +
-				 				'<% }); %></select>'),
-					 
-		placeholder: "",
-
-		events: {
-			"click": function(){
-			},
-		},
-
-		initialize: function (options) {
-			_.extend(this, _.pick(options, 'column'));
-			this.name = this.column.get('name');
-			this.headerFilterOptions = this.column.get('headerFilterOptions');
-		},
-
-		render: function () {
-			var that =this;
-			this.$el.empty().append(this.template({
-				name: this.column.get('name'),
-				list : this.headerFilterOptions.filterList,
-			}));
-			
-			this.$el.find('select').select2({
-				allowClear: true,
-				closeOnSelect : false,
-				width : this.headerFilterOptions.filterWidth || '100%' ,
-				height : this.headerFilterOptions.filterHeight || '20px',
-			});
-			
-			this.$el.addClass('renderable');
-			
-			this.$el.find('select').on('click',function(e){
-				that.search(e.currentTarget.value);
-			});
-			//this.delegateEvents();
-			return this;
-
-		},
-
-		
-
-		search: function (selectedOptionValue) {
-
-			var data = {}, query;
-
-			// go back to the first page on search
-			var collection = this.collection;
-			if (Backbone.PageableCollection &&
-				collection instanceof Backbone.PageableCollection &&
-					collection.mode == "server") {
-				collection.state.currentPage = collection.state.firstPage;
-			}
-			if(selectedOptionValue != "ALL")  {
-				query = selectedOptionValue;
-			}
-			if (query) {
-				data[this.name] = query;
-			}
-			if(collection.extraSearchParams){
-				_.extend(data, collection.extraSearchParams);
-			}
-			collection.fetch({data: data, reset: true});
-		},
-
-		/*clear: function (e) {
-			if (e) e.preventDefault();
-			this.searchBox().val(null);
-			this.collection.fetch({reset: true});
-		}*/
-
-	});
-
-	
-	
-	var HeaderRow = Backgrid.Row.extend({
-
-		requiredOptions: ["columns", "collection"],
-
-		initialize: function () {
-			Backgrid.Row.prototype.initialize.apply(this, arguments);
-		},
-
-		makeCell: function (column, options) {
-			var headerCell;
-			switch(true){
-				case (column.has('canHeaderSearch') && column.get('canHeaderSearch') === true) :
-					headerCell = new HeaderSearchCell({
-						column		: column,
-						collection	: this.collection,
-					});
-					break;
-				
-				case (column.has('canHeaderFilter') && column.get('canHeaderFilter') === true) :
-					headerCell = new HeaderFilterCell({
-						column		: column,
-						collection	: this.collection,
-					});
-					break;
-				default :
-					headerCell = new Backbone.View({
-						tagName : 'td'
-					});
-			}
-			return headerCell;
-		}
-
-	});
-
-
-
-	var FSHeader = Backgrid.Header.extend({
-
-		initialize: function (options) {
-			var args = Array.prototype.slice.apply(arguments);
-			Backgrid.Header.prototype.initialize.apply(this, args);
-			this.searchRow = new HeaderRow({
-				columns: this.columns,
-				collection: this.collection
-			});
-		},
-
-		/**
-		  Renders this table head with a single row of header cells.
-		  */
-		render: function () {
-			var args = Array.prototype.slice.apply(arguments);
-			Backgrid.Header.prototype.render.apply(this, args);
-
-			this.$el.append(this.searchRow.render().$el);
-			return this;
-		},
-
-		remove: function () {
-			var args = Array.prototype.slice.apply(arguments);
-			Backgrid.Header.prototype.remove.apply(this, args);
-
-			this.searchRow.remove.apply(this.searchRow, arguments);
-			return Backbone.View.prototype.remove.apply(this, arguments);
-		}
-
-	});
-
-
-	return FSHeader;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/DatePickerLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/DatePickerLayout.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/DatePickerLayout.js
deleted file mode 100644
index 22a9b30..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/DatePickerLayout.js
+++ /dev/null
@@ -1,228 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/common/DatePickerLayout_tmpl',
-    'bootstrap-daterangepicker'
-], function(require, backbone, Utils, DatePickerLayoutTmpl, daterangepicker) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends DatePickerLayout */
-        {
-            _viewName: 'DatePickerLayout',
-
-            template: DatePickerLayoutTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                dateRange: "#dateRange",
-                selectDateRange: ".selectDateRange",
-                dateRangeTitle: "span[data-id='dateRangeTitle']",
-
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                return events;
-            },
-
-            /**
-             * intialize a new DatePickerLayout Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'globalVent', 'params', 'viewType', 'datePickerPosition','parentEl', 'fetch', 'rangeLabel', 'width', 'hideFireButton','buttonLabel'));
-                this.dateUtil = Utils.dateUtil;
-                this.dateRangeLabel = new String();
-
-                this.bindEvents();
-                this.graphParams = {};
-                this.unit = this.params.unit ? this.params.unit : "+1HOUR";
-                this.isEventTriggerdFromVent = false;
-            },
-            bindEvents: function() {
-                this.listenTo(this.vent, "tab:refresh", function(params) {
-                    this.reRenderView(params);
-                }, this);
-                this.listenTo(this.vent, "date:setDate", function(options) {
-                    this.setValues(options);
-                }, this);
-                this.listenTo(this.vent, "date:click", function(options) {
-                    this.isEventTriggerdFromVent = true;
-                    this.setValues(options);
-                    this.ui.dateRange.data('daterangepicker').clickApply();
-                }, this);
-                this.listenTo(this.vent, "date:getValues", function(obj) {
-                    var dates = this.getValues();
-                    obj.dates = [dates[0], dates[1]];
-                    obj.dateRangeLabel = this.dateRangeLabel;
-                    obj.unit = this.unit;
-                }, this);
-
-            },
-            onRender: function() {
-                var that = this;
-                if(this.hideFireButton){
-                    this.$(".goBtn").hide();
-                }
-                if(this.buttonLabel){
-                	this.$(".goBtn").text(this.buttonLabel);
-                }
-                if (!this.params.dateRangeLabel) {
-                    this.params['dateRangeLabel'] = "Today";
-                }
-                this.initializeDateRangePicker();
-                this.setValues(this.params);
-                this.unit = that.checkDateRange(that.ui.dateRange.data("daterangepicker"));
-                if (this.fetch) {
-                    that.vent.trigger("logtime:filter", _.extend({
-                        q: "*:*"
-                    }, this.params, {
-                        unit: this.unit
-                    }));
-                }
-                if (this.rangeLabel) {
-                    this.ui.dateRangeTitle.show();
-                }else{
-                    this.ui.dateRangeTitle.hide();
-                }
-                if (this.width) {
-                    this.ui.selectDateRange.css('width',this.width);
-                }
-
-            },
-            setValues: function(val) {
-                var startDate, endDate;
-                if (val.from) {
-                    startDate = this.dateUtil.getMomentObject(val.from)
-                    this.ui.dateRange.data('daterangepicker').setStartDate(startDate);
-                }
-                if (val.to) {
-                    endDate = this.dateUtil.getMomentObject(val.to)
-                    this.ui.dateRange.data('daterangepicker').setEndDate(endDate);
-                }
-                if (startDate && endDate)
-                    this.setDateText(startDate, endDate);
-                if (val.dateRangeLabel) this.ui.dateRangeTitle.html(val.dateRangeLabel);
-                this.dateRangeLabel = val.dateRangeLabel;
-            },
-            getValues : function(){
-                var obj = this.ui.dateRange.data("daterangepicker");
-                if(obj){
-                    return [obj.startDate, obj.endDate];
-                }
-            },
-            initializeDateRangePicker: function() {
-                var that = this,
-                    ranges = {};
-                //Apply moments for all ranges separately if you pass single instance then it will run into problem.
-                _.each(Utils.relativeDates, function(k) {
-                    ranges[k.text] = [];
-                })
-                this.ui.dateRange.daterangepicker(_.extend({
-                    'ranges': Object.keys(ranges)
-                }, {
-                    "timePicker": true,
-                    "timePickerIncrement": 1,
-                    "timePicker24Hour": true,
-                    "opens": (that.datePickerPosition) ? (that.datePickerPosition) : (undefined),
-                    timePickerSeconds: true,
-                    showWeekNumbers: true,
-                    timeZone: 0,
-                    locale: {
-                        format: 'MM/DD/YYYY H:mm:ss,SSS'
-                    },
-                    parentEl: (that.parentEl) ? (that.parentEl) : (that.$el),
-                }));
-                this.bindDateRangePicker();
-            },
-            bindDateRangePicker: function() {
-                var that = this;
-                if (this.parentEl) {
-                    var elem = this.parentEl.find('.daterangepicker');
-                } else {
-                    var elem = this.$('.daterangepicker');
-                }
-
-
-                this.ui.dateRange.on('apply.daterangepicker ', function(ev, picker) {
-                    if(! that.isEventTriggerdFromVent && !(_.isUndefined(picker.chosenLabel)) ){
-                        that.dateRangeLabel = picker.chosenLabel;
-                    }else{
-                        that.isEventTriggerdFromVent = false;
-                    }
-                    if (that.dateRangeLabel !== "Custom Range") {
-                        var range = that.dateUtil.getRelativeDateFromString(that.dateRangeLabel);
-                        that.setDateText(range[0], range[1]);  
-                    }
-                    that.ui.dateRangeTitle.html(that.dateRangeLabel);
-                    that.unit = that.checkDateRange(picker);
-                    var options = {
-                        'from': (picker.startDate).toJSON(),
-                        'to': (picker.endDate).toJSON(),
-                        'unit': that.unit,
-                        'dateRangeLabel': that.dateRangeLabel
-                    }
-                    that.vent.trigger("logtime:filter", options);
-                    that.pickerOpend = false
-                });
-                this.ui.dateRange.on('show.daterangepicker', function(ev, picker) {
-                    elem.find('li').removeClass('active');
-                    elem.find('li:contains(' + that.dateRangeLabel + ')').addClass('active');
-                       picker.chosenLabel = that.dateRangeLabel; 
-                });
-                this.ui.dateRange.on('hide.daterangepicker', function(ev, picker) {
-                    that.pickerOpend = true
-                });
-
-                this.ui.selectDateRange.on("click", 'button.goBtn', function() {
-                    if (that.pickerOpend) {
-                        var textRange = elem.find('li.active').text();
-                        if (textRange == "Custom Range") that.dateRangeLabel = elem.find('li.active').text();
-                    }
-                    if (that.dateRangeLabel == "Last 1 Hour") {
-                        var last1Hour = that.dateUtil.getRelativeDateFromString(that.dateRangeLabel);
-                        that.setDateText(last1Hour[0], last1Hour[1]);
-                    }
-                    that.ui.dateRange.data('daterangepicker').clickApply();
-
-                });
-            },
-            checkDateRange: function(picker) {
-                return this.dateUtil.calculateUnit(picker)
-            },
-            setDateText: function(start, end) {
-
-                this.ui.dateRange.val(this.dateUtil.getTimeZone(start, "MM/DD/YYYY H:mm:ss,SSS") + ' - ' + this.dateUtil.getTimeZone(end, "MM/DD/YYYY H:mm:ss,SSS"));
-                this.ui.dateRange.data('daterangepicker').setStartDate(start);
-                this.ui.dateRange.data('daterangepicker').setEndDate(end);
-
-            },
-            reRenderView: function(params) {
-                this.setValues(_.extend(this.params, params));
-            }
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ErrorView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ErrorView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ErrorView.js
deleted file mode 100644
index a26088e..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ErrorView.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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',
-	'backbone',
-	'communicator',
-	'hbs!tmpl/common/ErrorView_tmpl'
-],function(require,Backbone,Communicator,ErrorView_tmpl){
-    'use strict';
-	
-	var ErrorView = Backbone.Marionette.ItemView.extend(
-	/** @lends ErrorView */
-	{
-		_viewName : ErrorView,
-		
-    	template: ErrorView_tmpl,
-        templateHelpers :function(){
-        	var msg = '', moreInfo = '';
-        	if(this.status == 401){
-        		msg = 'Access Denied (401)'
-            	moreInfo = "Sorry, you don't have enough privileges to view this page.";
-            }else{
-        		msg = 'Page not found (404).'
-            	moreInfo = "Sorry, this page isn't here or has moved.";
-            }
-        	return {
-        		'msg' : msg,
-        		'moreInfo' : moreInfo
-        	};
-        },
-    	/** ui selector cache */
-    	ui: {
-    		'goBackBtn' : 'a[data-id="goBack"]',
-    		'home' 		: 'a[data-id="home"]'
-    	},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			events['click ' + this.ui.goBackBtn]  = 'goBackClick';
-			return events;
-		},
-
-    	/**
-		* intialize a new ErrorView ItemView 
-		* @constructs
-		*/
-		initialize: function(options) {
-			console.log("initialized a ErrorView ItemView");
-
-			_.extend(this, _.pick(options, 'status'));
-
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-			/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
-			/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.initializePlugins();
-			$('#r_breadcrumbs').hide();
-		},
-		goBackClick : function(){
-			history.back();
-		},
-
-		/** all post render plugin initialization */
-		initializePlugins: function(){
-		},
-		/** on close */
-		onClose: function(){
-			$('#r_breadcrumbs').show();
-		}
-
-	});
-
-	return ErrorView;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/EventHistoryLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/EventHistoryLayout.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/EventHistoryLayout.js
deleted file mode 100644
index 01e18b1..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/EventHistoryLayout.js
+++ /dev/null
@@ -1,486 +0,0 @@
-/**
-* 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',
-    'backbone',
-    'utils/Globals',
-    'utils/Utils',
-    'collections/VEventHistoryList',
-    'models/VCommonModel',
-    'hbs!tmpl/common/EventHistoryLayout_tmpl',
-    'hbs!tmpl/common/EventHistoryItemView_tmpl',
-    'moment'
-],function(require,Backbone,Globals,Utils,VEventHistoryList,VCommonModel,EventHistoryLayout_tmpl, EventHistoryItemView_tmpl,moment){
-    'use strict';
-	
-    var EventView = Backbone.Marionette.ItemView.extend({
-    	tagName:"li",
-    	template : EventHistoryItemView_tmpl,
-    	ui : {
-    		content : "[data-id='content']",
-    		flagWrap : ".flagWrap"
-    	},
-    	/** ui events hash */
-		events: function() {
-			var events = {};
-			events["click "+this.ui.flagWrap] = 'onFlagClick';
-			events["click .infoBtn"] = 'onInfoClick';
-			events["click .removeFlag"] = 'onRemoveFlagClick';
-			events["click .saveBtn"] = 'onSaveClick';
-			return events;
-		},
-    	initialize: function(options) {
-    		_.extend(this, _.pick(options,'eventVent','vent'));
-    		this.bindEvents();
-    	},
-    	bindEvents : function(){
-    		this.listenTo(this.model, "event:highlight", function($el) {
-				this.highlightli($el);
-			}, this);
-    		this.listenTo(this.model, "event:fireReinitialize", function() {
-				this.fireReinitialize();
-			}, this);
-    	},
-    	onRender : function(){
-    		this.ui.content.text(this.getLabel());
-    	},
-    	getLabel : function(){
-    		var text = "",param = this.model.get("newParam"),key = _.keys(this.model.get("newParam"))[0];
-    		if(param){
-    			var preText = "Value:";
-    			if(param.dateRangeLabel){
-    				return param.dateRangeLabel;
-    			}
-    			if(key === "includeQuery"){
-    				preText = "IColumn :";
-    			}
-    			if(key === "excludeQuery"){
-    				preText = "EColumn :";
-    			}
-    			if(key === "level"){
-    				preText = "Level :";
-    			}
-    			if(key === "mustBe"){
-    				preText = "IC :";
-    			}
-    			if(key === "mustNot"){
-    				preText = "EC :";
-    			}
-    			if(key === "mustNot"){
-    				preText = "EC :";
-    			}
-    			if(key === "from" || key === "to"){
-    				preText = param.dateRangeLabel;
-    			}
-    			if(key === "filtername"){
-    				preText = "Filter :";
-    			}
-    			return preText + " "+this.model.get("newParam")[_.keys(this.model.get("newParam"))[0]];
-    		}
-    		return text;
-    	},
-    	onFlagClick : function(e){
-    		var that = this;
-    		this.fireReinitialize();
-    		setTimeout(function(){
-    			that.highlightli(that.$el.children("[data-id]"))
-    		},10);
-    	},
-    	highlightli : function($el){
-    		//$el is the flag container
-    		$el.parents("li").siblings("li").find(".showFlag").removeClass("flagActive");
-    		$el.addClass("flagActive");
-    		this.eventVent.trigger("event:position:center",$el.parents("li"));
-    	},
-    	onInfoClick : function(e){
-    		var html = "<table class='table eventTable table-hover'><thead><th>Name</th><th>Value</th></thead>",that=this;
-            var customParam = {"mustNot":[],"mustBe":[],"includeQuery":[],"excludeQuery":[]};
-            var paramNames = _.extend({},this.model.get("params"),customParam);
-            _.each(paramNames, function(value, key) {
-            	if ( (! _.isEmpty(value) || _.isArray(value)) && ( key != "bundleId" && key != "start_time" && 
-                		key != "end_time" && key != "q" && key != "unit" && key != "query" && key != "type" && 
-                		key != "time" && key != "dateRangeLabl" && key != "advanceSearch" && !_.isUndefined(Globals.paramsNameMapping[key]) )){
-            		html += '<tr class="' + key + '"><td>' + Globals.paramsNameMapping[key].label + '</td><td>' + that.getHtmlForParam(key) + '</td><tr>'
-    			}
-    		});
-    		html += "</table>";
-    		Utils.alertPopup({msg : html,className:"bootBoxSmall"});
-    	},
-    	getHtmlForParam : function(key){
-            var paramValue = this.model.get("params"),value=paramValue[key];
-
-    		if(key === "from" || key === "to"){
-    			value = moment(paramValue[key]).format('MM/DD/YYYY,HH:mm:ss,SSS');
-    		}else{
-                if(_.isUndefined(paramValue[key])){
-                    value = "[]";
-                }
-            }
-    		return value;
-    	},
-    	onRemoveFlagClick : function(e){
-    		e.stopImmediatePropagation();e.stopPropagation();
-        	var siblings = this.$el.siblings(),that=this;
-        	if(siblings.length > 0){
-        		var focusLi = $(siblings[siblings.length -1]).children("[data-id]");
-        		this.collection.remove(this.model);
-        		this.close();
-        		focusLi.find(".flagWrap").click();
-        	}
-        	
-        },
-        fireReinitialize: function() {
-            this.vent.trigger("reinitialize:filter:tree " +
-            		"reinitialize:filter:include:exclude " +
-            		"reinitialize:filter:bubbleTable " +
-            		"reinitialize:filter:mustNot " +
-            		"reinitialize:filter:mustBe " +
-            		"reinitialize:filter:level " +
-            		"reinitialize:filter:logtime", _.extend({
-                mustNot: null,
-                mustBe: null,
-                query: null,
-                includeQuery: null,
-                excludeQuery: null
-            }, this.model.get('params')));
-        },
-        onSaveClick : function(e){
-        	var that = this;
-            require(['views/dialog/SaveSearchFilterView'], function(SaveSearchFilterView) {
-            	var view = new SaveSearchFilterView({
-                    selectedCollectionObject: that.model
-                });
-            	that.setupDialog({
-                    title: "Save Search Filter",
-                    content: view,
-                    viewType: 'Save',
-                    width: 850,
-                    height: 500,
-                    buttons: [{
-                        id: "okBtn",
-                        text: "Save",
-                        "class": "btn btn-primary",
-                        click: function() {
-                            that.onDialogSubmitted();
-                        }
-                    }, {
-                        id: "cancelBtn",
-                        text: "Close",
-                        "class": "btn btn-default",
-                        click: function() {
-                            that.onDialogClosed();
-                        }
-                    }]
-                });
-            });
-        },
-        setupDialog: function(options) {
-            var that = this;
-            require(['views/common/JBDialog'], function(JBDialog) {
-                var opts = _.extend({
-                    appendTo: 'body',
-                    modal: true,
-                    resizable: false
-                }, options);
-                var dialog = that.dialog = new JBDialog(opts).render().open();
-            })
-        },
-        onDialogSubmitted: function() {
-            var content = this.dialog.options.content;
-            if (content.$('form')[0].checkValidity && !content.$('form')[0].checkValidity()) {
-                content.$('form').addClass('has-error');
-                if (content.$('form')[0].reportValidity) {
-                    if (!content.$('form')[0].reportValidity()) {
-                        return;
-                    }
-                }
-                return;
-            } else {
-                if(_.isEmpty(content.ui.filterName.val().trim())){
-                    if(content.$('form')[0].reportValidity){
-                        content.ui.filterName.val('')
-                        content.$('form')[0].reportValidity();
-                        return;
-                    }
-                    return;
-                }else{
-                    content.$('form').removeClass('has-error');  
-                }
-            }
-            var timeType = content.$("input[name='radio']:checked").parents("[data-id]").data('id'),
-            params = content.selectedCollectionObject.get("params");
-            if(timeType === "absolute"){
-                params["dateRangeLabel"] = "Custom Range";
-            }
-            params["time"] = timeType;
-            var postObject = {
-                filtername: content.ui.filterName.val().trim(),
-                rowType: "history",
-                values: JSON.stringify(params)
-            }
-            content.trigger("toggle:okBtn");
-            this.saveEventHistory(postObject);
-        },
-        saveEventHistory: function(postObject) {
-            var that = this
-            this.collection.saveEventHistory(postObject, {
-                success: function(data, textStatus, jqXHR) {
-                    Utils.notifySuccess({
-                        content: "Event History saved successfully."
-                    });
-                    that.onDialogClosed();
-                },
-                error: function(jqXHR, textStatus, errorThrown) {
-                    Utils.notifyError({
-                        content: JSON.parse(jqXHR.responseText).msgDesc || "There is some problem in Event History, Please try again later."
-                    });
-                    that.dialog.options.content.trigger("toggle:okBtn",true);
-                },
-                complete: function() {
-                }
-            });
-        },
-        onDialogClosed: function() {
-            if (this.dialog) {
-                this.dialog.close && this.dialog.close();
-                this.dialog.remove && this.dialog.remove();
-                this.dialog = null;
-            }
-        }
-    });
-    
-    
-    
-	return Backbone.Marionette.CompositeView.extend(
-	/** @lends EventHistoryLayout */
-	{
-		_viewName : 'EventHistoryLayout_tmpl',
-
-		template: EventHistoryLayout_tmpl,
-		
-		itemViewContainer : "#events",
-		
-		itemView : EventView,
-		
-		itemViewOptions : function(){
-			return {
-				collection : this.collection,
-				eventVent : this.eventVent,
-				vent : this.vent
-			}
-		},
-
-		/** Layout sub regions */
-		regions: {
-		},
-
-		/** ui selector cache */
-		ui: {
-			loaderEvent : "#loaderEvent",
-			eventsCont : "#eventsCont",
-			events : "#events"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events["change "+this.ui.mainCheck] = 'onMainCheckboxClick';
-			events["click .slideArrow a"] = 'slideArrowClick';
-			events['click .apply-link'] = 'onEventHistoryLoadClick';
-			events["click .collapse-link"] = 'onCollapseBoxClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new EventHistoryLayout Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent','globalVent','params'));
-			this.eventVent = new Backbone.Wreqr.EventAggregator();
-			this.searchParmas = (this.params) ? this.params : {};
-			this.collection = new VEventHistoryList();
-			this.bindEvents();
-		},
-		bindEvents: function() {
-			this.listenTo(this.vent, "level:filter type:mustNot type:mustBe search:include:exclude " +
-                    "logtime:filter " + Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns,
-                    function(value) {
-				if(this.collection.last()){
-					var params = _.extend({},this.searchParmas, value);//,id=this.getNewIndex();
-					this.addFlag(params,value);
-					var leftOffset = this.ui.events.offset();
-					(leftOffset.left < 0) ? this.$('.slideArrow').show() : this.$('.slideArrow').hide();
-				}
-				
-			}, this);
-			
-			this.listenTo(this.collection, "add remove reset", function() {
-                this.$("[data-id='count']").text(this.collection.length);
-                this.$("[data-id='totalCount']").text(this.collection.totalCount);
-                this.limitTheFlags();
-            }, this);
-			
-			this.listenTo(this.eventVent, "event:position:center", function($li) {
-				this.scrollToElement($li);
-			}, this);
-		},
-		onRender : function(){
-			if(this.params){
-				this.collection.add(this.collection.model({id:this.getNewIndex(),
-					params:_.extend({},this.params),
-					newParam:{level:this.params.level
-				}}));
-				this.$(".removeFlag").remove();
-			}
-		},
-		onShow : function(){
-			this.flagDraggable();
-		},
-		addFlag : function(params, showParam){
-			var id=this.getNewIndex();
-			var model = new this.collection.model({
-				id : id,
-				params : params,
-				newParam : showParam
-			});
-			this.collection.add(model);
-			model.trigger("event:highlight",this.ui.events.find("[data-id='"+id+"']"));
-			return model;
-		},
-		limitTheFlags : function(){
-			if(this.collection.length == 26){
-				this.collection.remove(this.collection.at(1));
-			}
-		},
-		flagDraggable: function() {
-			var that = this;
-            this.ui.events.draggable({
-                axis: "x",
-                stop : function(){
-                	that.toggleSlideArrow();
-                }
-            });
-            
-        },
-        toggleSlideArrow : function(){
-        	var that = this;
-        	that.leftDistance = that.ui.events.offset();
-            if(that.timeLineWidth <= that.leftDistance.left){
-                //this.$('.slideArrow').hide();
-            }else{
-                that.$('.slideArrow').show();
-            }
-        },
-		getNewIndex : function(){
-			if(this.lastIndex){
-				this.lastIndex++;
-			}else{
-				this.lastIndex = 1;
-			}
-			return this.lastIndex;
-		},
-		scrollToElement : function($li){
-			var flagIndex = $li.index();
-            var options = { duration: 200 };
-            this.timeLineWidth = this.ui.eventsCont.width() / 2;
-                
-            this.ui.events.animate({ 'left': this.timeLineWidth - (flagIndex * $li.outerWidth()) + 'px' }, options);
-
-		},
-		slideArrowClick : function(e){
-            e.preventDefault();
-            var leftDistance = this.ui.events.offset();
-            if($(e.currentTarget).hasClass('arrowLeft')){              
-                this.ui.events.animate({ 'left': leftDistance.left - 140 + 'px' }, 200) ;
-            }else{
-                this.ui.events.animate({ 'left': leftDistance.left + 140 + 'px' }, 200);
-            }                          
-        },
-        onEventHistoryLoadClick: function() {
-            var that = this;
-            require(['views/dialog/ApplySearchFilterView'], function(ApplySearchFilterView) {
-                var view = new ApplySearchFilterView({
-                    collection: new VEventHistoryList([], {
-                        state: {
-                            firstPage: 0,
-                            pageSize: 10 // have to pass max pageSize value or
-                                // else it will take default pageSize
-                        }
-                    })
-                })
-                that.setupDialog({
-                    title: "Apply Filter",
-                    content: view,
-                    viewType: 'Save',
-                    width: 850,
-                    height: 500,
-                    buttons: [{
-                        id: "cancelBtn",
-                        text: "Close",
-                        "class": "btn btn-default",
-                        click: function() {
-                            that.onDialogClosed();
-                        }
-                    }]
-                });
-                view.on("apply:filter",function(model){
-                	var params = JSON.parse(model.get("values"));
-                    if (params.time === "relative") {
-                        var rangeNew = Utils.dateUtil.getRelativeDateFromString(params.dateRangeLabel);
-                        if (_.isArray(rangeNew)) {
-                            params.from = rangeNew[0].toJSON();
-                            params.to = rangeNew[1].toJSON();
-                        }
-                    }
-                    var newModel = that.addFlag(params,{filtername:model.get("filtername")});
-                    newModel.trigger("event:fireReinitialize");
-                    that.onDialogClosed();
-                })
-            });
-        },
-        setupDialog: function(options) {
-            var that = this;
-            require(['views/common/JBDialog'], function(JBDialog) {
-                var opts = _.extend({
-                    appendTo: 'body',
-                    modal: true,
-                    resizable: false
-                }, options);
-                var dialog = that.dialog = new JBDialog(opts).render().open();
-            })
-        },
-        onDialogClosed: function() {
-            if (this.dialog) {
-                this.dialog.close && this.dialog.close();
-                this.dialog.remove && this.dialog.remove();
-                this.dialog = null;
-            }
-        },
-        onCollapseBoxClick : function(e){
-        	if($(e.currentTarget).find("i").hasClass("fa-chevron-down")){
-        		var $el = this.ui.events.find(".flagActive");
-        		if($el.length){
-        			var model = this.collection.get($el.data("id"));
-        			setTimeout(function(){
-        				model.trigger("event:highlight",$el);
-        			},1000);
-        		}
-        	}
-        }
-	});
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Footer.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Footer.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Footer.js
deleted file mode 100644
index dcbd633..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Footer.js
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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',
-	'backbone',
-	'communicator',
-	'hbs!tmpl/common/Footer_tmpl'
-],function(require,Backbone,Communicator,Footer_tmpl){
-    'use strict';
-	
-	var Footer = Backbone.Marionette.ItemView.extend(
-	/** @lends Footer */
-	{
-		_viewName : Footer,
-		
-    	template: Footer_tmpl,
-        
-    	/** ui selector cache */
-    	ui: {},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			return events;
-		},
-
-    	/**
-		* intialize a new Footer ItemView 
-		* @constructs
-		*/
-		initialize: function(options) {
-			console.log("initialized a Footer ItemView");
-
-			_.extend(this, _.pick(options, ''));
-
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-			/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
-			/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.initializePlugins();
-		},
-
-		/** all post render plugin initialization */
-		initializePlugins: function(){
-		},
-
-		/** on close */
-		onClose: function(){
-			
-		}
-
-	});
-
-	return Footer;
-});


[45/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/bootstrap-logsearch.min.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/bootstrap-logsearch.min.css b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/bootstrap-logsearch.min.css
deleted file mode 100644
index 177d7df..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/bootstrap-logsearch.min.css
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 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.
- */
-.btn-group.open .dropdown-menu,.dropdown.open .dropdown-menu,.font-mixin{font-family:Roboto,sans-serif;font-style:normal;font-weight:400}.pagination-block .pagination-block-item a,.pagination-block .pagination-block-item a:focus,.pagination-block .pagination-block-item a:visited,.table.table-hover .action:hover,a,a:focus,a:visited{text-decoration:none}@font-face{font-family:Roboto;font-weight:400;font-style:normal;src:url(fonts/Roboto-Regular-webfont.eot);src:url(fonts/Roboto-Regular-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/Roboto-Regular-webfont.woff) format('woff'),url(fonts/Roboto-Regular-webfont.ttf) format('truetype'),url(fonts/Roboto-Regular-webfont.svg#robotoregular) format('svg')}  .font-mixin{line-height:1;color:#333}  .btn,.btn:focus{outline:0;font-family:Roboto,sans-serif;text-transform:uppercase;height:34px;font-size:14px;padding:10px 20px;line-height:14px}  .btn .glyphicon,.btn:focus .glyphicon{top:-1px;float:left}  .box-shadow{box-shadow:0 0 2px 0 #139
 1c1}  .btn-default-disabled,.btn-disabled{box-shadow:none;opacity:.6}  .btn-default-disabled{color:#FFF;background-color:#808793;border:none}  .btn-default,.btn-default:focus{color:#666;background-color:#FFF;border:1px solid #CFD3D7}  .btn-default:focus:hover,.btn-default:hover{color:#FFF;background-color:#808793}  .btn-default:active,.btn-default:focus:active{color:#666;background-color:#FFF;border:1px solid #CFD3D7;box-shadow:0 0 2px 0 #1391c1}  .btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:hover,.btn-default:focus.disabled,.btn-default:focus.disabled.active,.btn-default:focus.disabled:active,.btn-default:focus.disabled:hover,.btn-default:focus[disabled],.btn-default:focus[disabled].active,.btn-default:focus[disabled]:active,.btn-default:focus[disabled]:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:hover{opacity:.6;box-shadow:none;color:#FFF;background-color:#8
 08793;border:none}  .btn-primary-disabled{opacity:.6;box-shadow:none;color:#D1E8D1;background-color:#3FAE2A;border:1px solid #3FAE2A}  .btn-primary,.btn-primary:focus{color:#FFF;background-color:#3FAE2A;border:1px solid #3FAE2A}  .btn-primary:focus:hover,.btn-primary:hover{color:#FFF;background-color:#429929;border:1px solid #429929}  .btn-primary.active,.btn-primary:active,.btn-primary:focus.active,.btn-primary:focus:active{color:#FFF;background-color:#3FAE2A;border:1px solid #3FAE2A;box-shadow:0 0 2px 0 #1391c1}  .btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:hover,.btn-primary:focus.disabled,.btn-primary:focus.disabled.active,.btn-primary:focus.disabled:active,.btn-primary:focus.disabled:hover,.btn-primary:focus[disabled],.btn-primary:focus[disabled].active,.btn-primary:focus[disabled]:active,.btn-primary:focus[disabled]:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disa
 bled]:hover{opacity:.6;box-shadow:none;color:#D1E8D1;background-color:#3FAE2A;border:1px solid #3FAE2A}  .btn-secondary-disabled{opacity:.6;box-shadow:none;color:#D1E8D1;background-color:#429929;border:1px solid #3FAE2A}  .btn-secondary,.btn-secondary:focus{color:#429929;background-color:#FFF;border:1px solid #3FAE2A}  .btn-secondary:focus:hover,.btn-secondary:hover{color:#FFF;background-color:#429929}  .btn-secondary:active,.btn-secondary:focus:active{color:#429929;background-color:#FFF;box-shadow:0 0 2px 0 #1391c1}  .btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:hover,.btn-secondary:focus.disabled,.btn-secondary:focus.disabled.active,.btn-secondary:focus.disabled:active,.btn-secondary:focus.disabled:hover,.btn-secondary:focus[disabled],.btn-secondary:focus[disabled].active,.btn-secondary:focus[disabled]:active,.btn-secondary:focus[disabled]:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[d
 isabled]:active,.btn-secondary[disabled]:hover{opacity:.6;box-shadow:none;color:#D1E8D1;background-color:#429929;border:1px solid #3FAE2A}  .btn-success{border:none}  .btn-regular-default-state{background-color:#FFF;color:#666;border:1px solid #cfd3d7}  .btn-primary-default-state{background-color:#3FAE2A;border:1px solid #3FAE2A;color:#FFF}  .btn-group.open .btn.dropdown-toggle,.dropdown.open .btn.dropdown-toggle{box-shadow:inset 0 0 3px 0 #1391c1}  .btn-group.open .btn.dropdown-toggle,.btn-group.open .btn.dropdown-toggle.btn-default,.btn-group.open .btn.dropdown-toggle.btn-default:hover,.btn-group.open .btn.dropdown-toggle:hover,.dropdown.open .btn.dropdown-toggle,.dropdown.open .btn.dropdown-toggle.btn-default,.dropdown.open .btn.dropdown-toggle.btn-default:hover,.dropdown.open .btn.dropdown-toggle:hover{background-color:#FFF;color:#666;border:1px solid #cfd3d7}  .btn-group.open .btn.dropdown-toggle+.dropdown-menu>li>a:hover,.btn-group.open .btn.dropdown-toggle.btn-default+.dropdo
 wn-menu>li>a:hover,.dropdown.open .btn.dropdown-toggle+.dropdown-menu>li>a:hover,.dropdown.open .btn.dropdown-toggle.btn-default+.dropdown-menu>li>a:hover{background-color:#808793;color:#FFF}  .btn-group.open .btn.dropdown-toggle.btn-primary,.btn-group.open .btn.dropdown-toggle.btn-primary:hover,.dropdown.open .btn.dropdown-toggle.btn-primary,.dropdown.open .btn.dropdown-toggle.btn-primary:hover{background-color:#3FAE2A;border:1px solid #3FAE2A;color:#FFF}  .btn-group.open .btn.dropdown-toggle.btn-primary+.dropdown-menu>li>a:hover,.dropdown.open .btn.dropdown-toggle.btn-primary+.dropdown-menu>li>a:hover{background-color:#429929;color:#FFF}  .btn-group.open .dropdown-menu,.dropdown.open .dropdown-menu{line-height:1;border-radius:2px;font-size:14px;min-width:200px;background:#FFF;color:#666;border:1px solid #cfd3d7}  .btn-group.open .dropdown-menu>li,.dropdown.open .dropdown-menu>li{margin-bottom:1px}  .btn-group.open .dropdown-menu>li>a,.dropdown.open .dropdown-menu>li>a{height:24px}
   .btn-group .btn.dropdown-toggle:first-child,.dropdown .btn.dropdown-toggle:first-child{min-width:80px}  .btn-group .btn.dropdown-toggle.disabled,.btn-group .btn.dropdown-toggle[disabled],.dropdown .btn.dropdown-toggle.disabled,.dropdown .btn.dropdown-toggle[disabled]{opacity:.6}  input.form-control{font-size:14px;border-radius:2px;color:#666;border:1px solid #CFD3D7;height:34px;padding:10px}  input.form-control:focus{border-color:#1291c1;box-shadow:none}  .help-block{color:#999;font-size:14px}  .help-block.validation-block{color:#999;margin-top:10px}  .help-block.validation-block::before{position:relative;top:2px;margin-right:5px;font-family:'Glyphicons Halflings'}  .wizard .wizard-body .wizard-content .step-description,.wizard .wizard-body .wizard-content .step-title,.wizard .wizard-header h3,h2.table-title{font-family:Roboto,sans-serif;font-style:normal}  .has-success input.form-control{color:#666;border:1px solid #1EB475}  .has-success input.form-control:focus{border-color:#1EB
 475;box-shadow:none}  .has-success .help-block.validation-block::before{content:'\e084';color:#1EB475}  .has-error input.form-control{color:#666;border:1px solid #EF6162}  .has-error input.form-control:focus{border-color:#EF6162;box-shadow:none}  .has-error .help-block.validation-block::before{content:'\e083';color:#EF6162}  .has-warning input.form-control{color:#666;border:1px solid #E98A40}  .has-warning input.form-control:focus{border-color:#E98A40;box-shadow:none}  .has-warning .help-block.validation-block::before{content:'\e101';color:#E98A40}  .form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{color:#999;border-color:#ccc;background-color:#ddd}  h2.table-title{font-weight:400;line-height:1;color:#333;margin-top:10px;font-size:20px}  .table{color:#666;font-size:13px}  .table tfoot,.table thead{color:#999}  .table input[type=checkbox]+label{position:relative;line-height:1.3em;font-size:initial;top:4px;margin-bottom:0}  .table thead>tr>th{border-bott
 om-color:#EEE}  .table tfoot>tr:first-of-type>td{border-top-width:2px;border-top-color:#EEE}  .table>tbody>tr>td{border-top-color:#EEE}  .table>tbody>tr.active,.table>tbody>tr.active>td{background-color:#EEE}  .table.table-hover .action{visibility:hidden;padding:0;line-height:1}  .table.table-hover>tbody>tr{border-width:0 1px 1px;border-style:solid;border-color:#EEE transparent}  .table.table-hover>tbody>tr>td{border-width:0}  .table.table-hover>tbody>tr:hover{border-color:#A7DFF2;background-color:#E7F6FC}  .table.table-hover>tbody>tr:hover>td{border-top:1px solid #A7DFF2;background-color:#E7F6FC}  .table.table-hover>tbody>tr:hover>td .action{visibility:visible}  .table.table-hover>tbody>tr:first-of-type>td{border-top:1px solid transparent}  .table.table-hover>tbody>tr:first-of-type:hover>td{border-color:#A7DFF2}  .pagination-block .pagination-block-item{float:left;padding:0 5px}  .pagination-block .pagination-block-item select{border:none;background-color:transparent;color:#1491C1}
   .nav.nav-tabs{border:none;margin-bottom:20px}  .nav.nav-tabs li a{border-width:0;border-radius:0;border-bottom:2px solid transparent;color:#666;text-transform:uppercase}  .nav.nav-tabs li a:active,.nav.nav-tabs li a:focus,.nav.nav-tabs li a:hover{color:#333;border-top-width:0;border-left-width:0;border-right-width:0;background:0 0}  .nav.nav-tabs li a .badge.badge-important{display:inline}  .nav.nav-tabs li.active a{color:#333;border-bottom:2px solid #3FAE2A}  .nav-tabs-left li,.nav-tabs-right li{float:none;margin-bottom:2px}  .nav-tabs-left li a,.nav-tabs-right li a{margin-right:0}  .nav-tabs-left li{margin-right:-1px}  .nav-tabs-left li a{border:2px solid transparent!important}  .nav-tabs-left li.active a,.nav-tabs-left li.active a:active,.nav-tabs-left li.active a:focus,.nav-tabs-left li.active a:hover{border-right:2px solid #3FAE2A!important}  .nav-tabs-right li{margin-left:-1px}  .nav-tabs-right li a{border:2px solid transparent!important}  .nav-tabs-right li.active a,.nav-ta
 bs-right li.active a:active,.nav-tabs-right li.active a:focus,.nav-tabs-right li.active a:hover{border-left:2px solid #3FAE2A!important}  .wizard{border:2px solid #ebecf1}  .wizard .wizard-header h3{font-weight:400;line-height:1;font-size:20px;color:#333;margin:15px 20px}  .wizard .wizard-body{overflow:hidden;margin:0}  .wizard .wizard-body .wizard-content{background:#ebecf1;padding-top:25px;float:left;margin-bottom:-99999px;padding-bottom:99999px}  .wizard .wizard-body .wizard-content .step-title{line-height:1;font-weight:700;font-size:18px;color:#666}  .wizard .wizard-body .wizard-content .step-description{font-weight:400;font-size:14px;line-height:1.4;color:#999}  .wizard .wizard-body .wizard-content .panel.panel-default{border:none;box-shadow:none;margin-top:20px}  .wizard .wizard-body .wizard-content .panel.panel-default .panel-body{padding:30px 20px}  .wizard .wizard-body .wizard-nav{min-height:550px;padding-top:25px;background-color:#323544;float:left;margin-bottom:-99999px;p
 adding-bottom:99999px}  .wizard .wizard-body .wizard-nav .nav li{padding:0 15px}  .wizard .wizard-body .wizard-nav .nav li a{height:48px;padding:0 5px;display:table-cell;vertical-align:middle}  .wizard .wizard-body .wizard-nav .nav li .step-marker{position:absolute;top:9px;line-height:16px;text-align:center;width:20px;height:20px;border:2px solid #1EB475;border-radius:50%;font-size:12px;font-style:inherit;color:#1EB475;background-color:#323544}  .wizard .wizard-body .wizard-nav .nav li .step-description,.wizard .wizard-body .wizard-nav .nav li .step-name{font-family:Roboto,sans-serif;font-weight:400;color:#999;margin-left:30px;font-style:normal}  .wizard .wizard-body .wizard-nav .nav li .step-name{line-height:1;font-size:14px}  .wizard .wizard-body .wizard-nav .nav li .step-index{line-height:18px}  .wizard .wizard-body .wizard-nav .nav li .step-description{line-height:1;font-size:12px}  .wizard .wizard-body .wizard-nav .nav li.completed .step-marker{background-color:#1EB475;color:#f
 ff;font-size:10px;padding-left:2px}  .wizard .wizard-body .wizard-nav .nav li.completed .step-marker .step-index{display:none}  .wizard .wizard-body .wizard-nav .nav li.completed .step-marker:after{font-family:"Glyphicons Halflings";content:"\e013";position:relative;top:1px;left:-1px}  .wizard .wizard-body .wizard-nav .nav li.completed:after{width:2px;height:100%;position:absolute;background-color:#1EB475;content:"";top:25px;left:29px}  .wizard .wizard-body .wizard-nav .nav li.completed:last-child:after{content:none}  .wizard .wizard-body .wizard-nav .nav li.active .step-name{font-weight:700}  .wizard .wizard-body .wizard-nav .nav li.disabled .step-marker{color:#666;border-color:#666}  .wizard .wizard-body .wizard-nav .nav li.disabled .step-description,.wizard .wizard-body .wizard-nav .nav li.disabled .step-name{color:#666}  .wizard .wizard-body .wizard-nav .nav li.disabled.completed .step-marker{background-color:#1EB475;border:2px solid #1EB475;color:#fff}  .wizard .wizard-body .wi
 zard-nav .nav-pills>li.active>a,.wizard .wizard-body .wizard-nav .nav-pills>li.active>a:focus,.wizard .wizard-body .wizard-nav .nav-pills>li.active>a:hover,.wizard .wizard-body .wizard-nav .nav>li>a:focus,.wizard .wizard-body .wizard-nav .nav>li>a:hover{background-color:inherit}  .wizard .wizard-body .wizard-footer{background:#fff;padding:15px 20px}  .wizard .wizard-body .wizard-footer button{margin:0 10px}  .checkbox-disabled-style{background-color:#b2b8c1;border-color:#b2b8c1}  input[type=radio]:checked,input[type=radio]:not(:checked),input[type=checkbox]:checked,input[type=checkbox]:not(:checked){display:none}  input[type=radio]:checked+label,input[type=radio]:not(:checked)+label,input[type=checkbox]:checked+label,input[type=checkbox]:not(:checked)+label{position:relative;padding-left:20px}  input[type=radio]:checked+label:hover:before,input[type=radio]:not(:checked)+label:hover:before,input[type=checkbox]:checked+label:hover:before,input[type=checkbox]:not(:checked)+label:hover:
 before{border-color:#1491C1;background-color:#1491C1}  input[type=radio]:checked+label:before,input[type=checkbox]:checked+label:before{background-color:#1491C1;border-color:#1491C1}  input[type=radio].disabled+label:before,input[type=radio].disabled+label:hover:before,input[type=radio][disabled]+label:before,input[type=radio][disabled]+label:hover:before,input[type=checkbox].disabled+label:before,input[type=checkbox].disabled+label:hover:before,input[type=checkbox][disabled]+label:before,input[type=checkbox][disabled]+label:hover:before{background-color:#b2b8c1;border-color:#b2b8c1}  input[type=checkbox]+label:before{content:'';position:absolute;left:0;top:4px;width:10px;height:10px;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:2px;border-width:1px;border-style:solid;border-color:#ddd}  input[type=checkbox]:checked+label:after{content:'\2714';color:#FFF;position:absolute;top:0;left:2px;font-size:9px}  input.radio+label:before,input[type=radio]+label:before{content:
 '';position:absolute;left:0;top:0;width:12px;height:12px;-moz-box-sizing:border-box;box-sizing:border-box;border-radius:12px;border-width:1px;border-style:solid;border-color:#ddd}  input.radio:checked+label:after,input[type=radio]:checked+label:after{content:'';background-color:#FFF;position:absolute;top:3px;left:3px;width:6px;height:6px;border-radius:6px}  .navigation-bar-container,.navigation-bar-container ul.nav.side-nav-header{width:230px;transition:width .5s ease-out}  .navigation-bar-container{height:auto;background-color:#323544;padding:0;-ms-overflow-style:none;-webkit-font-smoothing:antialiased}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header{background:#313d54;padding:15px 5px 15px 25px;height:55px}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header>a.ambari-logo{padding:0}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header>a.ambari-logo>img{height:25px;float:left;margin-left:-3px}  .navigation-bar-container ul
 .nav.side-nav-header li.navigation-header .btn-group{cursor:pointer;margin-top:3px}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header .btn-group:hover span.ambari-header,.navigation-bar-container ul.nav.side-nav-header li.navigation-header .btn-group:hover span.toggle-icon{color:#fff}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header .btn-group span.ambari-header{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;font-size:20px;width:55px;display:inline;color:#b8bec4;padding:0 8px 0 10px}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header .btn-group span.toggle-icon{margin-bottom:5px;font-size:13px;display:inline-block;vertical-align:middle;color:#b8bec4}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header .btn-group.open .dropdown-toggle{box-shadow:none}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header ul.dropdown-menu{top:30px}  .navigation-bar-containe
 r ul.nav.side-nav-header li.navigation-header ul.dropdown-menu li>a{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;font-size:14px;color:#666;line-height:1.42;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}  .navigation-bar-container ul.nav.side-nav-header li.navigation-header ul.dropdown-menu li>a:hover{background:#f5f5f5}  .navigation-bar-container ul.nav.side-nav-footer,.navigation-bar-container ul.nav.side-nav-menu{background-color:#323544;width:230px;transition:width .5s ease-out}  .navigation-bar-container ul.nav.side-nav-footer li,.navigation-bar-container ul.nav.side-nav-menu li{padding:0;margin:0}  .navigation-bar-container ul.nav.side-nav-footer li.mainmenu-li>a,.navigation-bar-container ul.nav.side-nav-footer li.navigation-footer>a,.navigation-bar-container ul.nav.side-nav-footer li.submenu-li>a,.navigation-bar-container ul.nav.side-nav-menu li.mainmenu-li>a,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer>a,.navigation-bar-co
 ntainer ul.nav.side-nav-menu li.submenu-li>a{display:table-cell;vertical-align:middle;width:230px;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;white-space:nowrap}  .navigation-bar-container ul.nav.side-nav-footer li.mainmenu-li>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-footer li.navigation-footer>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-footer li.submenu-li>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li.mainmenu-li>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li.submenu-li>a .navigation-menu-item{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;font-size:14px;color:#b8bec4;padding-left:8px}  .navigation-bar-container ul.nav.side-nav-footer li.mainmenu-li>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-footer li.navigation-footer>a .nav
 igation-icon,.navigation-bar-container ul.nav.side-nav-footer li.submenu-li>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li.mainmenu-li>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li.submenu-li>a .navigation-icon{line-height:18px;font-size:18px;color:#b8bec4}  .navigation-bar-container ul.nav.side-nav-footer li.mainmenu-li>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-footer li.navigation-footer>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-footer li.submenu-li>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li.mainmenu-li>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li.submenu-li>a .toggle-icon{line-height:14px;font-size:14px;color:#b8bec4;padding:3px 5px 3px 10px}  .navigation-bar-container ul.nav.side-nav-footer li.mai
 nmenu-li>a,.navigation-bar-container ul.nav.side-nav-footer li.navigation-footer>a,.navigation-bar-container ul.nav.side-nav-menu li.mainmenu-li>a,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer>a{padding:10px 5px 10px 20px}  .navigation-bar-container ul.nav.side-nav-footer li.submenu-li>a,.navigation-bar-container ul.nav.side-nav-menu li.submenu-li>a{padding:10px 5px 10px 25px}  .navigation-bar-container ul.nav.side-nav-footer li.navigation-footer,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer{background:#313d54;height:50px}  .navigation-bar-container ul.nav.side-nav-footer li.navigation-footer a .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer a .navigation-icon{color:#31823a;font-size:20px;position:relative;padding:0 15px;left:calc(30%)}  .navigation-bar-container ul.nav.side-nav-footer li.navigation-footer a .navigation-icon:hover,.navigation-bar-container ul.nav.side-nav-menu li.navigation-footer a .na
 vigation-icon:hover{color:#fff}  .navigation-bar-container ul.nav.side-nav-footer li>ul>li,.navigation-bar-container ul.nav.side-nav-menu li>ul>li{background-color:#323544}  .navigation-bar-container ul.nav.side-nav-footer li>ul>li a,.navigation-bar-container ul.nav.side-nav-menu li>ul>li a{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;font-size:14px;color:#999}  .navigation-bar-container ul.nav.side-nav-footer li>ul>li a .submenu-icon,.navigation-bar-container ul.nav.side-nav-menu li>ul>li a .submenu-icon{line-height:14px;font-size:14px}  .navigation-bar-container ul.nav.side-nav-footer li>a:hover,.navigation-bar-container ul.nav.side-nav-footer li>ul>li>a:hover,.navigation-bar-container ul.nav.side-nav-menu li>a:hover,.navigation-bar-container ul.nav.side-nav-menu li>ul>li>a:hover{background:#404351;cursor:pointer;color:#fff}  .navigation-bar-container ul.nav.side-nav-footer li>a:hover .navigation-icon,.navigation-bar-container ul.nav.side-nav-foote
 r li>a:hover .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-footer li>a:hover .submenu-item,.navigation-bar-container ul.nav.side-nav-footer li>a:hover .toggle-icon,.navigation-bar-container ul.nav.side-nav-footer li>ul>li>a:hover .navigation-icon,.navigation-bar-container ul.nav.side-nav-footer li>ul>li>a:hover .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-footer li>ul>li>a:hover .submenu-item,.navigation-bar-container ul.nav.side-nav-footer li>ul>li>a:hover .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li>a:hover .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li>a:hover .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li>a:hover .submenu-item,.navigation-bar-container ul.nav.side-nav-menu li>a:hover .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li>ul>li>a:hover .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li>ul>li>a:hover .navigation-menu-item,.navigation-bar-cont
 ainer ul.nav.side-nav-menu li>ul>li>a:hover .submenu-item,.navigation-bar-container ul.nav.side-nav-menu li>ul>li>a:hover .toggle-icon{color:#fff}  .navigation-bar-container ul.nav.side-nav-footer li.active.collapsed,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu),.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu){background:#404351;cursor:pointer}  .navigation-bar-container ul.nav.side-nav-footer li.active.collapsed>a,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu)>a{color:#fff}  .navigation-bar-container ul.nav.side-nav-footer li.active.collapsed>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-footer li.active.collapsed>a .navigation-menu-item,.navigation-bar-container ul.na
 v.side-nav-footer li.active.collapsed>a .submenu-item,.navigation-bar-container ul.nav.side-nav-footer li.active.collapsed>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a .submenu-item,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a .navigation-icon,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a .submenu-item,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a .toggle-icon,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu)>a .navigation-icon,.navigation-bar-container ul.nav.sid
 e-nav-menu li.active:not(.has-sub-menu)>a .navigation-menu-item,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu)>a .submenu-item,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu)>a .toggle-icon{color:#fff}  .navigation-bar-container ul.nav.side-nav-footer li.active.collapsed>a:after,.navigation-bar-container ul.nav.side-nav-footer li.active:not(.has-sub-menu)>a:after,.navigation-bar-container ul.nav.side-nav-menu li.active.collapsed>a:after,.navigation-bar-container ul.nav.side-nav-menu li.active:not(.has-sub-menu)>a:after{left:0;top:50%;border:solid transparent;border-width:10px 7px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:transparent transparent transparent #31823a;margin-top:-12px}  .navigation-bar-container ul.nav.side-nav-footer .more-actions,.navigation-bar-container ul.nav.side-nav-menu .more-actions{display:none;position:absolute;top:14px;right:33px;line-height:25px;width:20px;text-al
 ign:center;font-size:14px;cursor:pointer;vertical-align:middle;color:#fff}  .navigation-bar-container.collapsed,.navigation-bar-container.collapsed ul.nav.side-nav-footer,.navigation-bar-container.collapsed ul.nav.side-nav-header,.navigation-bar-container.collapsed ul.nav.side-nav-menu{width:50px}  .navigation-bar-container ul.nav.side-nav-footer .more-actions .dropdown-menu>li>a,.navigation-bar-container ul.nav.side-nav-footer .more-actions .dropdown-menu>li>a i,.navigation-bar-container ul.nav.side-nav-menu .more-actions .dropdown-menu>li>a,.navigation-bar-container ul.nav.side-nav-menu .more-actions .dropdown-menu>li>a i{color:#666}  .navigation-bar-container ul.nav.side-nav-footer .more-actions .dropdown-menu>li>a:hover,.navigation-bar-container ul.nav.side-nav-menu .more-actions .dropdown-menu>li>a:hover{background:#f5f5f5}  .navigation-bar-container ul.nav.side-nav-footer .menu-item-name,.navigation-bar-container ul.nav.side-nav-menu .menu-item-name{display:inline-block;vertic
 al-align:bottom;max-width:100px;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;white-space:nowrap}  .navigation-bar-container.collapsed ul.nav.side-nav-footer .more-actions,.navigation-bar-container.collapsed ul.nav.side-nav-footer li a .navigation-menu-item,.navigation-bar-container.collapsed ul.nav.side-nav-footer li a .toggle-icon,.navigation-bar-container.collapsed ul.nav.side-nav-header li.navigation-header .dropdown-menu,.navigation-bar-container.collapsed ul.nav.side-nav-header li.navigation-header span.ambari-header,.navigation-bar-container.collapsed ul.nav.side-nav-header li.navigation-header span.toggle-icon,.navigation-bar-container.collapsed ul.nav.side-nav-menu .more-actions,.navigation-bar-container.collapsed ul.nav.side-nav-menu li a .navigation-menu-item,.navigation-bar-container.collapsed ul.nav.side-nav-menu li a .toggle-icon{display:none}  .navigation-bar-container .nav-pills>li.active>a,.navigation-bar-container .nav-
 pills>li.active>a:focus,.navigation-bar-container .nav-pills>li.active>a:hover,.navigation-bar-container .nav>li>a:focus,.navigation-bar-container .nav>li>a:hover{background-color:inherit}  .navigation-bar-container.collapsed ul.nav.side-nav-header li.navigation-header{padding:15px 0 15px 15px}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li a,.navigation-bar-container.collapsed ul.nav.side-nav-menu li a{padding:15px 0 15px 15px;width:50px}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li.navigation-footer a .navigation-icon,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.navigation-footer a .navigation-icon{padding:0 5px;left:0}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li ul.sub-menu,.navigation-bar-container.collapsed ul.nav.side-nav-menu li ul.sub-menu{display:none;width:230px;position:absolute;z-index:100;top:0;left:50px}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li.submenu-li>a,.navigation-bar-contain
 er.collapsed ul.nav.side-nav-menu li.submenu-li>a{padding:10px 5px 10px 25px;width:230px}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li.active,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active{background:#404351;cursor:pointer}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a,.navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a .navigation-icon,.navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a .navigation-menu-item,.navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a .submenu-item,.navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a .toggle-icon,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>a,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>a .navigation-icon,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>a .navigation-menu-item,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>
 a .submenu-item,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>a .toggle-icon{color:#fff}  .navigation-bar-container.collapsed ul.nav.side-nav-footer li.active>a:after,.navigation-bar-container.collapsed ul.nav.side-nav-menu li.active>a:after{left:0;top:50%;border:solid transparent;border-width:12px 6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:transparent transparent transparent #31823a;margin-top:-12px}  .navigation-bar-fit-height{position:fixed;top:0;bottom:0;left:0;z-index:2079}  .navigation-bar-fit-height .side-nav-header{position:absolute;top:0}  .navigation-bar-fit-height .side-nav-menu{position:absolute;top:55px;bottom:50px}  .navigation-bar-fit-height .side-nav-footer{position:absolute;bottom:0}  .navigation-bar-fit-height .more-actions .dropdown-menu{position:fixed;top:auto;left:auto}  .navigation-bar-fit-height .navigation-bar-container{height:100%}  .navigation-bar-fit-height .navigation-bar-container .side-nav-me
 nu{overflow-y:auto}  .notifications-group{position:relative;top:1px}  #notifications-dropdown.dropdown-menu{min-width:300px;max-width:300px;min-height:150px;padding:0;z-index:1000;right:-50px;left:auto;top:260%;border:none;box-shadow:0 2px 10px 2px rgba(0,0,0,.29)}  #notifications-dropdown.dropdown-menu .popup-arrow-up{position:absolute;right:37px;top:-40px;width:40px;height:40px;overflow:hidden}  #notifications-dropdown.dropdown-menu .popup-arrow-up:after{content:"";position:absolute;width:20px;height:20px;background:#fff;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);top:30px;left:10px;box-shadow:-1px -1px 10px -2px rgba(0,0,0,.5)}  #notifications-dropdown.dropdown-menu .notifications-header{border-bottom:1px solid #eee;padding:15px 20px}  #notifications-dropdown.dropdown-menu .notifications-header .notifications-title{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;color:#333;font-size:16px}  #notifications-dropdo
 wn.dropdown-menu .notifications-body{padding:0 15px;overflow:auto;max-height:500px}  #notifications-dropdown.dropdown-menu .notifications-body .no-alert-text{padding:15px 5px}  #notifications-dropdown.dropdown-menu .notifications-body .table-controls{padding:10px 0;margin:0;border-bottom:1px solid #eee}  #notifications-dropdown.dropdown-menu .notifications-body .table-controls .state-filter{padding:0;font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;font-size:12px;color:#666;position:relative}  #notifications-dropdown.dropdown-menu .notifications-body .table-controls .state-filter .form-control.filter-select{font-size:12px;color:#666;height:25px}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table{margin-top:0}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody tr{cursor:pointer}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody tr.no-alert-tr:hover{cursor:defa
 ult;border-color:transparent transparent #eee}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody tr.no-alert-tr:hover>td{border-color:transparent;background-color:#fff}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.status{width:9%;padding:15px 3px}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.status .alert-state-CRITICAL{color:#EF6162}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.status .alert-state-WARNING{color:#E98A40}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.content{width:90%;padding:15px 3px 10px;font-family:Roboto,sans-serif;font-weight:400;font-style:normal;color:#333;line-height:1.3}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.content .name{font-weight:700;font-size:14px;color:#333;margin-bottom:5px}  #notifications-dropdown.
 dropdown-menu .notifications-body .table.alerts-table tbody td.content .description{font-size:12px;color:#666;margin-bottom:4px;display:block;display:-webkit-box;-webkit-line-clamp:3;max-height:47px;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}  #notifications-dropdown.dropdown-menu .notifications-body .table.alerts-table tbody td.content .timestamp{text-align:right;font-size:11px;color:#999}  #notifications-dropdown.dropdown-menu .notifications-footer{border-top:1px solid #eee;padding:15px}  .modal-backdrop{background-color:grey}  .modal .modal-content{border-radius:2px}  .modal .modal-content .modal-body,.modal .modal-content .modal-footer,.modal .modal-content .modal-header{padding-left:20px;padding-right:20px}  .modal .modal-content .modal-header{border-bottom:none;padding-top:
 20px;color:#666;font-size:20px}  .modal .modal-content .modal-header h4{margin:0;color:inherit;font-size:inherit}  .modal .modal-content .modal-body{color:#666;font-size:12px}  .modal .modal-content .modal-footer{border-top:none;padding-bottom:20px}  .modal .modal-content .modal-footer .btn~.btn{margin-left:10px}  .accordion .panel-group,.wizard .wizard-body .wizard-content .accordion .panel-group{margin-bottom:0}  .accordion .panel-group .panel,.wizard .wizard-body .wizard-content .accordion .panel-group .panel{border-radius:0;border:none;margin-top:0}  .accordion .panel-group .panel .panel-heading,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-heading{height:50px;padding:15px 10px;border:1px solid;border-color:#ddd transparent;border-top:none;background:#fff}  .accordion .panel-group .panel .panel-heading .panel-title,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-heading .panel-title{font-family:Roboto,sans-serif;font-weight
 :400;font-style:normal;line-height:1;color:#333}  .accordion .panel-group .panel .panel-heading .panel-title>a,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-heading .panel-title>a{font-size:18px;color:#333}  .accordion .panel-group .panel .panel-heading .panel-title>i,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-heading .panel-title>i{font-size:20px;color:#1491c1}  .accordion .panel-group .panel .panel-heading:hover,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-heading:hover{background:#f3faff;cursor:pointer}  .accordion .panel-group .panel .panel-body,.wizard .wizard-body .wizard-content .accordion .panel-group .panel .panel-body{padding:15px 10px 20px 20px}  .h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:Roboto,sans-serif}  .h1,h1{font-size:24px}  .h2,h2{font-size:18px}  .body,body{font-family:Roboto,sans-serif;font-weight:400;font-style:normal;line-height:1;color:#333;font-size:14px}  .
 description{font-family:Roboto,sans-serif;font-size:12px;color:#000}  a,a:focus,a:visited{color:#1491C1}  a:focus:hover,a:hover,a:visited:hover{text-decoration:underline}  a.disabled:hover,a:active,a:focus.disabled:hover,a:focus:active,a:focus[disabled]:hover,a:visited.disabled:hover,a:visited:active,a:visited[disabled]:hover,a[disabled]:hover{text-decoration:none}  a.disabled,a:focus.disabled,a:focus[disabled],a:visited.disabled,a:visited[disabled],a[disabled]{cursor:not-allowed;color:#666;text-decoration:none}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.eot
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.eot b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.eot
deleted file mode 100644
index d4e185d..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.eot and /dev/null differ


[14/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/RegionManager.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/RegionManager.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/RegionManager.js
deleted file mode 100644
index c9e3b17..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/RegionManager.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
-* 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.
-*/
-
-/*
- * 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',
-	'communicator'
-],
-function( Backbone, Communicator ) {
-    'use strict';
-
-	var RegionManager = Backbone.Marionette.Controller.extend({
-
-		initialize: function( options ) {
-			console.log("Initialize a Region Manager");
-
-			/* internal region manager */
-			this._regionManager = new Backbone.Marionette.RegionManager();
-
-			/* event API */
-			Communicator.reqres.setHandler("RM:addRegion", this.addRegion, this);
-			Communicator.reqres.setHandler("RM:removeRegion", this.removeRegion, this);
-			Communicator.reqres.setHandler("RM:getRegion", this.getRegion, this);
-		},
-
-		/* add region facade */
-		addRegion: function( regionName, regionId ) {
-			var region = this.getRegion( regionName );
-
-			if( region ) {
-				console.log("REGION ALREADY CREATED TO JUST RETURN REF");
-				return region;
-			}
-
-			return this._regionManager.addRegion( regionName, regionId );
-		},
-
-		/* remove region facade */
-		removeRegion: function( regionName ) {
-			this._regionManager.removeRegion( regionName );
-		},
-
-		/* get region facade */
-		getRegion: function( regionName ) {
-			return this._regionManager.get( regionName );
-		}
-	});
-
-	return new RegionManager();
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VAuditLogListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VAuditLogListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VAuditLogListBase.js
deleted file mode 100644
index 53ec922..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VAuditLogListBase.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VAuditLog'
-],function(require,BaseCollection,Globals,VAuditLog){
-	'use strict';
-
-	var VAuditLogListBase = BaseCollection.extend(
-	/** @lends VAuditLogListBase.prototype */
-	{
-		url: Globals.baseURL + 'audit/logs',
-
-		model : VAuditLog,
-
-		/**
-		 * VAuditLogListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VAuditLog';
-			this.modelAttrName = 'logList';
-			this.bindErrorEvents();
-            this._changes = { };
-			this.on('change', this._onChange);
-		},
-		/*************************
-		 * Non - CRUD operations
-		 *************************/
-
-		getAuditSchemaFieldsName : function(token, options){
-			var url = Globals.baseURL  + 'audit/logs/schema/fields';
-
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		}
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VAuditLogListBase;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
deleted file mode 100644
index 596695b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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',
-    'collections/BaseCollection',
-    'utils/Globals',
-    'models/VEventHistory'
-],function(require,BaseCollection,Globals,VEventHistory) {
-    'use strict';
-
-    var VEventHistoryListBase = BaseCollection.extend(
-        /** @lends VEventHistoryListBase.prototype */
-        {
-            url: Globals.baseURL + 'history',
-
-            model: VEventHistory,
-
-            /**
-             * VEventHistoryListBase initialize method
-             * @augments BaseCollection
-             * @constructs
-             */
-            initialize: function() {
-                this.modelName = 'VUserConfig';
-                this.modelAttrName = 'userConfigList'; //getting collection from ajax data no need to get data directly from collection
-                this.bindErrorEvents();
-            },
-
-            /*************************
-             * Non - CRUD operations
-             *************************/
-
-            saveEventHistory: function(postData, options) {
-                var url = Globals.baseURL + 'history';
-
-                options = _.extend({
-                    data: JSON.stringify(postData),
-                    contentType: 'application/json',
-                    dataType: 'json'
-                }, options);
-
-                return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
-            },
-            saveDashboard: function(postData, options) {
-                var url = Globals.baseURL + 'history';
-
-                options = _.extend({
-                    data: JSON.stringify(postData),
-                    contentType: 'application/json',
-                    dataType: 'json'
-                }, options);
-
-                return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
-            },
-            deleteEventHistory: function(postData, options) {
-                var url = Globals.baseURL + 'history/' + postData.id;
-
-                options = _.extend({
-                    contentType: 'application/json',
-                    dataType: 'json'
-                }, options);
-
-                return this.constructor.nonCrudOperation.call(this, url, 'DELETE', options);
-            },
-        }, {
-            tableCols: {}
-        });
-
-    return VEventHistoryListBase;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VGroupListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VGroupListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VGroupListBase.js
deleted file mode 100644
index 0c81cc3..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VGroupListBase.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VGroup'
-],function(require,BaseCollection,Globals,VGroup){
-	'use strict';
-
-	var VGroupListBase = BaseCollection.extend(
-	/** @lends VGroupListBase.prototype */
-	{
-		url: Globals.baseURL + 'service/logs/hosts',
-
-		model : VGroup,
-
-		/**
-		 * VGroupListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VGroup';
-			this.modelAttrName = 'groupList';
-			this.bindErrorEvents();
-            this._changes = { };
-			this.on('change', this._onChange);
-		},
-
-		_onChange : function(m){
-            this._changes[m.id] = m;
-		},
-
-		changed_models: function() {
-            return _.chain(this._changes).values();
-        },
-
-		/*************************
-		 * Non - CRUD operations
-		 *************************/
-
-		getUsersOfGroup : function(groupId, options){
-			var url = Globals.baseURL  + 'xusers/'  + groupId + '/users';
-
-			options = _.extend({
-				//data : JSON.stringify(postData),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VGroupListBase;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogLevelListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogLevelListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogLevelListBase.js
deleted file mode 100644
index 0e3de20..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogLevelListBase.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VLogLevel'
-],function(require,BaseCollection,Globals,VLogLevel){
-	'use strict';	
-
-	var VLogLevelListBase = BaseCollection.extend(
-	/** @lends VLogLevelListBase.prototype */
-	{
-		url: Globals.baseURL + 'service/logs/levels/count',
-
-		model : VLogLevel,
-
-		/**
-		 * VLogLevelListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VLogLevel';
-			this.modelAttrName = 'vCounts';
-			this.bindErrorEvents();
-            this._changes = { };
-			this.on('change', this._onChange);
-		},
-		
-		_onChange : function(m){
-            this._changes[m.id] = m;
-		},
-
-		changed_models: function() {
-            return _.chain(this._changes).values();
-        },
-
-		/*************************
-		 * Non - CRUD operations
-		 *************************/
-
-		getUsersOfGroup : function(groupId, options){
-			var url = Globals.baseURL  + 'xusers/'  + groupId + '/users';
-			
-			options = _.extend({
-				//data : JSON.stringify(postData),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-
-		setUsersVisibility : function(postData , options){
-			var url = Globals.baseURL  + 'xusers/secure/users/visibility';
-
-			options = _.extend({
-				data : JSON.stringify(postData),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'PUT', options);
-		},
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VLogLevelListBase;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogListBase.js
deleted file mode 100644
index 5fc4bac..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VLogListBase.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VLog'
-],function(require,BaseCollection,Globals,VLog){
-	'use strict';	
-
-	var VLogListBase = BaseCollection.extend(
-	/** @lends VLogListBase.prototype */
-	{
-		url: Globals.baseURL + 'dashboard/solr/logs',
-
-		model : VLog,
-
-		/**
-		 * VLogListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VLog';
-			this.modelAttrName = 'logList';
-			this.bindErrorEvents();
-            this._changes = { };
-			this.on('change', this._onChange);
-		},
-		
-		_onChange : function(m){
-            this._changes[m.id] = m;
-		},
-
-		changed_models: function() {
-            return _.chain(this._changes).values();
-        },
-
-		/*************************
-		 * Non - CRUD operations
-		 *************************/
-
-		cancelFindRequest : function(token, options){
-			var url = Globals.baseURL  + 'service/logs/request/cancel';
-			
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-		getServiceLogFields : function(token, options){
-			var url = Globals.baseURL  + 'service/logs/fields';
-			
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-    getServiceLogSchemaFields : function(token, options){
-      var url = Globals.baseURL  + 'service/logs/schema/fields';
-
-      options = _.extend({
-        data: $.param(token),
-        contentType: 'application/json',
-        dataType: 'json'
-      }, options);
-
-      return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-    getTruncatedLogs : function(token, options){
-			var url = Globals.baseURL  + 'service/logs/truncated';
-			
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-		getServicesInfo : function(options){
-			var url = Globals.baseURL  + 'service/logs/serviceconfig';
-			
-			options = _.extend({
-				//data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VLogListBase;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNameValueListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNameValueListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNameValueListBase.js
deleted file mode 100644
index 71e80d9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNameValueListBase.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VNameValue'
-],function(require,BaseCollection,Globals,VNameValue){
-	'use strict';
-
-	var VNameValueListBase = BaseCollection.extend(
-	/** @lends VNameValueListBase.prototype */
-	{
-		url: Globals.baseURL + 'service/logs/hosts',
-
-		model : VNameValue,
-
-		/**
-		 * VNameValueListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VNameValue';
-			this.modelAttrName = 'vnameValues';
-			this.bindErrorEvents();
-		}
-
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VNameValueListBase;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNodeListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNodeListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNodeListBase.js
deleted file mode 100644
index 78949e3..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VNodeListBase.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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',
-	'collections/BaseCollection',
-	'utils/Globals',
-	'models/VNode'
-],function(require,BaseCollection,Globals,VNode){
-	'use strict';	
-
-	var VNodeListBase = BaseCollection.extend(
-	/** @lends VNodeListBase.prototype */
-	{
-		url: Globals.baseURL + 'service/logs/tree',
-
-		model : VNode,
-
-		/**
-		 * VNodeListBase initialize method
-		 * @augments BaseCollection
-		 * @constructs
-		 */
-		initialize : function() {
-			this.modelName = 'VNode';
-			this.modelAttrName = 'vNodeList';
-			this.bindErrorEvents();
-		},
-		
-		/*************************
-		 * Non - CRUD operations
-		 *************************/
-
-		cancelFindRequest : function(token, options){
-			var url = Globals.baseURL  + 'service/logs/request/cancel';
-			
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-	},{
-	/**
-	* Table Cols to be passed to Backgrid
-	* UI has to use this as base and extend this.
-	*
-	*/
-
-		tableCols : {}
-	});
-
-    return VNodeListBase;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/BaseCollection.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/BaseCollection.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/BaseCollection.js
deleted file mode 100644
index 82fe6a9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/BaseCollection.js
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * 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',
-	'backbone',
-	'utils/Globals',
-	'utils/Utils',
-	'backbone-pageable'
-],function(require,Backbone,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 : 'server',
-		/**
-		 * queryParams required for the PageableCollection 
-		 * Server sends us this :
-		 * pageSize: "2"
-		 * resultSize: "2"
-		 * startIndex: "0"
-		 * totalCount: "15"
-		 */
-		queryParams: {
-			pageSize	: 'pageSize',
-			sortKey		: 'sortBy',
-			order		: 'sortType',
-			totalRecords: 'totalCount',
-			startIndex : function(){
-				return this.state.currentPage * this.state.pageSize;
-			}
-		},
-
-		/**
-		 * override the parseState of PageableCollection for our use
-		 */
-		parseState: function (resp, queryParams, state, options) {
-			if(!this.modelAttrName){
-				throw new Error("this.modelAttrName not defined for " + this);
-			}
-			var serverState = _.omit(resp,this.modelAttrName);
-			var newState = _.clone(state);
-
-			_.each(_.pairs(_.omit(queryParams, "directions")), function (kvp) {
-				var k = kvp[0], v = kvp[1];
-				var serverVal = serverState[v];
-				if (!_.isUndefined(serverVal) && !_.isNull(serverVal)){
-					if((k == 'pageSize') || (k == 'totalRecords')){
-						newState[k] = parseInt(serverState[v],10);
-					} else {
-						newState[k] = serverState[v];
-					}
-				}
-			});
-
-			if (serverState.sortType) {
-				newState.order = _.invert(queryParams.directions)[serverState.sortType] * 1;
-			}
-			
-			var startIndex = parseInt(serverState.startIndex,10);
-			var totalCount = parseInt(serverState.totalCount,10);
-			var pageSize = parseInt(serverState.pageSize,10);
-
-			newState.pageSize = pageSize ? pageSize : state.pageSize;
-			newState.currentPage = startIndex === 0 ? 0 : Math.ceil(startIndex / newState.pageSize);
-			//newState.totalPages = totalCount === 0 ? 0 : Math.ceil(totalCount / serverState.pageSize);
-
-			return newState;
-		},
-
-		/**
-		 * override the parseRecords of PageableCollection for our use
-		 */
-		parseRecords : function(resp, options){
-			if(!this.modelAttrName){
-				throw new Error("this.modelAttrName not defined for " + this);
-			}
-			return resp[this.modelAttrName];
-		},
-		////////////////////////////////////////////////////////////
-		// Overriding backbone.paginator 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));
-	    },
-	    getPage : function(index, options){
-		if(index === "last"){
-			this.queryParams.lastPage = true;
-		}else{
-			delete this.queryParams.lastPage;
-		}
-		var fn = Backbone.PageableCollection.prototype.getPage;
-		fn.apply(this,arguments);
-
-	    },
-	    /////////////////////////////
-	    // End overriding methods //
-	    /////////////////////////////
-
-	}, {
-		//static functions
-
-		/**
-		 * function to get table cols for backgrid, this function assumes that the 
-		 * collection has a static tableCols member.
-		 */
-		getTableCols : function(cols, collection){
-			var retCols = _.map(cols, function(v, k, l){
-				var defaults = collection.constructor.tableCols[k];
-				if(! defaults){
-					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/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/SchemaFieldList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/SchemaFieldList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/SchemaFieldList.js
deleted file mode 100644
index a1c2799..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/SchemaFieldList.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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', 'backbone'], function(require, Backbone) {
-  'use strict';
-
-  var SchemaField = Backbone.Model.extend({
-  });
-
-  return Backbone.Collection.extend({
-    model: SchemaField,
-    url: '../static/schema_fields.json'
-  });
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VAuditLogList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VAuditLogList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VAuditLogList.js
deleted file mode 100644
index a6cfeff..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VAuditLogList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VAuditLogListBase'
-],function(require,VAuditLogListBase){
-	'use strict';	
-
-	var VAuditLogList = VAuditLogListBase.extend(
-	/** @lends VUserList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VAuditLogList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VEventHistoryList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VEventHistoryList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VEventHistoryList.js
deleted file mode 100644
index 0b13d49..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VEventHistoryList.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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',
-	'collection_bases/VEventHistoryListBase'
-],function(require,VEventHistoryListBase) {
-    'use strict';
-
-    var VEventHistoryList = VEventHistoryListBase.extend(
-        /** @lends VEventHistoryList.prototype */
-        {}, {
-            // static class members
-        });
-
-    return VEventHistoryList;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VGroupList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VGroupList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VGroupList.js
deleted file mode 100644
index ac5ab39..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VGroupList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VGroupListBase'
-],function(require,VGroupListBase){
-	'use strict';	
-	
-	var VGroupList = VGroupListBase.extend(
-	/** @lends VUserList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VGroupList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogLevelList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogLevelList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogLevelList.js
deleted file mode 100644
index 105dbc9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogLevelList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VLogLevelListBase'
-],function(require,VLogLevelListBase){
-	'use strict';	
-
-	var VLogLevelList = VLogLevelListBase.extend(
-	/** @lends VUserList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VLogLevelList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogList.js
deleted file mode 100644
index a7517ee..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VLogList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VLogListBase'
-],function(require,VLogListBase){
-	'use strict';	
-
-	var VLogList = VLogListBase.extend(
-	/** @lends VUserList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VLogList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNameValueList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNameValueList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNameValueList.js
deleted file mode 100644
index c0560a4..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNameValueList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VNameValueListBase'
-],function(require,VNameValueListBase){
-	'use strict';	
-
-	var VNameValueList = VNameValueListBase.extend(
-	/** @lends VUserList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VNameValueList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNodeList.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNodeList.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNodeList.js
deleted file mode 100644
index f8ed529..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collections/VNodeList.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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',
-	'collection_bases/VNodeListBase'
-],function(require,VNodeListBase){
-	'use strict';	
-
-	var VNodeList = VNodeListBase.extend(
-	/** @lends VNodeList.prototype */
-	{
-	},{
-		// static class members
-	});
-
-    return VNodeList;
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/communicator.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/communicator.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/communicator.js
deleted file mode 100644
index 8b6afd0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/communicator.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
-* 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.
-*/
-
-/*
- * 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',
-	'backbone.marionette'
-],
-function( Backbone ) {
-    'use strict';
-
-	var Communicator = Backbone.Marionette.Controller.extend({
-		initialize: function( options ) {
-			console.log("initialize a Communicator");
-
-			// create a pub sub
-			this.vent = new Backbone.Wreqr.EventAggregator();
-
-			//create a req/res
-			this.reqres = new Backbone.Wreqr.RequestResponse();
-
-			// create commands
-			this.command = new Backbone.Wreqr.Commands();
-		}
-	});
-
-	return new Communicator();
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/controllers/Controller.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/controllers/Controller.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/controllers/Controller.js
deleted file mode 100644
index 47d542e..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/controllers/Controller.js
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
-* 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.
-*/
-
-/**
- * @file Controlling all the routes in the application through router
- */
-define(['require',
-    'backbone',
-    'models/VAppState',
-    'App','utils/Globals',
-    'backbone.marionette'
-],function(require,Backbone,AppStateMod,App,XAGlobals) {
-    'use strict';
-    
-    var AppRouting  = {};
-
-
-    /**
-     * Mention routes and its route handler function for overall application
-     */
-    AppRouting.Router = Backbone.Marionette.AppRouter.extend({
-
-        appRoutes: {
-            ""					: "dashboardAction",
-            "!/dashboard"       : "dashboardAction",
-            "!/logout"			: "logoutAction"
-        },
-
-       /**
-        *  Override execute for Gloabal Loader it is an syn method 
-        *  which is resolved in commonControllerRoutesAction
-        *  But for now not required
-        */
-    /*    execute: function(callback, args) {
-            this.appLoaderShow();
-            try {
-                if (callback) callback.apply(this, args);
-            } catch (e) {
-                FSUtils.hideAppLoader();
-            }
-        },
-        appLoaderShow: function() {
-            var that = this
-            App.appDeff = $.Deferred(),
-                FSUtils.showAppLoader();
-            $.when(App.appDeff).done(function() {
-                FSUtils.hideAppLoader();
-            });
-
-        }*/
-
-    });
-
-    /**
-     * This is the controller object for every routes present in the application
-     */
-    AppRouting.Controller = Backbone.Marionette.Controller.extend({
-        /** @lends AppRouting.Controller */
-
-        /** intialize a new Controller */
-        initialize: function(){
-            this.showRegions();
-            //this.FSAppTabs = new FSAppTabs();
-            this.globalVent = new Backbone.Wreqr.EventAggregator();
-        },
-
-        /** setting up user profile values to be used overall in the application */
-        setGlobalValues: function(){
-            require(['models/VUser'], function(VUser){
-                // get logged in user's profile
-                var userMod = new VUser();
-                userMod.getUserProfile({
-                    success: function(data, textStatus, jqXHR){
-                        userMod.trigger('sync');
-                        AppStateMod.set('userProfile', data);
-                    },
-                    error: function(jqXHR, textStatus, errorThrown){
-                        userMod.trigger('error', userMod, jqXHR);
-                    }
-                });
-            });
-        },
-
-        /** show the Top bar and side bar */
-        showRegions: function(){
-            var that = this;
-            require(["moment", "utils/Utils", "jstimezonedetect","moment-tz","utils/ViewUtils","WorldMapGenerator"],
-                function(moment, Utils, jstz,momentTz,ViewUtils,WorldMapGenerator) {
-                    var storeTimezone = Utils.localStorage.checkLocalStorage('timezone');
-                    var systemZone = jstz.determine().name();
-                    if (!storeTimezone.value || storeTimezone.value == "undefined") {
-                       
-                        Utils.localStorage.setLocalStorage('timezone', systemZone);
-                        storeTimezone.value = systemZone;
-                    }
-                    if(storeTimezone.value.split(',').length>1){
-                      var timezone =  storeTimezone.value.split(',')[0];
-                    }else{
-                      var timezone =  systemZone;
-                    }
-                    moment.tz.setDefault(timezone);
-                    ViewUtils.setdefaultParams(); // setting default params after moment timezone is set
-                    require(['views/common/Header'],
-                        function(HeaderView) {
-                            App.rHeader.show(new HeaderView({
-                                globalVent: that.globalVent
-                        }));
-                    });
-            });
-            
-        },
-
-        /** function which trigger the TopBarView to show the page content in the respective tab */
-        commonControllerRoutesAction: function(View, viewObj, viewOptions){
-//            var ErrorLayoutView = require('views/common/ErrorLayoutView'),
-//                error403tmpl = require('hbs!tmpl/site/error403');
-//
-//            if(!this.isAccessGranted(viewOptions)){
-//                View = ErrorLayoutView;
-//                viewObj = App.getView(FSGlobals.AppTabs.ERROR.value);
-//                viewOptions = {errorTmpl: error403tmpl};
-//            }
-//
-//            if(viewObj === null) {
-//
-//                viewObj = new View(_.extend({}, viewOptions));
-//
-//                App.saveView(viewObj);
-//            }
-//            //Resolving deff for global Loader
-//           /* if(App.appDeff){
-//                App.appDeff.resolve();
-//            }*/
-//            this.FSAppTabs.showView(viewObj);
-        },
-
-        /**
-         * check whether logged-in user has access to that module
-         * @param  {Object}  viewOptions - options for the view to be shown
-         * @return {Boolean} has access or not
-         */
-        isAccessGranted: function(viewOptions){
-            var str = Backbone.history.fragment.replace(/!\//g, "");
-            if (viewOptions && viewOptions._multipleTabs) {
-                str = str && str.split("/")[0];
-            }
-            var hasAccess = false;
-            if (str === "") {
-                hasAccess = true;
-            } else {
-                var isCheckAccess = this.checkAccess(str) || this.isSpecialMenuAccess(str);
-                hasAccess = !!isCheckAccess;
-            }
-            return hasAccess;
-        },
-
-        /**
-         * check whether logged-in user has access to that module from the list received from server
-         * @param  {String} routeName - name of the menu item clicked
-         * @return {Object} return object match found or else return undefined value
-         */
-        checkAccess: function(routeName){
-            return App.menuListCol.findWhere({
-                menuCode: routeName.toUpperCase()
-            });
-        },
-
-        /**
-         * whether route has been given special permission
-         * @param  {String} routeName - name of the menu item clicked
-         * @return {Boolean} - route has been given special permission or not
-         */
-        isSpecialMenuAccess: function(routeName){
-            return FSLinks.isSpecialMenuAccess(routeName);
-        },
-
-        /*********************
-         * Dashboard Actions *
-         *********************/
-        dashboardAction: function() {
-            var that = this;
-            AppStateMod.set({'currentTab': XAGlobals.AppTabs.MAINVIEW.value });
-            require(['views/dashboard/MainLayoutView'],
-                function(view){
-            	App.rContent.show(new view({
-                    globalVent:that.globalVent
-                }));
-
-            });
-        },
-        
-        logoutAction: function() {
-            if (sessionStorage) {
-                sessionStorage.clear();
-            }
-            window.location.replace("logout.html");
-        },
-
-        databaseAction: function(){
-            var that = this;
-            AppStateMod.set({'currentTab': FSGlobals.AppTabs.DATABASES.value });
-
-//            require(['views/infraConfig/DatabaseConfigLayoutView',
-//                'collections/VDatabaseList'],
-//                function(view, VDatabaseList){
-//
-//                var viewObj = App.getView(FSGlobals.AppTabs.DATABASES.value);
-//                var databaseListCol = new VDatabaseList();
-//                var viewOptions = {
-//                    collection: databaseListCol
-//                };
-//
-//                that.commonControllerRoutesAction(view, viewObj, viewOptions);
-//
-//                databaseListCol.fetch({reset: true });
-//            });
-        }
-
-    });
-
-    return {
-		Controller: AppRouting.Controller,
-		Router: AppRouting.Router
-	};
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VAuditLogBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VAuditLogBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VAuditLogBase.js
deleted file mode 100644
index 8513ed2..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VAuditLogBase.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VAuditLogBase = BaseModel.extend(
-	/** @lends VAuditLogBase.prototype */
-	{
-		urlRoot: Globals.baseURL + '',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VAuditLogBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VAuditLogBase';
-		},
-		auditLiveFeed : function(token, options){
-			var url = Globals.baseURL  + 'audit/logs/live/count';
-			
-			options = _.extend({
-				data : $.param(token),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		}
-	}, {
-		// static class members
-	});
-
-    return VAuditLogBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VCommonModelBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VCommonModelBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VCommonModelBase.js
deleted file mode 100644
index bbc3e36..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VCommonModelBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VCommonModelBase = BaseModel.extend(
-	/** @lends VCommonModelBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'service/logs/tree',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VCommonModelBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VCommonModelBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VCommonModelBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VEventHistoryBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VEventHistoryBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VEventHistoryBase.js
deleted file mode 100644
index a15cdbd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VEventHistoryBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-    'models/BaseModel',
-    'utils/Globals'
-],function(require,BaseModel,Globals){
-    'use strict';
-
-    var VEventHistory = BaseModel.extend(
-        /** @lends VEventHistory.prototype */
-        {
-            urlRoot: Globals.baseURL + 'service/logs/aggregated',
-
-            defaults: {},
-
-            idAttribute: 'id',
-
-            /**
-             * VEventHistory initialize method
-             * @augments BaseModel
-             * @constructs
-             */
-            initialize: function() {
-                this.modelName = 'VGraphInfoBase';
-            }
-
-        }, {
-            // static class members
-        });
-
-    return VEventHistory;
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGraphInfoBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGraphInfoBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGraphInfoBase.js
deleted file mode 100644
index 46e826c..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGraphInfoBase.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VLogBase = BaseModel.extend(
-	/** @lends VLogBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'service/logs/aggregated',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VLogBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VGraphInfoBase';
-		},
-		getCriticalLogsInfo : function(params,options){
-			var url = Globals.baseURL  + 'dashboard/getCricticalMessageSummary';
-			
-			options = _.extend({
-				data : $.param(params),
-				contentType : 'application/json',
-				dataType : 'json'
-			}, options);
-
-			return this.constructor.nonCrudOperation.call(this, url, 'GET', options);
-		},
-
-	}, {
-		// static class members
-	});
-
-    return VLogBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGroupBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGroupBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGroupBase.js
deleted file mode 100644
index cd48797..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VGroupBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VGroupBase = BaseModel.extend(
-	/** @lends VGroupBase.prototype */
-	{
-		urlRoot: Globals.baseURL + '',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VGroupBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VGroupBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VGroupBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogBase.js
deleted file mode 100644
index 577aff0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VLogBase = BaseModel.extend(
-	/** @lends VLogBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'xusers/secure/users',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VLogBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VLogBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VLogBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogLevelBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogLevelBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogLevelBase.js
deleted file mode 100644
index daaaa32..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VLogLevelBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VLogLevelBase = BaseModel.extend(
-	/** @lends VLogLevelBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'service/logs/levels/count',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VLogLevelBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VLogLevelBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VLogLevelBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNameValueBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNameValueBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNameValueBase.js
deleted file mode 100644
index 0ae67b1..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNameValueBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VNameValueBase = BaseModel.extend(
-	/** @lends VNameValueBase.prototype */
-	{
-		urlRoot: Globals.baseURL + '',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VNameValueBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VNameValueBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VNameValueBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNodeBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNodeBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNodeBase.js
deleted file mode 100644
index 50774e5..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VNodeBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';	
-
-	var VNodeBase = BaseModel.extend(
-	/** @lends VNodeBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'xusers/secure/users',
-		
-		defaults: {},
-		
-		idAttribute: 'id',
-
-		/**
-		 * VNodeBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VNodeBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VNodeBase;
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
deleted file mode 100644
index a672a94..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals){
-	'use strict';
-
-	var VUserFilterBase = BaseModel.extend(
-	/** @lends VUserFilterBase.prototype */
-	{
-		urlRoot: Globals.baseURL + 'history/filters',
-
-		defaults: {},
-
-		idAttribute: 'id',
-
-		/**
-		 * VUserFilterBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VUserFilterBase';
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VUserFilterBase;
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/BaseModel.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/BaseModel.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/BaseModel.js
deleted file mode 100644
index e20584a..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/BaseModel.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.
- */
-
- 
-/**
- *
- * Base Model file from which all models will extend/derive.
- */
-
-define(['require',
-	'backbone',
-	'utils/Utils'
-],function(require,Backbone,Utils){
-	'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
-			});
-		},
-		parse: function(response){
-			for(var key in this.modelRel)
-				{
-					var embeddedClass = this.modelRel[key];
-					var embeddedData = response[key];
-					response[key] = new embeddedClass(embeddedData);
-				}
-				return response;
-		}
-
-	}, {
-		nestCollection : function(model, attributeName, nestedCollection) {
-			//setup nested references
-			for (var i = 0; i < nestedCollection.length; i++) {
-				model.attributes[attributeName][i] = nestedCollection.at(i).attributes;
-			}
-			//create empty arrays if none
-
-			nestedCollection.bind('add', function (initiative) {
-				if (!model.get(attributeName)) {
-					model.attributes[attributeName] = [];
-				}
-				model.get(attributeName).push(initiative.attributes);
-			});
-
-			nestedCollection.bind('remove', function (initiative) {
-				var updateObj = {};
-				updateObj[attributeName] = _.without(model.get(attributeName), initiative.attributes);
-				model.set(updateObj);
-			});
-
-			model.parse = function(response) {
-				if (response && response[attributeName]) {
-					model[attributeName].reset(response[attributeName]);
-				}
-				return Backbone.Model.prototype.parse.call(model, response);
-			}
-			return nestedCollection;
-		},
-
-		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/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAppState.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAppState.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAppState.js
deleted file mode 100644
index ab73ab7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAppState.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.
- */
-
- /*
- * The singleton class for App State model to be used globally
- */
-
-define(['require',
-	'models/BaseModel',
-	'utils/Globals'
-],function(require,BaseModel,Globals) {
-	'use strict';
-
-	var VAppState = BaseModel.extend({
-		defaults : {
-			currentTab : Globals.AppTabs.DASHBOARD.value
-		},
-		initialize : function() {
-			this.modelName = 'VAppState';
-		//	this.listenTo(this, 'change:currentAccount', this.accountChanged);
-		}
-		
-	});
-
-	// Make this a singleton!!
-	return new VAppState();
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAuditLog.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAuditLog.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAuditLog.js
deleted file mode 100644
index b9e3820..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VAuditLog.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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',
-	'model_bases/VAuditLogBase',
-	'utils/Enums'
-],function(require,VAuditLogBase,Enums){
-	'use strict';	
-
-	var VAuditLog = VAuditLogBase.extend(
-	/** @lends VAuditLog.prototype */
-	{
-		/**
-		 * VAuditLogBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VAuditLog';
-			this.bindErrorEvents();
-		},
-	}, {
-		// static class members
-	});
-
-    return VAuditLog;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VCommonModel.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VCommonModel.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VCommonModel.js
deleted file mode 100644
index b25bfc8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VCommonModel.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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',
-	'model_bases/VCommonModelBase',
-	'utils/Enums'
-],function(require,VCommonModelBase,Enums){
-	'use strict';	
-
-	var VCommonModel = VCommonModelBase.extend(
-	/** @lends VCommonModel.prototype */
-	{
-		/**
-		 * VCommonModelBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VCommonModel';
-			this.bindErrorEvents();
-		}
-	
-	}, {
-		// static class members
-	});
-
-    return VCommonModel;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VEventHistory.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VEventHistory.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VEventHistory.js
deleted file mode 100644
index 3d2e89d..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VEventHistory.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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',
-    'model_bases/VEventHistoryBase'
-],function(require,VEventHistoryBase){
-    'use strict';
-
-    var VEventHistory = VEventHistoryBase.extend(
-        /** @lends VEventHistory.prototype */
-        {
-            /**
-             * VEventHistory initialize method
-             * @augments FSBaseModel
-             * @constructs
-             */
-            initialize: function() {
-                this.modelName = 'VEventHistory';
-                this.bindErrorEvents();
-            },
-            toString: function(){
-                return this.modelName;
-            }
-
-        }, {
-            // static class members
-        });
-
-    return VEventHistory;
-
-});


[23/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/loadCSS.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/loadCSS.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/loadCSS.js
deleted file mode 100644
index e1f3f19..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/loadCSS.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/*!
-loadCSS: load a CSS file asynchronously.
-[c]2015 @scottjehl, Filament Group, Inc.
-Licensed MIT
-*/
-(function(w){
-	"use strict";
-	/* exported loadCSS */
-	var loadCSS = function( href, before, media ){
-		// Arguments explained:
-		// `href` [REQUIRED] is the URL for your CSS file.
-		// `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
-			// By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
-		// `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
-		var doc = w.document;
-		var ss = doc.createElement( "link" );
-		var newMedia = media || "all";
-		var ref;
-		if( before ){
-			ref = before;
-		}
-		else {
-			var refs = ( doc.body || doc.getElementsByTagName( "head" )[ 0 ] ).childNodes;
-			ref = refs[ refs.length - 1];
-		}
-
-		var sheets = doc.styleSheets;
-		ss.rel = "stylesheet";
-		ss.href = href;
-		// temporarily set media to something inapplicable to ensure it'll fetch without blocking render
-		ss.media = "only x";
-
-
-		// Inject link
-			// Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
-			// Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
-		ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
-		// A method (exposed on return object for external use) that mimics onload by polling until document.styleSheets until it includes the new sheet.
-		var onloadcssdefined = function( cb ){
-			var resolvedHref = ss.href;
-			var i = sheets.length;
-			while( i-- ){
-				if( sheets[ i ].href === resolvedHref ){
-					return cb();
-				}
-			}
-			setTimeout(function() {
-				onloadcssdefined( cb );
-			});
-		};
-
-		// once loaded, set link's media back to `all` so that the stylesheet applies once it loads
-		if( ss.addEventListener ){
-			ss.addEventListener( "load", function(){
-				this.media = newMedia;
-			});
-		}
-		ss.onloadcssdefined = onloadcssdefined;
-		onloadcssdefined(function() {
-			if( ss.media !== newMedia ){
-				ss.media = newMedia;
-			}
-		});
-		return ss;
-	};
-	// commonjs
-	if( typeof exports !== "undefined" ){
-		exports.loadCSS = loadCSS;
-	}
-	else {
-		w.loadCSS = loadCSS;
-	}
-}( typeof global !== "undefined" ? global : this ));


[48/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.spec.ts
deleted file mode 100644
index d47436e..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.spec.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-
-import {NodeBarComponent} from './node-bar.component';
-
-describe('NodeBarComponent', () => {
-  let component: NodeBarComponent;
-  let fixture: ComponentFixture<NodeBarComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [NodeBarComponent]
-    })
-      .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(NodeBarComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.ts
deleted file mode 100644
index c7b3ead..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input} from '@angular/core';
-
-@Component({
-  selector: 'node-bar',
-  templateUrl: './node-bar.component.html',
-  styleUrls: ['./node-bar.component.less']
-})
-export class NodeBarComponent {
-
-  @Input()
-  data: any[] = [];
-
-  get totalCount(): number {
-    return this.data.reduce((currentValue, currentItem) => currentValue + Number(currentItem.value), 0);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.html
deleted file mode 100644
index c227a2b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-  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.
--->
-
-<button class="btn btn-link" [disabled]="currentPage === 0" (click)="updateValue(true)">
-  <span class="pagination-control fa fa-chevron-left"></span>
-</button>
-<button class="btn btn-link" [disabled]="currentPage === pagesCount - 1" (click)="updateValue()">
-  <span class="pagination-control fa fa-chevron-right"></span>
-</button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.less
deleted file mode 100644
index 8238eaf..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.less
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.pagination-control {
-  .clickable-item;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.spec.ts
deleted file mode 100644
index 489f79c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.spec.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-
-import {PaginationControlsComponent} from './pagination-controls.component';
-
-describe('PaginationControlsComponent', () => {
-  let component: PaginationControlsComponent;
-  let fixture: ComponentFixture<PaginationControlsComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [PaginationControlsComponent]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(PaginationControlsComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.ts
deleted file mode 100644
index c71844c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination-controls/pagination-controls.component.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, forwardRef, Input, Output, EventEmitter} from '@angular/core';
-import {ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
-
-@Component({
-  selector: 'pagination-controls',
-  templateUrl: './pagination-controls.component.html',
-  styleUrls: ['./pagination-controls.component.less'],
-  providers: [
-    {
-      provide: NG_VALUE_ACCESSOR,
-      useExisting: forwardRef(() => PaginationControlsComponent),
-      multi: true
-    }
-  ]
-})
-export class PaginationControlsComponent implements ControlValueAccessor {
-
-  private onChange: (fn: any) => void;
-
-  currentPage: number = 0;
-
-  @Input()
-  totalCount: number;
-
-  @Input()
-  pagesCount: number;
-
-  @Output()
-  currentPageChange: EventEmitter<number> = new EventEmitter();
-
-  get value(): number {
-    return this.currentPage;
-  }
-
-  set value(newValue: number) {
-    this.currentPage = newValue;
-    this.currentPageChange.emit(newValue);
-    this.onChange(newValue);
-  }
-
-  updateValue(isDecrement?: boolean) {
-    isDecrement? this.value-- : this.value++;
-  }
-
-  writeValue() {
-  }
-
-  registerOnChange(callback: any): void {
-    this.onChange = callback;
-  }
-
-  registerOnTouched() {
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.html
deleted file mode 100644
index be6591b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-  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.
--->
-
-<form class="pagination-form col-md-12" [formGroup]="filtersForm">
-  <filter-dropdown [label]="filterInstance.label" formControlName="pageSize" [options]="filterInstance.options"
-                   [defaultLabel]="filterInstance.defaultLabel" [isRightAlign]="true" isDropup="true"></filter-dropdown>
-  <span>{{'pagination.numbers' | translate: numbersTranslateParams}}</span>
-  <pagination-controls formControlName="page" [totalCount]="totalCount" [pagesCount]="pagesCount"
-                       (currentPageChange)="setCurrentPage($event)"></pagination-controls>
-</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.less
deleted file mode 100644
index df8ad2d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.less
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  display: flex;
-
-  .pagination-form {
-    .flex-vertical-align;
-    justify-content: flex-end;
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.spec.ts
deleted file mode 100644
index 7a15bbc..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.spec.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-
-import {PaginationComponent} from './pagination.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('PaginationComponent', () => {
-  let component: PaginationComponent;
-  let fixture: ComponentFixture<PaginationComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      imports: [
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      declarations: [PaginationComponent],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(PaginationComponent);
-    component = fixture.componentInstance;
-    component.filterInstance = {};
-    component.filtersForm = {
-      controls: {
-        pageSize: {
-          valueChanges: {
-            subscribe: () => {}
-          }
-        }
-      }
-    };
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.ts
deleted file mode 100644
index d38d0d8..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/pagination/pagination.component.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit, Input} from '@angular/core';
-import {FormGroup} from '@angular/forms';
-
-@Component({
-  selector: 'pagination',
-  templateUrl: './pagination.component.html',
-  styleUrls: ['./pagination.component.less']
-})
-export class PaginationComponent implements OnInit {
-
-  ngOnInit() {
-    this.setPageSizeFromString(this.filterInstance.defaultValue);
-    this.filtersForm.controls.pageSize.valueChanges.subscribe(value => this.setPageSizeFromString(value));
-  }
-
-  @Input()
-  filtersForm: FormGroup;
-
-  @Input()
-  filterInstance: any;
-
-  @Input()
-  currentCount?: number;
-
-  @Input()
-  totalCount: number;
-
-  private pageSize: number = 0;
-
-  setPageSizeFromString(value: string) {
-    this.pageSize = parseInt(value);
-  }
-
-  private currentPage: number = 0;
-
-  get numbersTranslateParams(): any {
-    const pageSize = this.pageSize,
-      startIndex = (this.currentPage * pageSize) + 1;
-    return {
-      startIndex,
-      endIndex: startIndex + Math.min(pageSize, this.currentCount) - 1,
-      totalCount: this.totalCount
-    }
-  }
-
-  get pagesCount(): number {
-    return Math.ceil(this.totalCount / this.pageSize);
-  }
-
-  setCurrentPage(pageNumber: number) {
-    this.currentPage = pageNumber;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.html
deleted file mode 100644
index 299e46e..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-  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.
--->
-
-<div #container></div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.less
deleted file mode 100644
index d891862..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.less
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-/deep/ .axis {
-  .domain {
-    display: none;
-  }
-
-  .tick {
-    line {
-      display: none;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.spec.ts
deleted file mode 100644
index 9e056be..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.spec.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-
-import {TimeHistogramComponent} from './time-histogram.component';
-
-describe('TimeHistogramComponent', () => {
-  let component: TimeHistogramComponent;
-  let fixture: ComponentFixture<TimeHistogramComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [TimeHistogramComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings
-        })
-      ],
-      providers: [
-        AppSettingsService
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(TimeHistogramComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.ts
deleted file mode 100644
index 7856ecc..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/time-histogram/time-histogram.component.ts
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit, AfterViewInit, OnChanges, Input, ViewChild, ElementRef} from '@angular/core';
-import * as d3 from 'd3';
-import * as moment from 'moment-timezone';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-
-@Component({
-  selector: 'time-histogram',
-  templateUrl: './time-histogram.component.html',
-  styleUrls: ['./time-histogram.component.less']
-})
-export class TimeHistogramComponent implements OnInit, AfterViewInit, OnChanges {
-
-  constructor(private appSettings: AppSettingsService) {
-    appSettings.getParameter('timeZone').subscribe(value => {
-      this.timeZone = value;
-      this.createHistogram();
-    });
-  }
-
-  ngOnInit() {
-    Object.assign(this.options, this.defaultOptions, this.customOptions);
-  }
-
-  ngAfterViewInit() {
-    this.htmlElement = this.element.nativeElement;
-    this.host = d3.select(this.htmlElement);
-  }
-
-  ngOnChanges() {
-    this.createHistogram();
-  }
-
-  @ViewChild('container')
-  element: ElementRef;
-
-  @Input()
-  customOptions: any;
-
-  @Input()
-  data: any;
-
-  private readonly defaultOptions = {
-    margin: {
-      top: 20,
-      right: 20,
-      bottom: 40,
-      left: 50
-    },
-    height: 200,
-    tickPadding: 10,
-    columnWidth: 20
-  };
-
-  private options: any = {};
-
-  private timeZone: string;
-
-  private host;
-
-  private svg;
-
-  private width;
-
-  private xScale;
-
-  private yScale;
-
-  private colorScale;
-
-  private xAxis;
-
-  private yAxis;
-
-  private htmlElement: HTMLElement;
-
-  histogram: any;
-
-  private createHistogram(): void {
-    if (this.host) {
-      this.setup();
-      this.buildSVG();
-      this.populate();
-    }
-  }
-
-  private setup(): void {
-    const margin = this.options.margin,
-      keysWithColors = this.options.keysWithColors,
-      keys = Object.keys(keysWithColors),
-      colors = keys.reduce((array, key) => [...array, keysWithColors[key]], []);
-    this.width = this.htmlElement.clientWidth - margin.left - margin.right;
-    this.xScale = d3.scaleTime().range([0, this.width]);
-    this.yScale = d3.scaleLinear().range([this.options.height, 0]);
-    this.colorScale = d3.scaleOrdinal(colors);
-  }
-
-  private buildSVG(): void {
-    const margin = this.options.margin;
-    this.host.html('');
-    this.svg = this.host.append('svg').attr('width', this.width + margin.left + margin.right)
-      .attr('height', this.options.height + margin.top + margin.bottom).append('g')
-      .attr('transform', `translate(${margin.left},${margin.top})`);
-  }
-
-  private drawXAxis(): void {
-    this.xAxis = d3.axisBottom(this.xScale)
-      .tickFormat(tick => moment(tick).tz(this.timeZone).format('MM/DD HH:mm'))
-      .tickPadding(this.options.tickPadding);
-    this.svg.append('g').attr('class', 'axis').attr('transform', `translate(0,${this.options.height})`).call(this.xAxis);
-  }
-
-  private drawYAxis(): void {
-    this.yAxis = d3.axisLeft(this.yScale).tickFormat((tick: number) => {
-      if (Number.isInteger(tick)) {
-        return tick.toFixed(0);
-      } else {
-        return;
-      }
-    }).tickPadding(this.options.tickPadding);
-    this.svg.append('g').attr('class', 'axis').call(this.yAxis).append('text');
-  }
-
-  private populate(): void {
-    const keys = Object.keys(this.options.keysWithColors),
-      data = this.data,
-      timeStamps = Object.keys(data),
-      formattedData = timeStamps.map(timeStamp => Object.assign({
-        timeStamp: timeStamp
-      }, data[timeStamp])),
-      layers = (d3.stack().keys(keys)(formattedData)),
-      columnWidth = this.options.columnWidth;
-    this.xScale.domain(d3.extent(formattedData, item => item.timeStamp));
-    this.yScale.domain([0, d3.max(formattedData, item => keys.reduce((sum, key) => sum + item[key], 0))]);
-    this.drawXAxis();
-    this.drawYAxis();
-    const layer = this.svg.selectAll().data(d3.transpose<any>(layers)).enter().append('g');
-    layer.selectAll().data(item => item).enter().append('rect')
-      .attr('x', item => this.xScale(item.data.timeStamp) - columnWidth / 2).attr('y', item => this.yScale(item[1]))
-      .attr('height', item => this.yScale(item[0]) - this.yScale(item[1])).attr('width', columnWidth.toString())
-      .style('fill', (item, index) => this.colorScale(index));
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.html
deleted file mode 100644
index 3cb196e..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-  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.
--->
-
-<button class="btn btn-link" (click)="setTimeZonePickerDisplay(true)">
-  {{timeZone | timeZoneAbbr}} <span class="caret"></span>
-</button>
-<modal *ngIf="isTimeZonePickerDisplayed" [showCloseButton]="false" [isLargeModal]="true"
-       (init)="initMap()" (cancel)="setTimeZonePickerDisplay(false)" (submit)="setTimeZone()">
-  <ng-template>
-    <div attr.id="{{mapElementId}}"></div>
-  </ng-template>
-</modal>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.less
deleted file mode 100644
index 4fa043d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.less
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.btn-link {
-  // TODO implement actual colors
-  color: @submit-color;
-
-  &:hover {
-    color: @submit-hover-color;
-  }
-}
-
-/deep/ #timezone-map {
-  .Cbox {
-    .quickLink {
-      padding-top: 4px;
-    }
-  }
-
-  .hoverZone {
-    display: inline-block;
-
-    &:after {
-      content: '\007C\00a0\00a0';
-      visibility: hidden;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.spec.ts
deleted file mode 100644
index 0ef17de..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.spec.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
-import {ModalComponent} from '@app/components/modal/modal.component';
-
-import {TimeZonePickerComponent} from './timezone-picker.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('TimeZonePickerComponent', () => {
-  let component: TimeZonePickerComponent;
-  let fixture: ComponentFixture<TimeZonePickerComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [
-        TimeZonePickerComponent,
-        ModalComponent,
-        TimeZoneAbbrPipe
-      ],
-      imports: [
-        StoreModule.provideStore({
-          appSettings
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        ComponentActionsService
-      ],
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(TimeZonePickerComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.ts
deleted file mode 100644
index 32f6474..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/timezone-picker/timezone-picker.component.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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.
- */
-
-import {Component} from '@angular/core';
-import * as $ from 'jquery';
-import '@vendor/js/WorldMapGenerator.min';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-
-@Component({
-  selector: 'timezone-picker',
-  templateUrl: './timezone-picker.component.html',
-  styleUrls: ['./timezone-picker.component.less']
-})
-export class TimeZonePickerComponent {
-
-  constructor(private appSettings: AppSettingsService, private actions: ComponentActionsService) {
-    appSettings.getParameter('timeZone').subscribe(value => this.timeZone = value);
-  }
-
-  readonly mapElementId = 'timezone-map';
-  
-  private readonly mapOptions = {
-    quickLink: [
-      {
-        PST: 'PST',
-        MST: 'MST',
-        CST: 'CST',
-        EST: 'EST',
-        GMT: 'GMT',
-        LONDON: 'Europe/London',
-        IST: 'IST'
-      }
-    ]
-  };
-
-  private mapElement: any;
-
-  private timeZoneSelect: JQuery;
-
-  isTimeZonePickerDisplayed: boolean = false;
-
-  timeZone: string;
-
-  setTimeZonePickerDisplay(isDisplayed: boolean): void {
-    this.isTimeZonePickerDisplayed = isDisplayed;
-  }
-
-  initMap(): void {
-    this.mapElement = $(`#${this.mapElementId}`);
-    this.mapElement.WorldMapGenerator(this.mapOptions);
-    this.timeZoneSelect = this.mapElement.find('select');
-    this.timeZoneSelect.removeClass('btn btn-default').addClass('form-control').val(this.timeZone);
-  }
-
-  setTimeZone(): void {
-    const timeZone = this.timeZoneSelect.val();
-    this.actions.setTimeZone(timeZone);
-    this.setTimeZonePickerDisplay(false);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.html
deleted file mode 100644
index 6898354..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-  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.
--->
-
-<menu-button *ngFor="let item of items" [label]="item.label" [action]="item.action"
-             [iconClass]="item.iconClass" [labelClass]="item.labelClass"
-             [subItems]="item.subItems" [hideCaret]="item.hideCaret">
-</menu-button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.less
deleted file mode 100644
index e5e85f4..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.less
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  .default-flex;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.spec.ts
deleted file mode 100644
index 1649a50..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.spec.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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.
- */
-
-import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-
-import {TopMenuComponent} from './top-menu.component';
-
-describe('TopMenuComponent', () => {
-  let component: TopMenuComponent;
-  let fixture: ComponentFixture<TopMenuComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [TopMenuComponent],
-      schemas: [CUSTOM_ELEMENTS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(TopMenuComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.ts
deleted file mode 100644
index 73b6131..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/top-menu/top-menu.component.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit} from '@angular/core';
-
-@Component({
-  selector: 'top-menu',
-  templateUrl: './top-menu.component.html',
-  styleUrls: ['./top-menu.component.less']
-})
-export class TopMenuComponent implements OnInit {
-
-  constructor() {
-  }
-
-  ngOnInit() {
-  }
-
-  //TODO implement loading of real data into subItems
-  readonly items = [
-    {
-      iconClass: 'fa fa-arrow-left',
-      label: 'topMenu.undo',
-      labelClass: 'unstyled-link',
-      action: 'undo',
-      subItems: [
-        {
-          label: 'Apply \'Last week\' filter'
-        },
-        {
-          label: 'Clear all filters'
-        },
-        {
-          label: 'Apply \'HDFS\' filter'
-        },
-        {
-          label: 'Apply \'Errors\' filter'
-        }
-      ]
-    },
-    {
-      iconClass: 'fa fa-arrow-right',
-      label: 'topMenu.redo',
-      labelClass: 'unstyled-link',
-      action: 'redo',
-      subItems: [
-        {
-          label: 'Apply \'Warnings\' filter'
-        },
-        {
-          label: 'Switch to graph mode'
-        },
-        {
-          label: 'Apply \'Custom Date\' filter'
-        }
-      ]
-    },
-    {
-      iconClass: 'fa fa-refresh',
-      label: 'topMenu.refresh',
-      labelClass: 'unstyled-link',
-      action: 'refresh'
-    },
-    {
-      iconClass: 'fa fa-history',
-      label: 'topMenu.history',
-      labelClass: 'unstyled-link',
-      action: 'openHistory',
-      subItems: [
-        {
-          label: 'Apply \'Custom Date\' filter'
-        },
-        {
-          label: 'Switch to graph mode'
-        },
-        {
-          label: 'Apply \'Warnings\' filter'
-        },
-        {
-          label: 'Apply \'Last week\' filter'
-        },
-        {
-          label: 'Clear all filters'
-        },
-        {
-          label: 'Apply \'HDFS\' filter'
-        },
-        {
-          label: 'Apply \'Errors\' filter'
-        }
-      ]
-    },
-    {
-      iconClass: 'fa fa-user unstyled-link',
-      hideCaret: true,
-      subItems: [
-        {
-          label: 'Options'
-        },
-        {
-          label: 'Logout'
-        }
-      ]
-    }
-  ];
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/variables.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/variables.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/variables.less
deleted file mode 100644
index f72183c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/variables.less
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * 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.
- */
-
-// Variables
-@navbar-background-color: #323544;
-@h1-vertical-margin: 20px;
-@button-border-radius: 4px;
-@input-border: 1px solid #CFD3D7;
-@button-border-radius: 4px;
-@input-group-addon-padding: 6px 0 6px 12px;
-@block-margin-top: 20px;
-@link-color: #1491C1;
-@link-hover-color: #23527C;
-@grey-color: #666;
-@default-line-height: 1.42857143;
-@main-background-color: #ECECEC;
-@filters-panel-background-color: #FFF;
-@filters-panel-padding: 10px 0;
-@list-header-background-color: #F2F2F2;
-@checkbox-top: 4px;
-
-@fatal-color: #830A0A;
-@error-color: #E81D1D;
-@warning-color: #FF8916;
-@info-color: #2577B5;
-@debug-color: #65E8FF;
-@trace-color: #888;
-@unknown-color: #BDBDBD;
-@submit-color: #5CB85C;
-@submit-hover-color: #449D44;
-
-// Mixins
-.flex-vertical-align {
-  display: flex;
-  align-items: center;
-}
-
-.default-flex {
-  .flex-vertical-align;
-  justify-content: space-between;
-}
-
-.common-hexagon(@side, @color) {
-  display: block;
-  position: absolute;
-  margin: (@side / 3.464101615) 0;
-  width: @side;
-  height: @side / 1.732050808;
-  background-color: @color;
-
-  &:before, &:after {
-    display: block;
-    position: absolute;
-    width: 0;
-    border-left: (@side / 2) solid transparent;
-    border-right: (@side / 2) solid transparent;
-    content: '';
-  }
-
-  &:before {
-    bottom: 100%;
-    border-bottom: (@side / 3.464101615) solid @color;
-  }
-
-  &:after {
-    top: 100%;
-    border-top: (@side / 3.464101615) solid @color;
-  }
-}
-
-.clickable-item {
-  cursor: pointer;
-  color: @link-color;
-
-  &:hover {
-    color: @link-hover-color;
-  }
-}
-
-.full-size {
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-}
-
-.dropdown-item-default {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: 400;
-  line-height: 1.42857143;
-  color: #333;
-  white-space: nowrap;
-  cursor: pointer;
-
-  &:hover {
-    color: #262626;
-    text-decoration: none;
-    background-color: #f5f5f5;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/mock-data.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/mock-data.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/mock-data.ts
deleted file mode 100644
index f23139b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/mock-data.ts
+++ /dev/null
@@ -1,1067 +0,0 @@
-/**
- * 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.
- */
-
-import * as moment from 'moment';
-
-export const mockData = {
-  login: {},
-  api: {
-    v1: {
-      audit: {
-        logs: {
-          logList: [
-            {
-              policy: 'policy',
-              reason: 'Authentication required',
-              result: 0,
-              text: 'Please log in',
-              tags: [
-                'ambari_agent'
-              ],
-              resource: '/ambari-agent',
-              sess: '0',
-              access: '0',
-              logType: 'AmbariAudit',
-              tags_str: 'ambari_agent',
-              resType: 'agent',
-              reqUser: 'admin',
-              reqData: 'data',
-              repoType: 1,
-              repo: 'ambari',
-              proxyUsers: [
-                'admin'
-              ],
-              evtTime: '2017-05-29T11:30:22.531Z',
-              enforcer: 'ambari-acl',
-              reqContext: 'ambari',
-              cliType: 'GET',
-              cliIP: '192.168.0.1',
-              agent: 'agent',
-              agentHost: 'localhost',
-              action: 'SERVICE_CHECK',
-              type: 'ambari-audit',
-              _version_: 2,
-              id: 'id0',
-              file: 'ambari-agent.log',
-              seq_num: 3,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'User(admin), Operation(SERVICE_CHECK)',
-              logfile_line_number: 4,
-              message_md5: '12345678900987654321',
-              cluster: 'cl0',
-              event_count: 0,
-              event_md5: '09876543211234567890',
-              event_dur_ms: 100,
-              _ttl_: '+7DAYS',
-              _expire_at_: '2017-05-29T11:30:22.531Z',
-              _router_field_: 5
-            },
-            {
-              policy: 'policy',
-              reason: 'Server error',
-              result: 1,
-              text: 'Something went wrong',
-              tags: [
-                'ambari_agent'
-              ],
-              resource: '/ambari-agent',
-              sess: '1',
-              access: '1',
-              logType: 'AmbariAudit',
-              tags_str: 'ambari_server',
-              resType: 'server',
-              reqUser: 'user',
-              reqData: 'data',
-              repoType: 1,
-              repo: 'ambari',
-              proxyUsers: [
-                'user'
-              ],
-              evtTime: '2017-05-29T11:30:22.531Z',
-              enforcer: 'hdfs',
-              reqContext: 'ambari_server',
-              cliType: 'PUT',
-              cliIP: '192.168.0.1',
-              agent: 'agent',
-              agentHost: 'localhost',
-              action: 'SERVICE_CHECK',
-              type: 'ambari-audit',
-              _version_: 4,
-              id: 'id1',
-              file: 'ambari-agent.log',
-              seq_num: 5,
-              bundle_id: 'b1',
-              case_id: 'c1',
-              log_message: 'User(user), Operation(SERVICE_CHECK)',
-              logfile_line_number: 6,
-              message_md5: '10293847561029384756',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '01928374650192837465',
-              event_dur_ms: 500,
-              _ttl_: '+7DAYS',
-              _expire_at_: '2017-05-29T11:30:22.531Z',
-              _router_field_: 10
-            }
-          ],
-          bargraph: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: 'n0',
-                    value: 1
-                  },
-                  {
-                    name: 'n1',
-                    value: 2
-                  }
-                ],
-                name: 'graph0'
-              },
-              {
-                dataCount: [
-                  {
-                    name: 'n2',
-                    value: 10
-                  },
-                  {
-                    name: 'n3',
-                    value: 20
-                  }
-                ],
-                name: 'graph1'
-              }
-            ]
-          },
-          components: {},
-          resources: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: 'n16',
-                    value: 800
-                  },
-                  {
-                    name: 'n17',
-                    value: 400
-                  }
-                ],
-                name: 'graph8'
-              },
-              {
-                dataCount: [
-                  {
-                    name: 'n18',
-                    value: 600
-                  },
-                  {
-                    name: 'n19',
-                    value: 300
-                  }
-                ],
-                name: 'graph9'
-              }
-            ]
-          },
-          schema: {
-            fields: {
-              'cluster': 'key_lower_case',
-              'ws_status': 'text_ws',
-              'reason': 'text_std_token_lower_case',
-              'agent': 'key_lower_case',
-              'Base URL': 'key_lower_case',
-              'sess': 'key_lower_case',
-              'type': 'key_lower_case',
-              'seq_num': 'tlong',
-              'path': 'key_lower_case',
-              'ugi': 'key_lower_case',
-              'host': 'key_lower_case',
-              'case_id': 'key_lower_case',
-              'action': 'key_lower_case',
-              'id': 'string',
-              'logger_name': 'key_lower_case',
-              'text': 'text_std_token_lower_case',
-              'Repo id': 'key_lower_case',
-              'Stack version': 'tdouble',
-              'logfile_line_number': 'tint',
-              'Status': 'tlong',
-              'RequestId': 'tlong',
-              'level': 'key_lower_case',
-              'resource': 'key_lower_case',
-              'resType': 'key_lower_case',
-              'ip': 'key_lower_case',
-              'Hostname': 'key_lower_case',
-              'Roles': 'key_lower_case',
-              'Stack': 'key_lower_case',
-              'req_self_id': 'key_lower_case',
-              'repoType': 'tint',
-              'VersionNote': 'key_lower_case',
-              'Cluster name': 'key_lower_case',
-              'bundle_id': 'key_lower_case',
-              'cliType': 'key_lower_case',
-              'reqContext': 'key_lower_case',
-              'ws_result_status': 'text_ws',
-              'proxyUsers': 'key_lower_case',
-              'RequestType': 'key_lower_case',
-              'Repositories': 'key_lower_case',
-              'logType': 'key_lower_case',
-              'Repo version': 'key_lower_case',
-              'TaskId': 'tlong',
-              'User': 'key_lower_case',
-              'access': 'key_lower_case',
-              'dst': 'key_lower_case',
-              'perm': 'key_lower_case',
-              'event_count': 'tlong',
-              'repo': 'key_lower_case',
-              'reqUser': 'key_lower_case',
-              'task_id': 'tlong',
-              'Operation': 'key_lower_case',
-              'Reason': 'key_lower_case',
-              'reqData': 'text_std_token_lower_case',
-              'result': 'tint',
-              'file': 'key_lower_case',
-              'log_message': 'key_lower_case',
-              'agentHost': 'key_lower_case',
-              'Component': 'key_lower_case',
-              'authType': 'key_lower_case',
-              'Display name': 'key_lower_case',
-              'policy': 'tlong',
-              'cliIP': 'key_lower_case',
-              'OS': 'key_lower_case',
-              'RemoteIp': 'key_lower_case',
-              'ResultStatus': 'tlong',
-              'evtTime': 'tdate',
-              'VersionNumber': 'key_lower_case',
-              'url': 'key_lower_case',
-              'req_caller_id': 'key_lower_case',
-              'enforcer': 'key_lower_case',
-              'Command': 'key_lower_case'
-            }
-          },
-          serviceload: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: 'n4',
-                    value: 1
-                  },
-                  {
-                    name: 'n5',
-                    value: 2
-                  }
-                ],
-                name: 'graph2'
-              },
-              {
-                dataCount: [
-                  {
-                    name: 'n6',
-                    value: 10
-                  },
-                  {
-                    name: 'n7',
-                    value: 20
-                  }
-                ],
-                name: 'graph3'
-              }
-            ]
-          }
-        }
-      },
-      public: {
-        config: {}
-      },
-      service: {
-        logs: {
-          logList: [
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h0',
-              level: 'WARN',
-              logtime: moment().valueOf(),
-              ip: '192.168.0.1',
-              logfile_line_number: 8,
-              type: 'ams_collector',
-              _version_: 9,
-              id: 'id2',
-              file: 'ambari-metrics-collector.log',
-              seq_num: 10,
-              bundle_id: 'b2',
-              case_id: 'c2',
-              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
-              message_md5: '1357908642',
-              cluster: 'cl2',
-              event_count: 5,
-              event_md5: '1908755391',
-              event_dur_ms: 200,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().add(5, 'd').valueOf(),
-              _router_field_: 20
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h1',
-              level: 'ERROR',
-              logtime: moment().subtract(2, 'd'),
-              ip: '192.168.0.2',
-              type: 'ams_collector',
-              _version_: 14,
-              id: 'id3',
-              file: 'ambari-metrics-collector.log',
-              seq_num: 15,
-              bundle_id: 'b3',
-              case_id: 'c3',
-              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1357908642',
-              cluster: 'cl3',
-              event_count: 2,
-              event_md5: '1029384756',
-              event_dur_ms: 700,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().add(3, 'd').valueOf(),
-              _router_field_: 5
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-              host: 'h1',
-              level: 'FATAL',
-              logtime: moment().subtract(10, 'd').valueOf(),
-              ip: '192.168.0.3',
-              type: 'ambari_agent',
-              _version_: 14,
-              id: 'id4',
-              file: 'ambari-agent.log',
-              seq_num: 15,
-              bundle_id: 'b4',
-              case_id: 'c4',
-              log_message: 'Connection refused.\nPlease check Ambari Agent.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl4',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 100,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().subtract(5, 'd').valueOf(),
-              _router_field_: 45
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
-              host: 'h1',
-              level: 'INFO',
-              logtime: moment().subtract(25, 'h').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_server',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_server.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl0',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().subtract(25, 'h').add(5, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
-              host: 'h1',
-              level: 'DEBUG',
-              logtime: moment().subtract(25, 'd').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_server',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_server.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().subtract(20, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
-              host: 'h1',
-              level: 'TRACE',
-              logtime: moment().subtract(2, 'h').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_client',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_client.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().subtract(2, 'h').add(5, 'd').valueOf(),
-              _router_field_: 55
-            },
-            {
-              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
-              host: 'h1',
-              level: 'UNKNOWN',
-              logtime: moment().subtract(31, 'd').valueOf(),
-              ip: '192.168.0.4',
-              type: 'zookeeper_client',
-              _version_: 14,
-              id: 'id4',
-              file: 'zookeeper_client.log',
-              seq_num: 15,
-              bundle_id: 'b0',
-              case_id: 'c0',
-              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
-              logfile_line_number: 16,
-              message_md5: '1038027502',
-              cluster: 'cl1',
-              event_count: 2,
-              event_md5: '67589403',
-              event_dur_ms: 1000,
-              _ttl_: '+5DAYS',
-              _expire_at_: moment().subtract(26, 'd').valueOf(),
-              _router_field_: 55
-            }
-          ],
-          aggregated: {
-            graphData: [
-              {
-                name: 'n0',
-                count: 100,
-                dataList: [
-                  {
-                    name: 'n1',
-                    count: 50,
-                    dataList: null
-                  },
-                  {
-                    name: 'n2',
-                    count: 200,
-                    dataList: null
-                  }
-                ]
-              },
-              {
-                name: 'n3',
-                count: 10,
-                dataList: [
-                  {
-                    name: 'n4',
-                    count: 5,
-                    dataList: null
-                  },
-                  {
-                    name: 'n5',
-                    count: 20,
-                    dataList: null
-                  }
-                ]
-              }
-            ]
-          },
-          components: {
-            count: {
-              anygraph: {
-                graphData: [
-                  {
-                    dataCount: [
-                      {
-                        name: 'n8',
-                        value: 50
-                      },
-                      {
-                        name: 'n9',
-                        value: 100
-                      }
-                    ],
-                    name: 'graph4'
-                  },
-                  {
-                    dataCount: [
-                      {
-                        name: 'n10',
-                        value: 5
-                      },
-                      {
-                        name: 'n11',
-                        value: 10
-                      }
-                    ],
-                    name: 'graph5'
-                  }
-                ]
-              }
-            },
-            levels: {
-              counts: {
-                vNodeList: [
-                  {
-                    name: 'ambari',
-                    type: 0,
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '10'
-                      },
-                      {
-                        name: 'WARN',
-                        value: '50'
-                      }
-                    ],
-                    childs: [
-                      {
-                        name: 'hdfs',
-                        type: 2,
-                        logLevelCount: [
-                          {
-                            name: 'ERROR',
-                            value: '10'
-                          },
-                          {
-                            name: 'WARN',
-                            value: '20'
-                          }
-                        ],
-                        isParent: false,
-                        isRoot: false
-                      },
-                      {
-                        name: 'zookeeper',
-                        type: 3,
-                        logLevelCount: [
-                          {
-                            name: 'ERROR',
-                            value: '20'
-                          },
-                          {
-                            name: 'WARN',
-                            value: '40'
-                          }
-                        ],
-                        isParent: false,
-                        isRoot: false
-                      }
-                    ],
-                    isParent: true,
-                    isRoot: false
-                  },
-                  {
-                    name: 'ambari_agent',
-                    type: 1,
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '100'
-                      },
-                      {
-                        name: 'WARN',
-                        value: '500'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ]
-              }
-            },
-            groupList: [
-              {
-                type: 'ams_collector'
-              },
-              {
-                type: 'ambari_agent'
-              },
-              {
-                type: 'zookeeper_server'
-              },
-              {
-                type: 'zookeeper_client'
-              }
-            ]
-          },
-          files: {
-            hostLogFiles: {
-              clusters: [
-                'c0',
-                'c1'
-              ],
-              services: [
-                'hdfs',
-                'zookeeper'
-              ]
-            }
-          },
-          histogram: {
-            graphData: [
-              {
-                dataCount: [
-                  {
-                    name: moment().toISOString(),
-                    value: '1000'
-                  },
-                  {
-                    name: moment().subtract(1, 'h').toISOString(),
-                    value: '2000'
-                  }
-                ],
-                name: 'ERROR'
-              },
-              {
-                dataCount: [
-                  {
-                    name: moment().toISOString(),
-                    value: '700'
-                  },
-                  {
-                    name: moment().subtract(1, 'h').toISOString(),
-                    value: '900'
-                  }
-                ],
-                name: 'WARN'
-              }
-            ]
-          },
-          hosts: {
-            groupList: [
-              {
-                host: 'h0'
-              },
-              {
-                host: 'h1'
-              }
-            ],
-            components: {
-              vNodeList: [
-                {
-                  name: 'ambari',
-                  type: 0,
-                  logLevelCount: [
-                    {
-                      name: 'ERROR',
-                      value: '100'
-                    },
-                    {
-                      name: 'WARN',
-                      value: '500'
-                    }
-                  ],
-                  childs: [
-                    {
-                      name: 'ambari_metrics',
-                      type: 2,
-                      logLevelCount: [
-                        {
-                          name: 'ERROR',
-                          value: '100'
-                        },
-                        {
-                          name: 'WARN',
-                          value: '200'
-                        }
-                      ],
-                      isParent: false,
-                      isRoot: false
-                    },
-                    {
-                      name: 'hbase',
-                      type: 3,
-                      logLevelCount: [
-                        {
-                          name: 'ERROR',
-                          value: '200'
-                        },
-                        {
-                          name: 'WARN',
-                          value: '400'
-                        }
-                      ],
-                      isParent: false,
-                      isRoot: false
-                    }
-                  ],
-                  isParent: true,
-                  isRoot: false
-                },
-                {
-                  name: 'ambari_server',
-                  type: 1,
-                  logLevelCount: [
-                    {
-                      name: 'ERROR',
-                      value: '1000'
-                    },
-                    {
-                      name: 'WARN',
-                      value: '5000'
-                    }
-                  ],
-                  isParent: false,
-                  isRoot: false
-                }
-              ]
-            },
-            count: {
-              getvCounts: [
-                {
-                  name: 'n20',
-                  count: 100
-                },
-                {
-                  name: 'n21',
-                  count: 200
-                }
-              ]
-            }
-          },
-          levels: {
-            counts: {
-              getvNameValues: [
-                {
-                  name: 'n22',
-                  count: 1000
-                },
-                {
-                  name: 'n23',
-                  count: 2000
-                }
-              ]
-            }
-          },
-          schema: {
-            fields: {
-              cluster: 'key_lower_case',
-              method: 'key_lower_case',
-              level: 'key_lower_case',
-              event_count: 'tlong',
-              ip: 'string',
-              rowtype: 'key_lower_case',
-              key_log_message: 'key_lower_case',
-              type: 'key_lower_case',
-              seq_num: 'tlong',
-              path: 'key_lower_case',
-              logtype: 'key_lower_case',
-              file: 'key_lower_case',
-              line_number: 'tint',
-              thread_name: 'key_lower_case',
-              bundle_id: 'key_lower_case',
-              host: 'key_lower_case',
-              case_id: 'key_lower_case',
-              log_message: 'text_std_token_lower_case',
-              id: 'string',
-              logger_name: 'key_lower_case',
-              text: 'text_std_token_lower_case',
-              logfile_line_number: 'tint',
-              logtime: 'tdate'
-            }
-          },
-          serviceconfig: '',
-          tree: {
-            vNodeList: [
-              {
-                name: 'h0',
-                type: 'H',
-                value: '1',
-                childs: [
-                  {
-                    name: 'ams_collector',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'WARN',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ],
-                logLevelCount: [
-                  {
-                    name: 'WARN',
-                    value: '1'
-                  }
-                ],
-                isParent: true,
-                isRoot: true
-              },
-              {
-                name: 'h1',
-                type: 'H',
-                value: '6',
-                childs: [
-                  {
-                    name: 'ams_collector',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'ERROR',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'ambari_agent',
-                    type: 'C',
-                    value: '1',
-                    logLevelCount: [
-                      {
-                        name: 'FATAL',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'zookeeper_server',
-                    type: 'C',
-                    value: '2',
-                    logLevelCount: [
-                      {
-                        name: 'INFO',
-                        value: '1'
-                      },
-                      {
-                        name: 'DEBUG',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  },
-                  {
-                    name: 'zookeeper_client',
-                    type: 'C',
-                    value: '2',
-                    logLevelCount: [
-                      {
-                        name: 'TRACE',
-                        value: '1'
-                      },
-                      {
-                        name: 'UNKNOWN',
-                        value: '1'
-                      }
-                    ],
-                    isParent: false,
-                    isRoot: false
-                  }
-                ],
-                logLevelCount: [
-                  {
-                    name: 'ERROR',
-                    value: '1'
-                  },
-                  {
-                    name: 'FATAL',
-                    value: '1'
-                  },
-                  {
-                    name: 'INFO',
-                    value: '1'
-                  },
-                  {
-                    name: 'DEBUG',
-                    value: '1'
-                  },
-                  {
-                    name: 'TRACE',
-                    value: '1'
-                  },
-                  {
-                    name: 'UNKNOWN',
-                    value: '1'
-                  }
-                ],
-                isParent: true,
-                isRoot: true
-              }
-            ]
-          },
-          truncated: {
-            logList: [
-              {
-                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-                host: 'h0',
-                level: 'WARN',
-                logtime: '2017-05-28T11:30:22.531Z',
-                ip: '192.168.0.1',
-                logfile_line_number: 8,
-                type: 'ams_collector',
-                _version_: 9,
-                id: 'id2',
-                file: 'ambari-metrics-collector.log',
-                seq_num: 10,
-                bundle_id: 'b2',
-                case_id: 'c2',
-                log_message: 'Connection refused',
-                message_md5: '1357908642',
-                cluster: 'cl2',
-                event_count: 5,
-                event_md5: '1908755391',
-                event_dur_ms: 200,
-                _ttl_: '+5DAYS',
-                _expire_at_: '2017-05-29T11:30:22.531Z',
-                _router_field_: 20
-              },
-              {
-                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
-                host: 'h1',
-                level: 'ERROR',
-                logtime: '2017-05-28T10:30:22.531Z',
-                ip: '192.168.0.2',
-                type: 'ams_collector',
-                _version_: 14,
-                id: 'id3',
-                file: 'ambari-metrics-collector.log',
-                seq_num: 15,
-                bundle_id: 'b3',
-                case_id: 'c3',
-                log_message: 'Connection refused',
-                logfile_line_number: 16,
-                message_md5: '1357908642',
-                cluster: 'cl3',
-                event_count: 2,
-                event_md5: '1029384756',
-                event_dur_ms: 700,
-                _ttl_: '+5DAYS',
-                _expire_at_: '2017-05-29T10:30:22.531Z',
-                _router_field_: 5
-              }
-            ]
-          },
-          clusters: [
-            'cl0',
-            'cl1',
-            'cl2',
-            'cl3',
-            'cl4'
-          ]
-        }
-      },
-      status: {
-        auditlogs: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          solrAliasReady: false,
-          configurationUploaded: true
-        },
-        servicelogs: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          configurationUploaded: true
-        },
-        userconfig: {
-          znodeReady: true,
-          solrCollectionReady: true,
-          configurationUploaded: true
-        }
-      },
-      userconfig: {
-        userConfigList: [
-          {
-            id: 'c0',
-            userName: 'admin',
-            filtername: 'service',
-            values: 'hdfs',
-            shareNameList: [
-              's0',
-              's1'
-            ],
-            rowType: 'history'
-          },
-          {
-            id: 'c0',
-            userName: 'user',
-            filtername: 'component',
-            values: 'namenode',
-            shareNameList: [
-              's2',
-              's3'
-            ],
-            rowType: 'history'
-          }
-        ],
-        filters: {
-          filter0: {
-            label: 'filter0',
-            hosts: [
-              'h0',
-              'h1'
-            ],
-            defaultLevels: [
-              'l0',
-              'l1'
-            ],
-            overrideLevels: [
-              'l2',
-              'l3'
-            ],
-            expiryTime: '2017-05-29T11:30:22.531Z'
-          },
-          filter1: {
-            label: 'filter1',
-            hosts: [
-              'h1',
-              'h2'
-            ],
-            defaultLevels: [
-              'l4',
-              'l5'
-            ],
-            overrideLevels: [
-              'l6',
-              'l7'
-            ],
-            expiryTime: '2017-05-30T11:30:22.531Z'
-          }
-        },
-        names: []
-      }
-    }
-  }
-};
\ No newline at end of file


[34/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
new file mode 100644
index 0000000..84c4abc
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/assets/i18n/en.json
@@ -0,0 +1,124 @@
+{
+  "common.title": "Log Search",
+
+  "modal.submit": "OK",
+  "modal.cancel": "Cancel",
+
+  "authorization.name": "Username",
+  "authorization.password": "Password",
+  "authorization.signIn": "Sign In",
+  "authorization.error": "<strong>Error!</strong> Invalid User credentials.<br>Please try again.",
+
+  "topMenu.undo": "Undo",
+  "topMenu.redo": "Redo",
+  "topMenu.refresh": "Refresh",
+  "topMenu.history": "History",
+
+  "filter.all": "All",
+
+  "filter.clusters": "Clusters",
+  "filter.message": "Message:",
+  "filter.components": "Components",
+  "filter.levels": "Levels",
+  "filter.capture": "Capture",
+  "filter.excluded": "Excluded",
+  "filter.hosts": "Hosts",
+
+  "filter.timeRange.1hr": "Last 1 hour",
+  "filter.timeRange.24hr": "Last 24 hours",
+  "filter.timeRange.today": "Today",
+  "filter.timeRange.yesterday": "Yesterday",
+  "filter.timeRange.7d": "Last 7 days",
+  "filter.timeRange.30d": "Last 30 days",
+  "filter.timeRange.thisMonth": "This month",
+  "filter.timeRange.lastMonth": "Last month",
+  "filter.timeRange.custom": "Custom range",
+
+  "levels.fatal": "Fatal",
+  "levels.error": "Error",
+  "levels.warn": "Warn",
+  "levels.info": "Info",
+  "levels.debug": "Debug",
+  "levels.trace": "Trace",
+  "levels.unknown": "Unknown",
+
+  "sorting.title": "Sort By",
+  "sorting.level.asc": "Ascending Level",
+  "sorting.level.desc": "Descending Level",
+  "sorting.component.asc": "Ascending Component",
+  "sorting.component.desc": "Descending Component",
+  "sorting.time.asc": "Ascending Time",
+  "sorting.time.desc": "Descending Time",
+
+  "pagination.title": "Rows per page:",
+  "pagination.numbers": "{{startIndex}}-{{endIndex}} of {{totalCount}}",
+
+  "logs.columns": "Columns",
+  "logs.status": "Status",
+  "logs.details": "Details",
+  "logs.message": "Message",
+  "logs.bundleId": "Bundle Id",
+  "logs.caseId": "Case Id",
+  "logs.cluster": "Cluster",
+  "logs.eventCount": "Event Count",
+  "logs.file": "File",
+  "logs.host": "Host",
+  "logs.id": "Id",
+  "logs.ip": "Ip",
+  "logs.level": "Level",
+  "logs.lineNumber": "Line Number",
+  "logs.logType": "Log Type",
+  "logs.logfileLineNumber": "Logfile Line Number",
+  "logs.loggerName": "Logger Name",
+  "logs.method": "Method",
+  "logs.path": "Path",
+  "logs.rowType": "Row Type",
+  "logs.threadName": "Thread",
+  "logs.type": "Type",
+  "logs.enforcer": "Access Enforcer",
+  "logs.accessType": "Access Type",
+  "logs.action": "Action",
+  "logs.agent": "Agent",
+  "logs.agentHost": "Agent Host",
+  "logs.authType": "Auth Type",
+  "logs.clientIp": "Client Ip",
+  "logs.clientType": "Client Type",
+  "logs.dst": "DST",
+  "logs.eventTime": "Event Time",
+  "logs.logMessage": "Log Message",
+  "logs.logTime": "Log Time",
+  "logs.perm": "Perm",
+  "logs.policy": "Policy",
+  "logs.proxyUsers": "Proxy Users",
+  "logs.reason": "Reason",
+  "logs.repo": "Repo",
+  "logs.repoType": "Repo Type",
+  "logs.reqCallerId": "Req Caller Id",
+  "logs.reqContext": "Req Context",
+  "logs.reqData": "Req Data",
+  "logs.reqSelfId": "Req Self Id",
+  "logs.resType": "Res Type",
+  "logs.resource": "Resource",
+  "logs.result": "Result",
+  "logs.session": "Session",
+  "logs.text": "Text",
+  "logs.ugi": "UGI",
+  "logs.user": "User",
+  "logs.baseUrl": "Base URL",
+  "logs.command": "Command",
+  "logs.component": "Component",
+  "logs.details": "Details",
+  "logs.displayName": "Display Name",
+  "logs.os": "OS",
+  "logs.repoId": "Repo Id",
+  "logs.repoVersion": "Repo Version",
+  "logs.repositories": "Repositories",
+  "logs.requestId": "Request Id",
+  "logs.resultStatus": "Result Status",
+  "logs.roles": "Roles",
+  "logs.stackVersion": "Stack Version",
+  "logs.stack": "Stack",
+  "logs.taskId": "Task Id",
+  "logs.versionNote": "Version Note",
+  "logs.versionNumber": "Version Number"
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/environments/environment.prod.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/environments/environment.prod.ts b/ambari-logsearch/ambari-logsearch-web/src/environments/environment.prod.ts
new file mode 100644
index 0000000..690ddb1
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/environments/environment.prod.ts
@@ -0,0 +1,21 @@
+/**
+ * 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.
+ */
+
+export const environment = {
+  production: true
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/environments/environment.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/environments/environment.ts b/ambari-logsearch/ambari-logsearch-web/src/environments/environment.ts
new file mode 100644
index 0000000..e34c67c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/environments/environment.ts
@@ -0,0 +1,21 @@
+/**
+ * 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.
+ */
+
+export const environment = {
+  production: false
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/favicon.ico
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/favicon.ico b/ambari-logsearch/ambari-logsearch-web/src/favicon.ico
new file mode 100644
index 0000000..62604cb
Binary files /dev/null and b/ambari-logsearch/ambari-logsearch-web/src/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/index.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/index.html b/ambari-logsearch/ambari-logsearch-web/src/index.html
new file mode 100644
index 0000000..f1c1562
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/index.html
@@ -0,0 +1,31 @@
+<!--
+  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>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>LogSearch</title>
+  <base href="/">
+
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <link rel="icon" type="image/x-icon" href="favicon.ico">
+</head>
+<body>
+  <app-root>Loading...</app-root>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main.ts b/ambari-logsearch/ambari-logsearch-web/src/main.ts
new file mode 100644
index 0000000..5e76e0d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/main.ts
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+import {enableProdMode} from '@angular/core';
+import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
+
+import {AppModule} from '@app/app.module';
+import {environment} from '@envs/environment';
+
+if (environment.production) {
+  enableProdMode();
+}
+
+platformBrowserDynamic().bootstrapModule(AppModule);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/404.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/404.html b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/404.html
deleted file mode 100644
index 76ac201..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/404.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
-  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>
-<html lang="en">
-    <head>
-    
-        <meta charset="utf-8">
-        <title>Page Not Found :(</title>
-        <style>
-            ::-moz-selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            ::selection {
-                background: #b3d4fc;
-                text-shadow: none;
-            }
-
-            html {
-                padding: 30px 10px;
-                font-size: 20px;
-                line-height: 1.4;
-                color: #737373;
-                background: #f0f0f0;
-                -webkit-text-size-adjust: 100%;
-                -ms-text-size-adjust: 100%;
-            }
-
-            html,
-            input {
-                font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-            }
-
-            body {
-                max-width: 500px;
-                _width: 500px;
-                padding: 30px 20px 50px;
-                border: 1px solid #b3b3b3;
-                border-radius: 4px;
-                margin: 0 auto;
-                box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
-                background: #fcfcfc;
-            }
-
-            h1 {
-                margin: 0 10px;
-                font-size: 50px;
-                text-align: center;
-            }
-
-            h1 span {
-                color: #bbb;
-            }
-
-            h3 {
-                margin: 1.5em 0 0.5em;
-            }
-
-            p {
-                margin: 1em 0;
-            }
-
-            ul {
-                padding: 0 0 0 40px;
-                margin: 1em 0;
-            }
-
-            .container {
-                max-width: 380px;
-                _width: 380px;
-                margin: 0 auto;
-            }
-
-            /* google search */
-
-            #goog-fixurl ul {
-                list-style: none;
-                padding: 0;
-                margin: 0;
-            }
-
-            #goog-fixurl form {
-                margin: 0;
-            }
-
-            #goog-wm-qt,
-            #goog-wm-sb {
-                border: 1px solid #bbb;
-                font-size: 16px;
-                line-height: normal;
-                vertical-align: top;
-                color: #444;
-                border-radius: 2px;
-            }
-
-            #goog-wm-qt {
-                width: 220px;
-                height: 20px;
-                padding: 5px;
-                margin: 5px 10px 0 0;
-                box-shadow: inset 0 1px 1px #ccc;
-            }
-
-            #goog-wm-sb {
-                display: inline-block;
-                height: 32px;
-                padding: 0 10px;
-                margin: 5px 0 0;
-                white-space: nowrap;
-                cursor: pointer;
-                background-color: #f5f5f5;
-                background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
-                -webkit-appearance: none;
-                -moz-appearance: none;
-                appearance: none;
-                *overflow: visible;
-                *display: inline;
-                *zoom: 1;
-            }
-
-            #goog-wm-sb:hover,
-            #goog-wm-sb:focus {
-                border-color: #aaa;
-                box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
-                background-color: #f8f8f8;
-            }
-
-            #goog-wm-qt:hover,
-            #goog-wm-qt:focus {
-                border-color: #105cb6;
-                outline: 0;
-                color: #222;
-            }
-
-            input::-moz-focus-inner {
-                padding: 0;
-                border: 0;
-            }
-        </style>
-    </head>
-    <body>
-        <div class="container">
-            <h1>Not found <span>:(</span></h1>
-            <p>Sorry, but the page you were trying to view does not exist.</p>
-            <p>It looks like this was the result of either:</p>
-            <ul>
-                <li>a mistyped address</li>
-                <li>an out-of-date link</li>
-            </ul>
-        </div>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_failure.jsp
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_failure.jsp b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_failure.jsp
deleted file mode 100644
index d00cbfb..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_failure.jsp
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-  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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<%
-	int ajaxReturnCode = 401;
-	//PropertiesUtil.getIntProperty("xa.ajax.auth.required.code", 401);
-	response.sendError(ajaxReturnCode);
-%>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Insert title here</title>
-</head>
-<body>
-Failure
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_success.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_success.html b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_success.html
deleted file mode 100644
index 52023ca..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/ajax_success.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-  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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Insert title here</title>
-</head>
-<body>
-Success
-</body>
-</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/favicon.ico
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/favicon.ico b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/favicon.ico
deleted file mode 100644
index 62604cb..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/favicon.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/FontAwesome.otf
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/FontAwesome.otf b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/FontAwesome.otf
deleted file mode 100644
index 7012545..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/FontAwesome.otf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.eot
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.eot b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.eot
deleted file mode 100644
index 0662cb9..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.eot and /dev/null differ


[33/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.svg
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.svg b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.svg
deleted file mode 100644
index 8e63114..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.svg
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!--
-   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 svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t1
 9 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28
 t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -1
 13 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t
 -22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 
 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 
 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17
 t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-1
 5 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.

<TRUNCATED>

[22/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/require-handlebars-plugin/Handlebars.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/require-handlebars-plugin/Handlebars.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/require-handlebars-plugin/Handlebars.js
deleted file mode 100644
index 2f5f321..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/require-handlebars-plugin/Handlebars.js
+++ /dev/null
@@ -1,2752 +0,0 @@
-// Begin AMD Wrapper
-define(function(){
-// End AMD Wrapper
-/*!
-
- handlebars v1.3.0
-
-Copyright (C) 2011 by Yehuda Katz
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-@license
-*/
-/* exported Handlebars */
-var Handlebars = (function() {
-// handlebars/safe-string.js
-var __module4__ = (function() {
-  "use strict";
-  var __exports__;
-  // Build out our basic SafeString type
-  function SafeString(string) {
-    this.string = string;
-  }
-
-  SafeString.prototype.toString = function() {
-    return "" + this.string;
-  };
-
-  __exports__ = SafeString;
-  return __exports__;
-})();
-
-// handlebars/utils.js
-var __module3__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__ = {};
-  /*jshint -W004 */
-  var SafeString = __dependency1__;
-
-  var escape = {
-    "&": "&amp;",
-    "<": "&lt;",
-    ">": "&gt;",
-    '"': "&quot;",
-    "'": "&#x27;",
-    "`": "&#x60;"
-  };
-
-  var badChars = /[&<>"'`]/g;
-  var possible = /[&<>"'`]/;
-
-  function escapeChar(chr) {
-    return escape[chr] || "&amp;";
-  }
-
-  function extend(obj, value) {
-    for(var key in value) {
-      if(Object.prototype.hasOwnProperty.call(value, key)) {
-        obj[key] = value[key];
-      }
-    }
-  }
-
-  __exports__.extend = extend;var toString = Object.prototype.toString;
-  __exports__.toString = toString;
-  // Sourced from lodash
-  // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
-  var isFunction = function(value) {
-    return typeof value === 'function';
-  };
-  // fallback for older versions of Chrome and Safari
-  if (isFunction(/x/)) {
-    isFunction = function(value) {
-      return typeof value === 'function' && toString.call(value) === '[object Function]';
-    };
-  }
-  var isFunction;
-  __exports__.isFunction = isFunction;
-  var isArray = Array.isArray || function(value) {
-    return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;
-  };
-  __exports__.isArray = isArray;
-
-  function escapeExpression(string) {
-    // don't escape SafeStrings, since they're already safe
-    if (string instanceof SafeString) {
-      return string.toString();
-    } else if (!string && string !== 0) {
-      return "";
-    }
-
-    // Force a string conversion as this will be done by the append regardless and
-    // the regex test will do this transparently behind the scenes, causing issues if
-    // an object's to string has escaped characters in it.
-    string = "" + string;
-
-    if(!possible.test(string)) { return string; }
-    return string.replace(badChars, escapeChar);
-  }
-
-  __exports__.escapeExpression = escapeExpression;function isEmpty(value) {
-    if (!value && value !== 0) {
-      return true;
-    } else if (isArray(value) && value.length === 0) {
-      return true;
-    } else {
-      return false;
-    }
-  }
-
-  __exports__.isEmpty = isEmpty;
-  return __exports__;
-})(__module4__);
-
-// handlebars/exception.js
-var __module5__ = (function() {
-  "use strict";
-  var __exports__;
-
-  var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
-
-  function Exception(message, node) {
-    var line;
-    if (node && node.firstLine) {
-      line = node.firstLine;
-
-      message += ' - ' + line + ':' + node.firstColumn;
-    }
-
-    var tmp = Error.prototype.constructor.call(this, message);
-
-    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
-    for (var idx = 0; idx < errorProps.length; idx++) {
-      this[errorProps[idx]] = tmp[errorProps[idx]];
-    }
-
-    if (line) {
-      this.lineNumber = line;
-      this.column = node.firstColumn;
-    }
-  }
-
-  Exception.prototype = new Error();
-
-  __exports__ = Exception;
-  return __exports__;
-})();
-
-// handlebars/base.js
-var __module2__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__ = {};
-  var Utils = __dependency1__;
-  var Exception = __dependency2__;
-
-  var VERSION = "1.3.0";
-  __exports__.VERSION = VERSION;var COMPILER_REVISION = 4;
-  __exports__.COMPILER_REVISION = COMPILER_REVISION;
-  var REVISION_CHANGES = {
-    1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
-    2: '== 1.0.0-rc.3',
-    3: '== 1.0.0-rc.4',
-    4: '>= 1.0.0'
-  };
-  __exports__.REVISION_CHANGES = REVISION_CHANGES;
-  var isArray = Utils.isArray,
-      isFunction = Utils.isFunction,
-      toString = Utils.toString,
-      objectType = '[object Object]';
-
-  function HandlebarsEnvironment(helpers, partials) {
-    this.helpers = helpers || {};
-    this.partials = partials || {};
-
-    registerDefaultHelpers(this);
-  }
-
-  __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {
-    constructor: HandlebarsEnvironment,
-
-    logger: logger,
-    log: log,
-
-    registerHelper: function(name, fn, inverse) {
-      if (toString.call(name) === objectType) {
-        if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }
-        Utils.extend(this.helpers, name);
-      } else {
-        if (inverse) { fn.not = inverse; }
-        this.helpers[name] = fn;
-      }
-    },
-
-    registerPartial: function(name, str) {
-      if (toString.call(name) === objectType) {
-        Utils.extend(this.partials,  name);
-      } else {
-        this.partials[name] = str;
-      }
-    }
-  };
-
-  function registerDefaultHelpers(instance) {
-    instance.registerHelper('helperMissing', function(arg) {
-      if(arguments.length === 2) {
-        return undefined;
-      } else {
-        throw new Exception("Missing helper: '" + arg + "'");
-      }
-    });
-
-    instance.registerHelper('blockHelperMissing', function(context, options) {
-      var inverse = options.inverse || function() {}, fn = options.fn;
-
-      if (isFunction(context)) { context = context.call(this); }
-
-      if(context === true) {
-        return fn(this);
-      } else if(context === false || context == null) {
-        return inverse(this);
-      } else if (isArray(context)) {
-        if(context.length > 0) {
-          return instance.helpers.each(context, options);
-        } else {
-          return inverse(this);
-        }
-      } else {
-        return fn(context);
-      }
-    });
-
-    instance.registerHelper('each', function(context, options) {
-      var fn = options.fn, inverse = options.inverse;
-      var i = 0, ret = "", data;
-
-      if (isFunction(context)) { context = context.call(this); }
-
-      if (options.data) {
-        data = createFrame(options.data);
-      }
-
-      if(context && typeof context === 'object') {
-        if (isArray(context)) {
-          for(var j = context.length; i<j; i++) {
-            if (data) {
-              data.index = i;
-              data.first = (i === 0);
-              data.last  = (i === (context.length-1));
-            }
-            ret = ret + fn(context[i], { data: data });
-          }
-        } else {
-          for(var key in context) {
-            if(context.hasOwnProperty(key)) {
-              if(data) {
-                data.key = key;
-                data.index = i;
-                data.first = (i === 0);
-              }
-              ret = ret + fn(context[key], {data: data});
-              i++;
-            }
-          }
-        }
-      }
-
-      if(i === 0){
-        ret = inverse(this);
-      }
-
-      return ret;
-    });
-
-    instance.registerHelper('if', function(conditional, options) {
-      if (isFunction(conditional)) { conditional = conditional.call(this); }
-
-      // Default behavior is to render the positive path if the value is truthy and not empty.
-      // The `includeZero` option may be set to treat the condtional as purely not empty based on the
-      // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
-      if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {
-        return options.inverse(this);
-      } else {
-        return options.fn(this);
-      }
-    });
-
-    instance.registerHelper('unless', function(conditional, options) {
-      return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});
-    });
-
-    instance.registerHelper('with', function(context, options) {
-      if (isFunction(context)) { context = context.call(this); }
-
-      if (!Utils.isEmpty(context)) return options.fn(context);
-    });
-
-    instance.registerHelper('log', function(context, options) {
-      var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;
-      instance.log(level, context);
-    });
-  }
-
-  var logger = {
-    methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },
-
-    // State enum
-    DEBUG: 0,
-    INFO: 1,
-    WARN: 2,
-    ERROR: 3,
-    level: 3,
-
-    // can be overridden in the host environment
-    log: function(level, obj) {
-      if (logger.level <= level) {
-        var method = logger.methodMap[level];
-        if (typeof console !== 'undefined' && console[method]) {
-          console[method].call(console, obj);
-        }
-      }
-    }
-  };
-  __exports__.logger = logger;
-  function log(level, obj) { logger.log(level, obj); }
-
-  __exports__.log = log;var createFrame = function(object) {
-    var obj = {};
-    Utils.extend(obj, object);
-    return obj;
-  };
-  __exports__.createFrame = createFrame;
-  return __exports__;
-})(__module3__, __module5__);
-
-// handlebars/runtime.js
-var __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {
-  "use strict";
-  var __exports__ = {};
-  var Utils = __dependency1__;
-  var Exception = __dependency2__;
-  var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;
-  var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;
-
-  function checkRevision(compilerInfo) {
-    var compilerRevision = compilerInfo && compilerInfo[0] || 1,
-        currentRevision = COMPILER_REVISION;
-
-    if (compilerRevision !== currentRevision) {
-      if (compilerRevision < currentRevision) {
-        var runtimeVersions = REVISION_CHANGES[currentRevision],
-            compilerVersions = REVISION_CHANGES[compilerRevision];
-        throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+
-              "Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");
-      } else {
-        // Use the embedded version info since the runtime doesn't know about this revision yet
-        throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+
-              "Please update your runtime to a newer version ("+compilerInfo[1]+").");
-      }
-    }
-  }
-
-  __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial
-
-  function template(templateSpec, env) {
-    if (!env) {
-      throw new Exception("No environment passed to template");
-    }
-
-    // Note: Using env.VM references rather than local var references throughout this section to allow
-    // for external users to override these as psuedo-supported APIs.
-    var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {
-      var result = env.VM.invokePartial.apply(this, arguments);
-      if (result != null) { return result; }
-
-      if (env.compile) {
-        var options = { helpers: helpers, partials: partials, data: data };
-        partials[name] = env.compile(partial, { data: data !== undefined }, env);
-        return partials[name](context, options);
-      } else {
-        throw new Exception("The partial " + name + " could not be compiled when running in runtime-only mode");
-      }
-    };
-
-    // Just add water
-    var container = {
-      escapeExpression: Utils.escapeExpression,
-      invokePartial: invokePartialWrapper,
-      programs: [],
-      program: function(i, fn, data) {
-        var programWrapper = this.programs[i];
-        if(data) {
-          programWrapper = program(i, fn, data);
-        } else if (!programWrapper) {
-          programWrapper = this.programs[i] = program(i, fn);
-        }
-        return programWrapper;
-      },
-      merge: function(param, common) {
-        var ret = param || common;
-
-        if (param && common && (param !== common)) {
-          ret = {};
-          Utils.extend(ret, common);
-          Utils.extend(ret, param);
-        }
-        return ret;
-      },
-      programWithDepth: env.VM.programWithDepth,
-      noop: env.VM.noop,
-      compilerInfo: null
-    };
-
-    return function(context, options) {
-      options = options || {};
-      var namespace = options.partial ? options : env,
-          helpers,
-          partials;
-
-      if (!options.partial) {
-        helpers = options.helpers;
-        partials = options.partials;
-      }
-      var result = templateSpec.call(
-            container,
-            namespace, context,
-            helpers,
-            partials,
-            options.data);
-
-      if (!options.partial) {
-        env.VM.checkRevision(container.compilerInfo);
-      }
-
-      return result;
-    };
-  }
-
-  __exports__.template = template;function programWithDepth(i, fn, data /*, $depth */) {
-    var args = Array.prototype.slice.call(arguments, 3);
-
-    var prog = function(context, options) {
-      options = options || {};
-
-      return fn.apply(this, [context, options.data || data].concat(args));
-    };
-    prog.program = i;
-    prog.depth = args.length;
-    return prog;
-  }
-
-  __exports__.programWithDepth = programWithDepth;function program(i, fn, data) {
-    var prog = function(context, options) {
-      options = options || {};
-
-      return fn(context, options.data || data);
-    };
-    prog.program = i;
-    prog.depth = 0;
-    return prog;
-  }
-
-  __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data) {
-    var options = { partial: true, helpers: helpers, partials: partials, data: data };
-
-    if(partial === undefined) {
-      throw new Exception("The partial " + name + " could not be found");
-    } else if(partial instanceof Function) {
-      return partial(context, options);
-    }
-  }
-
-  __exports__.invokePartial = invokePartial;function noop() { return ""; }
-
-  __exports__.noop = noop;
-  return __exports__;
-})(__module3__, __module5__, __module2__);
-
-// handlebars.runtime.js
-var __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {
-  "use strict";
-  var __exports__;
-  /*globals Handlebars: true */
-  var base = __dependency1__;
-
-  // Each of these augment the Handlebars object. No need to setup here.
-  // (This is done to easily share code between commonjs and browse envs)
-  var SafeString = __dependency2__;
-  var Exception = __dependency3__;
-  var Utils = __dependency4__;
-  var runtime = __dependency5__;
-
-  // For compatibility and usage outside of module systems, make the Handlebars object a namespace
-  var create = function() {
-    var hb = new base.HandlebarsEnvironment();
-
-    Utils.extend(hb, base);
-    hb.SafeString = SafeString;
-    hb.Exception = Exception;
-    hb.Utils = Utils;
-
-    hb.VM = runtime;
-    hb.template = function(spec) {
-      return runtime.template(spec, hb);
-    };
-
-    return hb;
-  };
-
-  var Handlebars = create();
-  Handlebars.create = create;
-
-  __exports__ = Handlebars;
-  return __exports__;
-})(__module2__, __module4__, __module5__, __module3__, __module6__);
-
-// handlebars/compiler/ast.js
-var __module7__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__;
-  var Exception = __dependency1__;
-
-  function LocationInfo(locInfo){
-    locInfo = locInfo || {};
-    this.firstLine   = locInfo.first_line;
-    this.firstColumn = locInfo.first_column;
-    this.lastColumn  = locInfo.last_column;
-    this.lastLine    = locInfo.last_line;
-  }
-
-  var AST = {
-    ProgramNode: function(statements, inverseStrip, inverse, locInfo) {
-      var inverseLocationInfo, firstInverseNode;
-      if (arguments.length === 3) {
-        locInfo = inverse;
-        inverse = null;
-      } else if (arguments.length === 2) {
-        locInfo = inverseStrip;
-        inverseStrip = null;
-      }
-
-      LocationInfo.call(this, locInfo);
-      this.type = "program";
-      this.statements = statements;
-      this.strip = {};
-
-      if(inverse) {
-        firstInverseNode = inverse[0];
-        if (firstInverseNode) {
-          inverseLocationInfo = {
-            first_line: firstInverseNode.firstLine,
-            last_line: firstInverseNode.lastLine,
-            last_column: firstInverseNode.lastColumn,
-            first_column: firstInverseNode.firstColumn
-          };
-          this.inverse = new AST.ProgramNode(inverse, inverseStrip, inverseLocationInfo);
-        } else {
-          this.inverse = new AST.ProgramNode(inverse, inverseStrip);
-        }
-        this.strip.right = inverseStrip.left;
-      } else if (inverseStrip) {
-        this.strip.left = inverseStrip.right;
-      }
-    },
-
-    MustacheNode: function(rawParams, hash, open, strip, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "mustache";
-      this.strip = strip;
-
-      // Open may be a string parsed from the parser or a passed boolean flag
-      if (open != null && open.charAt) {
-        // Must use charAt to support IE pre-10
-        var escapeFlag = open.charAt(3) || open.charAt(2);
-        this.escaped = escapeFlag !== '{' && escapeFlag !== '&';
-      } else {
-        this.escaped = !!open;
-      }
-
-      if (rawParams instanceof AST.SexprNode) {
-        this.sexpr = rawParams;
-      } else {
-        // Support old AST API
-        this.sexpr = new AST.SexprNode(rawParams, hash);
-      }
-
-      this.sexpr.isRoot = true;
-
-      // Support old AST API that stored this info in MustacheNode
-      this.id = this.sexpr.id;
-      this.params = this.sexpr.params;
-      this.hash = this.sexpr.hash;
-      this.eligibleHelper = this.sexpr.eligibleHelper;
-      this.isHelper = this.sexpr.isHelper;
-    },
-
-    SexprNode: function(rawParams, hash, locInfo) {
-      LocationInfo.call(this, locInfo);
-
-      this.type = "sexpr";
-      this.hash = hash;
-
-      var id = this.id = rawParams[0];
-      var params = this.params = rawParams.slice(1);
-
-      // a mustache is an eligible helper if:
-      // * its id is simple (a single part, not `this` or `..`)
-      var eligibleHelper = this.eligibleHelper = id.isSimple;
-
-      // a mustache is definitely a helper if:
-      // * it is an eligible helper, and
-      // * it has at least one parameter or hash segment
-      this.isHelper = eligibleHelper && (params.length || hash);
-
-      // if a mustache is an eligible helper but not a definite
-      // helper, it is ambiguous, and will be resolved in a later
-      // pass or at runtime.
-    },
-
-    PartialNode: function(partialName, context, strip, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type         = "partial";
-      this.partialName  = partialName;
-      this.context      = context;
-      this.strip = strip;
-    },
-
-    BlockNode: function(mustache, program, inverse, close, locInfo) {
-      LocationInfo.call(this, locInfo);
-
-      if(mustache.sexpr.id.original !== close.path.original) {
-        throw new Exception(mustache.sexpr.id.original + " doesn't match " + close.path.original, this);
-      }
-
-      this.type = 'block';
-      this.mustache = mustache;
-      this.program  = program;
-      this.inverse  = inverse;
-
-      this.strip = {
-        left: mustache.strip.left,
-        right: close.strip.right
-      };
-
-      (program || inverse).strip.left = mustache.strip.right;
-      (inverse || program).strip.right = close.strip.left;
-
-      if (inverse && !program) {
-        this.isInverse = true;
-      }
-    },
-
-    ContentNode: function(string, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "content";
-      this.string = string;
-    },
-
-    HashNode: function(pairs, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "hash";
-      this.pairs = pairs;
-    },
-
-    IdNode: function(parts, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "ID";
-
-      var original = "",
-          dig = [],
-          depth = 0;
-
-      for(var i=0,l=parts.length; i<l; i++) {
-        var part = parts[i].part;
-        original += (parts[i].separator || '') + part;
-
-        if (part === ".." || part === "." || part === "this") {
-          if (dig.length > 0) {
-            throw new Exception("Invalid path: " + original, this);
-          } else if (part === "..") {
-            depth++;
-          } else {
-            this.isScoped = true;
-          }
-        } else {
-          dig.push(part);
-        }
-      }
-
-      this.original = original;
-      this.parts    = dig;
-      this.string   = dig.join('.');
-      this.depth    = depth;
-
-      // an ID is simple if it only has one part, and that part is not
-      // `..` or `this`.
-      this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;
-
-      this.stringModeValue = this.string;
-    },
-
-    PartialNameNode: function(name, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "PARTIAL_NAME";
-      this.name = name.original;
-    },
-
-    DataNode: function(id, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "DATA";
-      this.id = id;
-    },
-
-    StringNode: function(string, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "STRING";
-      this.original =
-        this.string =
-        this.stringModeValue = string;
-    },
-
-    IntegerNode: function(integer, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "INTEGER";
-      this.original =
-        this.integer = integer;
-      this.stringModeValue = Number(integer);
-    },
-
-    BooleanNode: function(bool, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "BOOLEAN";
-      this.bool = bool;
-      this.stringModeValue = bool === "true";
-    },
-
-    CommentNode: function(comment, locInfo) {
-      LocationInfo.call(this, locInfo);
-      this.type = "comment";
-      this.comment = comment;
-    }
-  };
-
-  // Must be exported as an object rather than the root of the module as the jison lexer
-  // most modify the object to operate properly.
-  __exports__ = AST;
-  return __exports__;
-})(__module5__);
-
-// handlebars/compiler/parser.js
-var __module9__ = (function() {
-  "use strict";
-  var __exports__;
-  /* jshint ignore:start */
-  /* Jison generated parser */
-  var handlebars = (function(){
-  var parser = {trace: function trace() { },
-  yy: {},
-  symbols_: {"error":2,"root":3,"statements":4,"EOF":5,"program":6,"simpleInverse":7,"statement":8,"openInverse":9,"closeBlock":10,"openBlock":11,"mustache":12,"partial":13,"CONTENT":14,"COMMENT":15,"OPEN_BLOCK":16,"sexpr":17,"CLOSE":18,"OPEN_INVERSE":19,"OPEN_ENDBLOCK":20,"path":21,"OPEN":22,"OPEN_UNESCAPED":23,"CLOSE_UNESCAPED":24,"OPEN_PARTIAL":25,"partialName":26,"partial_option0":27,"sexpr_repetition0":28,"sexpr_option0":29,"dataName":30,"param":31,"STRING":32,"INTEGER":33,"BOOLEAN":34,"OPEN_SEXPR":35,"CLOSE_SEXPR":36,"hash":37,"hash_repetition_plus0":38,"hashSegment":39,"ID":40,"EQUALS":41,"DATA":42,"pathSegments":43,"SEP":44,"$accept":0,"$end":1},
-  terminals_: {2:"error",5:"EOF",14:"CONTENT",15:"COMMENT",16:"OPEN_BLOCK",18:"CLOSE",19:"OPEN_INVERSE",20:"OPEN_ENDBLOCK",22:"OPEN",23:"OPEN_UNESCAPED",24:"CLOSE_UNESCAPED",25:"OPEN_PARTIAL",32:"STRING",33:"INTEGER",34:"BOOLEAN",35:"OPEN_SEXPR",36:"CLOSE_SEXPR",40:"ID",41:"EQUALS",42:"DATA",44:"SEP"},
-  productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[31,3],[37,1],[39,3],[26,1],[26,1],[26,1],[30,2],[21,1],[43,3],[43,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[38,1],[38,2]],
-  performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {
-
-  var $0 = $$.length - 1;
-  switch (yystate) {
-  case 1: return new yy.ProgramNode($$[$0-1], this._$);
-  break;
-  case 2: return new yy.ProgramNode([], this._$);
-  break;
-  case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0], this._$);
-  break;
-  case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0], this._$);
-  break;
-  case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], [], this._$);
-  break;
-  case 6:this.$ = new yy.ProgramNode($$[$0], this._$);
-  break;
-  case 7:this.$ = new yy.ProgramNode([], this._$);
-  break;
-  case 8:this.$ = new yy.ProgramNode([], this._$);
-  break;
-  case 9:this.$ = [$$[$0]];
-  break;
-  case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1];
-  break;
-  case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0], this._$);
-  break;
-  case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0], this._$);
-  break;
-  case 13:this.$ = $$[$0];
-  break;
-  case 14:this.$ = $$[$0];
-  break;
-  case 15:this.$ = new yy.ContentNode($$[$0], this._$);
-  break;
-  case 16:this.$ = new yy.CommentNode($$[$0], this._$);
-  break;
-  case 17:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 18:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])};
-  break;
-  case 20:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 21:this.$ = new yy.MustacheNode($$[$0-1], null, $$[$0-2], stripFlags($$[$0-2], $$[$0]), this._$);
-  break;
-  case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0]), this._$);
-  break;
-  case 23:this.$ = stripFlags($$[$0-1], $$[$0]);
-  break;
-  case 24:this.$ = new yy.SexprNode([$$[$0-2]].concat($$[$0-1]), $$[$0], this._$);
-  break;
-  case 25:this.$ = new yy.SexprNode([$$[$0]], null, this._$);
-  break;
-  case 26:this.$ = $$[$0];
-  break;
-  case 27:this.$ = new yy.StringNode($$[$0], this._$);
-  break;
-  case 28:this.$ = new yy.IntegerNode($$[$0], this._$);
-  break;
-  case 29:this.$ = new yy.BooleanNode($$[$0], this._$);
-  break;
-  case 30:this.$ = $$[$0];
-  break;
-  case 31:$$[$0-1].isHelper = true; this.$ = $$[$0-1];
-  break;
-  case 32:this.$ = new yy.HashNode($$[$0], this._$);
-  break;
-  case 33:this.$ = [$$[$0-2], $$[$0]];
-  break;
-  case 34:this.$ = new yy.PartialNameNode($$[$0], this._$);
-  break;
-  case 35:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0], this._$), this._$);
-  break;
-  case 36:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0], this._$));
-  break;
-  case 37:this.$ = new yy.DataNode($$[$0], this._$);
-  break;
-  case 38:this.$ = new yy.IdNode($$[$0], this._$);
-  break;
-  case 39: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2];
-  break;
-  case 40:this.$ = [{part: $$[$0]}];
-  break;
-  case 43:this.$ = [];
-  break;
-  case 44:$$[$0-1].push($$[$0]);
-  break;
-  case 47:this.$ = [$$[$0]];
-  break;
-  case 48:$$[$0-1].push($$[$0]);
-  break;
-  }
-  },
-  table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:29,21:24,30:25,40:[1,28
 ],42:[1,27],43:26},{17:30,21:24,30:25,40:[1,28],42:[1,27],43:26},{17:31,21:24,30:25,40:[1,28],42:[1,27],43:26},{21:33,26:32,32:[1,34],33:[1,35],40:[1,28],43:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,40:[1,28],42:[1,27],43:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,43],24:[2,43],28:43,32:[2,43],33:[2,43],34:[2,43],35:[2,43],36:[2,43],40:[2,43],42:[2,43]},{18:[2,25],24:[2,25],36:[2,25]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],35:[2,38],36:[2,38],40:[2,38],42:[2,38],44:[1,44]},{21:45,40:[1,28],43:26},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],42:[2,40],44:[2,40]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,41],21:50,27:
 49,40:[1,28],43:26},{18:[2,34],40:[2,34]},{18:[2,35],40:[2,35]},{18:[2,36],40:[2,36]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,40:[1,28],43:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,45],21:56,24:[2,45],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:[1,61],36:[2,45],37:55,38:62,39:63,40:[1,64],42:[1,27],43:26},{40:[1,65]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],35:[2,37],36:[2,37],40:[2,37],42:[2,37]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:
 [2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,66]},{18:[2,42]},{18:[1,67]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24],36:[2,24]},{18:[2,44],24:[2,44],32:[2,44],33:[2,44],34:[2,44],35:[2,44],36:[2,44],40:[2,44],42:[2,44]},{18:[2,46],24:[2,46],36:[2,46]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],35:[2,26],36:[2,26],40:[2,26],42:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],35:[2,27],36:[2,27],40:[2,27],42:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],35:[2,28],36:[2,28],40:[2,28],42:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],35:[2,29],36:[2,29],40:[2,29],42:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],35:[2,30],36:[2,30],40:[2,30],42:[2,30]},{17:68,21:24,30:25,40:[1,28],42:[1,27],43:26},{18:[2,32],24:[2
 ,32],36:[2,32],39:69,40:[1,70]},{18:[2,47],24:[2,47],36:[2,47],40:[2,47]},{18:[2,40],24:[2,40],32:[2,40],33:[2,40],34:[2,40],35:[2,40],36:[2,40],40:[2,40],41:[1,71],42:[2,40],44:[2,40]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],35:[2,39],36:[2,39],40:[2,39],42:[2,39],44:[2,39]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{36:[1,72]},{18:[2,48],24:[2,48],36:[2,48],40:[2,48]},{41:[1,71]},{21:56,30:60,31:73,32:[1,57],33:[1,58],34:[1,59],35:[1,61],40:[1,28],42:[1,27],43:26},{18:[2,31],24:[2,31],32:[2,31],33:[2,31],34:[2,31],35:[2,31],36:[2,31],40:[2,31],42:[2,31]},{18:[2,33],24:[2,33],36:[2,33],40:[2,33]}],
-  defaultActions: {3:[2,2],16:[2,1],50:[2,42]},
-  parseError: function parseError(str, hash) {
-      throw new Error(str);
-  },
-  parse: function parse(input) {
-      var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-      this.lexer.setInput(input);
-      this.lexer.yy = this.yy;
-      this.yy.lexer = this.lexer;
-      this.yy.parser = this;
-      if (typeof this.lexer.yylloc == "undefined")
-          this.lexer.yylloc = {};
-      var yyloc = this.lexer.yylloc;
-      lstack.push(yyloc);
-      var ranges = this.lexer.options && this.lexer.options.ranges;
-      if (typeof this.yy.parseError === "function")
-          this.parseError = this.yy.parseError;
-      function popStack(n) {
-          stack.length = stack.length - 2 * n;
-          vstack.length = vstack.length - n;
-          lstack.length = lstack.length - n;
-      }
-      function lex() {
-          var token;
-          token = self.lexer.lex() || 1;
-          if (typeof token !== "number") {
-              token = self.symbols_[token] || token;
-          }
-          return token;
-      }
-      var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-          state = stack[stack.length - 1];
-          if (this.defaultActions[state]) {
-              action = this.defaultActions[state];
-          } else {
-              if (symbol === null || typeof symbol == "undefined") {
-                  symbol = lex();
-              }
-              action = table[state] && table[state][symbol];
-          }
-          if (typeof action === "undefined" || !action.length || !action[0]) {
-              var errStr = "";
-              if (!recovering) {
-                  expected = [];
-                  for (p in table[state])
-                      if (this.terminals_[p] && p > 2) {
-                          expected.push("'" + this.terminals_[p] + "'");
-                      }
-                  if (this.lexer.showPosition) {
-                      errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-                  } else {
-                      errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'");
-                  }
-                  this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});
-              }
-          }
-          if (action[0] instanceof Array && action.length > 1) {
-              throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-          }
-          switch (action[0]) {
-          case 1:
-              stack.push(symbol);
-              vstack.push(this.lexer.yytext);
-              lstack.push(this.lexer.yylloc);
-              stack.push(action[1]);
-              symbol = null;
-              if (!preErrorSymbol) {
-                  yyleng = this.lexer.yyleng;
-                  yytext = this.lexer.yytext;
-                  yylineno = this.lexer.yylineno;
-                  yyloc = this.lexer.yylloc;
-                  if (recovering > 0)
-                      recovering--;
-              } else {
-                  symbol = preErrorSymbol;
-                  preErrorSymbol = null;
-              }
-              break;
-          case 2:
-              len = this.productions_[action[1]][1];
-              yyval.$ = vstack[vstack.length - len];
-              yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};
-              if (ranges) {
-                  yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
-              }
-              r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
-              if (typeof r !== "undefined") {
-                  return r;
-              }
-              if (len) {
-                  stack = stack.slice(0, -1 * len * 2);
-                  vstack = vstack.slice(0, -1 * len);
-                  lstack = lstack.slice(0, -1 * len);
-              }
-              stack.push(this.productions_[action[1]][0]);
-              vstack.push(yyval.$);
-              lstack.push(yyval._$);
-              newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-              stack.push(newState);
-              break;
-          case 3:
-              return true;
-          }
-      }
-      return true;
-  }
-  };
-
-
-  function stripFlags(open, close) {
-    return {
-      left: open.charAt(2) === '~',
-      right: close.charAt(0) === '~' || close.charAt(1) === '~'
-    };
-  }
-
-  /* Jison generated lexer */
-  var lexer = (function(){
-  var lexer = ({EOF:1,
-  parseError:function parseError(str, hash) {
-          if (this.yy.parser) {
-              this.yy.parser.parseError(str, hash);
-          } else {
-              throw new Error(str);
-          }
-      },
-  setInput:function (input) {
-          this._input = input;
-          this._more = this._less = this.done = false;
-          this.yylineno = this.yyleng = 0;
-          this.yytext = this.matched = this.match = '';
-          this.conditionStack = ['INITIAL'];
-          this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};
-          if (this.options.ranges) this.yylloc.range = [0,0];
-          this.offset = 0;
-          return this;
-      },
-  input:function () {
-          var ch = this._input[0];
-          this.yytext += ch;
-          this.yyleng++;
-          this.offset++;
-          this.match += ch;
-          this.matched += ch;
-          var lines = ch.match(/(?:\r\n?|\n).*/g);
-          if (lines) {
-              this.yylineno++;
-              this.yylloc.last_line++;
-          } else {
-              this.yylloc.last_column++;
-          }
-          if (this.options.ranges) this.yylloc.range[1]++;
-
-          this._input = this._input.slice(1);
-          return ch;
-      },
-  unput:function (ch) {
-          var len = ch.length;
-          var lines = ch.split(/(?:\r\n?|\n)/g);
-
-          this._input = ch + this._input;
-          this.yytext = this.yytext.substr(0, this.yytext.length-len-1);
-          //this.yyleng -= len;
-          this.offset -= len;
-          var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-          this.match = this.match.substr(0, this.match.length-1);
-          this.matched = this.matched.substr(0, this.matched.length-1);
-
-          if (lines.length-1) this.yylineno -= lines.length-1;
-          var r = this.yylloc.range;
-
-          this.yylloc = {first_line: this.yylloc.first_line,
-            last_line: this.yylineno+1,
-            first_column: this.yylloc.first_column,
-            last_column: lines ?
-                (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:
-                this.yylloc.first_column - len
-            };
-
-          if (this.options.ranges) {
-              this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-          }
-          return this;
-      },
-  more:function () {
-          this._more = true;
-          return this;
-      },
-  less:function (n) {
-          this.unput(this.match.slice(n));
-      },
-  pastInput:function () {
-          var past = this.matched.substr(0, this.matched.length - this.match.length);
-          return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
-      },
-  upcomingInput:function () {
-          var next = this.match;
-          if (next.length < 20) {
-              next += this._input.substr(0, 20-next.length);
-          }
-          return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, "");
-      },
-  showPosition:function () {
-          var pre = this.pastInput();
-          var c = new Array(pre.length + 1).join("-");
-          return pre + this.upcomingInput() + "\n" + c+"^";
-      },
-  next:function () {
-          if (this.done) {
-              return this.EOF;
-          }
-          if (!this._input) this.done = true;
-
-          var token,
-              match,
-              tempMatch,
-              index,
-              col,
-              lines;
-          if (!this._more) {
-              this.yytext = '';
-              this.match = '';
-          }
-          var rules = this._currentRules();
-          for (var i=0;i < rules.length; i++) {
-              tempMatch = this._input.match(this.rules[rules[i]]);
-              if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-                  match = tempMatch;
-                  index = i;
-                  if (!this.options.flex) break;
-              }
-          }
-          if (match) {
-              lines = match[0].match(/(?:\r\n?|\n).*/g);
-              if (lines) this.yylineno += lines.length;
-              this.yylloc = {first_line: this.yylloc.last_line,
-                             last_line: this.yylineno+1,
-                             first_column: this.yylloc.last_column,
-                             last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length};
-              this.yytext += match[0];
-              this.match += match[0];
-              this.matches = match;
-              this.yyleng = this.yytext.length;
-              if (this.options.ranges) {
-                  this.yylloc.range = [this.offset, this.offset += this.yyleng];
-              }
-              this._more = false;
-              this._input = this._input.slice(match[0].length);
-              this.matched += match[0];
-              token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);
-              if (this.done && this._input) this.done = false;
-              if (token) return token;
-              else return;
-          }
-          if (this._input === "") {
-              return this.EOF;
-          } else {
-              return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(),
-                      {text: "", token: null, line: this.yylineno});
-          }
-      },
-  lex:function lex() {
-          var r = this.next();
-          if (typeof r !== 'undefined') {
-              return r;
-          } else {
-              return this.lex();
-          }
-      },
-  begin:function begin(condition) {
-          this.conditionStack.push(condition);
-      },
-  popState:function popState() {
-          return this.conditionStack.pop();
-      },
-  _currentRules:function _currentRules() {
-          return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;
-      },
-  topState:function () {
-          return this.conditionStack[this.conditionStack.length-2];
-      },
-  pushState:function begin(condition) {
-          this.begin(condition);
-      }});
-  lexer.options = {};
-  lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {
-
-
-  function strip(start, end) {
-    return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);
-  }
-
-
-  var YYSTATE=YY_START
-  switch($avoiding_name_collisions) {
-  case 0:
-                                     if(yy_.yytext.slice(-2) === "\\\\") {
-                                       strip(0,1);
-                                       this.begin("mu");
-                                     } else if(yy_.yytext.slice(-1) === "\\") {
-                                       strip(0,1);
-                                       this.begin("emu");
-                                     } else {
-                                       this.begin("mu");
-                                     }
-                                     if(yy_.yytext) return 14;
-
-  break;
-  case 1:return 14;
-  break;
-  case 2:
-                                     this.popState();
-                                     return 14;
-
-  break;
-  case 3:strip(0,4); this.popState(); return 15;
-  break;
-  case 4:return 35;
-  break;
-  case 5:return 36;
-  break;
-  case 6:return 25;
-  break;
-  case 7:return 16;
-  break;
-  case 8:return 20;
-  break;
-  case 9:return 19;
-  break;
-  case 10:return 19;
-  break;
-  case 11:return 23;
-  break;
-  case 12:return 22;
-  break;
-  case 13:this.popState(); this.begin('com');
-  break;
-  case 14:strip(3,5); this.popState(); return 15;
-  break;
-  case 15:return 22;
-  break;
-  case 16:return 41;
-  break;
-  case 17:return 40;
-  break;
-  case 18:return 40;
-  break;
-  case 19:return 44;
-  break;
-  case 20:// ignore whitespace
-  break;
-  case 21:this.popState(); return 24;
-  break;
-  case 22:this.popState(); return 18;
-  break;
-  case 23:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 32;
-  break;
-  case 24:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 32;
-  break;
-  case 25:return 42;
-  break;
-  case 26:return 34;
-  break;
-  case 27:return 34;
-  break;
-  case 28:return 33;
-  break;
-  case 29:return 40;
-  break;
-  case 30:yy_.yytext = strip(1,2); return 40;
-  break;
-  case 31:return 'INVALID';
-  break;
-  case 32:return 5;
-  break;
-  }
-  };
-  lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/];
-  lexer.conditions = {"mu":{"rules":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[3],"inclusive":false},"INITIAL":{"rules":[0,1,32],"inclusive":true}};
-  return lexer;})()
-  parser.lexer = lexer;
-  function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;
-  return new Parser;
-  })();__exports__ = handlebars;
-  /* jshint ignore:end */
-  return __exports__;
-})();
-
-// handlebars/compiler/base.js
-var __module8__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__ = {};
-  var parser = __dependency1__;
-  var AST = __dependency2__;
-
-  __exports__.parser = parser;
-
-  function parse(input) {
-    // Just return if an already-compile AST was passed in.
-    if(input.constructor === AST.ProgramNode) { return input; }
-
-    parser.yy = AST;
-    return parser.parse(input);
-  }
-
-  __exports__.parse = parse;
-  return __exports__;
-})(__module9__, __module7__);
-
-// handlebars/compiler/compiler.js
-var __module10__ = (function(__dependency1__) {
-  "use strict";
-  var __exports__ = {};
-  var Exception = __dependency1__;
-
-  function Compiler() {}
-
-  __exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a
-  // function in a context. This is necessary for mustache compatibility, which
-  // requires that context functions in blocks are evaluated by blockHelperMissing,
-  // and then proceed as if the resulting value was provided to blockHelperMissing.
-
-  Compiler.prototype = {
-    compiler: Compiler,
-
-    disassemble: function() {
-      var opcodes = this.opcodes, opcode, out = [], params, param;
-
-      for (var i=0, l=opcodes.length; i<l; i++) {
-        opcode = opcodes[i];
-
-        if (opcode.opcode === 'DECLARE') {
-          out.push("DECLARE " + opcode.name + "=" + opcode.value);
-        } else {
-          params = [];
-          for (var j=0; j<opcode.args.length; j++) {
-            param = opcode.args[j];
-            if (typeof param === "string") {
-              param = "\"" + param.replace("\n", "\\n") + "\"";
-            }
-            params.push(param);
-          }
-          out.push(opcode.opcode + " " + params.join(" "));
-        }
-      }
-
-      return out.join("\n");
-    },
-
-    equals: function(other) {
-      var len = this.opcodes.length;
-      if (other.opcodes.length !== len) {
-        return false;
-      }
-
-      for (var i = 0; i < len; i++) {
-        var opcode = this.opcodes[i],
-            otherOpcode = other.opcodes[i];
-        if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {
-          return false;
-        }
-        for (var j = 0; j < opcode.args.length; j++) {
-          if (opcode.args[j] !== otherOpcode.args[j]) {
-            return false;
-          }
-        }
-      }
-
-      len = this.children.length;
-      if (other.children.length !== len) {
-        return false;
-      }
-      for (i = 0; i < len; i++) {
-        if (!this.children[i].equals(other.children[i])) {
-          return false;
-        }
-      }
-
-      return true;
-    },
-
-    guid: 0,
-
-    compile: function(program, options) {
-      this.opcodes = [];
-      this.children = [];
-      this.depths = {list: []};
-      this.options = options;
-
-      // These changes will propagate to the other compiler components
-      var knownHelpers = this.options.knownHelpers;
-      this.options.knownHelpers = {
-        'helperMissing': true,
-        'blockHelperMissing': true,
-        'each': true,
-        'if': true,
-        'unless': true,
-        'with': true,
-        'log': true
-      };
-      if (knownHelpers) {
-        for (var name in knownHelpers) {
-          this.options.knownHelpers[name] = knownHelpers[name];
-        }
-      }
-
-      return this.accept(program);
-    },
-
-    accept: function(node) {
-      var strip = node.strip || {},
-          ret;
-      if (strip.left) {
-        this.opcode('strip');
-      }
-
-      ret = this[node.type](node);
-
-      if (strip.right) {
-        this.opcode('strip');
-      }
-
-      return ret;
-    },
-
-    program: function(program) {
-      var statements = program.statements;
-
-      for(var i=0, l=statements.length; i<l; i++) {
-        this.accept(statements[i]);
-      }
-      this.isSimple = l === 1;
-
-      this.depths.list = this.depths.list.sort(function(a, b) {
-        return a - b;
-      });
-
-      return this;
-    },
-
-    compileProgram: function(program) {
-      var result = new this.compiler().compile(program, this.options);
-      var guid = this.guid++, depth;
-
-      this.usePartial = this.usePartial || result.usePartial;
-
-      this.children[guid] = result;
-
-      for(var i=0, l=result.depths.list.length; i<l; i++) {
-        depth = result.depths.list[i];
-
-        if(depth < 2) { continue; }
-        else { this.addDepth(depth - 1); }
-      }
-
-      return guid;
-    },
-
-    block: function(block) {
-      var mustache = block.mustache,
-          program = block.program,
-          inverse = block.inverse;
-
-      if (program) {
-        program = this.compileProgram(program);
-      }
-
-      if (inverse) {
-        inverse = this.compileProgram(inverse);
-      }
-
-      var sexpr = mustache.sexpr;
-      var type = this.classifySexpr(sexpr);
-
-      if (type === "helper") {
-        this.helperSexpr(sexpr, program, inverse);
-      } else if (type === "simple") {
-        this.simpleSexpr(sexpr);
-
-        // now that the simple mustache is resolved, we need to
-        // evaluate it by executing `blockHelperMissing`
-        this.opcode('pushProgram', program);
-        this.opcode('pushProgram', inverse);
-        this.opcode('emptyHash');
-        this.opcode('blockValue');
-      } else {
-        this.ambiguousSexpr(sexpr, program, inverse);
-
-        // now that the simple mustache is resolved, we need to
-        // evaluate it by executing `blockHelperMissing`
-        this.opcode('pushProgram', program);
-        this.opcode('pushProgram', inverse);
-        this.opcode('emptyHash');
-        this.opcode('ambiguousBlockValue');
-      }
-
-      this.opcode('append');
-    },
-
-    hash: function(hash) {
-      var pairs = hash.pairs, pair, val;
-
-      this.opcode('pushHash');
-
-      for(var i=0, l=pairs.length; i<l; i++) {
-        pair = pairs[i];
-        val  = pair[1];
-
-        if (this.options.stringParams) {
-          if(val.depth) {
-            this.addDepth(val.depth);
-          }
-          this.opcode('getContext', val.depth || 0);
-          this.opcode('pushStringParam', val.stringModeValue, val.type);
-
-          if (val.type === 'sexpr') {
-            // Subexpressions get evaluated and passed in
-            // in string params mode.
-            this.sexpr(val);
-          }
-        } else {
-          this.accept(val);
-        }
-
-        this.opcode('assignToHash', pair[0]);
-      }
-      this.opcode('popHash');
-    },
-
-    partial: function(partial) {
-      var partialName = partial.partialName;
-      this.usePartial = true;
-
-      if(partial.context) {
-        this.ID(partial.context);
-      } else {
-        this.opcode('push', 'depth0');
-      }
-
-      this.opcode('invokePartial', partialName.name);
-      this.opcode('append');
-    },
-
-    content: function(content) {
-      this.opcode('appendContent', content.string);
-    },
-
-    mustache: function(mustache) {
-      this.sexpr(mustache.sexpr);
-
-      if(mustache.escaped && !this.options.noEscape) {
-        this.opcode('appendEscaped');
-      } else {
-        this.opcode('append');
-      }
-    },
-
-    ambiguousSexpr: function(sexpr, program, inverse) {
-      var id = sexpr.id,
-          name = id.parts[0],
-          isBlock = program != null || inverse != null;
-
-      this.opcode('getContext', id.depth);
-
-      this.opcode('pushProgram', program);
-      this.opcode('pushProgram', inverse);
-
-      this.opcode('invokeAmbiguous', name, isBlock);
-    },
-
-    simpleSexpr: function(sexpr) {
-      var id = sexpr.id;
-
-      if (id.type === 'DATA') {
-        this.DATA(id);
-      } else if (id.parts.length) {
-        this.ID(id);
-      } else {
-        // Simplified ID for `this`
-        this.addDepth(id.depth);
-        this.opcode('getContext', id.depth);
-        this.opcode('pushContext');
-      }
-
-      this.opcode('resolvePossibleLambda');
-    },
-
-    helperSexpr: function(sexpr, program, inverse) {
-      var params = this.setupFullMustacheParams(sexpr, program, inverse),
-          name = sexpr.id.parts[0];
-
-      if (this.options.knownHelpers[name]) {
-        this.opcode('invokeKnownHelper', params.length, name);
-      } else if (this.options.knownHelpersOnly) {
-        throw new Exception("You specified knownHelpersOnly, but used the unknown helper " + name, sexpr);
-      } else {
-        this.opcode('invokeHelper', params.length, name, sexpr.isRoot);
-      }
-    },
-
-    sexpr: function(sexpr) {
-      var type = this.classifySexpr(sexpr);
-
-      if (type === "simple") {
-        this.simpleSexpr(sexpr);
-      } else if (type === "helper") {
-        this.helperSexpr(sexpr);
-      } else {
-        this.ambiguousSexpr(sexpr);
-      }
-    },
-
-    ID: function(id) {
-      this.addDepth(id.depth);
-      this.opcode('getContext', id.depth);
-
-      var name = id.parts[0];
-      if (!name) {
-        this.opcode('pushContext');
-      } else {
-        this.opcode('lookupOnContext', id.parts[0]);
-      }
-
-      for(var i=1, l=id.parts.length; i<l; i++) {
-        this.opcode('lookup', id.parts[i]);
-      }
-    },
-
-    DATA: function(data) {
-      this.options.data = true;
-      if (data.id.isScoped || data.id.depth) {
-        throw new Exception('Scoped data references are not supported: ' + data.original, data);
-      }
-
-      this.opcode('lookupData');
-      var parts = data.id.parts;
-      for(var i=0, l=parts.length; i<l; i++) {
-        this.opcode('lookup', parts[i]);
-      }
-    },
-
-    STRING: function(string) {
-      this.opcode('pushString', string.string);
-    },
-
-    INTEGER: function(integer) {
-      this.opcode('pushLiteral', integer.integer);
-    },
-
-    BOOLEAN: function(bool) {
-      this.opcode('pushLiteral', bool.bool);
-    },
-
-    comment: function() {},
-
-    // HELPERS
-    opcode: function(name) {
-      this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });
-    },
-
-    declare: function(name, value) {
-      this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });
-    },
-
-    addDepth: function(depth) {
-      if(depth === 0) { return; }
-
-      if(!this.depths[depth]) {
-        this.depths[depth] = true;
-        this.depths.list.push(depth);
-      }
-    },
-
-    classifySexpr: function(sexpr) {
-      var isHelper   = sexpr.isHelper;
-      var isEligible = sexpr.eligibleHelper;
-      var options    = this.options;
-
-      // if ambiguous, we can possibly resolve the ambiguity now
-      if (isEligible && !isHelper) {
-        var name = sexpr.id.parts[0];
-
-        if (options.knownHelpers[name]) {
-          isHelper = true;
-        } else if (options.knownHelpersOnly) {
-          isEligible = false;
-        }
-      }
-
-      if (isHelper) { return "helper"; }
-      else if (isEligible) { return "ambiguous"; }
-      else { return "simple"; }
-    },
-
-    pushParams: function(params) {
-      var i = params.length, param;
-
-      while(i--) {
-        param = params[i];
-
-        if(this.options.stringParams) {
-          if(param.depth) {
-            this.addDepth(param.depth);
-          }
-
-          this.opcode('getContext', param.depth || 0);
-          this.opcode('pushStringParam', param.stringModeValue, param.type);
-
-          if (param.type === 'sexpr') {
-            // Subexpressions get evaluated and passed in
-            // in string params mode.
-            this.sexpr(param);
-          }
-        } else {
-          this[param.type](param);
-        }
-      }
-    },
-
-    setupFullMustacheParams: function(sexpr, program, inverse) {
-      var params = sexpr.params;
-      this.pushParams(params);
-
-      this.opcode('pushProgram', program);
-      this.opcode('pushProgram', inverse);
-
-      if (sexpr.hash) {
-        this.hash(sexpr.hash);
-      } else {
-        this.opcode('emptyHash');
-      }
-
-      return params;
-    }
-  };
-
-  function precompile(input, options, env) {
-    if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
-      throw new Exception("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + input);
-    }
-
-    options = options || {};
-    if (!('data' in options)) {
-      options.data = true;
-    }
-
-    var ast = env.parse(input);
-    var environment = new env.Compiler().compile(ast, options);
-    return new env.JavaScriptCompiler().compile(environment, options);
-  }
-
-  __exports__.precompile = precompile;function compile(input, options, env) {
-    if (input == null || (typeof input !== 'string' && input.constructor !== env.AST.ProgramNode)) {
-      throw new Exception("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + input);
-    }
-
-    options = options || {};
-
-    if (!('data' in options)) {
-      options.data = true;
-    }
-
-    var compiled;
-
-    function compileInput() {
-      var ast = env.parse(input);
-      var environment = new env.Compiler().compile(ast, options);
-      var templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
-      return env.template(templateSpec);
-    }
-
-    // Template is only compiled on first use and cached after that point.
-    return function(context, options) {
-      if (!compiled) {
-        compiled = compileInput();
-      }
-      return compiled.call(this, context, options);
-    };
-  }
-
-  __exports__.compile = compile;
-  return __exports__;
-})(__module5__);
-
-// handlebars/compiler/javascript-compiler.js
-var __module11__ = (function(__dependency1__, __dependency2__) {
-  "use strict";
-  var __exports__;
-  var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;
-  var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;
-  var log = __dependency1__.log;
-  var Exception = __dependency2__;
-
-  function Literal(value) {
-    this.value = value;
-  }
-
-  function JavaScriptCompiler() {}
-
-  JavaScriptCompiler.prototype = {
-    // PUBLIC API: You can override these methods in a subclass to provide
-    // alternative compiled forms for name lookup and buffering semantics
-    nameLookup: function(parent, name /* , type*/) {
-      var wrap,
-          ret;
-      if (parent.indexOf('depth') === 0) {
-        wrap = true;
-      }
-
-      if (/^[0-9]+$/.test(name)) {
-        ret = parent + "[" + name + "]";
-      } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
-        ret = parent + "." + name;
-      }
-      else {
-        ret = parent + "['" + name + "']";
-      }
-
-      if (wrap) {
-        return '(' + parent + ' && ' + ret + ')';
-      } else {
-        return ret;
-      }
-    },
-
-    compilerInfo: function() {
-      var revision = COMPILER_REVISION,
-          versions = REVISION_CHANGES[revision];
-      return "this.compilerInfo = ["+revision+",'"+versions+"'];\n";
-    },
-
-    appendToBuffer: function(string) {
-      if (this.environment.isSimple) {
-        return "return " + string + ";";
-      } else {
-        return {
-          appendToBuffer: true,
-          content: string,
-          toString: function() { return "buffer += " + string + ";"; }
-        };
-      }
-    },
-
-    initializeBuffer: function() {
-      return this.quotedString("");
-    },
-
-    namespace: "Handlebars",
-    // END PUBLIC API
-
-    compile: function(environment, options, context, asObject) {
-      this.environment = environment;
-      this.options = options || {};
-
-      log('debug', this.environment.disassemble() + "\n\n");
-
-      this.name = this.environment.name;
-      this.isChild = !!context;
-      this.context = context || {
-        programs: [],
-        environments: [],
-        aliases: { }
-      };
-
-      this.preamble();
-
-      this.stackSlot = 0;
-      this.stackVars = [];
-      this.registers = { list: [] };
-      this.hashes = [];
-      this.compileStack = [];
-      this.inlineStack = [];
-
-      this.compileChildren(environment, options);
-
-      var opcodes = environment.opcodes, opcode;
-
-      this.i = 0;
-
-      for(var l=opcodes.length; this.i<l; this.i++) {
-        opcode = opcodes[this.i];
-
-        if(opcode.opcode === 'DECLARE') {
-          this[opcode.name] = opcode.value;
-        } else {
-          this[opcode.opcode].apply(this, opcode.args);
-        }
-
-        // Reset the stripNext flag if it was not set by this operation.
-        if (opcode.opcode !== this.stripNext) {
-          this.stripNext = false;
-        }
-      }
-
-      // Flush any trailing content that might be pending.
-      this.pushSource('');
-
-      if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
-        throw new Exception('Compile completed with content left on stack');
-      }
-
-      return this.createFunctionContext(asObject);
-    },
-
-    preamble: function() {
-      var out = [];
-
-      if (!this.isChild) {
-        var namespace = this.namespace;
-
-        var copies = "helpers = this.merge(helpers, " + namespace + ".helpers);";
-        if (this.environment.usePartial) { copies = copies + " partials = this.merge(partials, " + namespace + ".partials);"; }
-        if (this.options.data) { copies = copies + " data = data || {};"; }
-        out.push(copies);
-      } else {
-        out.push('');
-      }
-
-      if (!this.environment.isSimple) {
-        out.push(", buffer = " + this.initializeBuffer());
-      } else {
-        out.push("");
-      }
-
-      // track the last context pushed into place to allow skipping the
-      // getContext opcode when it would be a noop
-      this.lastContext = 0;
-      this.source = out;
-    },
-
-    createFunctionContext: function(asObject) {
-      var locals = this.stackVars.concat(this.registers.list);
-
-      if(locals.length > 0) {
-        this.source[1] = this.source[1] + ", " + locals.join(", ");
-      }
-
-      // Generate minimizer alias mappings
-      if (!this.isChild) {
-        for (var alias in this.context.aliases) {
-          if (this.context.aliases.hasOwnProperty(alias)) {
-            this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];
-          }
-        }
-      }
-
-      if (this.source[1]) {
-        this.source[1] = "var " + this.source[1].substring(2) + ";";
-      }
-
-      // Merge children
-      if (!this.isChild) {
-        this.source[1] += '\n' + this.context.programs.join('\n') + '\n';
-      }
-
-      if (!this.environment.isSimple) {
-        this.pushSource("return buffer;");
-      }
-
-      var params = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"];
-
-      for(var i=0, l=this.environment.depths.list.length; i<l; i++) {
-        params.push("depth" + this.environment.depths.list[i]);
-      }
-
-      // Perform a second pass over the output to merge content when possible
-      var source = this.mergeSource();
-
-      if (!this.isChild) {
-        source = this.compilerInfo()+source;
-      }
-
-      if (asObject) {
-        params.push(source);
-
-        return Function.apply(this, params);
-      } else {
-        var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\n  ' + source + '}';
-        log('debug', functionSource + "\n\n");
-        return functionSource;
-      }
-    },
-    mergeSource: function() {
-      // WARN: We are not handling the case where buffer is still populated as the source should
-      // not have buffer append operations as their final action.
-      var source = '',
-          buffer;
-      for (var i = 0, len = this.source.length; i < len; i++) {
-        var line = this.source[i];
-        if (line.appendToBuffer) {
-          if (buffer) {
-            buffer = buffer + '\n    + ' + line.content;
-          } else {
-            buffer = line.content;
-          }
-        } else {
-          if (buffer) {
-            source += 'buffer += ' + buffer + ';\n  ';
-            buffer = undefined;
-          }
-          source += line + '\n  ';
-        }
-      }
-      return source;
-    },
-
-    // [blockValue]
-    //
-    // On stack, before: hash, inverse, program, value
-    // On stack, after: return value of blockHelperMissing
-    //
-    // The purpose of this opcode is to take a block of the form
-    // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and
-    // replace it on the stack with the result of properly
-    // invoking blockHelperMissing.
-    blockValue: function() {
-      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
-      var params = ["depth0"];
-      this.setupParams(0, params);
-
-      this.replaceStack(function(current) {
-        params.splice(1, 0, current);
-        return "blockHelperMissing.call(" + params.join(", ") + ")";
-      });
-    },
-
-    // [ambiguousBlockValue]
-    //
-    // On stack, before: hash, inverse, program, value
-    // Compiler value, before: lastHelper=value of last found helper, if any
-    // On stack, after, if no lastHelper: same as [blockValue]
-    // On stack, after, if lastHelper: value
-    ambiguousBlockValue: function() {
-      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';
-
-      var params = ["depth0"];
-      this.setupParams(0, params);
-
-      var current = this.topStack();
-      params.splice(1, 0, current);
-
-      this.pushSource("if (!" + this.lastHelper + ") { " + current + " = blockHelperMissing.call(" + params.join(", ") + "); }");
-    },
-
-    // [appendContent]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    //
-    // Appends the string value of `content` to the current buffer
-    appendContent: function(content) {
-      if (this.pendingContent) {
-        content = this.pendingContent + content;
-      }
-      if (this.stripNext) {
-        content = content.replace(/^\s+/, '');
-      }
-
-      this.pendingContent = content;
-    },
-
-    // [strip]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    //
-    // Removes any trailing whitespace from the prior content node and flags
-    // the next operation for stripping if it is a content node.
-    strip: function() {
-      if (this.pendingContent) {
-        this.pendingContent = this.pendingContent.replace(/\s+$/, '');
-      }
-      this.stripNext = 'strip';
-    },
-
-    // [append]
-    //
-    // On stack, before: value, ...
-    // On stack, after: ...
-    //
-    // Coerces `value` to a String and appends it to the current buffer.
-    //
-    // If `value` is truthy, or 0, it is coerced into a string and appended
-    // Otherwise, the empty string is appended
-    append: function() {
-      // Force anything that is inlined onto the stack so we don't have duplication
-      // when we examine local
-      this.flushInline();
-      var local = this.popStack();
-      this.pushSource("if(" + local + " || " + local + " === 0) { " + this.appendToBuffer(local) + " }");
-      if (this.environment.isSimple) {
-        this.pushSource("else { " + this.appendToBuffer("''") + " }");
-      }
-    },
-
-    // [appendEscaped]
-    //
-    // On stack, before: value, ...
-    // On stack, after: ...
-    //
-    // Escape `value` and append it to the buffer
-    appendEscaped: function() {
-      this.context.aliases.escapeExpression = 'this.escapeExpression';
-
-      this.pushSource(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"));
-    },
-
-    // [getContext]
-    //
-    // On stack, before: ...
-    // On stack, after: ...
-    // Compiler value, after: lastContext=depth
-    //
-    // Set the value of the `lastContext` compiler value to the depth
-    getContext: function(depth) {
-      if(this.lastContext !== depth) {
-        this.lastContext = depth;
-      }
-    },
-
-    // [lookupOnContext]
-    //
-    // On stack, before: ...
-    // On stack, after: currentContext[name], ...
-    //
-    // Looks up the value of `name` on the current context and pushes
-    // it onto the stack.
-    lookupOnContext: function(name) {
-      this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));
-    },
-
-    // [pushContext]
-    //
-    // On stack, before: ...
-    // On stack, after: currentContext, ...
-    //
-    // Pushes the value of the current context onto the stack.
-    pushContext: function() {
-      this.pushStackLiteral('depth' + this.lastContext);
-    },
-
-    // [resolvePossibleLambda]
-    //
-    // On stack, before: value, ...
-    // On stack, after: resolved value, ...
-    //
-    // If the `value` is a lambda, replace it on the stack by
-    // the return value of the lambda
-    resolvePossibleLambda: function() {
-      this.context.aliases.functionType = '"function"';
-
-      this.replaceStack(function(current) {
-        return "typeof " + current + " === functionType ? " + current + ".apply(depth0) : " + current;
-      });
-    },
-
-    // [lookup]
-    //
-    // On stack, before: value, ...
-    // On stack, after: value[name], ...
-    //
-    // Replace the value on the stack with the result of looking
-    // up `name` on `value`
-    lookup: function(name) {
-      this.replaceStack(function(current) {
-        return current + " == null || " + current + " === false ? " + current + " : " + this.nameLookup(current, name, 'context');
-      });
-    },
-
-    // [lookupData]
-    //
-    // On stack, before: ...
-    // On stack, after: data, ...
-    //
-    // Push the data lookup operator
-    lookupData: function() {
-      this.pushStackLiteral('data');
-    },
-
-    // [pushStringParam]
-    //
-    // On stack, before: ...
-    // On stack, after: string, currentContext, ...
-    //
-    // This opcode is designed for use in string mode, which
-    // provides the string value of a parameter along with its
-    // depth rather than resolving it immediately.
-    pushStringParam: function(string, type) {
-      this.pushStackLiteral('depth' + this.lastContext);
-
-      this.pushString(type);
-
-      // If it's a subexpression, the string result
-      // will be pushed after this opcode.
-      if (type !== 'sexpr') {
-        if (typeof string === 'string') {
-          this.pushString(string);
-        } else {
-          this.pushStackLiteral(string);
-        }
-      }
-    },
-
-    emptyHash: function() {
-      this.pushStackLiteral('{}');
-
-      if (this.options.stringParams) {
-        this.push('{}'); // hashContexts
-        this.push('{}'); // hashTypes
-      }
-    },
-    pushHash: function() {
-      if (this.hash) {
-        this.hashes.push(this.hash);
-      }
-      this.hash = {values: [], types: [], contexts: []};
-    },
-    popHash: function() {
-      var hash = this.hash;
-      this.hash = this.hashes.pop();
-
-      if (this.options.stringParams) {
-        this.push('{' + hash.contexts.join(',') + '}');
-        this.push('{' + hash.types.join(',') + '}');
-      }
-
-      this.push('{\n    ' + hash.values.join(',\n    ') + '\n  }');
-    },
-
-    // [pushString]
-    //
-    // On stack, before: ...
-    // On stack, after: quotedString(string), ...
-    //
-    // Push a quoted version of `string` onto the stack
-    pushString: function(string) {
-      this.pushStackLiteral(this.quotedString(string));
-    },
-
-    // [push]
-    //
-    // On stack, before: ...
-    // On stack, after: expr, ...
-    //
-    // Push an expression onto the stack
-    push: function(expr) {
-      this.inlineStack.push(expr);
-      return expr;
-    },
-
-    // [pushLiteral]
-    //
-    // On stack, before: ...
-    // On stack, after: value, ...
-    //
-    // Pushes a value onto the stack. This operation prevents
-    // the compiler from creating a temporary variable to hold
-    // it.
-    pushLiteral: function(value) {
-      this.pushStackLiteral(value);
-    },
-
-    // [pushProgram]
-    //
-    // On stack, before: ...
-    // On stack, after: program(guid), ...
-    //
-    // Push a program expression onto the stack. This takes
-    // a compile-time guid and converts it into a runtime-accessible
-    // expression.
-    pushProgram: function(guid) {
-      if (guid != null) {
-        this.pushStackLiteral(this.programExpression(guid));
-      } else {
-        this.pushStackLiteral(null);
-      }
-    },
-
-    // [invokeHelper]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of helper invocation
-    //
-    // Pops off the helper's parameters, invokes the helper,
-    // and pushes the helper's return value onto the stack.
-    //
-    // If the helper is not found, `helperMissing` is called.
-    invokeHelper: function(paramSize, name, isRoot) {
-      this.context.aliases.helperMissing = 'helpers.helperMissing';
-      this.useRegister('helper');
-
-      var helper = this.lastHelper = this.setupHelper(paramSize, name, true);
-      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-
-      var lookup = 'helper = ' + helper.name + ' || ' + nonHelper;
-      if (helper.paramsInit) {
-        lookup += ',' + helper.paramsInit;
-      }
-
-      this.push(
-        '('
-          + lookup
-          + ',helper '
-            + '? helper.call(' + helper.callParams + ') '
-            + ': helperMissing.call(' + helper.helperMissingParams + '))');
-
-      // Always flush subexpressions. This is both to prevent the compounding size issue that
-      // occurs when the code has to be duplicated for inlining and also to prevent errors
-      // due to the incorrect options object being passed due to the shared register.
-      if (!isRoot) {
-        this.flushInline();
-      }
-    },
-
-    // [invokeKnownHelper]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of helper invocation
-    //
-    // This operation is used when the helper is known to exist,
-    // so a `helperMissing` fallback is not required.
-    invokeKnownHelper: function(paramSize, name) {
-      var helper = this.setupHelper(paramSize, name);
-      this.push(helper.name + ".call(" + helper.callParams + ")");
-    },
-
-    // [invokeAmbiguous]
-    //
-    // On stack, before: hash, inverse, program, params..., ...
-    // On stack, after: result of disambiguation
-    //
-    // This operation is used when an expression like `{{foo}}`
-    // is provided, but we don't know at compile-time whether it
-    // is a helper or a path.
-    //
-    // This operation emits more code than the other options,
-    // and can be avoided by passing the `knownHelpers` and
-    // `knownHelpersOnly` flags at compile-time.
-    invokeAmbiguous: function(name, helperCall) {
-      this.context.aliases.functionType = '"function"';
-      this.useRegister('helper');
-
-      this.emptyHash();
-      var helper = this.setupHelper(0, name, helperCall);
-
-      var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
-
-      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');
-      var nextStack = this.nextStack();
-
-      if (helper.paramsInit) {
-        this.pushSource(helper.paramsInit);
-      }
-      this.pushSource('if (helper = ' + helperName + ') { ' + nextStack + ' = helper.call(' + helper.callParams + '); }');
-      this.pushSource('else { helper = ' + nonHelper + '; ' + nextStack + ' = typeof helper === functionType ? helper.call(' + helper.callParams + ') : helper; }');
-    },
-
-    // [invokePartial]
-    //
-    // On stack, before: context, ...
-    // On stack after: result of partial invocation
-    //
-    // This operation pops off a context, invokes a partial with that context,
-    // and pushes the result of the invocation back.
-    invokePartial: function(name) {
-      var params = [this.nameLookup('partials', name, 'partial'), "'" + name + "'", this.popStack(), "helpers", "partials"];
-
-      if (this.options.data) {
-        params.push("data");
-      }
-
-      this.context.aliases.self = "this";
-      this.push("self.invokePartial(" + params.join(", ") + ")");
-    },
-
-    // [assignToHash]
-    //
-    // On stack, before: value, hash, ...
-    // On stack, after: hash, ...
-    //
-    // Pops a value and hash off the stack, assigns `hash[key] = value`
-    // and pushes the hash back onto the stack.
-    assignToHash: function(key) {
-      var value = this.popStack(),
-          context,
-          type;
-
-      if (this.options.stringParams) {
-        type = this.popStack();
-        context = this.popStack();
-      }
-
-      var hash = this.hash;
-      if (context) {
-        hash.contexts.push("'" + key + "': " + context);
-      }
-      if (type) {
-        hash.types.push("'" + key + "': " + type);
-      }
-      hash.values.push("'" + key + "': (" + value + ")");
-    },
-
-    // HELPERS
-
-    compiler: JavaScriptCompiler,
-
-    compileChildren: function(environment, options) {
-      var children = environment.children, child, compiler;
-
-      for(var i=0, l=children.length; i<l; i++) {
-        child = children[i];
-        compiler = new this.compiler();
-
-        var index = this.matchExistingProgram(child);
-
-        if (index == null) {
-          this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children
-          index = this.context.programs.length;
-          child.index = index;
-          child.name = 'program' + index;
-          this.context.programs[index] = compiler.compile(child, options, this.context);
-          this.context.environments[index] = child;
-        } else {
-          child.index = index;
-          child.name = 'program' + index;
-        }
-      }
-    },
-    matchExistingProgram: function(child) {
-      for (var i = 0, len = this.context.environments.length; i < len; i++) {
-        var environment = this.context.environments[i];
-        if (environment && environment.equals(child)) {
-          return i;
-        }
-      }
-    },
-
-    programExpression: function(guid) {
-      this.context.aliases.self = "this";
-
-      if(guid == null) {
-        return "self.noop";
-      }
-
-      var child = this.environment.children[guid],
-          depths = child.depths.list, depth;
-
-      var programParams = [child.index, child.name, "data"];
-
-      for(var i=0, l = depths.length; i<l; i++) {
-        depth = depths[i];
-
-        if(depth === 1) { programParams.push("depth0"); }
-        else { programParams.push("depth" + (depth - 1)); }
-      }
-
-      return (depths.length === 0 ? "self.program(" : "self.programWithDepth(") + programParams.join(", ") + ")";
-    },
-
-    register: function(name, val) {
-      this.useRegister(name);
-      this.pushSource(name + " = " + val + ";");
-    },
-
-    useRegister: function(name) {
-      if(!this.registers[name]) {
-        this.registers[name] = true;
-        this.registers.list.push(name);
-      }
-    },
-
-    pushStackLiteral: function(item) {
-      return this.push(new Literal(item));
-    },
-
-    pushSource: function(source) {
-      if (this.pendingContent) {
-        this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent)));
-        this.pendingContent = undefined;
-      }
-
-      if (source) {
-        this.source.push(source);
-      }
-    },
-
-    pushStack: function(item) {
-      this.flushInline();
-
-      var stack = this.incrStack();
-      if (item) {
-        this.pushSource(stack + " = " + item + ";");
-      }
-      this.compileStack.push(stack);
-      return stack;
-    },
-
-    replaceStack: function(callback) {
-      var prefix = '',
-          inline = this.isInline(),
-          stack,
-          createdStack,
-          usedLiteral;
-
-      // If we are currently inline then we want to merge the inline statement into the
-      // replacement statement via ','
-      if (inline) {
-        var top = this.popStack(true);
-
-        if (top instanceof Literal) {
-          // Literals do not need to be inlined
-          stack = top.value;
-          usedLiteral = true;
-        } else {
-          // Get or create the current stack name for use by the inline
-          createdStack = !this.stackSlot;
-          var name = !createdStack ? this.topStackName() : this.incrStack();
-
-          prefix = '(' + this.push(name) + ' = ' + top + '),';
-          stack = this.topStack();
-        }
-      } else {
-        stack = this.topStack();
-      }
-
-      var item = callback.call(this, stack);
-
-      if (inline) {
-        if (!usedLiteral) {
-          this.popStack();
-        }
-        if (createdStack) {
-          this.stackSlot--;
-        }
-        this.push('(' + prefix + item + ')');
-      } else {
-        // Prevent modification of the context depth variable. Through replaceStack
-        if (!/^stack/.test(stack)) {
-          stack = this.nextStack();
-        }
-
-        this.pushSource(stack + " = (" + prefix + item + ");");
-      }
-      return stack;
-    },
-
-    nextStack: function() {
-      return this.pushStack();
-    },
-
-    incrStack: function() {
-      this.stackSlot++;
-      if(this.stackSlot > this.stackVars.length) { this.stackVars.push("stack" + this.stackSlot); }
-      return this.topStackName();
-    },
-    topStackName: function() {
-      return "stack" + this.stackSlot;
-    },
-    flushInline: function() {
-      var inlineStack = this.inlineStack;
-      if (inlineStack.length) {
-        this.inlineStack = [];
-        for (var i = 0, len = inlineStack.length; i < len; i++) {
-          var entry = inlineStack[i];
-          if (entry instanceof Literal) {
-            this.compileStack.push(entry);
-          } else {
-            this.pushStack(entry);
-          }
-        }
-      }
-    },
-    isInline: function() {
-      return this.inlineStack.length;
-    },
-
-    popStack: function(wrapped) {
-      var inline = this.isInline(),
-          item = (inline ? this.inlineStack : this.compileStack).pop();
-
-      if (!wrapped && (item instanceof Literal)) {
-        return item.value;
-      } else {
-        if (!inline) {
-          if (!this.stackSlot) {
-            throw new Exception('Invalid stack pop');
-          }
-          this.stackSlot--;
-        }
-        return item;
-      }
-    },
-
-    topStack: function(wrapped) {
-      var stack = (this.isInline() ? this.inlineStack : this.compileStack),
-          item = stack[stack.length - 1];
-
-      if (!wrapped && (item instanceof Literal)) {
-        return item.value;
-      } else {
-        return item;
-      }
-    },
-
-    quotedString: function(str) {
-      return '"' + str
-        .replace(/\\/g, '\\\\')
-        .replace(/"/g, '\\"')
-        .replace(/\n/g, '\\n')
-        .replace(/\r/g, '\\r')
-        .replace(/\u2028/g, '\\u2028')   // Per Ecma-262 7.3 + 7.8.4
-        .replace(/\u2029/g, '\\u2029') + '"';
-    },
-
-    setupHelper: function(paramSize, name, missingParams) {
-      var params = [],
-          paramsInit = this.setupParams(paramSize, params, missingParams);
-      var foundHelper = this.nameLookup('helpers', name, 'helper');
-
-      return {
-        params: params,
-        paramsInit: paramsInit,
-        name: foundHelper,
-        callParams: ["depth0"].concat(params).join(", "),
-        helperMissingParams: missingParams && ["depth0", this.quotedString(name)].concat(params).join(", ")
-      };
-    },
-
-    setupOptions: function(paramSize, params) {
-      var options = [], contexts = [], types = [], param, inverse, program;
-
-      options.push("hash:" + this.popStack());
-
-      if (this.options.stringParams) {
-        options.push("hashTypes:" + this.popStack());
-        options.push("hashContexts:" + this.popStack());
-      }
-
-      inverse = this.popStack();
-      program = this.popStack();
-
-      // Avoid setting fn and inverse if neither are set. This allows
-      // helpers to do a check for `if (options.fn)`
-      if (program || inverse) {
-        if (!program) {
-          this.context

<TRUNCATED>

[17/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/WorldMapGenerator.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/WorldMapGenerator.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/WorldMapGenerator.js
deleted file mode 100644
index cfc44c7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/WorldMapGenerator.js
+++ /dev/null
@@ -1,3474 +0,0 @@
-/**
- * @version: 1.0.1
- * @author: Keval Bhatt 
- * @copyright: Copyright (c) 2015 Keval Bhatt. All rights reserved.
- * @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
- * @website: http://kevalbhatt.github.io/WorldMapGenerator/
- */
-'use strict';
-(function(root, factory) {
-
-    if (typeof define === 'function' && define.amd) {
-        define(['moment', 'jquery'], function(momentjs, $) {
-            root.worldMapTime = {};
-            factory(momentjs, $, root.worldMapTime);
-        });
-
-    } else {
-        if ((typeof root.moment == "undefined")) {
-            var moment = false;
-            console.log('Day light feature requires moment.js')
-        } else {
-            if (!(root.moment.tz)) {
-                throw new Error('moment-timezone dependency not found');
-            }
-        }
-        if ((root.jQuery != "undefined" || root.Zepto != "undefined" || root.ender != "undefined" || root.$ != "undefined")) {
-            var c = root.worldMapTime = {};
-            factory(root.moment || moment, (root.jQuery || root.Zepto || root.ender || root.$), c);
-        } else {
-            throw new Error('jQuery dependnecy not found');
-        }
-
-    }
-
-}(this, function(moment, $, getTimeZoneObjct) {
-    var findValue = function(key, value) {
-        var referObj = [];
-        var obj = WorldMapGenerator.timeZoneValue.filter(function(object) {
-            if (object[key] === value) {
-                referObj.push($.extend(true, {},object));
-                return object;
-            }
-        });
-        for(var i=0;i<referObj.length;i++){
-           delete referObj[i].points;
-           delete referObj[i].pin;
-        }
-        return referObj;
-    }
-    getTimeZoneObjct['getSystemTimezone'] = function() {
-        /* var d = new Date()
-         var n = d.getTimezoneOffset();
-         var offset = (-(n))/60*/
-        var zoneAbr = new Date().toString().split('(')[1].slice(0, -1)
-        return findValue('zoneName', zoneAbr)
-    }
-    getTimeZoneObjct['getZoneName'] = function(zoneAbr) {
-        return findValue('zoneName', zoneAbr).zoneName
-    }
-    getTimeZoneObjct['getTimeZoneString'] = function(zoneAbr) {
-        return findValue('zoneName', zoneAbr).timezone
-    }
-    getTimeZoneObjct['getTimeZoneObject'] = function(zoneAbr) {
-        return findValue('zoneName', zoneAbr)
-    }
-
-
-    var WorldMapGenerator = function(element, options) {
-        this.$el = element;
-        this.generateMap(options);
-    }
-
-    WorldMapGenerator.VERSION = '1.0.1';
-
-    WorldMapGenerator.DEFAULTS = {
-        width: 500,
-        height: 250,
-        hoverColor: '#5A5A5A',
-        selectedColor: '#496A84',
-        mapColor: '#BBB',
-        defaultCss: true,
-        localStore: true,
-        quickLink: [{
-            "IST": "IST",
-            "EAT": "EAT"
-        }],
-        selectBox: true,
-        showHoverText: true,
-        dayLightSaving: ((typeof moment == "function") ? (true) : (false))
-    };
-
-    WorldMapGenerator.prototype = {
-
-        constructor: WorldMapGenerator,
-
-        /**
-         * [setValue set value in map]
-         * @param {[type]} value        [attribute value]
-         * @param {[type]} attribute         [attribute name]
-         */
-        setValue: function(value, attribute) {
-
-            this.$el.find('svg polygon').attr('data-selected', 'false');
-            var elements = this.$el.find('svg polygon[data-' + ((attribute) ? (attribute) : ("timezone")) + '="' + value + '"]');
-
-            if (elements && elements.length) {
-                elements.attr('data-selected', 'true');
-                this.$el.find('select option[value="' + ((attribute) ? (elements.attr('data-timeZone')) : (value)) + '"]').prop('selected', true);
-                this.$el.find('.quickLink span').removeClass('active');
-                var findQuickLink = this.$el.find('.quickLink span[data-select="' + value + '"]');
-                this.$el.find('.quickLink span[data-select="' + value + '"]').addClass('active');
-                this.$el.find('.quickLink span[data-select="' + elements.attr('data-zonename') + '"]').addClass('active');
-
-            }
-        },
-        /**
-         * [getValue get selected value array]
-         * @return {[type]} [description]
-         */
-        getValue: function() {
-            var value = [];
-            this.$el.find('svg polygon[data-selected="true"]').map(function(index, el) {
-                value.push($(el).data());
-            });
-            return value;
-        },
-        /**
-         * [generateMap create element dynamically]
-         * @param  {[type]} options [depanding on option it will create e]
-         * @return {[type]}         [description]
-         */
-        generateMap: function(options) {
-
-            var polygon = [],
-                option = [],
-                quickLink = [],
-                containerArr = [],
-                timezone = WorldMapGenerator.timeZoneValue;
-            for (var index in timezone) {
-                var zoneName =  ((options.dayLightSaving) ? (moment().tz(timezone[index].timezone).zoneName()) : (timezone[index].zoneName))
-                if (zoneName == 'CST' && timezone[index].timezone.startsWith('Asia'))
-                  zoneName = 'CST/China'
-                polygon.push(this.genrateElement('polygon', {
-                    'data-timezone': timezone[index].timezone,
-                    'data-country': timezone[index].country,
-                    'data-pin': timezone[index].pin,
-                    'data-offset': timezone[index].offset,
-                    'points': timezone[index].points,
-                    'data-zonename': zoneName
-                }, false, true));
-                option.push(this.genrateElement('option', {
-                    'value': timezone[index].timezone
-                }, timezone[index].timezone + " (" + ((options.dayLightSaving) ? (moment().tz(timezone[index].timezone).zoneName()) : (timezone[index].zoneName)) + ")"));
-            }
-            if (options.selectBox) {
-                var select = this.genrateElement('select', {
-                    'class': 'mapDropDown dropdown-toggle',
-                }, option);
-                containerArr.push(select);
-            }
-
-
-            if (options.quickLink.length > 0) {
-                for (var index in options.quickLink[0]) {
-                    quickLink.push(this.genrateElement('span', {
-                        'data-select': options.quickLink[0][index]
-                    }, index));
-                }
-                var qickLinkDiv = this.genrateElement('div', {
-                    'class': 'quickLink'
-                }, quickLink);
-                containerArr.push(qickLinkDiv);
-            }
-
-
-
-            var svg = this.genrateElement('svg', {
-                'class': 'timezone-map',
-                'viewBox': '0 0 ' + options.width + ' ' + options.height
-            }, polygon, true);
-
-            if (containerArr.length > 0) {
-                var container = this.genrateElement('div', {
-                    'class': 'Cbox'
-                }, containerArr);
-                this.$el.append(container);
-
-            }
-            this.$el.append(svg);
-
-            if (options.showHoverText) {
-                var hoverZone = this.genrateElement('span', {
-                    'class': 'hoverZone',
-                });
-                this.$el.append(hoverZone);
-            }
-
-
-
-            if (options.defaultCss) {
-                this.createCss(options);
-            }
-            this.bindEvent(options);
-
-        },
-        /**
-         * [bindEvent bind all event i.e click,mouseenter,mouseleave,change(select)]
-         * @return {[type]} [description]
-         */
-        bindEvent: function() {
-            var that = this;
-            this.$el.on('mouseenter', 'svg polygon', function(e) {
-                var d = $(this).data();
-                $('.timezone-map polygon[data-zonename="' + d.zonename + '"]').attr('class', 'active');
-                that.$el.find('.hoverZone').text(d.timezone + " (" + d.zonename + ")");
-            });
-            this.$el.on('mouseleave', 'svg polygon', function(e) {
-                $('.timezone-map polygon').attr('class', '');
-                that.$el.find('.hoverZone').text('');
-            });
-            this.$el.on('click', 'svg polygon', function() {
-
-                that.setValue($(this).attr('data-timezone'));
-                that.$el.trigger("map:clicked");
-
-            });
-            this.$el.on('change', 'select', function() {
-                that.setValue($(this).val());
-                that.$el.trigger("map:clicked");
-            });
-            this.$el.on('click', '.quickLink span', function() {
-                var selectValue = $(this).data().select
-                if (selectValue.search('/') > 0) {
-                    that.setValue(selectValue, 'timezone');
-                } else {
-                    that.setValue(selectValue, 'zonename');
-                }
-                that.$el.trigger("map:clicked");
-            });
-        },
-        /**
-         * [genrateElement description]
-         * @param  {[Jquery Object]}  element     [selector]
-         * @param  {[type]}  elementAttr [description]
-         * @param  {[javascript Object or text]}  chilled      [If we pass javascript object or  array it will append all chilled and if you pass string it will add string(value) inside element ]
-         * @param  {Boolean} isSvg       [If it is svg then it will create svg element]
-         * @return {[type]}              [description]
-         */
-        genrateElement: function(element, elementAttr, chilled, isSvg) {
-
-
-            if (isSvg) {
-                var elementObject = document.createElementNS('http://www.w3.org/2000/svg', element);
-            } else {
-                var elementObject = document.createElement(element);
-            }
-            if (elementAttr) {
-                for (var key in elementAttr) {
-                    elementObject.setAttribute(key, elementAttr[key]);
-                }
-            }
-            if (chilled) {
-                if (chilled instanceof Array) {
-                    for (var chilleds in chilled) {
-                        elementObject.appendChild(chilled[chilleds]);
-                    }
-                } else if (typeof chilled == 'string') {
-                    elementObject.innerHTML = chilled;
-                } else {
-                    elementObject.appendChild(chilled);
-                }
-
-            }
-
-            return elementObject;
-
-        },
-        /**
-         * [createCss function will create css dynamically it is insert style attribute in  in head ]
-         * @param  {[type]} options [options has mapColor,selectedColor,hoverColor ]
-         * @return {[type]}         [description]
-         */
-        createCss: function(options) {
-            var style = document.createElement('style');
-            style.type = 'text/css';
-            style.innerHTML = '.timezone-map polygon[data-selected="true"] {fill: ' + options.selectedColor + '}' +
-                '.timezone-map polygon { fill: ' + options.mapColor + ';}' +
-                '.timezone-map polygon.active {fill: ' + options.hoverColor + ';}' +
-                '.timezone-map polygon:hover { cursor: pointer;}' +
-                '.Cbox .quickLink{width: 52%;float: right;padding-bottom: 11px;overflow-x: auto; white-space: nowrap;overflow-y: hidden;}' +
-                '.Cbox .quickLink span:hover {color:#FFF;background-color: #496A84;  cursor: pointer;}' +
-                '.Cbox select{width: 45%;float: left;height: 27px; padding: 0px 0px 0px 10px;}' +
-                '.Cbox .quickLink span.active {color: #FFF; background-color: #496A84;}' +
-                '.Cbox .quickLink span{ font-weight: 300; border-radius: 3px; color: #000; background-color: #FFF; border: solid 1px #CCC;margin-left: 10px;' +
-                'font-size: 9px;padding: 4px 6px 4px 6px;}';
-            document.getElementsByTagName('head')[0].appendChild(style);
-
-        }
-    };
-    /**
-     * [Plugin Staring point for plugin]
-     * @param {[type]} option [user options which can be override the default options]
-     */
-    function Plugin(option) {
-
-        return this.each(function() {
-            var $el = $(this)
-            var options = $.extend({}, WorldMapGenerator.DEFAULTS, $el.data(), typeof option == 'object' && option);
-            $el.data('WorldMapGenerator', new WorldMapGenerator($el, options));
-            $el.trigger("map:loaded");
-        });
-    };
-
-    $.fn.WorldMapGenerator = Plugin;
-
-    WorldMapGenerator.timeZoneValue = [{
-        "timezone": "Africa/Abidjan",
-        "country": "CI",
-        "pin": "244,118",
-        "offset": 0,
-        "points": "241,118,240,119,240,117,238,116,238,115,239,114,239,113,239,113,239,111,241,110,241,111,243,111,244,112,246,111,247,113,245,116,246,118,241,118",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Accra",
-        "country": "GH",
-        "pin": "250,117",
-        "offset": 0,
-        "points": "251,117,247,118,246,118,246,118,246,116,247,114,246,110,250,110,251,113,251,116,252,116,251,117",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Addis_Ababa",
-        "country": "ET",
-        "pin": "304,112",
-        "offset": 3,
-        "points": "313,118,311,118,308,120,307,119,305,120,300,119,299,116,296,114,296,113,297,113,298,110,299,110,300,107,300,107,301,105,302,105,303,104,303,105,307,105,309,108,308,110,310,110,309,110,310,112,317,114,313,118",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Algiers",
-        "country": "DZ",
-        "pin": "254,74",
-        "offset": 1,
-        "points": "263,83,264,86,264,88,263,89,264,91,266,91,267,92,258,98,255,99,254,97,252,97,250,95,238,87,238,85,239,85,243,83,243,82,245,82,245,81,246,81,246,80,248,80,249,80,248,79,248,77,247,76,254,74,262,74,261,74,262,77,260,78,263,81,263,83",
-        "zoneName": "CET"
-    }, {
-        "timezone": "Africa/Asmara",
-        "country": "ER",
-        "pin": "304,104",
-        "offset": 3,
-        "points": "306,104,310,107,309,108,306,105,303,105,303,104,302,105,301,105,301,101,304,100,305,104,305,103,306,104",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Bamako",
-        "country": "ML",
-        "pin": "239,107",
-        "offset": 0,
-        "points": "244,107,244,108,242,109,242,111,241,111,241,110,240,111,239,110,239,111,238,110,238,110,238,109,237,108,235,108,234,108,234,107,233,105,234,103,235,104,237,103,242,103,241,90,243,90,252,96,252,97,254,97,255,99,256,98,256,101,255,104,249,104,246,105,245,107,244,106,244,107",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Bangui",
-        "country": "CF",
-        "pin": "276,119",
-        "offset": 1,
-        "points": "284,118,283,119,282,118,281,119,277,118,276,119,276,120,273,120,272,122,270,119,270,117,272,115,276,114,276,113,278,112,280,110,281,110,283,111,283,113,284,113,284,113,285,114,288,118,285,118,285,118,284,118",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Banjul",
-        "country": "GM",
-        "pin": "227,106",
-        "offset": 0,
-        "points": "231,106,227,106,229,106,231,106",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Bissau",
-        "country": "GW",
-        "pin": "228,109",
-        "offset": 0,
-        "points": "228,109,228,109,228,109",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Blantyre",
-        "country": "MW",
-        "pin": "299,147",
-        "offset": 2,
-        "points": "298,144,300,146,299,149,298,147,298,145,297,145,295,144,297,142,296,140,297,140,296,138,298,139,299,141,298,142,298,144",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Brazzaville",
-        "country": "CG",
-        "pin": "271,131",
-        "offset": 1,
-        "points": "266,131,267,130,266,128,267,128,268,128,270,128,270,128,270,126,269,125,270,124,269,123,268,123,268,122,272,123,273,120,276,120,275,126,273,128,272,130,270,132,270,131,269,132,268,131,267,132,266,131",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Bujumbura",
-        "country": "BI",
-        "pin": "291,130",
-        "offset": 2,
-        "points": "292,131,291,131,290,129,291,129,292,128,292,128,293,130,292,131",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Asia/Oral",
-        "country": "KZ",
-        "pin": "321,54",
-        "offset": 5,
-        "points": "316,55,317,56,318,56,317,55,319,54,320,53,323,53,326,54,326,56,323,58,321,57,319,58,315,58,316,55",
-        "zoneName": "ORAT"
-    }, {
-        "timezone": "Africa/Cairo",
-        "country": "EG",
-        "pin": "293,83",
-        "offset": 2,
-        "points": "294,94,285,94,284,83,285,81,290,82,293,81,294,81,295,82,298,82,298,84,298,86,296,85,295,83,295,84,300,92,299,92,299,93,297,95,294,94",
-        "zoneName": "EET"
-    }, {
-        "timezone": "Africa/Casablanca",
-        "country": "MA",
-        "pin": "239,78",
-        "offset": 0,
-        "points": "242,84,240,84,238,85,238,87,232,87,236,84,237,83,236,81,237,80,241,78,242,75,243,75,244,76,246,76,248,77,248,80,246,80,246,81,245,81,245,82,243,82,242,84",
-        "zoneName": "WET"
-    }, {
-        "timezone": "Africa/Ceuta",
-        "country": "ES",
-        "pin": "243,75",
-        "offset": 1,
-        "points": "243,75,243,75,243,75",
-        "zoneName": "CET"
-    }, {
-        "timezone": "Africa/Conakry",
-        "country": "GN",
-        "pin": "231,112",
-        "offset": 0,
-        "points": "238,114,237,115,236,113,235,114,235,113,234,111,233,111,232,112,231,111,230,110,229,109,231,109,231,107,234,108,235,108,237,108,238,109,238,110,238,110,239,111,239,112,239,113,239,113,239,114,238,114",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Dakar",
-        "country": "SN",
-        "pin": "226,105",
-        "offset": 0,
-        "points": "227,107,229,106,231,106,229,106,227,106,226,105,227,102,230,102,233,105,234,108,229,107,227,108,227,108,227,108,227,107",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Dar_es_Salaam",
-        "country": "TZ",
-        "pin": "305,134",
-        "offset": 3,
-        "points": "306,139,306,139,306,140,302,141,299,141,297,138,293,137,291,134,291,132,293,130,292,129,293,128,292,126,297,126,302,129,302,130,304,131,304,134,305,135,305,137,306,139",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Asia/Yekaterinburg",
-        "country": "RU",
-        "pin": "334,46",
-        "offset": 6,
-        "points": "333,53,335,54,335,54,333,55,331,54,329,54,327,55,326,54,326,55,324,53,321,53,322,51,322,50,324,50,325,49,324,48,325,48,324,47,326,47,325,46,326,46,325,44,325,43,324,43,325,42,323,41,322,40,326,40,329,40,332,39,333,35,342,31,341,31,342,31,341,31,341,30,340,29,342,29,342,29,341,29,345,30,346,29,345,28,343,28,344,28,344,27,343,27,345,25,346,24,351,24,350,26,351,27,351,27,351,29,352,30,350,32,346,32,346,33,350,33,354,31,353,30,356,29,357,30,357,31,358,31,361,32,358,31,359,30,358,29,353,29,352,28,353,27,351,26,354,25,354,24,355,25,354,26,355,26,359,27,356,25,358,25,357,25,358,25,362,25,360,26,362,26,362,27,360,28,365,29,365,30,364,31,364,31,364,32,366,32,366,34,367,34,367,35,369,35,369,36,368,37,369,37,367,39,369,40,369,40,364,41,357,40,356,42,353,44,349,44,348,44,348,45,350,46,348,47,348,48,346,48,341,50,335,50,335,51,336,51,335,51,334,52,335,52,333,53",
-        "zoneName": "YEKT"
-    }, {
-        "timezone": "Africa/Djibouti",
-        "country": "DJ",
-        "pin": "310,109",
-        "offset": 3,
-        "points": "310,109,310,109,310,109",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Douala",
-        "country": "CM",
-        "pin": "263,119",
-        "offset": 1,
-        "points": "270,117,270,119,272,121,272,123,270,122,264,122,263,119,263,120,262,119,262,117,264,116,265,115,266,116,266,115,269,110,270,109,270,107,271,107,271,110,272,111,269,112,272,114,270,117",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Freetown",
-        "country": "SL",
-        "pin": "232,113",
-        "offset": 0,
-        "points": "235,115,234,115,232,114,232,112,233,111,234,111,235,112,235,114,236,114,235,115",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Gaborone",
-        "country": "BW",
-        "pin": "286,159",
-        "offset": 2,
-        "points": "287,158,285,161,282,160,281,162,279,162,279,161,278,159,278,156,279,156,279,150,282,150,283,151,285,150,286,152,289,153,289,155,291,156,287,158",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Harare",
-        "country": "ZW",
-        "pin": "293,150",
-        "offset": 2,
-        "points": "293,156,289,155,289,153,286,152,285,150,288,150,291,147,296,148,295,151,296,153,295,155,293,156",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/El_Aaiun",
-        "country": "EH",
-        "pin": "232,87",
-        "offset": 0,
-        "points": "233,89,233,92,232,93,232,95,227,95,226,96,226,95,228,92,228,92,229,91,230,89,231,88,232,87,238,87,238,89,233,89",
-        "zoneName": "WET"
-    }, {
-        "timezone": "Africa/Johannesburg",
-        "country": "ZA",
-        "pin": "289,161",
-        "offset": 2,
-        "points": "283,172,278,173,276,172,276,173,275,171,275,170,275,169,273,165,274,164,274,165,275,165,278,164,278,159,279,161,279,162,280,162,282,160,285,161,288,158,290,156,293,156,294,159,294,161,294,161,293,162,294,163,294,163,294,162,296,162,295,165,289,171,286,172,283,172",
-        "zoneName": "SAST"
-    }, {
-        "timezone": "Africa/Juba",
-        "country": "SS",
-        "pin": "294,118",
-        "offset": 3,
-        "points": "299,117,299,118,300,118,300,119,298,119,297,120,293,120,291,119,289,119,289,119,287,116,284,113,285,111,286,111,287,112,290,112,292,111,293,111,295,110,295,108,296,108,296,110,297,111,297,113,296,113,296,114,297,115,299,117",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Kampala",
-        "country": "UG",
-        "pin": "295,125",
-        "offset": 3,
-        "points": "293,126,291,127,292,124,293,122,293,122,293,120,297,120,297,119,299,122,297,125,297,126,293,126",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Khartoum",
-        "country": "SD",
-        "pin": "295,103",
-        "offset": 3,
-        "points": "300,107,299,110,298,110,297,112,296,110,296,108,295,108,295,108,295,110,293,111,292,111,290,112,287,112,286,111,285,111,284,113,283,113,283,111,282,110,281,107,280,107,282,103,283,103,283,97,285,97,285,94,294,94,297,95,299,93,301,94,302,96,302,99,304,100,301,101,301,106,300,107,300,107",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Kinshasa",
-        "country": "CD",
-        "pin": "271,131",
-        "offset": 1,
-        "points": "271,131,272,130,273,128,275,126,276,119,277,118,277,118,279,119,283,120,281,120,283,122,281,122,281,123,283,125,282,126,283,126,282,126,284,127,281,128,281,128,281,128,279,128,279,131,278,131,278,135,277,135,277,136,274,136,273,133,267,133,268,131,269,132,270,131,270,132,271,131",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Lagos",
-        "country": "NG",
-        "pin": "255,116",
-        "offset": 1,
-        "points": "261,119,258,119,256,116,254,116,254,112,255,110,255,109,256,106,258,106,260,107,261,106,263,107,265,106,267,107,269,106,270,108,270,109,269,110,266,115,266,116,264,115,262,117,262,118,261,119",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Libreville",
-        "country": "GA",
-        "pin": "263,124",
-        "offset": 1,
-        "points": "269,125,270,126,270,128,267,128,267,128,266,128,267,130,266,131,263,128,262,126,263,126,263,125,264,125,263,124,263,124,266,124,266,122,268,122,268,123,270,123,270,124,269,125",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Lome",
-        "country": "TG",
-        "pin": "252,116",
-        "offset": 0,
-        "points": "252,116,251,116,251,113,250,110,251,110,251,111,252,111,253,116,252,116",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Kigali",
-        "country": "RW",
-        "pin": "292,128",
-        "offset": 2,
-        "points": "292,128,291,129,290,129,291,127,292,126,293,128,292,128",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Luanda",
-        "country": "AO",
-        "pin": "268,137",
-        "offset": 1,
-        "points": "281,140,281,141,283,140,283,143,281,143,281,148,283,149,279,150,276,149,269,149,268,149,266,149,267,144,269,142,269,140,268,138,269,137,267,133,273,133,274,136,277,136,277,135,280,135,280,138,281,140",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Lubumbashi",
-        "country": "CD",
-        "pin": "288,141",
-        "offset": 2,
-        "points": "291,132,291,134,293,136,290,137,289,138,290,139,289,141,290,142,291,142,291,144,290,144,288,141,287,142,286,142,285,141,284,141,283,140,281,141,280,135,278,135,277,134,278,133,278,131,279,131,279,128,281,128,281,128,281,128,284,127,282,126,283,126,282,126,283,125,281,123,281,122,283,122,281,120,283,120,281,119,282,118,285,118,285,118,288,118,289,119,291,119,293,120,293,122,293,122,292,124,291,127,290,128,291,132",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Lusaka",
-        "country": "ZM",
-        "pin": "289,146",
-        "offset": 2,
-        "points": "290,147,290,148,287,150,284,149,283,149,281,148,281,143,283,143,283,140,284,141,285,141,286,142,287,142,288,141,290,144,291,144,291,142,290,142,289,141,290,139,289,138,290,137,293,136,296,138,297,140,296,140,297,142,295,144,296,144,292,146,292,147,290,147",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Malabo",
-        "country": "GQ",
-        "pin": "262,120",
-        "offset": 1,
-        "points": "266,123,266,124,263,123,264,122,266,122,266,123",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Maputo",
-        "country": "MZ",
-        "pin": "295,161",
-        "offset": 2,
-        "points": "296,160,295,161,295,162,296,161,296,162,295,162,294,159,293,156,295,155,296,153,295,151,296,148,292,147,292,146,296,144,297,145,298,145,298,146,298,147,299,149,300,146,298,144,298,141,302,141,306,140,306,146,305,148,303,149,300,151,298,152,298,154,299,156,299,158,296,160",
-        "zoneName": "CAT"
-    }, {
-        "timezone": "Africa/Mbabane",
-        "country": "SZ",
-        "pin": "293,162",
-        "offset": 2,
-        "points": "294,161,295,162,294,163,293,162,294,161,294,161",
-        "zoneName": "SAST"
-    }, {
-        "timezone": "Africa/Mogadishu",
-        "country": "SO",
-        "pin": "313,122",
-        "offset": 3,
-        "points": "310,125,308,127,307,126,307,121,308,119,312,118,317,114,311,113,309,110,310,109,312,111,321,109,321,111,321,111,321,111,321,112,317,119,310,125",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Monrovia",
-        "country": "LR",
-        "pin": "235,116",
-        "offset": 0,
-        "points": "239,118,240,119,238,119,234,116,236,113,237,113,237,115,238,115,238,114,239,115,238,116,240,117,239,118",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Nairobi",
-        "country": "KE",
-        "pin": "301,127",
-        "offset": 3,
-        "points": "308,127,306,129,304,131,302,130,302,129,297,126,297,125,299,122,297,119,298,119,300,119,305,120,307,119,308,119,307,121,307,126,308,127",
-        "zoneName": "EAT"
-    }, {
-        "timezone": "Africa/Maseru",
-        "country": "LS",
-        "pin": "288,166",
-        "offset": 2,
-        "points": "289,167,289,167,288,166,290,165,291,166,289,167",
-        "zoneName": "SAST"
-    }, {
-        "timezone": "Africa/Ndjamena",
-        "country": "TD",
-        "pin": "271,108",
-        "offset": 1,
-        "points": "278,112,276,113,276,114,272,115,269,112,270,111,272,111,271,110,271,107,270,107,269,105,272,102,272,97,271,95,271,93,272,92,283,98,283,103,282,103,280,107,281,107,282,110,280,110,279,112,278,112",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Niamey",
-        "country": "NE",
-        "pin": "253,106",
-        "offset": 1,
-        "points": "256,106,255,108,255,109,254,108,253,108,253,107,251,107,252,106,251,106,250,104,255,104,256,101,256,98,258,98,267,92,270,94,271,93,271,95,272,97,272,102,269,105,269,106,267,107,265,106,263,107,261,106,260,107,258,106,256,106",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Nouakchott",
-        "country": "MR",
-        "pin": "228,100",
-        "offset": 0,
-        "points": "234,103,233,105,230,102,227,102,227,103,228,100,227,98,228,97,227,95,226,96,232,95,232,93,233,92,233,89,238,89,238,87,243,90,241,90,242,103,237,103,235,104,234,103",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Ouagadougou",
-        "country": "BF",
-        "pin": "248,108",
-        "offset": 0,
-        "points": "249,110,246,110,246,112,246,111,243,112,242,111,242,109,244,108,244,106,245,107,247,105,250,104,250,104,251,106,252,106,251,107,253,107,253,109,252,110,249,110",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Porto-Novo",
-        "country": "BJ",
-        "pin": "254,116",
-        "offset": 1,
-        "points": "254,114,254,116,252,116,252,112,251,111,252,109,253,109,254,108,255,109,255,110,254,112,254,114",
-        "zoneName": "WAT"
-    }, {
-        "timezone": "Africa/Tunis",
-        "country": "TN",
-        "pin": "264,74",
-        "offset": 1,
-        "points": "266,80,264,81,264,82,263,83,263,80,261,79,260,78,262,76,261,74,263,73,264,73,264,74,265,74,265,75,266,76,264,78,266,79,266,80",
-        "zoneName": "CET"
-    }, {
-        "timezone": "Africa/Sao_Tome",
-        "country": "ST",
-        "pin": "259,125",
-        "offset": 0,
-        "points": "260,123,260,123,260,123",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "Africa/Tripoli",
-        "country": "LY",
-        "pin": "268,79",
-        "offset": 2,
-        "points": "285,88,285,97,283,97,283,98,272,92,270,94,264,91,263,89,264,88,264,86,263,83,264,82,264,81,266,80,266,79,271,80,272,81,276,83,278,82,278,80,281,79,282,80,285,81,284,83,285,88",
-        "zoneName": "EET"
-    }, {
-        "timezone": "Africa/Windhoek",
-        "country": "NA",
-        "pin": "274,156",
-        "offset": 2,
-        "points": "278,163,278,164,277,165,274,165,274,164,273,165,272,164,271,162,270,156,267,151,266,149,268,149,269,149,276,149,279,150,284,149,285,150,283,151,282,150,279,150,279,156,278,156,278,163",
-        "zoneName": "WAST"
-    }, {
-        "timezone": "America/Adak",
-        "country": "US",
-        "pin": "5,53",
-        "offset": -10,
-        "points": "7,53,6,53,8,52,7,53",
-        "zoneName": "HST"
-    }, {
-        "timezone": "America/Argentina/Salta",
-        "country": "AR",
-        "pin": "159,159",
-        "offset": -3,
-        "points": "162,180,162,182,163,182,160,182,160,183,150,183,150,180,152,179,151,176,152,175,153,177,155,177,155,175,160,175,160,174,162,174,162,180",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Salta",
-        "country": "AR",
-        "pin": "159,159",
-        "offset": -3,
-        "points": "159,156,161,157,161,156,163,156,163,156,163,159,162,161,158,162,157,161,158,160,155,160,155,159,157,158,158,159,158,157,159,159,161,159,161,158,160,158,159,156",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Anchorage",
-        "country": "US",
-        "pin": "42,40",
-        "offset": -9,
-        "points": "42,42,40,43,39,43,40,42,39,42,40,41,43,41,42,40,42,40,40,40,36,43,37,43,36,44,30,47,30,47,25,48,25,48,27,48,27,47,31,45,31,44,32,43,30,44,30,43,29,44,27,43,25,44,25,37,27,36,26,36,27,35,25,35,25,33,26,33,25,33,25,32,26,33,25,32,25,27,33,26,34,26,33,27,35,26,39,27,39,27,38,27,39,27,51,28,54,28,54,42,54,41,50,42,46,41,47,40,44,40,45,40,43,41,44,41,44,41,44,41,42,42",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Anguilla",
-        "country": "AI",
-        "pin": "162,100",
-        "offset": -4,
-        "points": "162,100,162,100,162,100",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Antigua",
-        "country": "AG",
-        "pin": "164,101",
-        "offset": -4,
-        "points": "164,101,164,101,164,101",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Araguaina",
-        "country": "BR",
-        "pin": "183,135",
-        "offset": -3,
-        "points": "185,136,185,136,185,138,186,139,185,141,186,141,186,143,184,143,182,143,182,142,181,143,180,143,180,142,180,143,180,140,182,137,182,135,183,134,183,133,183,132,184,133,184,135,185,136",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Argentina/Buenos_Aires",
-        "country": "AR",
-        "pin": "169,173",
-        "offset": -3,
-        "points": "167,171,169,172,169,173,171,174,170,175,171,176,169,178,165,179,163,179,164,180,163,180,163,181,164,181,163,182,162,182,162,173,164,173,165,172,167,171",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Catamarca",
-        "country": "AR",
-        "pin": "159,165",
-        "offset": -3,
-        "points": "159,188,157,188,156,189,151,189,151,188,150,187,151,187,150,187,151,186,150,184,160,183,161,184,161,183,162,184,160,184,161,185,159,186,159,188",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Catamarca",
-        "country": "AR",
-        "pin": "159,165",
-        "offset": -3,
-        "points": "160,167,158,164,154,164,155,162,155,160,158,160,157,161,159,162,158,163,159,164,159,164,160,167",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Cordoba",
-        "country": "AR",
-        "pin": "161,169",
-        "offset": -3,
-        "points": "163,173,162,173,162,174,160,174,160,170,159,169,159,168,160,166,159,164,161,161,162,161,163,159,163,156,165,158,170,160,169,163,173,163,174,162,174,161,175,161,175,163,173,164,170,167,169,172,166,171,164,173,163,173",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Jujuy",
-        "country": "AR",
-        "pin": "159,159",
-        "offset": -3,
-        "points": "157,157,158,155,159,156,159,157,160,158,161,158,161,159,160,159,159,159,158,157,158,159,157,158,157,157",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/La_Rioja",
-        "country": "AR",
-        "pin": "157,166",
-        "offset": -3,
-        "points": "156,167,154,166,154,165,153,164,154,164,158,164,160,167,159,169,157,169,156,167",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Mendoza",
-        "country": "AR",
-        "pin": "154,171",
-        "offset": -3,
-        "points": "152,170,156,170,157,171,157,175,155,175,155,177,153,177,152,175,152,174,153,171,152,170",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Rio_Gallegos",
-        "country": "AR",
-        "pin": "154,197",
-        "offset": -3,
-        "points": "151,189,156,189,157,190,159,191,158,192,154,195,154,197,155,198,150,197,149,197,150,195,148,196,148,195,148,193,150,192,149,191,150,191,151,189",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/San_Juan",
-        "country": "AR",
-        "pin": "155,169",
-        "offset": -3,
-        "points": "153,167,154,164,154,165,154,166,156,167,157,169,156,169,156,170,154,169,152,170,152,168,153,167",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/San_Luis",
-        "country": "AR",
-        "pin": "158,171",
-        "offset": -3,
-        "points": "159,169,160,170,160,175,157,175,156,169,159,169",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Argentina/Tucuman",
-        "country": "AR",
-        "pin": "159,162",
-        "offset": -3,
-        "points": "158,161,160,161,160,164,159,164,158,163,159,162,158,161",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Aruba",
-        "country": "AW",
-        "pin": "153,108",
-        "offset": -4,
-        "points": "153,108,153,108,153,108",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Argentina/Ushuaia",
-        "country": "AR",
-        "pin": "155,201",
-        "offset": -3,
-        "points": "155,201,155,198,155,199,155,199,156,200,160,201,158,201,155,201",
-        "zoneName": "ART"
-    }, {
-        "timezone": "America/Asuncion",
-        "country": "PY",
-        "pin": "170,160",
-        "offset": -3,
-        "points": "174,161,173,163,169,163,170,160,165,158,163,156,164,152,167,152,169,152,169,156,172,156,173,158,175,158,174,161",
-        "zoneName": "PYST"
-    }, {
-        "timezone": "America/Bahia_Banderas",
-        "country": "MX",
-        "pin": "104,96",
-        "offset": -6,
-        "points": "104,96,103,96,104,96",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Atikokan",
-        "country": "CA",
-        "pin": "123,57",
-        "offset": -5,
-        "points": "125,58,122,58,123,57,124,57,124,58,125,58",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Bahia",
-        "country": "BR",
-        "pin": "197,143",
-        "offset": -2,
-        "points": "187,146,186,146,186,141,185,141,186,140,187,139,188,140,189,140,189,138,191,138,193,137,194,138,195,137,197,137,198,139,197,140,198,141,196,143,196,147,195,150,194,149,195,147,194,147,193,147,192,146,189,145,189,145,187,146",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Barbados",
-        "country": "BB",
-        "pin": "167,107",
-        "offset": -4,
-        "points": "167,106,167,107,167,106",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Belem",
-        "country": "BR",
-        "pin": "183,127",
-        "offset": -3,
-        "points": "179,126,180,125,179,126,180,125,183,125,182,127,180,128,182,127,181,128,183,127,183,126,186,127,185,130,182,132,183,133,182,135,182,137,180,139,177,138,178,138,177,136,178,134,177,132,177,130,178,129,177,127,178,127,177,126,176,123,174,122,174,122,177,122,178,119,180,122,181,123,179,126",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Belize",
-        "country": "BZ",
-        "pin": "128,101",
-        "offset": -6,
-        "points": "128,101,128,101,128,101",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Blanc-Sablon",
-        "country": "CA",
-        "pin": "171,54",
-        "offset": -4,
-        "points": "169,54,167,55,169,54",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Boa_Vista",
-        "country": "BR",
-        "pin": "166,121",
-        "offset": -4,
-        "points": "167,118,166,119,167,120,167,121,167,122,168,123,168,125,167,125,166,126,165,126,164,127,163,126,163,122,161,122,160,119,163,120,163,119,165,119,166,118,167,118",
-        "zoneName": "AMT"
-    }, {
-        "timezone": "America/Bogota",
-        "country": "CO",
-        "pin": "147,119",
-        "offset": -5,
-        "points": "154,126,153,131,152,130,153,129,152,128,150,128,149,128,146,125,142,124,140,123,143,120,142,119,143,117,142,115,143,114,143,113,143,114,143,113,145,112,145,110,148,109,150,108,151,108,149,110,148,112,149,113,149,115,150,115,153,115,154,117,156,117,156,119,157,120,156,121,157,122,157,123,156,122,153,123,153,124,154,124,153,124,154,126",
-        "zoneName": "COT"
-    }, {
-        "timezone": "America/Boise",
-        "country": "US",
-        "pin": "89,64",
-        "offset": -7,
-        "points": "96,66,96,67,87,67,87,66,86,66,86,64,87,63,88,62,88,61,89,62,92,62,93,63,96,63,96,66",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Cambridge_Bay",
-        "country": "CA",
-        "pin": "104,29",
-        "offset": -7,
-        "points": "99,18,100,19,99,19,101,19,100,20,102,19,104,20,103,21,97,21,97,20,99,20,97,20,98,19,97,19,99,18",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Cambridge_Bay",
-        "country": "CA",
-        "pin": "104,29",
-        "offset": -7,
-        "points": "108,36,97,35,95,34,92,34,81,30,81,28,89,29,92,30,89,31,90,31,97,31,100,32,99,32,101,33,100,32,101,32,101,32,101,32,100,31,103,30,99,30,100,30,103,29,105,31,106,30,109,31,113,31,113,30,115,30,116,30,116,31,117,30,116,31,118,32,117,30,120,30,120,30,120,29,119,30,120,28,116,28,117,27,116,27,116,26,119,25,118,25,120,25,121,26,121,27,123,28,122,27,121,28,122,28,121,28,125,29,123,29,124,29,124,30,125,30,126,29,126,32,108,32,108,36",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Cambridge_Bay",
-        "country": "CA",
-        "pin": "104,29",
-        "offset": -7,
-        "points": "115,24,116,24,116,25,116,25,114,25,114,26,113,26,107,24,111,24,110,23,115,24",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Cambridge_Bay",
-        "country": "CA",
-        "pin": "104,29",
-        "offset": -7,
-        "points": "100,23,103,24,105,26,105,26,110,27,110,28,106,28,107,28,107,29,108,28,109,29,107,29,104,29,104,29,102,28,99,30,93,30,92,29,93,29,88,29,87,28,97,28,97,24,99,24,100,26,101,25,100,23,100,23",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Campo_Grande",
-        "country": "BR",
-        "pin": "174,153",
-        "offset": -3,
-        "points": "176,150,177,151,179,152,179,153,175,158,173,158,172,156,169,156,170,150,172,149,173,150,175,149,175,150,176,150",
-        "zoneName": "AMST"
-    }, {
-        "timezone": "America/Cancun",
-        "country": "MX",
-        "pin": "129,96",
-        "offset": -6,
-        "points": "128,95,130,96,128,98,129,98,128,100,128,99,127,100,126,100,126,98,128,96,128,95",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Caracas",
-        "country": "VE",
-        "pin": "157,110",
-        "offset": -4.5,
-        "points": "163,111,165,112,165,113,167,113,166,115,166,115,165,116,165,117,166,118,163,119,163,120,160,119,161,122,162,122,159,124,159,124,158,124,157,123,157,122,156,121,157,120,156,119,156,116,154,117,153,115,150,115,149,112,148,112,149,110,151,109,150,109,151,110,150,111,150,112,151,112,151,112,151,110,153,109,153,108,153,109,155,109,155,110,158,110,160,111,162,110,161,110,164,110,163,110,163,111",
-        "zoneName": "VET"
-    }, {
-        "timezone": "America/Cayenne",
-        "country": "GF",
-        "pin": "177,118",
-        "offset": -3,
-        "points": "176,117,178,119,177,122,175,122,175,120,174,118,175,117,176,117",
-        "zoneName": "GFT"
-    }, {
-        "timezone": "America/Cayman",
-        "country": "KY",
-        "pin": "137,98",
-        "offset": -5,
-        "points": "139,98,139,98,139,98",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Chicago",
-        "country": "US",
-        "pin": "128,67",
-        "offset": -6,
-        "points": "128,72,132,74,132,75,131,76,132,80,132,84,130,83,130,83,129,83,129,82,128,83,128,82,128,83,124,83,126,83,125,84,126,84,126,85,125,84,125,85,120,83,118,84,118,84,118,85,116,86,117,85,116,85,116,86,115,86,115,87,114,87,115,87,115,89,112,88,112,87,109,84,107,84,107,85,105,84,104,82,104,81,107,81,107,74,108,74,108,73,109,73,109,70,108,70,108,69,109,69,109,67,110,67,109,64,111,63,110,63,111,62,111,61,109,61,110,60,110,59,106,59,105,57,118,57,118,56,119,57,126,58,122,60,124,60,124,60,128,61,128,62,128,63,129,63,128,66,129,67,130,67,128,68,128,72",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Chihuahua",
-        "country": "MX",
-        "pin": "103,85",
-        "offset": -7,
-        "points": "106,85,106,86,106,88,105,88,103,88,101,89,98,86,99,86,99,82,100,82,100,81,102,81,104,83,105,84,106,85",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Coral_Harbour",
-        "country": "",
-        "pin": "250,125",
-        "offset": -5,
-        "points": "131,33,132,34,133,34,136,35,137,36,136,36,139,36,137,37,135,36,131,37,131,36,129,37,130,36,130,34,131,33",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Costa_Rica",
-        "country": "CR",
-        "pin": "133,111",
-        "offset": -6,
-        "points": "132,112,131,111,131,109,134,110,135,112,135,112,135,114,131,111,132,112",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Creston",
-        "country": "CA",
-        "pin": "88,57",
-        "offset": -7,
-        "points": "89,57,87,57,88,56,89,57",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Cuiaba",
-        "country": "BR",
-        "pin": "172,147",
-        "offset": -3,
-        "points": "179,146,176,148,176,150,175,150,175,149,173,150,172,149,170,150,169,149,169,148,166,148,166,144,167,142,167,141,165,140,164,137,169,137,169,135,170,137,171,138,180,139,180,141,180,143,179,146",
-        "zoneName": "AMST"
-    }, {
-        "timezone": "America/Curacao",
-        "country": "CW",
-        "pin": "154,108",
-        "offset": -4,
-        "points": "154,108,154,108,154,108",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Danmarkshavn",
-        "country": "GL",
-        "pin": "224,18",
-        "offset": 0,
-        "points": "223,15,223,15,224,15,221,16,221,16,220,17,221,17,223,17,224,17,221,17,224,18,225,18,218,18,223,19,220,19,223,20,218,20,219,14,223,15",
-        "zoneName": "GMT"
-    }, {
-        "timezone": "America/Dawson",
-        "country": "CA",
-        "pin": "56,36",
-        "offset": -8,
-        "points": "56,36,56,36,56,36",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Dawson_Creek",
-        "country": "CA",
-        "pin": "83,42",
-        "offset": -7,
-        "points": "83,45,83,50,79,48,78,46,83,45",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Denver",
-        "country": "US",
-        "pin": "104,70",
-        "offset": -7,
-        "points": "93,63,92,62,91,62,91,60,89,59,89,57,105,57,106,59,108,59,108,60,110,61,109,61,111,61,111,62,110,63,111,63,109,64,110,67,109,67,109,69,108,69,108,70,109,70,109,73,108,73,108,74,107,74,107,81,104,81,104,82,102,81,99,81,99,76,96,76,95,74,95,74,92,74,92,67,96,67,96,63,93,63",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Detroit",
-        "country": "US",
-        "pin": "135,66",
-        "offset": -5,
-        "points": "132,67,129,67,130,66,130,64,130,63,131,62,132,63,132,61,134,62,134,62,134,63,133,65,135,64,136,65,134,67,132,67",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Detroit",
-        "country": "US",
-        "pin": "135,66",
-        "offset": -5,
-        "points": "125,60,127,59,127,60,130,61,132,60,134,61,131,61,130,62,129,61,128,62,129,62,128,61,126,61,125,60",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Dominica",
-        "country": "DM",
-        "pin": "165,104",
-        "offset": -4,
-        "points": "165,103,165,104,165,103",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Edmonton",
-        "country": "CA",
-        "pin": "92,51",
-        "offset": -7,
-        "points": "92,57,88,56,88,55,85,53,86,52,86,52,83,51,83,42,97,42,97,51,99,51,97,52,97,57,92,57",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Eirunepe",
-        "country": "BR",
-        "pin": "153,134",
-        "offset": -4,
-        "points": "156,138,148,135,148,134,149,132,150,131,153,131,156,138",
-        "zoneName": "ACT"
-    }, {
-        "timezone": "America/El_Salvador",
-        "country": "SV",
-        "pin": "126,106",
-        "offset": -6,
-        "points": "126,106,125,106,126,105,128,106,128,107,126,106",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Fortaleza",
-        "country": "BR",
-        "pin": "197,130",
-        "offset": -3,
-        "points": "201,134,202,135,201,135,199,137,198,136,198,135,197,136,194,135,194,136,192,138,189,138,189,140,187,140,186,139,185,138,185,136,184,135,184,133,182,132,185,130,186,126,187,127,187,127,188,127,188,128,188,130,188,128,189,129,190,128,191,129,194,129,198,132,201,132,201,134",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Glace_Bay",
-        "country": "CA",
-        "pin": "167,61",
-        "offset": -4,
-        "points": "167,61,166,61,166,61,167,61",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Godthab",
-        "country": "GL",
-        "pin": "178,36",
-        "offset": -3,
-        "points": "188,42,187,42,188,41,187,41,188,41,187,41,187,41,186,41,187,40,186,41,187,40,183,41,184,40,183,40,183,40,182,40,183,39,182,39,182,39,181,39,182,39,181,39,182,39,180,38,181,37,180,38,180,38,180,37,180,37,179,37,180,37,179,37,180,37,179,37,179,36,178,36,180,36,178,36,180,35,179,35,180,35,181,36,179,34,180,35,178,36,178,35,179,35,177,35,178,34,177,34,180,34,177,34,177,34,176,34,178,33,176,33,180,32,175,33,176,33,175,33,177,33,176,32,177,32,175,32,180,32,175,31,181,31,177,31,178,31,175,31,176,30,178,31,176,30,180,31,179,30,179,30,176,30,179,30,180,29,179,30,179,29,180,29,180,29,180,29,180,29,179,29,180,28,179,28,180,28,174,27,180,27,179,27,179,27,178,26,179,26,177,26,178,26,177,26,179,26,176,26,178,25,176,25,175,25,175,26,173,26,172,25,174,25,173,25,174,25,173,24,174,24,173,23,174,23,172,23,173,22,172,22,172,22,170,22,172,21,168,20,169,20,169,20,161,19,158,15,160,15,160,14,162,14,156,13,162,12,163,13,162,12,165,12,165,12,166,12,165,11,166,11,172,12,167,11,169,11,174,1
 1,176,11,175,12,176,11,181,12,179,11,181,11,179,10,180,10,188,11,189,11,188,11,188,11,188,11,191,11,186,10,195,10,187,10,196,10,196,10,199,10,196,9,202,9,214,9,201,10,215,9,216,10,214,10,220,10,204,11,216,11,213,12,213,12,221,11,220,12,217,13,224,12,223,12,228,11,234,12,229,13,221,13,228,13,221,14,222,14,226,14,225,14,219,14,218,20,223,20,223,21,219,20,220,20,219,20,222,21,219,21,224,22,219,22,219,22,219,22,220,23,220,22,222,22,221,23,219,23,217,23,219,23,214,22,216,23,212,23,213,23,212,23,212,24,215,24,212,24,216,24,213,24,215,24,215,25,216,25,216,26,210,25,212,25,210,26,215,26,211,26,212,26,209,27,213,27,210,28,212,28,215,27,219,28,213,30,208,30,206,30,205,30,206,31,204,31,202,33,198,33,198,34,197,33,198,33,197,33,197,33,197,33,197,34,195,34,194,34,195,34,194,35,193,35,194,36,192,36,194,36,194,37,192,36,193,37,192,37,192,37,191,37,192,38,190,38,191,38,190,38,192,39,190,39,191,39,190,40,191,40,189,40,191,40,190,41,190,41,189,41,190,42,189,41,188,42",
-        "zoneName": "WGT"
-    }, {
-        "timezone": "America/Goose_Bay",
-        "country": "CA",
-        "pin": "166,51",
-        "offset": -4,
-        "points": "171,53,161,53,161,52,162,52,162,52,161,52,160,53,158,53,158,51,156,52,157,51,156,50,157,49,156,49,157,49,157,48,159,49,161,49,162,48,161,48,161,47,162,47,161,47,162,45,160,44,162,43,160,43,161,43,161,42,160,42,160,41,162,43,161,43,163,43,162,44,163,44,162,44,164,45,163,45,165,46,163,46,164,46,164,47,166,48,166,48,166,49,167,48,167,48,168,48,167,49,168,48,168,49,170,49,167,50,169,50,166,51,170,50,171,50,170,51,171,53",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Grand_Turk",
-        "country": "TC",
-        "pin": "151,95",
-        "offset": -5,
-        "points": "151,95,151,95,151,95",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Grenada",
-        "country": "GD",
-        "pin": "164,108",
-        "offset": -4,
-        "points": "165,108,165,108,165,108",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Guadeloupe",
-        "country": "GP",
-        "pin": "165,102",
-        "offset": -4,
-        "points": "165,102,165,102,165,102",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Guatemala",
-        "country": "GT",
-        "pin": "124,105",
-        "offset": -6,
-        "points": "125,106,123,105,122,104,123,103,124,103,123,101,124,101,124,100,126,100,126,103,127,103,125,106",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Guayaquil",
-        "country": "EC",
-        "pin": "139,128",
-        "offset": -5,
-        "points": "141,130,140,132,139,131,138,131,139,128,139,129,137,128,139,124,141,123,142,124,144,124,145,125,145,125,146,126,141,130",
-        "zoneName": "ECT"
-    }, {
-        "timezone": "America/Guyana",
-        "country": "GY",
-        "pin": "169,116",
-        "offset": -4,
-        "points": "170,116,171,118,170,118,169,119,172,122,170,122,168,123,167,122,167,121,167,120,166,119,167,118,165,117,165,116,166,115,166,115,167,114,167,113,169,115,169,116,169,115,170,116",
-        "zoneName": "GYT"
-    }, {
-        "timezone": "America/Halifax",
-        "country": "CA",
-        "pin": "162,63",
-        "offset": -4,
-        "points": "161,63,162,62,160,62,161,61,163,62,164,61,165,62,161,63,159,65,158,64,158,63,160,62,161,63",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Havana",
-        "country": "CU",
-        "pin": "136,93",
-        "offset": -5,
-        "points": "146,96,147,97,142,97,143,96,141,96,141,95,136,94,136,94,137,94,136,93,132,95,134,93,138,93,146,96",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Hermosillo",
-        "country": "MX",
-        "pin": "96,85",
-        "offset": -7,
-        "points": "90,81,91,80,96,81,99,81,99,86,98,86,99,88,98,88,96,87,97,86,94,85,93,82,90,81",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Indiana/Petersburg",
-        "country": "US",
-        "pin": "129,72",
-        "offset": -5,
-        "points": "129,72,129,72,129,72",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Indiana/Tell_City",
-        "country": "US",
-        "pin": "129,72",
-        "offset": -6,
-        "points": "130,72,130,72,130,72",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Indiana/Vevay",
-        "country": "US",
-        "pin": "132,71",
-        "offset": -5,
-        "points": "132,71,132,71,132,71",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Indiana/Indianapolis",
-        "country": "US",
-        "pin": "130,70",
-        "offset": -5,
-        "points": "132,71,130,72,130,71,128,71,128,68,130,68,130,67,132,67,132,70,132,71",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Indiana/Knox",
-        "country": "US",
-        "pin": "130,68",
-        "offset": -6,
-        "points": "130,67,129,68,130,67",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Indiana/Marengo",
-        "country": "US",
-        "pin": "130,72",
-        "offset": -5,
-        "points": "130,72,130,72,130,72,130,72",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Indiana/Vincennes",
-        "country": "US",
-        "pin": "128,71",
-        "offset": -5,
-        "points": "128,72,128,71,130,71,130,72,128,72",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Indiana/Winamac",
-        "country": "US",
-        "pin": "130,68",
-        "offset": -5,
-        "points": "130,68,129,68,130,68",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Inuvik",
-        "country": "CA",
-        "pin": "64,30",
-        "offset": -7,
-        "points": "65,30,64,30,65,30",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Iqaluit",
-        "country": "CA",
-        "pin": "155,36",
-        "offset": -5,
-        "points": "139,20,138,20,140,20,138,21,140,21,132,21,132,20,139,20",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Iqaluit",
-        "country": "CA",
-        "pin": "155,36",
-        "offset": -5,
-        "points": "139,10,145,10,144,11,145,10,142,10,156,10,155,10,156,10,156,12,154,12,156,12,152,12,156,12,156,13,152,13,153,14,149,14,152,14,151,14,147,14,146,14,148,15,142,15,147,15,142,15,146,16,143,16,145,16,145,17,141,17,142,17,141,18,136,18,142,18,141,19,137,19,138,19,135,18,136,19,132,19,132,18,134,18,134,17,136,17,132,17,132,15,136,16,134,16,137,15,132,15,134,15,132,15,132,14,138,14,139,14,134,13,144,13,140,13,143,12,140,12,140,12,139,13,132,13,132,12,136,12,132,12,132,11,133,11,132,10,140,11,135,11,138,10,137,10,141,10,138,10,139,10",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Iqaluit",
-        "country": "CA",
-        "pin": "155,36",
-        "offset": -5,
-        "points": "132,30,133,29,132,29,132,28,136,28,134,28,137,29,136,29,137,30,135,30,137,31,134,33,133,32,132,32,132,30",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Iqaluit",
-        "country": "CA",
-        "pin": "155,36",
-        "offset": -5,
-        "points": "144,24,140,24,138,23,142,23,144,24",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Iqaluit",
-        "country": "CA",
-        "pin": "155,36",
-        "offset": -5,
-        "points": "133,23,137,23,139,24,138,24,138,24,138,25,139,24,142,25,140,25,142,25,141,24,142,24,146,24,146,25,144,25,147,25,145,26,146,25,146,26,148,25,147,26,148,26,147,26,149,26,148,26,149,25,151,26,149,27,150,27,149,27,152,26,150,27,151,27,151,28,153,27,152,27,155,27,152,28,155,28,153,28,156,27,155,28,153,28,156,29,154,29,155,29,154,29,155,29,155,29,156,29,154,29,156,30,156,33,155,33,156,34,156,37,154,36,156,37,156,39,151,37,150,37,151,37,149,36,148,36,148,35,148,36,148,35,147,36,147,35,146,35,146,35,147,36,142,36,141,35,142,34,148,34,147,33,150,32,148,30,148,30,147,30,148,30,145,29,144,30,145,29,143,28,143,28,143,28,143,28,142,28,142,27,140,27,139,27,140,27,141,28,136,28,138,28,135,27,137,28,132,28,132,26,133,25,132,25,132,25,133,25,132,25,132,24,133,24,132,23,133,24,132,23,133,23",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/La_Paz",
-        "country": "BO",
-        "pin": "155,148",
-        "offset": -4,
-        "points": "164,154,163,156,161,156,161,157,160,156,158,155,157,157,156,157,155,153,155,152,153,149,154,148,154,147,155,142,153,140,155,140,157,139,159,138,160,142,166,144,166,148,169,148,169,149,170,150,170,153,168,152,164,152,164,154",
-        "zoneName": "BOT"
-    }, {
-        "timezone": "America/Jamaica",
-        "country": "JM",
-        "pin": "143,100",
-        "offset": -5,
-        "points": "144,100,143,100,141,100,143,99,144,100",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Juneau",
-        "country": "US",
-        "pin": "63,44",
-        "offset": -9,
-        "points": "59,43,62,42,66,45,65,46,65,45,64,45,65,45,64,45,65,45,64,44,64,44,63,44,62,42,62,42,62,44,61,44,61,43,61,43,61,43,60,43,61,44,60,44,58,43,59,43",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Kentucky/Louisville",
-        "country": "US",
-        "pin": "131,72",
-        "offset": -5,
-        "points": "130,72,130,72,131,71,130,72",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Kentucky/Monticello",
-        "country": "US",
-        "pin": "132,74",
-        "offset": -5,
-        "points": "132,74,133,74,132,74,132,74",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Kralendijk",
-        "country": "BQ",
-        "pin": "155,108",
-        "offset": -4,
-        "points": "162,101,162,100,162,101",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Lima",
-        "country": "PE",
-        "pin": "143,142",
-        "offset": -5,
-        "points": "153,149,153,150,152,150,151,149,146,146,144,145,144,144,139,135,137,133,138,133,137,131,138,130,139,130,138,131,140,132,141,130,145,127,146,126,145,125,146,125,149,128,150,128,153,129,152,130,153,131,152,131,149,132,148,134,147,135,149,137,148,138,150,138,150,139,152,138,152,140,153,140,155,142,154,147,154,148,153,149",
-        "zoneName": "PET"
-    }, {
-        "timezone": "America/Managua",
-        "country": "NI",
-        "pin": "130,108",
-        "offset": -6,
-        "points": "132,110,131,110,128,107,129,107,129,106,131,106,132,104,135,104,134,110,132,110",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Manaus",
-        "country": "BR",
-        "pin": "167,129",
-        "offset": -4,
-        "points": "167,125,168,125,169,127,172,128,169,134,169,135,169,137,164,137,163,136,162,136,161,137,160,138,158,138,157,139,156,138,153,131,154,127,153,124,154,124,153,124,153,123,156,122,157,123,158,124,159,124,159,124,161,122,162,122,163,124,163,126,164,127,165,126,166,126,167,125",
-        "zoneName": "AMT"
-    }, {
-        "timezone": "America/Los_Angeles",
-        "country": "US",
-        "pin": "86,78",
-        "offset": -8,
-        "points": "91,62,88,62,88,61,88,62,87,63,86,64,86,66,87,66,87,67,92,67,92,75,91,75,91,77,91,79,91,79,87,80,85,78,82,77,82,76,80,73,80,72,79,72,78,71,77,69,78,67,77,66,78,61,78,61,78,61,78,60,78,60,78,60,78,60,77,58,80,58,79,59,80,58,80,59,79,60,80,59,80,57,89,57,89,59,91,60,91,62",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Lower_Princes",
-        "country": "SX",
-        "pin": "162,100",
-        "offset": -4,
-        "points": "162,100,162,100,162,100",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Maceio",
-        "country": "BR",
-        "pin": "200,138",
-        "offset": -3,
-        "points": "199,140,198,141,197,140,198,139,197,138,198,137,199,138,201,137,199,140",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Marigot",
-        "country": "MF",
-        "pin": "162,100",
-        "offset": -4,
-        "points": "162,100,162,100,162,100",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Martinique",
-        "country": "MQ",
-        "pin": "165,105",
-        "offset": -4,
-        "points": "165,104,165,104,165,104",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Matamoros",
-        "country": "MX",
-        "pin": "115,89",
-        "offset": -6,
-        "points": "113,89,112,89,109,84,108,84,107,85,107,85,107,84,109,84,112,87,112,88,115,89,115,90,113,89",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Mazatlan",
-        "country": "MX",
-        "pin": "102,93",
-        "offset": -7,
-        "points": "104,93,106,95,105,96,104,96,104,95,103,94,100,90,98,89,98,88,100,88,101,90,104,93",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Mazatlan",
-        "country": "MX",
-        "pin": "102,93",
-        "offset": -7,
-        "points": "91,86,93,86,98,93,97,93,94,91,94,89,93,88,92,88,90,86,92,87,91,86",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Menominee",
-        "country": "US",
-        "pin": "128,62",
-        "offset": -6,
-        "points": "128,62,128,61,124,60,128,61,129,62,128,62",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Mexico_City",
-        "country": "MX",
-        "pin": "112,98",
-        "offset": -6,
-        "points": "119,103,118,102,116,103,114,103,104,98,103,97,104,96,105,96,106,95,105,94,106,92,108,91,107,90,110,91,111,93,114,94,117,99,119,100,122,99,122,100,124,100,124,101,123,101,124,102,123,103,122,105,119,102,119,103",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Merida",
-        "country": "MX",
-        "pin": "126,96",
-        "offset": -6,
-        "points": "124,96,125,95,128,95,128,96,126,98,126,100,122,100,122,99,123,99,124,96",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Metlakatla",
-        "country": "US",
-        "pin": "67,48",
-        "offset": -8,
-        "points": "67,48,67,48,67,48",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Miquelon",
-        "country": "PM",
-        "pin": "172,60",
-        "offset": -3,
-        "points": "172,60,172,60,172,60",
-        "zoneName": "PMST"
-    }, {
-        "timezone": "America/Moncton",
-        "country": "CA",
-        "pin": "160,61",
-        "offset": -4,
-        "points": "157,58,160,59,159,60,160,60,160,61,161,61,158,62,156,62,156,62,156,60,154,59,155,58,157,58",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Monterrey",
-        "country": "MX",
-        "pin": "111,89",
-        "offset": -6,
-        "points": "107,90,108,91,106,92,105,94,104,94,101,90,103,88,105,88,106,88,106,86,106,85,108,84,109,84,112,89,115,89,115,90,115,90,114,90,114,94,111,93,110,91,107,90",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Montevideo",
-        "country": "UY",
-        "pin": "172,173",
-        "offset": -2,
-        "points": "172,173,170,173,169,172,170,167,171,167,172,168,173,168,176,170,175,173,172,173",
-        "zoneName": "UYT"
-    }, {
-        "timezone": "America/Montreal",
-        "country": "",
-        "pin": "250,125",
-        "offset": -5,
-        "points": "146,63,147,62,144,62,141,61,139,59,140,53,140,54,140,53,141,52,140,51,140,50,139,49,142,48,144,47,143,44,141,44,143,42,142,41,143,41,142,41,142,40,141,41,142,40,142,39,142,38,146,39,148,38,150,39,150,39,151,39,150,40,151,40,153,40,153,42,151,42,153,42,153,43,154,43,152,44,154,43,155,44,154,45,156,44,155,44,156,44,156,45,158,43,158,44,158,43,159,43,159,43,160,43,159,42,160,41,160,42,161,42,161,43,160,43,162,43,160,44,162,45,161,47,162,47,161,47,161,48,162,48,161,49,159,49,157,48,157,49,156,49,157,49,156,50,157,51,156,52,158,51,158,53,160,53,161,52,162,52,162,52,161,52,161,53,171,53,171,53,168,54,167,55,164,55,158,55,158,55,156,57,155,57,152,60,149,61,157,57,160,57,161,58,159,58,155,58,153,60,152,62,151,63,146,63",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Montserrat",
-        "country": "MS",
-        "pin": "164,102",
-        "offset": -4,
-        "points": "164,102,164,102,164,102",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Nassau",
-        "country": "BS",
-        "pin": "143,90",
-        "offset": -5,
-        "points": "143,90,143,90,143,90",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/New_York",
-        "country": "US",
-        "pin": "147,68",
-        "offset": -5,
-        "points": "132,82,131,76,132,75,133,74,130,72,132,71,132,71,132,67,136,67,140,66,140,65,144,65,144,64,146,63,152,62,154,59,156,60,156,62,157,63,155,64,154,63,154,64,152,64,151,66,152,67,153,67,153,67,151,67,151,67,151,68,148,68,146,71,145,70,146,72,145,73,145,72,144,71,145,70,144,70,144,72,143,72,144,72,143,72,144,74,143,73,144,74,145,75,144,74,145,75,143,75,145,76,143,76,144,76,143,76,144,76,144,77,138,80,137,82,139,88,138,90,137,90,136,88,136,88,136,88,135,87,136,86,135,86,135,84,133,83,131,84,132,82",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Nipigon",
-        "country": "CA",
-        "pin": "127,57",
-        "offset": -5,
-        "points": "127,57,127,57,127,57",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Nome",
-        "country": "US",
-        "pin": "20,35",
-        "offset": -9,
-        "points": "25,32,23,32,22,31,18,30,19,29,23,29,25,27,25,32",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Nome",
-        "country": "US",
-        "pin": "20,35",
-        "offset": -9,
-        "points": "25,35,24,36,19,35,18,35,19,34,16,34,23,33,22,33,25,33,25,35",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Nome",
-        "country": "US",
-        "pin": "20,35",
-        "offset": -9,
-        "points": "25,42,22,42,20,41,21,40,19,39,22,37,23,37,25,37,25,42",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Noronha",
-        "country": "BR",
-        "pin": "205,130",
-        "offset": -2,
-        "points": "205,130,205,130,205,130",
-        "zoneName": "FNT"
-    }, {
-        "timezone": "America/North_Dakota/Beulah",
-        "country": "US",
-        "pin": "109,59",
-        "offset": -6,
-        "points": "109,59,108,60,108,59,109,59",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/North_Dakota/Center",
-        "country": "US",
-        "pin": "109,60",
-        "offset": -6,
-        "points": "110,60,109,60,110,60",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/North_Dakota/New_Salem",
-        "country": "US",
-        "pin": "109,60",
-        "offset": -6,
-        "points": "110,60,110,60,110,61,108,60,110,60",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Ojinaga",
-        "country": "MX",
-        "pin": "105,84",
-        "offset": -7,
-        "points": "102,81,106,85,105,84,104,83,102,81,99,82,100,81,100,81,102,81",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Panama",
-        "country": "PA",
-        "pin": "140,113",
-        "offset": -5,
-        "points": "142,113,143,114,142,115,141,114,141,113,142,114,140,112,138,114,139,115,138,115,138,115,137,114,137,114,136,113,135,114,135,113,135,112,137,113,140,112,142,113",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Pangnirtung",
-        "country": "CA",
-        "pin": "159,33",
-        "offset": -5,
-        "points": "156,10,160,10,165,11,156,12,156,10",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Pangnirtung",
-        "country": "CA",
-        "pin": "159,33",
-        "offset": -5,
-        "points": "156,34,157,34,157,35,157,35,160,35,159,36,160,36,160,36,160,37,159,36,160,38,159,37,159,38,158,37,158,37,156,37,156,34",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Pangnirtung",
-        "country": "CA",
-        "pin": "159,33",
-        "offset": -5,
-        "points": "156,30,157,30,156,30,158,30,157,31,158,31,158,31,158,31,160,31,159,31,160,31,161,31,160,31,161,32,160,32,162,31,161,32,163,32,163,32,164,32,165,32,163,33,164,33,162,33,163,33,163,33,163,34,162,33,162,35,159,34,161,33,159,33,159,33,158,33,156,32,157,33,156,33,157,33,156,33,156,30",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Paramaribo",
-        "country": "SR",
-        "pin": "173,117",
-        "offset": -3,
-        "points": "175,118,175,120,174,122,172,121,172,122,171,122,169,119,170,118,171,118,171,117,175,117,175,118",
-        "zoneName": "SRT"
-    }, {
-        "timezone": "America/Phoenix",
-        "country": "US",
-        "pin": "94,79",
-        "offset": -7,
-        "points": "99,80,99,81,96,81,91,80,91,77,91,75,91,75,92,74,95,74,95,74,96,76,99,76,99,80",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Port-au-Prince",
-        "country": "HT",
-        "pin": "150,99",
-        "offset": -5,
-        "points": "148,99,149,99,148,99",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Port_of_Spain",
-        "country": "TT",
-        "pin": "165,110",
-        "offset": -4,
-        "points": "164,110,164,110,164,110",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Porto_Velho",
-        "country": "BR",
-        "pin": "161,137",
-        "offset": -4,
-        "points": "167,142,166,144,164,144,160,142,159,138,157,139,158,138,160,138,161,137,162,136,163,136,165,137,165,140,167,140,167,142",
-        "zoneName": "AMT"
-    }, {
-        "timezone": "America/Puerto_Rico",
-        "country": "PR",
-        "pin": "158,99",
-        "offset": -4,
-        "points": "158,99,158,99,158,99",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Rainy_River",
-        "country": "CA",
-        "pin": "119,57",
-        "offset": -6,
-        "points": "119,57,119,57,119,57",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "132,12,125,12,125,12,129,12,122,12,132,11,132,12",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "113,19,114,19,114,20,115,20,111,21,110,20,111,20,108,20,108,20,109,20,108,19,111,20,111,19,112,19,110,19,113,19",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "125,16,126,16,122,16,121,16,123,16,119,15,124,15,118,15,117,15,119,14,116,14,119,14,118,14,119,14,116,13,120,13,117,13,121,12,119,12,120,12,127,14,128,13,128,14,129,14,129,15,132,15,128,16,128,15,127,16,128,16,127,16,127,16,125,16",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "132,21,122,21,122,21,122,20,121,19,118,19,118,19,115,18,117,18,121,18,120,19,124,19,124,19,123,19,126,19,123,19,126,20,132,20,132,21",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "132,19,125,19,130,18,127,17,129,17,132,18,132,19",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "132,28,127,27,126,26,129,26,125,26,125,25,126,25,125,24,128,23,132,23,130,24,130,24,130,25,132,26,129,26,132,26,132,28",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "125,36,124,37,119,36,123,37,124,37,122,38,122,38,120,39,120,39,119,40,120,40,118,42,108,42,108,32,126,32,126,29,128,30,128,30,127,31,129,32,130,31,131,30,132,30,132,33,130,33,131,33,129,34,123,33,129,35,128,36,125,36",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rankin_Inlet",
-        "country": "CA",
-        "pin": "122,38",
-        "offset": -6,
-        "points": "118,22,120,22,125,22,122,24,119,24,120,24,120,25,117,24,117,23,119,23,118,22",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Recife",
-        "country": "BR",
-        "pin": "202,136",
-        "offset": -3,
-        "points": "196,136,197,136,198,135,199,137,201,135,202,136,201,137,199,138,198,137,197,138,195,137,194,138,193,137,194,136,194,135,196,136",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Regina",
-        "country": "CA",
-        "pin": "105,55",
-        "offset": -6,
-        "points": "104,57,97,57,97,52,99,51,97,51,97,42,108,42,108,48,108,49,109,50,109,57,104,57",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Resolute",
-        "country": "CA",
-        "pin": "118,21",
-        "offset": -6,
-        "points": "118,20,120,20,120,21,116,21,118,20",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Rio_Branco",
-        "country": "BR",
-        "pin": "156,139",
-        "offset": -4,
-        "points": "148,135,152,136,157,139,155,140,152,140,152,138,150,139,150,138,148,138,149,137,147,135,148,135",
-        "zoneName": "ACT"
-    }, {
-        "timezone": "America/Santa_Isabel",
-        "country": "MX",
-        "pin": "90,83",
-        "offset": -8,
-        "points": "91,80,91,83,93,86,91,86,92,85,89,84,88,81,88,80,91,80",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Santarem",
-        "country": "BR",
-        "pin": "174,128",
-        "offset": -3,
-        "points": "176,125,177,126,178,127,177,127,178,129,177,130,177,132,178,134,177,136,178,138,177,138,171,138,170,137,169,134,172,128,168,126,168,123,170,122,172,122,172,121,174,121,174,123,176,123,176,125",
-        "zoneName": "BRT"
-    }, {
-        "timezone": "America/Santiago",
-        "country": "CL",
-        "pin": "152,171",
-        "offset": -3,
-        "points": "152,199,154,198,155,198,155,201,150,201,153,201,152,200,154,201,154,201,154,201,153,200,154,199,152,199,152,199",
-        "zoneName": "CLT"
-    }, {
-        "timezone": "America/Santiago",
-        "country": "CL",
-        "pin": "152,171",
-        "offset": -3,
-        "points": "148,193,148,195,148,196,150,195,149,197,150,197,155,198,152,198,151,200,149,199,150,199,151,198,151,198,149,198,149,199,148,199,149,198,148,198,148,197,149,198,149,197,149,198,149,198,149,198,149,197,148,196,148,197,149,197,148,197,149,197,148,197,148,197,148,197,147,197,148,196,147,196,148,195,148,195,147,196,147,195,146,195,147,195,147,194,148,194,147,193,147,194,147,193,147,193,147,193,147,192,146,192,148,192,148,191,146,191,147,191,147,191,147,191,147,190,145,190,146,189,147,189,147,190,148,188,148,189,148,188,149,188,148,188,149,187,148,186,149,184,149,184,149,184,149,183,149,183,150,183,148,183,147,182,148,180,148,177,148,177,151,172,151,165,152,162,152,157,153,155,152,150,154,149,155,152,155,153,156,157,157,157,156,158,155,159,155,162,153,164,153,167,152,168,153,173,152,174,152,175,151,176,152,179,150,180,150,183,150,184,151,186,150,187,151,187,150,187,151,188,150,188,150,190,149,191,149,193,148,193",
-        "zoneName": "CLT"
-    }, {
-        "timezone": "America/Santo_Domingo",
-        "country": "DO",
-        "pin": "153,99",
-        "offset": -4,
-        "points": "151,100,150,100,150,99,150,97,153,98,154,98,153,98,155,99,155,100,151,100",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Scoresbysund",
-        "country": "GL",
-        "pin": "219,27",
-        "offset": -1,
-        "points": "216,25,219,25,218,26,220,25,219,26,220,26,220,26,219,26,220,26,219,26,220,27,217,27,216,26,216,25",
-        "zoneName": "EGT"
-    }, {
-        "timezone": "America/Sao_Paulo",
-        "country": "BR",
-        "pin": "185,158",
-        "offset": -2,
-        "points": "181,166,179,168,178,170,180,167,179,167,179,168,176,172,176,171,176,170,175,170,173,168,172,168,171,167,170,167,173,164,175,162,175,161,174,161,175,159,176,157,178,155,179,152,177,151,176,149,179,146,180,142,181,143,182,142,182,143,184,143,186,143,186,146,189,145,195,147,194,149,195,150,195,152,193,155,193,156,192,157,188,157,183,160,182,160,183,161,182,161,183,161,182,164,181,166",
-        "zoneName": "BRST"
-    }, {
-        "timezone": "America/Sitka",
-        "country": "US",
-        "pin": "62,46",
-        "offset": -9,
-        "points": "66,45,67,46,65,46,66,45,66,45",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/St_Barthelemy",
-        "country": "BL",
-        "pin": "163,100",
-        "offset": -4,
-        "points": "163,100,163,100,163,100",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/St_Johns",
-        "country": "CA",
-        "pin": "177,59",
-        "offset": -3.5,
-        "points": "173,53,172,54,173,54,172,54,171,56,172,55,173,56,172,56,173,56,173,57,174,56,176,57,175,58,176,57,175,58,175,59,177,58,176,59,177,59,176,60,176,60,176,59,175,60,175,59,175,58,173,60,174,59,172,59,173,59,173,58,171,59,168,59,169,58,168,58,169,57,170,57,169,57,170,56,169,56,170,55,173,53",
-        "zoneName": "NST"
-    }, {
-        "timezone": "America/Thule",
-        "country": "GL",
-        "pin": "154,19",
-        "offset": -4,
-        "points": "161,19,155,19,153,19,156,18,151,18,158,17,153,17,153,17,149,16,158,15,161,19",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/St_Kitts",
-        "country": "KN",
-        "pin": "163,101",
-        "offset": -4,
-        "points": "163,101,163,101,163,101",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/St_Lucia",
-        "country": "LC",
-        "pin": "165,106",
-        "offset": -4,
-        "points": "165,105,165,106,165,105",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/St_Thomas",
-        "country": "VI",
-        "pin": "160,100",
-        "offset": -4,
-        "points": "160,99,160,99,160,99",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/St_Vincent",
-        "country": "VC",
-        "pin": "165,107",
-        "offset": -4,
-        "points": "165,106,165,107,165,106",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Swift_Current",
-        "country": "CA",
-        "pin": "100,55",
-        "offset": -6,
-        "points": "100,55,100,55,100,55",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Tegucigalpa",
-        "country": "HN",
-        "pin": "129,105",
-        "offset": -6,
-        "points": "129,106,129,107,128,106,126,105,126,104,128,103,131,103,133,103,135,104,132,104,131,106,129,106",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Thunder_Bay",
-        "country": "CA",
-        "pin": "126,58",
-        "offset": -5,
-        "points": "126,58,126,58,126,58",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Tijuana",
-        "country": "MX",
-        "pin": "87,80",
-        "offset": -8,
-        "points": "87,80,87,80,87,80",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Toronto",
-        "country": "CA",
-        "pin": "140,64",
-        "offset": -5,
-        "points": "146,62,147,62,143,64,142,63,143,64,143,64,140,64,139,65,140,65,135,67,137,65,137,63,137,62,138,63,139,63,138,61,137,61,136,62,133,61,133,60,132,58,131,58,130,57,127,57,128,58,126,58,126,58,124,58,124,57,125,56,125,55,124,53,125,53,125,52,126,52,127,51,126,50,125,50,125,47,127,46,128,47,132,48,136,48,136,51,138,54,140,54,140,60,141,61,144,62,146,62",
-        "zoneName": "EST"
-    }, {
-        "timezone": "America/Tortola",
-        "country": "VG",
-        "pin": "160,99",
-        "offset": -4,
-        "points": "160,99,160,99,160,99",
-        "zoneName": "AST"
-    }, {
-        "timezone": "America/Vancouver",
-        "country": "CA",
-        "pin": "79,57",
-        "offset": -8,
-        "points": "72,54,76,55,79,58,76,57,77,57,76,57,75,56,74,56,75,56,72,55,73,55,72,54",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Vancouver",
-        "country": "CA",
-        "pin": "79,57",
-        "offset": -8,
-        "points": "63,43,62,42,59,43,57,42,83,42,83,45,78,46,79,48,86,52,86,52,85,53,88,55,88,57,79,57,81,56,81,57,80,56,81,57,80,57,80,56,79,57,79,56,79,56,79,55,79,56,78,56,78,56,78,56,78,55,77,56,77,55,77,55,76,55,77,54,76,54,76,55,75,55,76,54,75,55,74,54,75,54,73,54,74,54,73,54,74,53,73,53,72,53,73,52,74,53,74,52,75,52,73,52,73,52,73,52,72,53,72,52,72,52,72,52,71,51,73,51,71,51,71,50,70,51,69,50,70,50,69,49,69,50,69,49,70,48,69,49,70,48,70,48,69,49,69,47,67,46,65,44,63,43",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Whitehorse",
-        "country": "CA",
-        "pin": "62,41",
-        "offset": -8,
-        "points": "57,29,60,29,61,32,64,32,64,33,66,33,66,35,69,36,70,37,69,37,70,37,70,39,73,40,74,41,77,40,78,42,54,41,54,28,57,29",
-        "zoneName": "PST"
-    }, {
-        "timezone": "America/Winnipeg",
-        "country": "CA",
-        "pin": "115,56",
-        "offset": -6,
-        "points": "122,58,119,57,118,56,118,57,109,57,109,50,108,49,108,48,108,42,118,42,118,43,121,43,122,45,121,46,124,45,126,46,125,47,125,50,126,50,127,51,126,52,125,52,125,53,124,53,125,55,125,56,123,57,122,58",
-        "zoneName": "CST"
-    }, {
-        "timezone": "America/Yakutat",
-        "country": "US",
-        "pin": "56,42",
-        "offset": -9,
-        "points": "56,42,56,42,56,42",
-        "zoneName": "AKST"
-    }, {
-        "timezone": "America/Yellowknife",
-        "country": "CA",
-        "pin": "91,38",
-        "offset": -7,
-        "points": "83,31,92,34,95,34,97,35,108,36,108,42,78,42,77,40,74,41,73,40,70,39,70,37,69,37,70,37,69,36,66,35,66,33,64,33,64,32,61,32,60,29,62,30,61,29,63,28,64,28,64,29,70,28,67,28,67,29,68,28,68,29,69,28,73,27,72,27,76,29,77,28,78,28,77,29,79,28,82,28,81,28,81,30,83,31",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Yellowknife",
-        "country": "CA",
-        "pin": "91,38",
-        "offset": -7,
-        "points": "88,17,90,18,88,18,89,18,87,19,86,19,86,18,83,20,79,19,84,18,88,17",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Yellowknife",
-        "country": "CA",
-        "pin": "91,38",
-        "offset": -7,
-        "points": "84,22,87,22,90,23,85,24,83,25,83,26,79,26,75,25,78,23,77,22,81,21,84,22",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Yellowknife",
-        "country": "CA",
-        "pin": "91,38",
-        "offset": -7,
-        "points": "91,19,97,20,97,21,93,22,91,21,96,20,87,20,90,20,87,20,91,20,88,20,91,19",
-        "zoneName": "MST"
-    }, {
-        "timezone": "America/Yellowknife",
-        "country": "CA",
-        "pin": "91,38",
-        "offset": -7,
-        "points": "90,23,92,23,91,24,93,24,96,24,95,25,97,24,97,28,87,28,87,28,87,28,95,27,87,27,86,26,90,26,86,26,87,25,85,25,86,25,86,24,90,23",
-        "zoneName": "MST"
-    }, {
-        "timezone": "Antarctica/Macquarie",
-        "country": "AU",
-        "pin": "471,201",
-        "offset": 11,
-        "points": "471,201,471,201,471,201",
-        "zoneName": "MIST"
-    }, {
-        "timezone": "Arctic/Longyearbyen",
-        "country": "SJ",
-        "pin": "272,17",
-        "offset": 1,
-        "points": "275,14,275,14,275,15,275,14,280,16,276,16,276,17,274,18,274,19,273,19,272,18,273,18,269,17,273,17,270,17,274,17,269,17,269,17,274,16,273,16,273,16,271,16,271,15,270,16,271,16,268,16,267,16,268,16,266,15,267,15,266,15,267,15,266,15,265,15,269,14,267,14,269,15,269,15,270,14,273,15,272,14,275,14",
-        "zoneName": "CET"
-    }, {
-        "timezone": "Arctic/Longyearbyen",
-        "country": "SJ",
-        "pin": "272,17",
-        "offset": 1,
-        "points": "285,14,288,14,283,15,275,14,277,14,276,13,278,14,277,13,281,14,282,13,282,13,282,14,285,14",
-        "zoneName": "CET"
-    }, {
-        "timezone": "Asia/Aden",
-        "country": "YE",
-        "pin": "313,107",
-        "offset": 3,
-        "points": "313,107,310,107,309,104,310,101,314,102,314,103,318,100,322,99,324,102,323,102,322,103,313,107",
-        "zoneName": "AST"
-    }, {
-        "timezone": "Asia/Almaty",
-        "country": "KZ",
-        "pin": "357,65",
-        "offset": 6,
-        "points": "348,66,345,68,343,68,342,66,344,65,345,64,344,63,343,61,337,60,339,58,339,58,340,57,342,57,345,55,344,54,344,52,342,52,342,51,342,51,342,51,342,49,346,48,348,48,349,50,352,50,352,51,357,49,356,50,358,51,361,55,362,54,363,55,366,54,368,56,371,56,371,57,369,58,369,60,365,59,364,62,365,62,363,62,361,63,362,63,362,65,361,66,359,65,355,66,353,65,352,65,352,66,350,66,348,66",
-        "zoneName": "ALMT"
-    }, {
-        "timezone": "Asia/Amman",
-        "country": "JO",
-        "pin": "300,81",
-        "offset": 2,
-        "points": "302,82,303,83,302,83,300,84,299,84,299,80,301,80,304,79,305,80,301,81,302,82",
-        "zoneName": "EET"
-    }, {
-        "timezone": "Asia/Anadyr",
-        "country": "RU",
-        "pin": "497,35",
-        "offset": 12,
-        "points": "10,32,14,33,13,34,12,34,12,34,10,34,11,34,11,35,9,35,11,36,10,36,6,35,6,34,2,34,2,33,2,33,0,33,1,34,0,35,0,29,7,31,8,33,9,33,7,32,10,32",
-        "zoneName": "ANAT"
-    }, {
-        "timezone": "Asia/Anadyr",
-        "country": "RU",
-        "pin": "497,35",
-        "offset": 12,
-        "points": "497,35,493,35,498,36,499,38,499,39,496,38,492,39,491,38,487,39,484,37,486,37,484,36,473,35,471,34,471,33,470,33,471,32,469,31,470,30,476,30,476,29,475,28,476,28,483,28,486,30,488,29,486,28,487,28,495,28,500,29,500,35,498,35,497,35",
-        "zoneName": "ANAT"
-    }, {
-        "timezone": "Asia/Aqtau",
-        "country": "KZ",
-        "pin": "320,63",
-        "offset": 5,
-        "points": "328,63,328,68,325,66,323,67,323,66,321,65,320,63,322,63,321,63,321,62,324,62,323,60,321,60,319,61,317,60,318,60,318,59,315,58,319,58,325,57,325,57,326,57,327,60,329,61,329,62,328,63",
-        "zoneName": "AQTT"
-    }, {
-        "timezone": "Asia/Aqtobe",
-        "country": "KZ",
-        "pin": "329,55",
-        "offset": 5,
-        "points": "326,55,326,54,327,55,328,54,331,54,333,55,335,54,336,54,337,56,337,57,339,58,337,60,335,59,331,62,329,62,328,60,326,59,326,57,324,57,326,56,326,55",
-        "zoneName": "AQTT"
-    }, {
-        "timezone": "Asia/Ashgabat",
-        "country": "TM",
-        "pin": "331,72",
-        "offset": 5,
-        "points": "340,74,340,75,337,76,335,75,335,74,334,74,332,73,329,72,325,73,325,71,324,71,324,70,325,70,323,69,324,68,323,67,325,66,327,68,329,68,329,67,331,66,331,66,331,66,331,66,333,66,334,68,336,68,337,70,343,72,342,73,341,73,340,74",
-        "z

<TRUNCATED>

[05/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/LogFileView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/LogFileView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/LogFileView.js
deleted file mode 100644
index c7e1cba..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/LogFileView.js
+++ /dev/null
@@ -1,864 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Globals',
-    'utils/Utils',
-    'moment',
-    'utils/ViewUtils',
-    'collections/VLogList',
-    'hbs!tmpl/tabs/LogFileView_tmpl',
-    'views/common/JBDialog',
-    'views/tabs/ExportLogFileView',
-    'select2'
-], function(require, Backbone, Globals, Utils, moment, ViewUtils, VLogList, LogFileTmpl, JBDialog, ExportLogFileView) {
-
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends LogFileView */
-        {
-            _viewName: 'LogFileView',
-
-            template: LogFileTmpl,
-            /** Layout sub regions */
-            regions: {
-                RLogFileTable: "#logFileTable",
-                RLogLevel: "#r_LogLevel",
-                //RVSSearch : "#r_VSSearch",
-                RHistogram: "#r_Histogram",
-                RTimer: "[data-id='timer']",
-                RDatePicker: "#r_DatePicker",
-                RLogSnapShot: "#r_LogSnapShot",
-                RVisualSearchIncCol: "[data-id='r_vsSearchIncCol']",
-                RVisualSearchExCol: "[data-id='r_vsSearchExCol']"
-            },
-
-            /** ui selector cache */
-            ui: {
-                searchBoxBtn: '[data-id="hierarchySearchBtn"]',
-                searchBox: '[data-id="hierarchySearch"]',
-                find: '[data-id="find"]',
-                next: '[data-id="next"]',
-                prev: '[data-id="prev"]',
-                lock: '[data-id="lock"]',
-                last: '[data-id="last"]',
-                first: '[data-id="first"]',
-                cancelFind: '[data-id="cancelFind"]',
-                contextMenu: ".contextMenu",
-                pageNotation: ".pageNotation",
-                clearSearch: ".clearSearch"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events["click " + this.ui.searchBoxBtn] = 'onSearchLogClick';
-                events['click #searchLog'] = 'onSearchLogClick';
-                events['click [data-id="refresh-tab"]'] = 'onTabRefresh';
-                events['click ' + this.ui.first] = 'onFindFirst';
-                events['click ' + this.ui.prev] = 'onFindNxt';
-                events['click ' + this.ui.next] = 'onFindNxt';
-                events['click ' + this.ui.last] = 'onFindLast';
-                events["keyup " + this.ui.find] = 'onFindKeyPress';
-                events['click .clearSearch'] = 'onClearSearchClick';
-                events["click " + this.ui.lock] = 'onLockToggle';
-                events["click " + this.ui.cancelFind] = 'onCancelFindClick';
-                events["click .contextMenu li a"] = 'onDropDownMenuClick';
-                events['click [data-id="export-logs-text"]'] = 'onExportLogClick';
-                events['click .export-dropdown a'] = 'exportLogFile';
-                events['change [data-id="toggleTable"]'] = 'onToggleTableView';
-                events['click .quickMenu li'] = 'onQuickMenuClick';
-                return events;
-            },
-
-            /**
-             * intialize a new LogFileView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params'));
-                this.logFileCollection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 25
-                    }
-                });
-                this.logFileCollection.url = Globals.baseURL + "service/logs";
-                this.vent = new Backbone.Wreqr.EventAggregator();
-                this.bindEvents();
-                this.commonTableOptions = {
-                    collection: this.logFileCollection,
-                    includeFilter: false,
-                    includePagination: true,
-                    includePageSize: true,
-                    includeFooterRecords: true,
-                    includeColumnManager: true,
-                    columnOpts: {
-                        initialColumnsVisible: 2,
-                        saveState: false
-                    },
-                    gridOpts: {
-                        className: "table table-bordered table-striped table-hover table-condensed backgrid table-quickMenu",
-                        //header : CustomBackgrid,
-                        //row: IdRow,
-                        emptyText: 'No records found!'
-                    },
-                    filterOpts: {},
-                    paginatorOpts: {}
-                };
-            },
-            onRender: function() {
-                var that = this;
-                this.fetchCollection((this.params) ? this.params : { q: "*:*" });
-                this.renderHistogram();
-                //this.renderTable();
-                this.renderDatePicker();
-                this.renderTableLikeLogFile();
-                this.renderLogLevel();
-                this.renderVisualSearch();
-                this.renderTimer();
-                this.setHostName();
-                this.renderLogSnapShot();
-                this.$('*:not(.export-dropdown)').on("click", function() {
-                    that.$(".export-dropdown").hide();
-                });
-            },
-            onShow: function() {
-                this.findScrollEvent();
-            },
-            onTabRefresh: function() {
-                ViewUtils.setLatestTimeParams(this.params);
-                this.fetchTableCollection(this.params);
-                this.vent.trigger("tab:refresh");
-            },
-            onExportLogClick: function(e) {
-                //			console.log("clicked");
-                //			this.$(".export-dropdown").show();
-                var that = this;
-                require(['views/common/JBDialog', ], function(JBDialog) {
-                    var view = new ExportLogFileView();
-                    var opts = _.extend({
-                        title: "Export",
-                        content: view,
-                        viewType: 'Update',
-                        appendTo: that.$el,
-                        modal: true,
-                        resizable: false,
-                        width: 550,
-                        beforeClose: function(event, ui) {
-                            that.onDialogClosed();
-                        },
-                        buttons: [{
-                            id: "okBtn",
-                            text: "Export",
-                            "class": "btn btn-primary",
-                            click: function() {
-                                that.onDialogSubmitted();
-                            }
-                        }, {
-                            id: "cancelBtn",
-                            text: "Cancel",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    });
-                    var dialog = that.dialog = new JBDialog(opts).render().open();
-                })
-
-            },
-            onDialogSubmitted: function() {
-                var obj = Utils.getFormData(this.dialog.$(".form-horizontal").serializeArray());
-                this.downloadLogFile(obj);
-            },
-            /** closing the movable/resizable popup */
-            onDialogClosed: function() {
-                if (this.dialog) {
-                    this.dialog.close && this.dialog.close();
-                    this.dialog.remove && this.dialog.remove();
-                    this.dialog = null;
-                }
-            },
-            downloadLogFile: function(obj) {
-                obj.utcOffset = moment().utcOffset();
-                obj.startIndex = this.logFileCollection.state.currentPage * this.logFileCollection.state.pageSize;
-                var params = $.param(_.extend({}, this.logFileCollection.queryParams, obj));
-                var url = "api/v1/service/logs/export?" + params;
-                window.open(url);
-                this.onDialogClosed();
-            },
-            fetchCollection: function(params) {
-                var that = this;
-                this.$('#loaderToolbar').show();
-                _.extend(this.params, params);
-                $.extend(this.logFileCollection.queryParams, params);
-                this.logFileCollection.getFirstPage({
-                    reset: true,
-                    complete: function() {
-                        that.$('#loaderToolbar').hide();
-                    }
-                });
-            },
-            fetchTableCollection: function(queryParams, param) {
-                var that = this;
-                $.extend(this.logFileCollection.queryParams, queryParams);
-                this.logFileCollection.fetch(_.extend({
-                    reset: true,
-                    beforeSend: function() {
-                        that.$("#loaderToolbar").show();
-                    }
-                }, param));
-            },
-            onSearchLogClick: function() {
-                var value = this.ui.searchBox.val();
-                if (_.isEmpty(value)) {
-                    this.ui.searchBox.val("*:*");
-                    value = "*:*";
-                }
-                this.vent.trigger("main:search", { q: value });
-            },
-            bindEvents: function() {
-                this.listenTo(this.logFileCollection, 'request', function() {
-                    this.$("#loader").show();
-                }, this);
-                this.listenTo(this.logFileCollection, 'sync error', function() {
-                    this.$("#loader").hide();
-                    this.selectionText = "";
-                }, this);
-                this.listenTo(this.logFileCollection, "backgrid:refresh", function() {
-                    this.setupFind();
-                    var that = this;
-                    var element = this.$("tr[data-id='" + this.params.sourceLogId + "']");
-                    if (this.params && this.params.sourceLogId) {
-                        this.params.sourceLogId = undefined;
-                        (this.logFileCollection.queryParams.sourceLogId) ? this.logFileCollection.queryParams.sourceLogId = undefined: "";
-                        if (element.offset()) {
-                            var top = element.offset().top;
-                            element.addClass('highlightLog');
-                            $("html, body").animate({ scrollTop: (top - 200) }, 1);
-                            /*setTimeout(function(){
-                            	element.addClass('fadeOutColor')
-                            	setTimeout(function(){element.removeClass('fadeOutColor highlightLog');},4000)
-                            },6000);*/
-                        }
-                    }
-                    this.$("#loaderToolbar").hide();
-                }, this);
-                this.listenTo(this.vent, "level:filter", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.vent, "search:include:exclude " + Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns, function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.vent, "main:search", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.vent, "logtime:filter", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.vent, "tab:refresh", function(params) {
-                	this.fetchTableCollection(params);
-                },this);
-                this.listenTo(this.vent, "timer:end", function(value) {
-                    //timer should start only after log table fetch is complete.
-                    ViewUtils.setLatestTimeParams(this.params);
-                    this.vent.trigger("tab:refresh", this.params);
-                    var that = this;
-                    this.fetchTableCollection(this.params, {
-                        complete: function() {
-                            that.vent.trigger("start:timer");
-                        }
-                    });
-                }, this);
-            },
-            renderLogLevel: function() {
-                var that = this;
-                require(['views/dashboard/LogLevelBoxView'], function(LogLevelBoxView) {
-                    that.RLogLevel.show(new LogLevelBoxView({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params
-                    }));
-                });
-            },
-            renderVisualSearch: function() {
-              var that = this;
-              var data = _.values(Globals.serviceLogsColumns);
-              var columns = _.without(data, _.findWhere(data, "logtime"));
-              require(['views/tabs/VisualSearchView'], function (VisualSearchView) {
-                that.RVisualSearchIncCol.show(new VisualSearchView({
-                  params: that.params,
-                  viewName: "includeServiceColumns",
-                  placeholder: "Include Search",
-                  vent: that.vent,
-                  globalVent: that.globalVent,
-                  customOptions: columns,
-                  eventName: Globals.eventName.serviceLogsIncludeColumns,
-                  myFormatData: function (query, searchCollection) {
-                    var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedServiceLogMappings, false);
-                    return {
-                      includeQuery: JSON.stringify(obj),
-                      query: query
-                    }
-                  }
-                }));
-                that.RVisualSearchExCol.show(new VisualSearchView({
-                  params: that.params,
-                  viewName: "excludeServiceColumns",
-                  placeholder: "Exclude Search",
-                  vent: that.vent,
-                  globalVent: that.globalVent,
-                  customOptions: columns,
-                  eventName: Globals.eventName.serviceLogsExcludeColumns,
-                  myFormatData: function (query, searchCollection) {
-                    var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedServiceLogMappings, false);
-                    return {
-                      excludeQuery: JSON.stringify(obj),
-                      query: query
-                    }
-                  }
-                }));
-              });
-            },
-            renderHistogram: function() {
-                var that = this;
-                require(['views/graphs/GraphLayoutView'], function(GraphLayoutView) {
-                    that.RHistogram.show(new GraphLayoutView({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params,
-                        showUnit : true
-                    }));
-                });
-            },
-            getIdRowForTableLayout : function(){
-                var IdRow =  Backgrid.Row.extend({
-                    render: function() {
-                        IdRow.__super__.render.apply(this, arguments);
-                        if (this.model.has("id")) {
-                            this.$el.attr("data-id", this.model.get('id'));
-                        }
-                        return this;
-                    }
-                });
-            return IdRow;
-            },
-            renderTableLikeLogFile: function() {
-                var that = this;
-                require(['views/common/TableLayout'], function(TableLayout) {
-                    var cols = new Backgrid.Columns(that.getTableLikeLogFileColumns());
-                    that.RLogFileTable.show(new TableLayout(_.extend({}, that.commonTableOptions, {
-                        columns: cols,
-                        includeColumnManager: false,
-                        gridOpts: {
-                        	row: that.getIdRowForTableLayout(),
-                            className: "table table-bordered table-hover table-condensed backgrid logFileFont table-quickMenu",
-                        },
-                    })));
-                });
-            },
-            renderTable: function() {
-                var that = this;
-                require(['views/common/TableLayout'], function(TableLayout) {
-                    var cols = new Backgrid.Columns(that.getColumns());
-                    that.RLogFileTable.show(new TableLayout(_.extend({}, that.commonTableOptions, {
-                        columns: cols,
-                        gridOpts: {
-                        	row: that.getIdRowForTableLayout(),
-                        }
-                    })));
-                });
-            },
-            renderTimer: function() {
-                var that = this;
-                require(['views/common/TimerView'], function(TimerView) {
-                    that.RTimer.show(new TimerView({
-                        vent: that.vent,
-                        globalVent: that.globalVent
-                    }));
-                });
-            },
-            renderDatePicker: function() {
-                var that = this;
-                require(['views/common/DatePickerLayout'], function(DatePickerLayout) {
-                    that.RDatePicker.show(new DatePickerLayout({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params,
-                        datePickerPosition: 'left',
-                        rangeLabel: true,
-                        parentEl: that.$el.find('.topLevelFilter')
-                    }));
-                });
-            },
-            renderLogSnapShot: function() {
-                var that = this;
-                require(['views/common/LogSnapShotLayout'], function(LogSnalShopLayout) {
-                    that.RLogSnapShot.show(new LogSnalShopLayout({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params,
-                    }));
-                });
-            },
-            setupFind: function() {
-                var that = this;
-                that.ui.contextMenu.hide();
-                //that.ui.find.trigger("keyup");
-                setTimeout(function() {
-                    that.initializeContextMenu();
-                    that.ui.find.trigger("keyup");
-                }, 1000);
-            },
-            getTableLikeLogFileColumns: function() {
-                var timeZone = moment().zoneAbbr(),
-                    that = this;
-                return this.logFileCollection.constructor.getTableCols({
-                    logtime: {
-                        label: "Log Time " + (!_.isEmpty(timeZone) ? "(" + timeZone + ")" : ""),
-                        cell: "html",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: true,
-                        //width : "50",
-                        orderable: true,
-                        displayOrder: 4,
-                        //className : "logMessage",
-                        formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                            fromRaw: function(rawValue, model) {
-
-                                return (rawValue) ? "<div style='position:relative; padding-left:15px'>"+ViewUtils.foramtLogMessageAsLogFile(model) + that.getDropdownQuickMenuHtml() + "</div>" : "";
-                            }
-                        })
-                    }
-                }, this.logFileCollection);
-
-            },
-            getColumns: function() {
-                var timeZone = moment().zoneAbbr(),
-                    that = this,
-                    cols = {};
-                this.cols = {
-                    logtime: {
-                        label: "Log Time " + (!_.isEmpty(timeZone) ? "(" + timeZone + ")" : ""),
-                        cell: "html",
-                        editable: false,
-                        sortType: 'toggle',
-                        direction: "descending",
-                        orderable: true,
-                        displayOrder: 1,
-                        width: "17",
-                        className: "logTime",
-                        formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                            fromRaw: function(rawValue, model) {
-                                var str = "";
-                                if (rawValue)
-                                    str += "<div style='position:relative'><p style='margin-left:20px'>" + moment(rawValue).format("YYYY-MM-DD HH:mm:ss,SSS") + "</p>";
-                                if (model.get("level"))
-                                    str += "<p style='margin-left:20px'><label class='label label-" + (""+model.get("level")).toUpperCase() + "'>" + (""+model.get("level")).toUpperCase() + "</label></p>";
-                                str += that.getDropdownQuickMenuHtml()+"</div>";
-                                return str;
-                            }
-                        })
-                    },
-                    log_message: {
-                        label: "Message",
-                        cell: "html",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        //width : "50",
-                        orderable: true,
-                        displayOrder: 4,
-                        className: "logMessage",
-                        formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                            fromRaw: function(rawValue, model) {
-                                return (rawValue) ? "<pre>" + Utils.escapeHtmlChar(rawValue) + "</pre>" : "";
-                            }
-                        })
-                    },
-                    thread_name: {
-                        label: "Thread",
-                        cell: "String",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 5,
-                        width: 10
-                    },
-                    bundle_id: {
-                        label: "Bundle Id",
-                        cell: "String",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 6,
-                        width: 6
-                    }
-
-                };
-                _.each(this.columns, function(value){
-                  var name = Globals.invertedServiceLogMappings[value];
-                  if (columns[name] === undefined) {
-                    var columnObj = {
-                      name: Globals.invertedServiceLogMappings[value],
-                      label:value,
-                      cell: "String",
-                      sortType: 'toggle',
-                      editable: false
-                    };
-                    columns[name] = columnObj;
-                  } else {
-                    if (columns[name] && columns[name].label) {
-                      columns[name].label = value;
-                    }
-                  }
-                });
-                return this.logFileCollection.constructor.getTableCols(this.cols, this.logFileCollection);
-            },
-            initializeContextMenu: function() {
-                var that = this;
-
-                $('body').on("mouseup.contextMenuLogFile", function(e) {
-                    var selection;
-                    if (window.getSelection) {
-                        selection = window.getSelection();
-                    } else if (document.selection) {
-                        selection = document.selection.createRange();
-                    }
-                    if (_.isEmpty(selection.toString())) {
-                        that.selectionText = "";
-                    }
-
-                });
-
-                this.$(".logMessage").on('mouseup contextmenu', function(e) {
-                    var selection;
-                    e.stopPropagation();
-
-                    var range = window.getSelection().getRangeAt(0);
-                    var selectionContents = range.cloneContents();
-                    selection = selectionContents.textContent;
-
-                    setTimeout(function() {
-                        that.selectionCallBack(selection, e)
-                    }, 1);
-                });
-            },
-            selectionCallBack: function(selection, e) {
-                this.RLogFileTable.currentView.$el.removeHighlight(true);
-                if (this.selectionText != selection.toString()) {
-                    this.selectionText = selection.toString();
-                } else {
-                    this.ui.contextMenu.hide();
-                    return;
-                }
-                if (selection.toString() && selection && (!_.isEmpty(selection.toString().trim()))) {
-                    this.RLogFileTable.currentView.$el.find(".logMessage").highlight(selection.toString().trim(), true, e.currentTarget);
-                    this.ui.contextMenu.show();
-                    this.ui.contextMenu.css({
-                        'top': e.pageY - 140,
-                        'left': e.pageX
-                    });
-                } else {
-                    this.RLogFileTable.currentView.$el.removeHighlight(true);
-                    this.ui.contextMenu.hide();
-                }
-            },
-            onDropDownMenuClick: function(e) {
-                var $el = $(e.currentTarget),
-                    type = $el.data("id");
-                if (!_.isEmpty(this.selectionText)) {
-                    if (type == "F") {
-                        this.ui.find.val(this.selectionText);
-                        this.ui.find.trigger("keyup");
-                        this.ui.find.focus();
-                    }else if(type === "IA" || type === "EA"){
-                        this.vent.trigger("toggle:facet",{viewName:((type === "IA") ? "include" : "exclude") +"ServiceColumns",
-                          key:Globals.defaultServiceLogMappings["log_message"],value:"*"+this.selectionText+"*"});
-                    }
-                    else {
-                        //this.vent.trigger("add:include:exclude",{type:type,value:this.selectionText});
-                        this.vent.trigger("toggle:facet", { viewName: ((type === "I") ? "include" : "exclude") + "ServiceColumns",
-                          key: Globals.defaultServiceLogMappings["log_message"], value: this.selectionText });
-                    }
-                    this.ui.contextMenu.hide();
-                }
-            },
-            setHostName: function() {
-                this.$("[data-id='hostName']").text(this.params.host_name);
-                this.$("[data-id='componentName']").text(this.params.component_name);
-            },
-            getFindValue: function() {
-                return this.ui.find.val();
-            },
-            findScrollEvent: function() {
-                var that = this;
-                $(window).scroll(function() {
-                    if ($(this).scrollTop() > 300 && that.isIconLock()) {
-                        that.$('.advance-find').addClass('fixed');
-                    } else {
-                        that.$('.advance-find').removeClass('fixed');
-                    }
-                });
-            },
-            onClearSearchClick: function() {
-                this.ui.find.val('');
-                this.ui.find.trigger("keyup");
-            },
-            onFindKeyPress: function(e) {
-                if (e.which == 13) {
-                    this.ui.next.trigger("click");
-                    return
-                }
-                if (this.RLogFileTable.currentView) {
-                    this.RLogFileTable.currentView.$el.removeHighlight(true);
-                    this.RLogFileTable.currentView.$el.removeHighlight();
-                    var val = e.currentTarget.value.trim();
-                    if (!_.isEmpty(val)) {
-                        this.RLogFileTable.currentView.$el.find(".logMessage").highlight(val);
-                        this.$highlights = this.$(".highlight");
-                        this.counter = 0;
-                        //this.scrollToFirstElement();
-                    } else {
-                        this.resetFindParams();
-                    }
-                }
-            },
-            onLockToggle: function(e) {
-                var $el = $(e.currentTarget);
-                if ($el.find('i').hasClass("fa-lock")) {
-                    $el.find('i').removeClass("fa-lock").addClass("fa-unlock")
-                } else
-                    $el.find('i').removeClass("fa-unlock").addClass("fa-lock")
-            },
-            isIconLock: function() {
-                if (this.ui.lock && this.ui.lock.find)
-                    return (this.ui.lock.find("i").hasClass("fa-lock")) ? false : true;
-            },
-            scrollToFirstElement: function() {
-                this.scroll(this.$highlights.first());
-            },
-            scroll: function($el) {
-                $('html, body').animate({
-                    scrollTop: $el.offset().top - 200
-                }, 100);
-            },
-            onFindNxt: function(e) {
-
-                var type = $(e.currentTarget).data("id");
-                if (!this.searchFlag)
-                    this.searchFlag = type;
-                else if (this.searchFlag !== type) {
-                    this.counter = (type === 'next' ? this.counter + 2 : this.counter - 2);
-                    this.searchFlag = type;
-                }
-                this.counter = Utils.scrollToSearchString(this.$el.find('.highlight'), type, this.counter, 200);
-            },
-            onFindLast: function(e) {
-                this.formDataToFind(1);
-                this.ui.pageNotation.hide();
-            },
-            onFindFirst: function(e) {
-                this.formDataToFind(0);
-                this.ui.pageNotation.hide();
-            },
-            onCancelFindClick: function() {
-                var that = this;
-                that.ui.clearSearch.css({ 'right': 82 + 'px' });
-                if (this.findRequest && this.findRequest.abort) {
-                    this.findRequest.abort();
-                    if (this.findToken) {
-                        this.logFileCollection.cancelFindRequest({ token: this.findToken }, {
-                            success: function() {},
-                            complete: function() {
-                                that.logFileCollection.trigger("sync")
-                            }
-                        });
-                    }
-                }
-
-            },
-            pageNotification: function() {
-                var pageCount = this.logFileCollection.state.currentPage,
-                    that = this;
-                this.ui.clearSearch.css({ 'right': 198 + 'px' });
-                this.ui.pageNotation.text("Found on Page: " + (++pageCount)).show();
-                clearTimeout(this.findTimer);
-                this.findTimer = setTimeout(function() {
-                    that.ui.pageNotation.hide();
-                    that.ui.clearSearch.css({ 'right': 82 + 'px' });
-
-                }, 15000);
-            },
-            formDataToFind: function(keywordType) {
-                var val = this.getFindValue(),
-                    that = this;
-                this.findToken = new Date().getTime() + Utils.randomNumber();
-                if (!_.isEmpty(val)) {
-                    $.extend(this.logFileCollection.queryParams, { find: val, keywordType: keywordType, token: this.findToken });
-                    this.ui.first.attr("disabled", true);
-                    this.ui.last.attr("disabled", true);
-                    that.ui.clearSearch.css({ 'right': 129 + 'px' });
-                    this.ui.cancelFind.show();
-                    var $el;
-                    if (keywordType == 1) {
-                        $el = this.ui.last;
-                    } else {
-                        $el = this.ui.first;
-                    }
-                    $el.find("i").toggleClass("hidden");
-                    this.findRequest = this.logFileCollection.fetch({
-                        reset: true,
-                        success: function() {
-                            that.resetFindParams();
-                            that.counter = 0;
-                            //that.ui.find.trigger("keyup");
-                            that.ui.next.trigger("click");
-                            that.pageNotification();
-                        },
-                        error: function(col, xhr, errorThrown) {
-                            that.resetFindParams();
-                            if (!!errorThrown.xhr.getAllResponseHeaders()) {
-                              //  Utils.notifyInfo({ content: "Keyword '" + val + "' not found in " + (keywordType == 1 ? "next" : "previous") + " page !" });
-                                that.ui.clearSearch.css({ 'right': 82 + 'px' });
-                            }
-                        },
-                        complete: function() {
-                            if (!that.isClosed) {
-                                that.ui.first.attr("disabled", false);
-                                that.ui.last.attr("disabled", false);
-                                that.ui.cancelFind.hide();
-                                $el.find("i").toggleClass("hidden");
-                            }
-
-                        }
-                    });
-                }
-            },
-            resetFindParams: function() {
-                $.extend(this.logFileCollection.queryParams, { find: null, keywordType: null });
-            },
-            onToggleTableView: function(e) {
-                if (e.target.checked) {
-                    this.renderTable();
-                } else {
-                    this.renderTableLikeLogFile();
-                }
-                this.setupFind();
-            },
-            reRenderView: function(params) {
-                this.fetchCollection({});
-            },
-            setLatestTimeParams: function() {
-                var arr = Utils.dateUtil.getRelativeDateFromString(this.params.dateRangeLabel);
-                if (_.isArray(arr)) {
-                    this.params.from = arr[0].toJSON();
-                    this.params.to = arr[1].toJSON();
-                }
-            },
-            getDropdownQuickMenuHtml: function() {
-                return '<div class="dropdown quickMenu">' +
-                    '<a class="btn btn-success btn-xs btn-quickMenu" data-toggle="dropdown">' +
-                    '<i class="fa fa-ellipsis-v"></i></span></a>' +
-                    '<ul class="dropdown-menu dropupright">' +
-                    '<li data-id="A_B"><a href="javascript:void(0)">Preview</a></li>' +
-                    //"<li data-id='N_T'><a title='Open logs in new tab' data-type='C' data-host='"+model.get("host")+"' data-node='"+model.get("type")+"' data-id='"+model.get("id")+"' href='javascript:void(0)' class=''>Open in New Tab</a></li>" +
-                    '</ul>' +
-                    '</div>';
-            },
-            onQuickMenuClick: function(e) {
-                var that = this,
-                    $el = $(e.currentTarget);
-                if ($el.data("id") === "A_B") {
-                    var model = this.logFileCollection.get($el.parents("tr").data("id"));
-                    require(["views/dialog/DetailLogFileView"], function(view) {
-                        that.renderDetailLogFileView(new view({
-                            model: model,
-                            collection: that.logFileCollection
-                        }));
-                    });
-                }
-            },
-            renderDetailLogFileView: function(view) {
-                var that = this;
-                var opts = {
-                    title: view.model.get("host") + " -> " + view.model.get("type"),
-                    className: "ui-dialog-content ui-widget-content logFile",
-                    content: view,
-                    viewType: 'logfile',
-                    resizable: false,
-                    appendTo: this.$el,
-                    modal: true,
-                    width: 950,
-                    height: 572,
-                    buttons: [{
-                        id: "cancelBtn",
-                        text: "Close",
-                        "class": "btn btn-default",
-                        click: function() {
-                            that.onDialogClosed();
-                        }
-                    },
-                    {
-                        id: "copyBtn",
-                        text: "Select for Copy",
-                        "class": "btn btn-default",
-                        click: function() {
-                            if ($('.logsContainer-clipboard').length != 0)
-                                return;
-                            
-                            var logElement = $(".logsContainer");
-                            var logElementRect = logElement[0].getBoundingClientRect();
-                            logElement.css("display", "none");
-                            
-                            var text = '';
-                            logElement.find('div').each(function(){
-                                text += this.innerText + '\n';
-                            });
-                            
-                            var textarea = $('<textarea class="logsContainer-clipboard"></textarea>');
-                            $(".logsDetail").append(textarea);
-                            textarea
-                            .text(text)
-                            .css('display', 'block')
-                            .width(logElementRect.width)
-                            .height(logElementRect.height)
-                            .select();
-                        }
-                    }]
-                };
-                var dialog = that.dialog = new JBDialog(opts).render();
-                dialog.open();
-                dialog.on("dialog:closing", function() {
-                    $('body').css('overflow', 'auto');
-                })
-                $('body').css('overflow', 'hidden');
-            },
-            onClose: function() {
-                $('body').unbind("mouseup.contextMenuLogFile");
-            }
-        });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/TreeView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/TreeView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/TreeView.js
deleted file mode 100644
index ee12e8b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/TreeView.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/**
-* 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',
-    'backbone',
-    'utils/Globals',
-    'utils/Utils',
-    'collections/VLogLevelList',
-    'models/VCommonModel',
-    'hbs!tmpl/tabs/TreeView_tmpl'
-],function(require,Backbone,Globals,Utils,VLogLevel,VCommonModel,TreeViewTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.Layout.extend(
-	/** @lends LogLevelView */
-	{
-		_viewName : 'TreeViewTmpl',
-
-		template: TreeViewTmpl,
-
-		/** Layout sub regions */
-		regions: {
-		},
-
-		/** ui selector cache */
-		ui: {
-			mainCheck : "#mainCheck",
-			next : "#nextSrch"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events["change "+this.ui.mainCheck] = 'onMainCheckboxClick';
-			events["change .tree input[type='checkbox']"] = 'onChangeNodeCheckbox';
-			events["click .tree a[data-type='C']"] = 'onNewTabIconClick';
-			events["mouseenter .tree li[data-type='C']"] = function(e){
-				$(e.currentTarget).children("a").removeClass("hidden");
-			};
-			events["mouseleave .tree li[data-type='C']"] = function(e){
-				$(e.currentTarget).children("a").addClass("hidden");
-			};
-			events["click .panel-trigger"] = function (e) {
-				this.$(".panel-box").fadeToggle('slow');
-				this.$("input#searchNode").focus();
-			};
-			events["keyup input#searchNode"] = function(e){
-				if(e.which==13){
-					this.ui.next.trigger("click");
-					return
-				}
-				var value = $(e.currentTarget).val();
-				this.$el.removeHighlight();
-				this.counter = 0;
-				this.$el.highlight(value);
-			};
-			events["click #prevSrch"] = "onSearchByName";
-			events["click "+this.ui.next] = "onSearchByName";
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent','globalVent','params'));
-			this.treeModel = new VCommonModel();
-			this.searchParams = (this.params)? this.params :{};
-			this.bindEvents();
-			this.treeLoaded = false;
-		},
-		onRender : function(){
-//			this.fetchCollection();
-			this.fetchTreeData(this.searchParams);
-		},
-		fetchTreeData : function(params){
-			var that = this;
-			this.treeModel.fetch({
-				data : params,
-				success : function(model,data){
-					if(! data.vNodeList){
-						that.treeModel.set("vNodeList",[]);
-					}
-					if(! _.isUndefined(that.treeModel.get("vNodeList")) &&  !_.isArray(that.treeModel.get("vNodeList")))
-						that.treeModel.set("vNodeList",[that.treeModel.get("vNodeList")]);
-					/*if(! that.treeLoaded)
-						that.renderTree();
-					else{
-						that.updateCount();
-					}
-					that.treeLoaded = true;
-					*/
-					that.renderTree();
-				},
-				error : function(){
-				},
-				complete : function(){
-					that.$("#loaderGraph").hide();
-				}
-			});
-		},
-		reinitializeFilterTree : function(values){
-			this.fetchTreeData(values);
-		},
-		bindEvents : function(){
-			this.listenTo(this.vent,"main:search level:filter type:mustNot type:mustBe search:include:exclude logtime:filter",function(value){
-            	_.extend(this.searchParams,value);
-            	this.fetchTreeData(this.searchParams);
-            });
-			this.listenTo(this.vent,"tree:strike:component",function(values){
-				this.$("li[data-type='C'] span").removeClass("text-strike");
-				for(var i=0; i < values.length;i++){
-					this.$(".tree li[data-node='"+values[i]+"'] span").addClass("text-strike");
-				}
-            });
-			this.listenTo(this.vent,"reinitialize:filter:tree",function(value){
-				_.extend(this.searchParams,value);
-            	this.reinitializeFilterTree(value);
-            });
-		},
-		renderTree : function(){
-			var $el = this.$(".tree").find('ul'),that=this;
-			$el.empty();
-			if(! _.isUndefined(this.treeModel.get("vNodeList")) && ! _.isArray(this.treeModel.get("vNodeList")))
-				this.treeModel.set("vNodeList",[this.treeModel.get("vNodeList")])
-			_.each(this.treeModel.get("vNodeList"),function(data){
-				if(data.isParent  === "true" || data.isParent == true){
-					$el.append(that.getParentNode(data));
-					var rootNode = $el.find("li[data-node='"+data.name+"']");
-					that.appendChilNodes(data,rootNode);
-					that.appendPopover(rootNode,data);
-				}
-			});
-			this.updateCount();
-			this.formatTree();
-			this.restoreCheckbox();
-		},
-		restoreCheckbox : function(){
-			var params = (this.params.hostList) ? JSON.parse(this.params.hostList) : undefined,that=this;
-			if(params){
-				that.$("input[data-node]").prop("checked",false);
-				_.each(params,function(node){
-					if(node.h){
-						that.$("input[data-type='H'][data-node='"+node.h+"']").prop("checked",true);
-						if(node.c){
-							var parent = that.$("li[data-type='H'][data-node='"+node.h+"']")
-							parent.find("input[data-type='C']").prop("checked",false);
-							_.each(node.c,function(component){
-								parent.find("input[data-type='C'][data-node='"+component+"']").prop("checked",true);
-							});
-						}
-					}
-					
-						
-				});
-			}
-		},
-		appendChilNodes : function(data, $parentNode){
-			$parentNode.append('<ul>');
-			data.childs = _.isArray(data.childs) ? data.childs : new Array(data.childs);
-			var $el = $parentNode.find('ul'),that=this;
-			_.each(data.childs,function(node){
-				if(! _.isUndefined(node.childs)){
-					$el.append(this.getParentNode(node));
-					var rootNode = $el.find("li[data-node='"+data.name+"']");
-					that.appendChilNodes(node,rootNode);
-				}
-					
-				if(node.isParent === "true" || node.isParent == true)
-					$el.append(that.getParentNode(node));
-				else{
-					$el.append(that.getChildNode(node));
-				}
-				that.appendPopover($el.find('li').last(),node);
-			});
-		},
-		getCheckbox : function(node){
-			return '<label class="checkbox no-margin"> <input  data-parent="'+node.isParent+'" data-type="'+node.type+'" data-node="'+node.name+'" checked="checked" type="checkbox"> <i class="fa fa-square-o small"></i></label>';
-            
-		},
-		getParentNode : function(node){
-			return '<li data-type="'+node.type+'" data-parent="'+node.isParent+'" data-node = "'+node.name+'"> '+this.getCountDistribution(node)+this.getCheckbox(node)+' <span><i class="fa fa-plus-circle"></i> '+node.name.split(".")[0]+'</span></li>';
-		},
-		getChildNode : function(node){
-			return '<li style="display:none;" data-type="'+node.type+'" data-node = "'+node.name+'" >'+
-			'<a data-type="'+node.type+'" data-node = "'+node.name+'" href="javascript:void(0)" class="pull-right hidden"><i class="fa fa-share"></i></a>'+
-			this.getCountDistribution(node)+
-			this.getCheckbox(node)+
-			' <span>'+node.name+'</span></li>';
-		},
-		getCountDistribution : function(node){
-			if(! node.logLevelCount)
-				return "";
-			return '<div data-node = "'+node.name+'" class="nodebar">'+this.getLevelDistribution(node)+'</div>';
-		},
-		getLevelDistribution : function(node){
-			var html="";
-			if(! _.isUndefined(node.logLevelCount) && ! _.isArray(node.logLevelCount))
-				node.logLevelCount = [node.logLevelCount];
-			var toPct = this.calculatePercentge(node.logLevelCount);
-			_.each(node.logLevelCount,function(data){
-				//html += '<div class="node '+data.name+'" style="width:'+toPct(data)+'%;" data-toggle="tooltip" title="'+data.value+'" data-original-title="'+data.value+'"></div>';
-				html += '<div class="node '+data.name+'" style="width:'+toPct(data)+'%;"></div>';
-			});
-			return html;
-		},
-		appendPopover : function(node,data){
-			node.children('.nodebar').popover({
-				trigger: 'hover',
-				placement: "bottom",
-				html: true,
-				container: 'body',
-				template : '<div class="popover log-count" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
-				content: this.getPopoverHTML(data)
-			});
-		},
-		getPopoverHTML : function(node){
-			//<span style='color:#E2D014'><i class='fa fa-circle'></i> 12876</span>
-			if(! node.logLevelCount)
-				return "";
-			var html="";
-			//if count for all elements is zero then popover should not appear
-			if(_.find(node.logLevelCount,function(d){ return parseInt(d.value,10) > 0})){
-				_.each(node.logLevelCount,function(data){
-					html += "<span class='"+data.name+"'><i class='fa fa-circle'></i> "+data.name+": <strong>"+data.value+"</strong></span>";
-				});
-			}
-			return html;
-		},
-		formatTree : function(){
-			this.$('.tree > ul').attr('role', 'tree').find('ul').attr('role', 'group');
-		    this.$('.tree').find('li:has(ul)').addClass('parent_li').attr('role', 'treeitem').find(' > span').attr('title', 'Expand this branch').attr("data-state","collapse").on('click', function(e) {
-		        var children = $(this).parent('li.parent_li').find(' > ul > li');
-		        if (children.is(':visible')) {
-		            children.hide('fast');
-		            $(this).attr('title', 'Expand this branch').attr("data-state","collapse").find(' > i').removeClass().addClass('fa fa-plus-circle');
-		        } else {
-		            children.show('fast');
-		            $(this).attr('title', 'Collapse this branch').attr("data-state","expand").find(' > i').removeClass().addClass('fa fa-minus-circle');
-		        }
-		        e.stopPropagation();
-		    });
-		    //this.$('[data-toggle="tooltip"]').tooltip();
-		},
-		calculatePercentge : function(values) {
-		       var sum = 0;
-		       for( var i = 0; i != values.length; ++i ) {
-		    	   sum = sum + parseInt(values[i].value,10); 
-		       }
-		       var scale = 100/sum;
-		       return function( x ){ 
-		         return (parseInt(x.value,10)*scale)/*.toFixed(5)*/;
-		       };
-		},
-		onMainCheckboxClick : function(e){
-			if(e.target.checked){
-				this.$('.tree  input[type="checkbox"]').prop({"checked":true,"indeterminate":false});
-				
-			}else
-				this.$('.tree  input[type="checkbox"]').prop({"checked":false,"indeterminate":false});
-			var data = this.getCheckedHierarchyData();
-			this.params.hostList = _.extend({},data);
-			this.vent.trigger("tree:search",{hostList : data.toString()});
-			
-		},
-		onChangeNodeCheckbox : function(e){
-			var $el = $(e.currentTarget);
-			if($el.data("parent") == "true" || $el.data("parent") == true){
-				if($el[0].checked)
-					$el.parent().siblings("ul").find("input").prop("checked",true);
-				else
-					$el.parent().siblings("ul").find("input").prop("checked",false);
-			}else{
-				var mainParent = $el.parents("[data-type='H']");
-				var checkedLen = mainParent.find("ul :checkbox:checked").length;
-				var totalCheckboxLen = mainParent.find("ul :checkbox").length;
-				if(checkedLen > 0)
-					mainParent.find("input[data-type='H']").prop("checked",true);
-				else
-					mainParent.find("input[data-type='H']").prop("checked",false);
-				if(checkedLen < totalCheckboxLen)
-					mainParent.find("input[data-type='H']").prop("indeterminate",true);
-				else
-					mainParent.find("input[data-type='H']").prop("indeterminate",false);
-				
-			}
-			var data = this.getCheckedHierarchyData();
-			this.vent.trigger("tree:search",{hostList : data.toString()});
-		},
-		onNewTabIconClick : function(e){
-			var $el = $(e.currentTarget),host,component,that=this;
-			if($el.parents("[data-parent=true]")){
-				host = $el.parents("[data-parent=true]").data("node");
-				component = $el.data("node");
-				that.globalVent.trigger("render:tab",/*new LogFileView(*/{
-					params:_.extend({},{
-						host_name :  host,
-						component_name : component
-					},that.searchParams,{hostList:null}),
-					globalVent : that.globalVent
-				}/*)*/);
-			}
-		},
-		getCheckedHierarchyData : function(){
-			var data=[];
-			var parents = this.$('.tree :checkbox:checked').filter('[data-parent="true"]');
-			_.each(parents,function(p){
-				var obj = {
-						h : $(p).data("node"),
-						c : []
-				};
-				_.each($(p).parent().siblings("ul").find(":checkbox:checked"),function(c){
-					obj.c.push($(c).data("node"));
-				});
-				data.push(obj);
-			});
-			return data;
-		},
-		updateCount : function(){
-			var that= this;
-			this.$('.nodebar').popover('destroy');
-			_.each(this.treeModel.get("vNodeList"),function(data){
-				if(data.isParent  === "true" || data.isParent == true){
-					var html = that.getLevelDistribution(data);
-					that.$(".nodebar[data-node='"+data.name+"']").html("").append(html);
-					var parent = that.$(".nodebar[data-node='"+data.name+"']").parent();
-					that.appendPopover(parent,data);
-					_.each(data.childs,function(c){
-						html = that.getLevelDistribution(c);
-						parent.find(".nodebar[data-node='"+c.name+"']").html("").append(html);
-						that.appendPopover(parent.find("li[data-node='"+c.name+"']"),c);
-					});
-				}
-				
-			});
-		},
-		onSearchByName: function(e){
-			var type = (e.currentTarget.id === 'nextSrch') ? 'next' : 'prev';
-			if(!this.searchFlag)
-				this.searchFlag = type;
-			else if(this.searchFlag !== type){
-				this.counter = (type === 'next' ? this.counter + 2 : this.counter - 2);
-				this.searchFlag = type;
-			}
-			this.counter = Utils.scrollToSearchString(this.$el.find('.highlight'), type, this.counter, 237,this.$(".tree"));
-		}
-	});
-	
-	
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/VisualSearchView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/VisualSearchView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/VisualSearchView.js
deleted file mode 100644
index 8bfb85f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/VisualSearchView.js
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * 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',
-  'backbone',
-  'utils/Globals',
-  'utils/Utils',
-  'collections/VLogLevelList',
-  'hbs!tmpl/tabs/VisualSearchView_tmpl',
-  'select2'
-], function (require, Backbone, Globals, Utils, VLogLevel, LogLevelTmpl) {
-  'use strict';
-
-  return Backbone.Marionette.Layout.extend(
-    {
-      _viewName: 'VisualSearchView',
-
-      template: LogLevelTmpl,
-
-      /** Layout sub regions */
-      regions: {},
-
-      /** ui selector cache */
-      ui: {
-        vsContainer: "#vs_container",
-      },
-
-      /** ui events hash */
-      events: function () {
-        var events = {};
-        events['click #searchLog'] = 'onSearchLogClick';
-        return events;
-      },
-
-      initialize: function (options) {
-        _.extend(this, _.pick(options, 'vent', 'globalVent', 'params', 'customOptions', 'eventName', 'myFormatData', 'placeholder', 'viewName'));
-        this.bindEvents();
-      },
-      onRender: function () {
-        this.initializeSearch(this.formQueryDataFromParams(this.params));
-      },
-      bindEvents: function () {
-        this.listenTo(this.vent, "reinitialize:filter:include:exclude", function (value) {
-          this.reinitializeFilter(value);
-        });
-        this.listenTo(this.vent, "add:include:exclude", function (value) {
-          this.addIncludeExclude(value);
-        });
-        this.listenTo(this.vent, "toggle:facet", function (obj) {
-          this.toggleFacet(obj);
-        });
-      },
-      initializeSearch: function (query) {
-        var opts = (this.customOptions) ? this.customOptions : ["Include", "Exclude"], that = this;
-        this.visualSearch = VS.init({
-          placeholder: (!this.placeholder) ? "Search String" : this.placeholder,
-          container: this.ui.vsContainer,
-          query: query,
-          remainder: false,
-          callbacks: {
-            search: function (query, searchCollection) {
-              var eventName = (!that.eventName) ? "search:include:exclude" : that.eventName;
-              that.vent.trigger(eventName, that.formatData(query, searchCollection));
-            },
-            facetMatches: function (callback) {
-              callback(opts, {preserveOrder: true});
-            },
-            valueMatches: function (facet, searchTerm, callback) {
-            }
-          }
-        });
-      },
-      formatData: function (query, searchCollection) {
-        if (_.isFunction(this.myFormatData)) {
-          return this.myFormatData(query, searchCollection);
-        }
-        var include = [], exclude = [], obj = [], that = this;
-        searchCollection.each(function (m) {
-          if (!that.customOptions) {
-            if (m.get("category") === "Exclude") {
-              (!_.isEmpty(m.get("value"))) ? exclude.push(m.get("value")) : '';
-            }
-            else {
-              (!_.isEmpty(m.get("value"))) ? include.push(m.get("value")) : '';
-            }
-          } else {
-            var data = {};
-            data[m.get("category")] = m.get("value");
-            obj.push(data);
-          }
-
-        });
-        if (!this.customOptions) {
-          return {
-            iMessage: Utils.encodeIncludeExcludeStr(include, true),
-            eMessage: Utils.encodeIncludeExcludeStr(exclude, true),
-            query: query
-          };
-        } else {
-          return {
-            columnQuery: JSON.stringify(obj),
-            query: query
-          }
-        }
-
-
-      },
-      reinitializeFilter: function (values) {
-        var query = "";
-        if (this.viewName) {
-          query = this.formQueryDataFromParams(values);
-        }
-        if (!_.isUndefined(query)) {
-          this.initializeSearch(query);
-        }
-      },
-      addIncludeExclude: function (value) {
-        if (this.customOptions)
-          return;
-        if (value) {
-          var e = $.Event("keydown");
-          e.keyCode = 13;
-          this.visualSearch.searchBox.addFacet((value.type == "I") ? "Include" : "Exclude", value.value);
-          this.visualSearch.options.callbacks.search(this.visualSearch.searchBox.value(), this.visualSearch.searchQuery);
-        }
-      },
-      toggleFacet: function (obj) {
-        if (_.isObject(obj)) {
-          if (obj.viewName == this.viewName) {
-            var view = _.find(this.visualSearch.searchBox.facetViews, function (v) {
-              return v.model.get("category") === obj.key && v.model.get("value") === obj.value;
-            });
-            if (view) {
-              var e = $.Event("click");
-              e.keyCode = 13;
-              view.model.set("value", undefined);
-              view.remove(e);
-            } else
-              this.visualSearch.searchBox.addFacet(obj.key, obj.value);
-            this.visualSearch.options.callbacks.search(this.visualSearch.searchBox.value(), this.visualSearch.searchQuery);
-          }
-        }
-      },
-      formQueryDataFromParams: function (values) {
-        if (!values)
-          return;
-        var query = "";
-        try {
-          var arr;
-          if (this.viewName == "includeServiceColumns" && values.includeQuery) {
-            arr = JSON.parse(values.includeQuery);
-          } else if (this.viewName == "excludeServiceColumns" && values.excludeQuery) {
-            arr = JSON.parse(values.excludeQuery);
-          }
-          if (_.isArray(arr)) {
-            for (var i = 0; i < arr.length; i++) {
-              var key = _.keys(arr[i])[0];
-              query += "'" + key + "':'" + arr[i][key] + "' ";
-            }
-          }
-          if (this.viewName === "includeExclude" && (values.iMessage || values.eMessage)) {
-            var valuesArr, key;
-            if (values.iMessage) {
-              valuesArr = values.iMessage.split(Globals.splitToken);
-              key = "Include: ";
-              for (var i = 0; i < valuesArr.length; i++) {
-                query += key + '"' + valuesArr[i] + '" ';
-              }
-            }
-            if (values.eMessage) {
-              valuesArr = values.eMessage.split(Globals.splitToken);
-              key = "Exclude: ";
-              for (var i = 0; i < valuesArr.length; i++) {
-                query += key + '"' + valuesArr[i] + '" ';
-              }
-            }
-          }
-        } catch (e) {
-          console.log("Error", e);
-        }
-        return query;
-      }
-
-
-    });
-
-
-});
\ No newline at end of file


[24/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.min.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.min.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.min.js
deleted file mode 100644
index 8cccfe1..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*! jQuery UI - v1.11.4 - 2015-10-14
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, autocomplete.js, button.js, dialog.js, menu.js, spinner.js
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this
 .parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.
 css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call
 (t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var n=0,a=Array.prototype.slice;e.cleanData=function(t){return function
 (i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.
 widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=a.call(arguments,1),o=0,r=n.length;r>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var o="string"==typeof n,r=a.call(arguments,1),h=this;return o?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(h=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,r),i!==a&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to init
 ialization; "+"attempted to call method '"+n+"'")}):(r.length&&(n=e.widget.extend.apply(null,[n].concat(r))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),h}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=n++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData())
 ,this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}
 return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventN
 amespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.elemen
 t.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var o=!1;e(document).mouseup(function(){o=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePr
 opagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!o){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return 
 i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),o=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".prev
 entClickEvent",!0),this._mouseStop(t)),o=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)
 ?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,a="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:a?e.position.scrollbarWidth():0,height:n?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s||n?i.width():i.ou
 terWidth(),height:s||n?i.height():i.outerHeight()}}},e.fn.position=function(n){if(!n||!n.of)return f.apply(this,arguments);n=e.extend({},n);var p,m,g,v,y,b,_=e(n.of),x=e.position.getWithinInfo(n.within),w=e.position.getScrollInfo(x),k=(n.collision||"flip").split(" "),T={};return b=s(_),_[0].preventDefault&&(n.at="left top"),m=b.width,g=b.height,v=b.offset,y=e.extend({},v),e.each(["my","at"],function(){var e,t,i=(n[this]||"").split(" ");1===i.length&&(i=l.test(i[0])?i.concat(["center"]):u.test(i[0])?["center"].concat(i):["center","center"]),i[0]=l.test(i[0])?i[0]:"center",i[1]=u.test(i[1])?i[1]:"center",e=d.exec(i[0]),t=d.exec(i[1]),T[this]=[e?e[0]:0,t?t[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===n.at[0]?y.left+=m:"center"===n.at[0]&&(y.left+=m/2),"bottom"===n.at[1]?y.top+=g:"center"===n.at[1]&&(y.top+=g/2),p=t(T.at,m,g),y.left+=p[0],y.top+=p[1],this.each(function(){var s,l,u=e(this),d=u.outerWidth(),c=u.outerHeight(),f=i(this,"marginLeft"),
 b=i(this,"marginTop"),D=d+f+i(this,"marginRight")+w.width,S=c+b+i(this,"marginBottom")+w.height,N=e.extend({},y),M=t(T.my,u.outerWidth(),u.outerHeight());"right"===n.my[0]?N.left-=d:"center"===n.my[0]&&(N.left-=d/2),"bottom"===n.my[1]?N.top-=c:"center"===n.my[1]&&(N.top-=c/2),N.left+=M[0],N.top+=M[1],a||(N.left=h(N.left),N.top=h(N.top)),s={marginLeft:f,marginTop:b},e.each(["left","top"],function(t,i){e.ui.position[k[t]]&&e.ui.position[k[t]][i](N,{targetWidth:m,targetHeight:g,elemWidth:d,elemHeight:c,collisionPosition:s,collisionWidth:D,collisionHeight:S,offset:[p[0]+M[0],p[1]+M[1]],my:n.my,at:n.at,within:x,elem:u})}),n.using&&(l=function(e){var t=v.left-N.left,i=t+m-d,s=v.top-N.top,a=s+g-c,h={target:{element:_,left:v.left,top:v.top,width:m,height:g},element:{element:u,left:N.left,top:N.top,width:d,height:c},horizontal:0>i?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t
 ),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(N,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t
 .my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.appl
 y(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,st
 op:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){
 var t=e(this);return e("<div>").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t
 ),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return 
 this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mo
 useUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffse
 tFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:func
 tion(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.pare
 nt.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions
 .width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(thi
 s.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),e.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),e.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l
 =this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&
 &(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})}
 ,drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n
-})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),
 i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.d
 ocument[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY<n.scrollSensitivity?o.scrollTop=a=o.scrollTop+n.scrollSpeed:t.pageY-s.overflowOffset.top<n.scrollSensitivity&&(o.scrollTop=a=o.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+o.offsetWidth-t.pageX<n.scrollSensitivity?o.scrollLeft=a=o.scrollLeft+n.scrollSpeed:t.pageX-s.overflowOffset.left<n.scrollSensitivity&&(o.scrollLeft=a=o.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(t.pageY-e(r).scrollTop()<n.scrollSensitivity?a=e(r).scrollTop(e(r).scrollTop()-n.scrollSpeed):e(window).height()-(t.pageY-e(r).scrollTop())<n.scrollSensitivity&&(a=e(r).scrollTop(e(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(t.pageX-e(r).scrollLeft()<n.scrollSensitivity?a=e(r).scrollLeft(e(r).scrollLeft()-n.scrollSpeed):e(window).width()-(t.pageX-e(r).scrollLeft())<n.scrollSensitivity&&(a=e(r).scrollLeft(e(r).scrollLeft()+n.scrollSpeed)))),a!==!1&&e.ui.ddmanager&&!n.dropBeh
 aviour&&e.ui.ddmanager.prepareOffsets(s,t)}}),e.ui.plugin.add("draggable","snap",{start:function(t,i,s){var n=s.options;s.snapElements=[],e(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var t=e(this),i=t.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:t.outerWidth(),height:t.outerHeight(),top:i.top,left:i.left})})},drag:function(t,i,s){var n,a,o,r,h,l,u,d,c,p,f=s.options,m=f.snapTolerance,g=i.offset.left,v=g+s.helperProportions.width,y=i.offset.top,b=y+s.helperProportions.height;for(c=s.snapElements.length-1;c>=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=
 !1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.ca
 ll(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,
 s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&th
 is.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(fu
 nction(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+
 i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],
 i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.i
 sover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(
 e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t
 his.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles
 .split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},t
 his._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),hei
 ght:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosi
 tion={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i
 ,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.
 top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=
 e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=this._isNumber(e.height)&&t.maxHeight&&t.maxHeight<e.height,a=this._isNumber(e.width)&&t.minWidth&&t.minWidth>e.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-
 t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=t
 his.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.ex
 tend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.elemen
 t.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.
 offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.paren
 t().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.oute
 rHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.
 each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1
 ,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:functi
 on(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.help
 er.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helpe
 r.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;
-i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseSt
 op:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.sortable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,bef
 oreStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(e,t,i){return e>=t&&t+i>e},_isFloating:function(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(e,t){this._super(e,t),"handle"===e&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),e.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var e=this.items
 .length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(t,i){var s=null,n=!1,a=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,a.widgetName+"-item")===a?(s=e(this),!1):void 0}),e.data(t.target,a.widgetName+"-item")===a&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var n,a,o=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-t
 his.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,o.cursorAt&&this._adjustOffsetFromHelper(o.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),o.containment&&this._setContainment(),o.cursor&&"auto"!==o.cursor&&(a=this.document.find("body"),this.storedCursor=a.css("cursor"),a.css("cursor",o.cursor),this.storedStylesheet=e("<style>*{ cursor: "+o.cursor+" !important; }</style>").appendTo(a)),o.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",o.opacity)),o.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.help
 er.css("zIndex",o.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,n,a,o=this.options,r=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<o.scrollSensitivity?this.scrollParent[0].sc
 rollTop=r=this.scrollParent[0].scrollTop+o.scrollSpeed:t.pageY-this.overflowOffset.top<o.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-o.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<o.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+o.scrollSpeed:t.pageX-this.overflowOffset.left<o.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-o.scrollSpeed)):(t.pageY-this.document.scrollTop()<o.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-o.scrollSpeed):this.window.height()-(t.pageY-this.document.scrollTop())<o.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+o.scrollSpeed)),t.pageX-this.document.scrollLeft()<o.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-o.scrollSpeed):this.window.width()-(t.pageX-this.document.scrollLeft())<o.scrollSensitivity&&(r=this.document.scrollLeft(this.do
 cument.scrollLeft()+o.scrollSpeed))),r!==!1&&e.ui.ddmanager&&!o.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],a=this._intersectsWithPointer(s),a&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===a?"next":"prev"]()[0]!==n&&!e.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],n):!0)){if(this.direction=1===a?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.po
 sitionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,n=this.placeholder.offset(),a=this.options.axis,o={};a&&"x"!==a||(o.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),a&&"y"!==a||(o.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(o,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.conta
 iners[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersects
 With:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,a=e.left,o=a+e.width,r=e.top,h=r+e.height,l=this.offset.click.top,u=this.offset.click.left,d="x"===this.options.axis||s+l>r&&h>s+l,c="y"===this.options.axis||t+u>a&&o>t+u,p=d&&c;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>a&&o>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(e){var t="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top,e.height),i="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left,e.width),s=t&&i,n=this._getDragVerticalDirection(),a=this._getDragHorizontalDirection();ret
 urn s?this.floating?a&&"right"===a||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var t=this._isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&t||"up"===s&&!t)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){function i(){r.push(this)}var s,n,a,o,r=[]
 ,h=[],l=this._connectWith();if(l&&t)for(s=l.length-1;s>=0;s--)for(a=e(l[s],this.document[0]),n=a.length-1;n>=0;n--)o=e.data(a[n],this.widgetFullName),o&&o!==this&&!o.options.disabled&&h.push([e.isFunction(o.options.items)?o.options.items.call(o.element):e(o.options.items,o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),o]);for(h.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,n,a,o,r,h,l,u=this.items,d=[[e.isFunction(this.options.items)?this.options.items.call(t
 his.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],c=this._connectWith();if(c&&this.ready)for(i=c.length-1;i>=0;i--)for(n=e(c[i],this.document[0]),s=n.length-1;s>=0;s--)a=e.data(n[s],this.widgetFullName),a&&a!==this&&!a.options.disabled&&(d.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a));for(i=d.length-1;i>=0;i--)for(o=d[i][1],r=d[i][0],s=0,l=r.length;l>s;s++)h=e(r[s]),h.data(this.widgetName+"-item",o),u.push({item:h,instance:o,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,a;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?e
 (this.options.toleranceElement,s.item):s.item,t||(s.width=n.outerWidth(),s.height=n.outerHeight()),a=n.offset(),s.left=a.left,s.top=a.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)a=this.containers[i].element.offset(),this.containers[i].containerCache.left=a.left,this.containers[i].containerCache.top=a.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),n=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===s?t._createTrPlaceholder(t.currentItem.find("t
 r").eq(0),e("<tr>",t.document[0]).appendTo(n)):"tr"===s?t._createTrPlaceholder(t.currentItem,n):"img"===s&&n.attr("src",t.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(e,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_createTrPlaceholder:function(t,i){var s=this;t.children().each(function(){e("<td>&#160;</td>",s.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(t){var i,s,n,a,o,r,h,l,u,d,c=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!e.contains(this.currentItem[0],this.cont
 ainers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(c&&e.contains(this.containers[i].element[0],c.element[0]))continue;c=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0);if(c)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,a=null,u=c.floating||this._isFloating(this.currentItem),o=u?"left":"top",r=u?"width":"height",d=u?"clientX":"clientY",s=this.items.length-1;s>=0;s--)e.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[o],l=!1,t[d]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(t[d]-h)&&(n=Math.abs(t[d]-h),a=this.items[s],this.direction=l?"up":"down"));if(!a&&!this.options.dropOnEmpty)return;if(this.currentContainer===
 this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",t,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;a?this._rearrange(t,a,null,!0):this._rearrange(t,null,this.containers[p].element,!0),this._trigger("change",t,this._uiHash()),this.containers[p]._trigger("change",t,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",t,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style
 .height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollPar
 ent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].p
 arentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(t=e(n.containment)[0],i=e(n.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0
 )-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,a=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():a?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():a?0:n.scrollLeft())*s}},_generatePosition:function(t){var i,s,n=this.options,a=t.pageX,o=t.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&e.contains(this.sc
 rollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(a=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(o=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(a=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1],o=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.origin
 alPageX+Math.round((a-this.originalPageX)/n.grid[0])*n.grid[0],a=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:o-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:a-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){function i(e,t,i){return function(s){i._trigger(e,s,t._uiHash(t))}}this.reverting=!1;var s,n=[];
 if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s

<TRUNCATED>

[44/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.svg
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.svg b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.svg
deleted file mode 100644
index 06824bf..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.svg
+++ /dev/null
@@ -1,7606 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="robotoregular" horiz-adv-x="1164" >
-<font-face units-per-em="2048" ascent="1638" descent="-410" />
-<missing-glyph horiz-adv-x="509" />
-<glyph unicode="fi" horiz-adv-x="1140" d="M28 936v146h170v117q0 182 106.5 282t295.5 100q67 0 132 -15.5t153 -45.5l-34 -160q-53 21 -113 36t-123 15q-117 0 -168.5 -52t-51.5 -160v-117h215v-146h-215v-936h-197v936h-170zM783 0v1082h198v-1082h-198z" />
-<glyph unicode=" "  horiz-adv-x="509" />
-<glyph unicode="&#x09;" horiz-adv-x="509" />
-<glyph unicode="&#xa0;" horiz-adv-x="509" />
-<glyph unicode="!" horiz-adv-x="539" d="M171 0v204h198v-204h-198zM171 478v978h197v-978h-197z" />
-<glyph unicode="&#x22;" horiz-adv-x="668" d="M80 1040l1 240v280h197v-270l-101 -250h-97zM389 1040l1 248v272h197v-270l-101 -250h-97z" />
-<glyph unicode="#" horiz-adv-x="1276" d="M70 410v140h264l68 348h-256v142h284l82 416h151l-82 -416h255l82 416h151l-82 -416h199v-142h-226l-68 -348h219v-140h-247l-80 -410h-152l80 410h-255l-80 -410h-151l80 410h-236zM485 550h255l68 348h-255z" />
-<glyph unicode="$" horiz-adv-x="1153" d="M114 424l2 5h190q0 -154 77.5 -219.5t190.5 -65.5q129 0 201.5 61.5t72.5 170.5q0 89 -64 153t-210 114q-202 61 -305 163t-103 272q0 165 94.5 269t260.5 125v221h158v-222q168 -24 260.5 -143.5t92.5 -320.5h-196q0 136 -63 220t-175 84q-118 0 -176.5 -61.5 t-58.5 -168.5q0 -97 60.5 -157t218.5 -114q205 -66 304 -164.5t99 -267.5q0 -172 -103 -273.5t-283 -120.5v-192h-157v191q-172 18 -282 125.5t-106 315.5z" />
-<glyph unicode="%" horiz-adv-x="1498" d="M104 1099v77q0 127 82 214t219 87t219 -86.5t82 -214.5v-77q0 -127 -81.5 -213t-217.5 -86q-138 0 -220.5 86t-82.5 213zM250 1099q0 -74 40.5 -125.5t116.5 -51.5q73 0 113 51t40 126v77q0 74 -40.5 126.5t-114.5 52.5q-75 0 -115 -52.5t-40 -126.5v-77zM349 177 l711 1138l109 -67l-711 -1138zM809 279v78q0 127 82 213.5t219 86.5q136 0 218.5 -86.5t82.5 -213.5v-78q0 -128 -82 -214t-217 -86q-138 0 -220.5 86t-82.5 214zM955 279q0 -75 40.5 -126.5t116.5 -51.5q73 0 113 51.5t40 126.5v78q0 74 -41 126t-114 52q-74 0 -114.5 -52 t-40.5 -126v-78z" />
-<glyph unicode="&#x26;" horiz-adv-x="1276" d="M64 392q0 122 70.5 213.5t210.5 183.5q-78 99 -116 176.5t-38 159.5q0 169 97.5 260.5t268.5 91.5q158 0 257 -91t99 -219q0 -98 -52.5 -169.5t-155.5 -146.5l-109 -80l340 -409q41 65 64 144t23 167h176q0 -132 -39 -244t-113 -201l185 -223l-2 -5h-229l-85 102 q-80 -60 -177 -91.5t-201 -31.5q-217 0 -345.5 115t-128.5 298zM261 392q0 -113 71 -186t206 -73q72 0 142 24.5t132 70.5l-361 435l-40 -29q-91 -68 -120.5 -130t-29.5 -112zM388 1127q0 -53 27 -110.5t81 -125.5l138 95q57 38 77.5 82.5t20.5 98.5q0 61 -48.5 108 t-126.5 47q-81 0 -125 -56.5t-44 -138.5z" />
-<glyph unicode="'" horiz-adv-x="359" d="M80 1055l1 265v240h197v-223l-101 -282h-97z" />
-<glyph unicode="(" horiz-adv-x="679" d="M132 582v9q0 394 159 673t334 372l6 -1l38 -116q-137 -107 -238.5 -343t-101.5 -583v-13q0 -347 101 -583t239 -352l-38 -108h-6q-175 93 -334 371.5t-159 673.5z" />
-<glyph unicode=")" horiz-adv-x="687" d="M6 -355q135 105 237.5 345.5t102.5 589.5v13q0 342 -105.5 583.5t-234.5 351.5l38 108h6q174 -93 333.5 -372t159.5 -673v-9q0 -395 -159.5 -673.5t-333.5 -371.5h-6z" />
-<glyph unicode="*" horiz-adv-x="884" d="M28 1071l49 154l296 -111l-10 342h161l-10 -348l293 110l48 -156l-302 -89l193 -270l-131 -96l-181 287l-176 -279l-132 93l198 274z" />
-<glyph unicode="+" horiz-adv-x="1162" d="M78 605v178h402v423h197v-423h399v-178h-399v-459h-197v459h-402z" />
-<glyph unicode="," horiz-adv-x="404" d="M48 -258l70 316v163h197v-173l-150 -306h-117z" />
-<glyph unicode="-" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
-<glyph unicode="." horiz-adv-x="548" d="M161 0v202h197v-202h-197z" />
-<glyph unicode="/" horiz-adv-x="850" d="M16 -125l608 1581h167l-607 -1581h-168z" />
-<glyph unicode="0" horiz-adv-x="1154" d="M113 555v345q0 278 124.5 427.5t338.5 149.5q215 0 339.5 -149.5t124.5 -427.5v-345q0 -279 -123.5 -427.5t-338.5 -148.5t-340 149t-125 427zM310 515q0 -189 69 -285.5t199 -96.5t197.5 96t67.5 286v427q0 189 -68.5 284.5t-198.5 95.5t-198 -95.5t-68 -284.5v-427z " />
-<glyph unicode="1" horiz-adv-x="1153" d="M186 1260v142l495 54v-1456h-197v1264z" />
-<glyph unicode="2" horiz-adv-x="1153" d="M97 1033q-5 188 125 316t360 128q196 0 312.5 -114.5t116.5 -291.5q0 -119 -70.5 -238.5t-197.5 -256.5l-383 -417l2 -5h700v-154h-944v135l477 530q128 143 173.5 227t45.5 172q0 109 -63.5 183.5t-168.5 74.5q-151 0 -222.5 -77.5t-71.5 -217.5h-189z" />
-<glyph unicode="3" horiz-adv-x="1153" d="M100 378l3 6h188q0 -115 70.5 -183t193.5 -68q125 0 196 68t71 201q0 135 -63 199t-199 64h-172v154h172q131 0 185.5 65.5t54.5 182.5q0 125 -62 190t-183 65q-115 0 -184.5 -67.5t-69.5 -179.5h-189l-2 6q-5 165 119.5 280.5t325.5 115.5q202 0 322 -107.5t120 -306.5 q0 -90 -54.5 -179.5t-163.5 -136.5q131 -43 185.5 -135t54.5 -206q0 -199 -130.5 -313t-333.5 -114q-199 0 -329.5 107.5t-125.5 291.5z" />
-<glyph unicode="4" horiz-adv-x="1153" d="M55 336v111l642 1009h208v-966h201v-154h-201v-336h-196v336h-654zM265 490h444v683l-6 1l-19 -50z" />
-<glyph unicode="5" horiz-adv-x="1153" d="M157 377l2 6h178q0 -119 68.5 -184.5t177.5 -65.5q125 0 194 88t69 241q0 140 -70 230t-193 90q-116 0 -168 -35t-76 -107l-164 17l84 799h729v-175h-562l-48 -409q46 34 102.5 56.5t130.5 24.5q201 2 316.5 -131t115.5 -358q0 -219 -117.5 -352t-342.5 -133 q-185 0 -308 101t-118 297z" />
-<glyph unicode="6" horiz-adv-x="1153" d="M132 571v278q0 280 156 454t387 174q75 0 148.5 -17t121.5 -43l-42 -151q-49 25 -102.5 40.5t-125.5 15.5q-156 0 -251.5 -125t-95.5 -326v-23q64 56 146.5 87.5t177.5 31.5q195 0 311 -135t116 -342q0 -226 -123.5 -368.5t-329.5 -142.5q-214 0 -354 155t-140 437z M328 552q0 -201 85 -310t213 -109q121 0 188.5 102.5t67.5 254.5q0 144 -72.5 237t-201.5 93q-101 0 -172 -41t-108 -109v-118z" />
-<glyph unicode="7" horiz-adv-x="1153" d="M77 1301v155h985v-155q-264 -314 -356.5 -556.5t-133.5 -587.5l-16 -157h-197l16 157q42 344 163 615t331 529h-792z" />
-<glyph unicode="8" horiz-adv-x="1153" d="M102 394q0 123 74 217t200 138q-109 42 -171 127.5t-62 199.5q0 192 118.5 296.5t313.5 104.5q192 0 313.5 -104.5t121.5 -296.5q0 -114 -64 -199.5t-173 -127.5q126 -44 201.5 -138t75.5 -217q0 -202 -131.5 -308.5t-341.5 -106.5q-214 0 -344.5 106.5t-130.5 308.5z M299 398q0 -124 76 -194.5t202 -70.5q123 0 200 71t77 194q0 120 -79 197t-200 77q-123 0 -199.5 -77t-76.5 -197zM340 1072q0 -111 65.5 -178t171.5 -67q104 0 170 67t66 178q0 108 -67.5 179t-170.5 71q-105 0 -170 -68.5t-65 -181.5z" />
-<glyph unicode="9" horiz-adv-x="1153" d="M83 978q0 219 131.5 359t319.5 140q228 0 359.5 -142.5t131.5 -419.5v-347q0 -285 -142.5 -437t-371.5 -152q-77 0 -156.5 14.5t-142.5 44.5l30 151q59 -31 122.5 -43.5t146.5 -12.5q144 0 230.5 109t86.5 324v66q-49 -71 -122.5 -107.5t-163.5 -36.5q-211 0 -335 130.5 t-124 359.5zM280 978q0 -150 70.5 -243t191.5 -93q109 0 181.5 47t104.5 120v126q0 191 -73.5 289t-214.5 98q-108 0 -184 -96.5t-76 -247.5z" />
-<glyph unicode=":" horiz-adv-x="517" d="M161 0v202h197v-202h-197zM161 876v202h197v-202h-197z" />
-<glyph unicode=";" horiz-adv-x="525" d="M99 -258l70 316v163h197v-173l-150 -306h-117zM162 876v202h197v-202h-197z" />
-<glyph unicode="&#x3c;" horiz-adv-x="1040" d="M71 466v149l816 378v-201l-559 -233l-85 -18v-6l85 -19l559 -228v-201z" />
-<glyph unicode="=" horiz-adv-x="1153" d="M152 407v164h834v-164h-834zM152 823v164h834v-164h-834z" />
-<glyph unicode="&#x3e;" horiz-adv-x="1072" d="M136 87v196l598 238l85 17v6l-85 20l-598 234v195l856 -378v-149z" />
-<glyph unicode="?" horiz-adv-x="974" d="M61 1122q-3 161 113.5 258t296.5 97q197 0 306 -100.5t109 -280.5q0 -129 -70.5 -236t-186.5 -219q-54 -54 -65.5 -97t-11.5 -134h-197q1 145 25 201t126 148q99 117 141 180t42 152q0 106 -56.5 163t-161.5 57q-91 0 -155 -49.5t-64 -145.5h-188zM353 0v208h206v-208 h-206z" />
-<glyph unicode="@" horiz-adv-x="1833" d="M114 478q19 423 249 688t602 265q379 0 581.5 -250t185.5 -679q-9 -214 -120 -368.5t-332 -154.5q-73 0 -126 41.5t-76 117.5q-50 -80 -122 -119.5t-168 -39.5q-125 0 -194 120.5t-51 316.5q23 259 137.5 415.5t279.5 156.5q105 0 169 -26t139 -80l-4 -4h6l-51 -585 q-9 -110 21.5 -151.5t81.5 -41.5q123 0 197 113.5t82 288.5q16 382 -144 595.5t-496 213.5q-308 0 -495.5 -231t-202.5 -602q-18 -376 150 -594.5t482 -218.5q88 0 178.5 21.5t152.5 56.5l38 -107q-67 -42 -170.5 -65.5t-202.5 -23.5q-380 0 -587.5 249.5t-189.5 681.5z M720 416q-11 -142 21.5 -216t106.5 -74q64 0 117 24.5t97 87.5q-1 12 -0.5 25.5t2.5 29.5l47 538q-26 12 -54.5 19t-59.5 7q-125 0 -191 -109.5t-86 -331.5z" />
-<glyph unicode="A" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6z" />
-<glyph unicode="B" horiz-adv-x="1309" d="M180 0v1456h475q228 0 357 -98.5t129 -295.5q0 -97 -62 -173.5t-163 -113.5q132 -28 207.5 -129t75.5 -235q0 -200 -129.5 -305.5t-351.5 -105.5h-538zM377 154h341q134 0 209 66.5t75 188.5q0 128 -62.5 201t-192.5 73h-370v-529zM377 837h319q110 0 179 60.5t69 168.5 q0 118 -74.5 176.5t-214.5 58.5h-278v-464z" />
-<glyph unicode="C" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5q247 1 393 -131q142 -128 142 -337v-12l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6v-11q0 -198 -144 -332q-148 -138 -391 -138 q-247 0 -402.5 175t-155.5 444z" />
-<glyph unicode="D" horiz-adv-x="1349" d="M180 0v1456h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447zM377 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-1147z" />
-<glyph unicode="E" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966z" />
-<glyph unicode="F" horiz-adv-x="1193" d="M180 0v1456h963v-155h-766v-502h664v-155h-664v-644h-197z" />
-<glyph unicode="G" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432z" />
-<glyph unicode="H" horiz-adv-x="1461" d="M180 0v1456h197v-658h707v658h197v-1456h-197v643h-707v-643h-197z" />
-<glyph unicode="I" horiz-adv-x="579" d="M190 0v1456h198v-1456h-198z" />
-<glyph unicode="J" horiz-adv-x="1130" d="M66 395l2 6h189q0 -135 68.5 -201.5t193.5 -66.5q109 0 178 73.5t69 196.5v1053h197v-1053q0 -195 -123.5 -309.5t-320.5 -114.5q-210 0 -334 107q-119 102 -119 293v16z" />
-<glyph unicode="K" horiz-adv-x="1317" d="M180 0v1456h197v-644h152l521 644h218l3 -5l-565 -699l606 -747l-3 -5h-235l-527 657h-170v-657h-197z" />
-<glyph unicode="L" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886z" />
-<glyph unicode="M" horiz-adv-x="1799" d="M180 0v1456h252l464 -1183h6l464 1183h252v-1456h-197v576l20 592l-5 1l-472 -1169h-131l-470 1166l-5 -1l19 -589v-576h-197z" />
-<glyph unicode="N" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197z" />
-<glyph unicode="O" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261z" />
-<glyph unicode="P" horiz-adv-x="1312" d="M180 0v1456h557q233 0 362 -120t129 -316q0 -199 -129 -317.5t-362 -118.5h-360v-584h-197zM377 738h360q148 0 221 79.5t73 200.5t-73.5 202t-220.5 81h-360v-563z" />
-<glyph unicode="Q" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -142 -50 -263t-140 -205l247 -233l-135 -129l-276 257q-56 -23 -116.5 -34.5t-124.5 -11.5q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5 t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128t-102.5 -328v-261z" />
-<glyph unicode="R" horiz-adv-x="1357" d="M180 0v1455h527q239 0 365 -106t126 -308q0 -112 -58.5 -195t-170.5 -132q120 -39 172.5 -126.5t52.5 -216.5v-137q0 -68 15 -122t52 -88v-24h-203q-39 34 -50 100t-11 136v133q0 118 -69 190t-185 72h-366v-631h-197zM377 786h310q167 0 240.5 63.5t73.5 193.5 q0 123 -71.5 190.5t-222.5 67.5h-330v-515z" />
-<glyph unicode="S" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 381 -131q137 -127 136 -292v-12l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -386 118q-163 115 -162 305v11z" />
-<glyph unicode="T" horiz-adv-x="1200" d="M34 1301v155h1132v-155h-468v-1301h-197v1301h-467z" />
-<glyph unicode="U" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5z" />
-<glyph unicode="V" horiz-adv-x="1295" d="M22 1456h214l376 -1094l33 -115h6l33 115l376 1094h213l-541 -1456h-169z" />
-<glyph unicode="W" horiz-adv-x="1809" d="M54 1456h196l222 -952l27 -182l6 -1l39 183l267 952h174l269 -952l40 -187h6l29 187l217 952h197l-351 -1456h-176l-287 1010l-26 131h-6l-25 -131l-292 -1010h-176z" />
-<glyph unicode="X" horiz-adv-x="1295" d="M66 0l472 734l-462 722h236l338 -568l340 568h238l-462 -722l472 -734h-235l-349 578l-350 -578h-238z" />
-<glyph unicode="Y" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525z" />
-<glyph unicode="Z" horiz-adv-x="1225" d="M97 0v146l778 1155h-767v155h992v-141l-781 -1161h814v-154h-1036z" />
-<glyph unicode="[" horiz-adv-x="552" d="M143 -312v1976h385v-155h-188v-1666h188v-155h-385z" />
-<glyph unicode="\" horiz-adv-x="846" d="M39 1456h186l608 -1581h-186z" />
-<glyph unicode="]" horiz-adv-x="552" d="M11 -157h189v1666h-189v155h386v-1976h-386v155z" />
-<glyph unicode="^" horiz-adv-x="856" d="M61 729l299 727h134l298 -727h-181l-166 419l-16 70h-6l-16 -70l-163 -419h-183z" />
-<glyph unicode="_" horiz-adv-x="931" d="M4 0h923v-154h-923v154z" />
-<glyph unicode="`" horiz-adv-x="641" d="M82 1471l3 6h230l175 -266h-158z" />
-<glyph unicode="a" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6v11q0 111 112 205q118 98 303 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
-<glyph unicode="b" d="M143 0v1560h197v-606q51 72 126.5 110t176.5 38q200 0 312 -160t112 -421v-21q0 -234 -112.5 -377.5t-309.5 -143.5q-107 0 -186 41.5t-131 122.5l-24 -143h-161zM340 309q38 -80 99.5 -125t155.5 -45q139 0 207 99t68 262v21q0 186 -68.5 303.5t-208.5 117.5 q-91 0 -153.5 -44.5t-99.5 -119.5v-469z" />
-<glyph unicode="c" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q191 0 311 -112q117 -108 116 -265v-10l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6v-10q-1 -134 -125 -238 q-130 -108 -301 -109q-236 0 -361 154t-125 387z" />
-<glyph unicode="d" d="M98 500v21q0 261 111.5 421t312.5 160q95 0 168.5 -35t125.5 -102v595h197v-1560h-161l-23 133q-53 -76 -130 -115t-179 -39q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67 -262.5t208 -98.5q88 0 148 40t98 112v505q-38 67 -98.5 106.5t-145.5 39.5 q-142 0 -209.5 -117t-67.5 -304v-21z" />
-<glyph unicode="e" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="f" horiz-adv-x="707" d="M56 936v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-53.5 3q-86 0 -128 -51.5t-42 -149.5v-137h225v-146h-225v-936h-197v936h-169z" />
-<glyph unicode="g" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21z" />
-<glyph unicode="h" d="M143 0v1560h197v-623q56 78 137.5 121.5t180.5 43.5q173 0 269.5 -104t96.5 -320v-678h-197v680q0 134 -57.5 198t-171.5 64q-82 0 -148.5 -38.5t-109.5 -104.5v-799h-197z" />
-<glyph unicode="i" horiz-adv-x="516" d="M159 0v1082h197v-1082h-197zM159 1359v201h197v-201h-197z" />
-<glyph unicode="j" horiz-adv-x="530" d="M-66 -419l14 155q14 -5 40 -8.5t43 -3.5q65 0 103.5 44t38.5 143v1171h197v-1171q0 -167 -86 -257.5t-239 -90.5q-31 0 -56.5 4.5t-54.5 13.5zM167 1363v197h197v-197h-197z" />
-<glyph unicode="k" horiz-adv-x="1050" d="M144 0v1560h197v-904h126l296 426h236l-370 -492l423 -590h-232l-351 499h-128v-499h-197z" />
-<glyph unicode="l" horiz-adv-x="516" d="M159 0v1560h197v-1560h-197z" />
-<glyph unicode="m" horiz-adv-x="1790" d="M143 0v1082h176l14 -142q53 77 134.5 119.5t189.5 42.5t185.5 -50t116.5 -150q51 92 135 146t196 54q165 0 261 -113.5t96 -341.5v-647h-197v649q0 160 -55 226.5t-164 66.5q-101 0 -163.5 -70t-73.5 -177v-8v-687h-198v649q0 152 -56.5 222.5t-162.5 70.5 q-90 0 -148 -37t-89 -104v-801h-197z" />
-<glyph unicode="n" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197z" />
-<glyph unicode="o" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="p" d="M143 -416v1498h151l31 -140q53 78 132 119t184 41q201 0 312.5 -159.5t111.5 -421.5v-21q0 -234 -112 -377.5t-309 -143.5q-100 0 -175.5 33.5t-128.5 100.5v-529h-197zM340 275q37 -67 97 -104.5t147 -37.5q140 0 212 102.5t72 264.5v21q0 184 -72.5 302.5t-213.5 118.5 q-85 0 -145 -38.5t-97 -105.5v-523z" />
-<glyph unicode="q" d="M98 500v21q0 261 111.5 421t312.5 160q99 0 174 -37.5t127 -109.5l29 127h150v-1498h-197v518q-52 -61 -123 -92t-162 -31q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67.5 -265.5t207.5 -101.5q81 0 138.5 36t96.5 101v546q-39 61 -96.5 96t-136.5 35 q-141 0 -209 -119.5t-68 -306.5v-21z" />
-<glyph unicode="r" horiz-adv-x="702" d="M143 0v1082h176l19 -158q46 84 113.5 131t155.5 47q22 0 42 -3.5t33 -7.5l-27 -183l-101 6q-78 0 -131.5 -37t-82.5 -104v-773h-197z" />
-<glyph unicode="s" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 301 -97q107 -93 106 -224v-12l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105q-113 100 -113 232v13z" />
-<glyph unicode="t" horiz-adv-x="708" d="M34 936v146h172v261h197v-261h205v-146h-205v-657q0 -76 31.5 -107t83.5 -31q17 0 37.5 4t36.5 10l26 -135q-22 -18 -64.5 -29.5t-85.5 -11.5q-120 0 -191 72.5t-71 227.5v657h-172z" />
-<glyph unicode="u" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352z" />
-<glyph unicode="v" horiz-adv-x="1030" d="M46 1082h202l256 -763l17 -76h6l19 76l249 763h201l-398 -1082h-149z" />
-<glyph unicode="w" horiz-adv-x="1550" d="M45 1082h196l179 -688l23 -131h6l28 131l216 688h158l217 -688l31 -146h6l29 146l170 688h196l-314 -1082h-159l-209 659l-45 184l-6 -1l-43 -183l-206 -659h-159z" />
-<glyph unicode="x" horiz-adv-x="1030" d="M46 0l361 547l-351 535h227l227 -399l230 399h230l-351 -535l361 -547h-226l-240 409l-240 -409h-228z" />
-<glyph unicode="y" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113z" />
-<glyph unicode="z" horiz-adv-x="1030" d="M94 0v138l585 788h-578v156h819v-134l-591 -794h625v-154h-860z" />
-<glyph unicode="{" horiz-adv-x="696" d="M63 543v147q106 0 157.5 61.5t51.5 174.5v206q0 171 82 290.5t277 174.5l40 -117q-110 -35 -156 -125.5t-46 -222.5v-206q0 -105 -42.5 -185t-127.5 -125q85 -46 127.5 -126.5t42.5 -183.5v-205q0 -132 46 -221.5t156 -125.5l-40 -118q-195 55 -277 175t-82 290v205 q0 112 -51.5 174.5t-157.5 62.5z" />
-<glyph unicode="|" horiz-adv-x="507" d="M175 -270v1726h158v-1726h-158z" />
-<glyph unicode="}" horiz-adv-x="696" d="M21 -246q109 36 156 125.5t47 221.5v205q0 107 45 187t139 123q-94 41 -139 121t-45 189v206q0 132 -47 222.5t-156 125.5l41 117q194 -55 276.5 -174.5t82.5 -290.5v-206q0 -113 50.5 -174.5t158.5 -61.5v-147q-108 0 -158.5 -62.5t-50.5 -174.5v-205q0 -170 -82.5 -290 t-276.5 -175z" />
-<glyph unicode="~" horiz-adv-x="1391" d="M128 474q0 136 85.5 232.5t217.5 96.5q88 0 163 -34.5t160 -104.5q58 -51 106 -74t100 -23q66 0 114.5 57t48.5 134l141 -18q0 -137 -87 -238t-217 -101q-90 0 -163.5 33t-158.5 107q-59 48 -108 72t-99 24q-67 0 -114.5 -53t-47.5 -128z" />
-<glyph unicode="&#xa1;" horiz-adv-x="507" d="M144 -374v978h197v-978h-197zM144 876v206h197v-206h-197z" />
-<glyph unicode="&#xa2;" horiz-adv-x="1122" d="M107 520v42q0 199 95 344.5t276 183.5v228h198v-223q157 -24 252.5 -130.5t92.5 -250.5l-2 -5h-179q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h178l3 -6q3 -122 -98 -223t-247 -126v-232 h-198v236q-182 36 -276.5 182t-94.5 347z" />
-<glyph unicode="&#xa3;" horiz-adv-x="1194" d="M70 615v155h158l-10 270q0 204 112 320.5t300 116.5q200 0 310 -104.5t106 -276.5l-2 -6h-190q0 118 -63 175t-161 57q-99 0 -157 -74.5t-58 -207.5l10 -270h418v-155h-413l6 -149q0 -90 -15.5 -171.5t-44.5 -140.5h735l-1 -154h-976v154h10q48 13 72 111t24 201l-6 149 h-164z" />
-<glyph unicode="&#xa4;" horiz-adv-x="1456" d="M104 112l138 140q-50 76 -76.5 166.5t-26.5 189.5q0 102 28.5 196t82.5 172l-146 149l139 139l143 -146q74 55 163 85.5t185 30.5q97 0 186 -31t164 -87l146 149l140 -140l-150 -153q52 -78 80.5 -170.5t28.5 -193.5q0 -98 -26.5 -187.5t-74.5 -165.5l142 -143l-140 -139 l-133 135q-77 -62 -169.5 -95t-193.5 -33t-193.5 32.5t-167.5 93.5l-130 -132zM321 608q0 -188 120.5 -320.5t292.5 -132.5q170 0 290.5 132.5t120.5 320.5q0 186 -120.5 318t-290.5 132q-172 0 -292.5 -132t-120.5 -318z" />
-<glyph unicode="&#xa5;" horiz-adv-x="1243" d="M30 1456h226l359 -663l360 663h224l-418 -718h312v-155h-383v-135h383v-155h-383v-293h-197v293h-375v155h375v135h-375v155h311z" />
-<glyph unicode="&#xa6;" horiz-adv-x="499" d="M145 -270v792h197v-792h-197zM145 698v758h197v-758h-197z" />
-<glyph unicode="&#xa7;" horiz-adv-x="1259" d="M94 551q0 91 47 161.5t134 111.5q-68 50 -102 119.5t-34 166.5q0 166 134 266.5t358 100.5q233 0 363 -111.5t126 -313.5l-3 -6h-188q0 118 -79 197t-219 79q-145 0 -220 -59.5t-75 -150.5q0 -99 67 -148.5t278 -107.5q244 -69 355.5 -159.5t111.5 -265.5q0 -94 -48 -164 t-135 -110q69 -51 104 -119t35 -166q0 -172 -133 -269.5t-358 -97.5q-221 0 -372 102.5t-146 322.5l2 6l188 2q0 -143 96.5 -210.5t231.5 -67.5q137 0 215.5 59.5t78.5 150.5t-72 141.5t-276 113.5q-239 63 -352 156t-113 270zM291 553q0 -100 68 -151.5t278 -110.5 q56 -17 93 -28t70 -23q72 20 112 69.5t40 118.5q0 91 -73.5 144.5t-275.5 116.5q-47 12 -88.5 24.5t-77.5 27.5q-73 -19 -109.5 -69t-36.5 -119z" />
-<glyph unicode="&#xa8;" horiz-adv-x="1021" d="M170 1256v200h219v-200h-219zM640 1256v200h219v-200h-219z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1604" d="M88 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -265 171.5 -447t417.5 -182q245 0 417 182t172 447q0 263 -172 444t-417 181q-246 0 -417.5 -181t-171.5 -444zM436 669v119q0 173 94 280 t254 107q157 0 245.5 -79t84.5 -228l-2 -6h-146q0 95 -45.5 138.5t-136.5 43.5q-94 0 -145 -70.5t-51 -184.5v-120q0 -117 51 -187t145 -70q91 0 136 43t45 141h146l2 -6q4 -151 -84 -229.5t-245 -78.5q-160 0 -254 106.5t-94 280.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="917" d="M120 920q0 110 84.5 170t245.5 60h139v52q0 63 -30 97t-88 34q-67 0 -103.5 -27t-36.5 -76l-162 13l-1 6q-6 98 78.5 163t224.5 65q134 0 212 -71t78 -205v-314q0 -50 6 -94t20 -87h-174q-8 21 -13 45t-8 50q-33 -47 -89.5 -78t-133.5 -31q-119 0 -184 61t-65 167z M293 924q0 -45 29 -69t89 -24q51 0 105.5 30t72.5 65v110h-138q-75 0 -116.5 -33t-41.5 -79z" />
-<glyph unicode="&#xab;" horiz-adv-x="966" d="M98 507v19l295 389h148l-255 -399l255 -398h-148zM432 507v19l295 389h148l-255 -399l255 -398h-148z" />
-<glyph unicode="&#xac;" horiz-adv-x="1137" d="M127 637v165h835v-427h-198v262h-637z" />
-<glyph unicode="&#xad;" horiz-adv-x="561" d="M35 538v154h490v-154h-490z" />
-<glyph unicode="&#xae;" horiz-adv-x="1604" d="M88 729q0 315 207 531t503 216q295 0 502 -216t207 -531q0 -316 -207.5 -533t-501.5 -217q-296 0 -503 217t-207 533zM209 729q0 -266 171.5 -447.5t417.5 -181.5q244 0 416 182t172 447q0 264 -171.5 444.5t-416.5 180.5q-246 0 -417.5 -180.5t-171.5 -444.5zM504 316 v850h280q152 0 238.5 -65.5t86.5 -191.5q0 -62 -33 -109t-96 -78q66 -26 95.5 -79t29.5 -128v-56q0 -41 3.5 -73.5t13.5 -53.5v-16h-153q-9 21 -11 61.5t-2 82.5v54q0 72 -33.5 106t-110.5 34h-159v-338h-149zM653 784h152q65 1 110.5 32.5t45.5 87.5q0 73 -39.5 102.5 t-137.5 29.5h-131v-252z" />
-<glyph unicode="&#xaf;" horiz-adv-x="950" d="M123 1310v146h721v-146h-721z" />
-<glyph unicode="&#xb0;" horiz-adv-x="763" d="M128 1216q0 106 76 183.5t181 77.5q103 0 177.5 -77.5t74.5 -183.5q0 -108 -74 -182.5t-178 -74.5q-106 0 -181.5 74.5t-75.5 182.5zM259 1216q0 -55 36.5 -91t89.5 -36q52 0 87.5 36t35.5 91t-36 92.5t-87 37.5q-53 0 -89.5 -37.5t-36.5 -92.5z" />
-<glyph unicode="&#xb1;" horiz-adv-x="1097" d="M99 702v154h381v411h177v-411h358v-154h-358v-413h-177v413h-381zM136 4v155h835v-155h-835z" />
-<glyph unicode="&#xb2;" horiz-adv-x="868" d="M119 1240q-6 99 78 169t225 70q135 0 211 -64t76 -180q0 -80 -44.5 -136t-160.5 -161l-153 -135l2 -6h361v-130h-592v130l302 262q69 60 91 97.5t22 79.5q0 50 -28.5 81t-86.5 31q-67 0 -103.5 -32t-36.5 -82h-161z" />
-<glyph unicode="&#xb3;" horiz-adv-x="876" d="M112 882l1 6h163q0 -46 37.5 -74.5t100.5 -28.5q72 0 114 29.5t42 77.5q0 62 -36.5 90.5t-109.5 28.5h-132v126h132q67 0 99.5 28.5t32.5 80.5q0 43 -36.5 72t-105.5 29q-56 0 -90.5 -24t-34.5 -64h-162l-2 6q-6 94 78.5 153.5t210.5 59.5q145 0 229 -59.5t84 -169.5 q0 -55 -35.5 -100.5t-97.5 -71.5q70 -23 108 -71t38 -116q0 -111 -90 -173t-236 -62q-127 0 -217.5 58t-84.5 169z" />
-<glyph unicode="&#xb4;" horiz-adv-x="654" d="M131 1211l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xb5;" d="M153 -416v1498h196v-642q2 -178 57.5 -242.5t155.5 -64.5q98 0 158.5 36t92.5 106v807h197v-1082h-177l-9 108q-44 -63 -107.5 -96t-146.5 -33q-72 0 -126.5 16.5t-94.5 51.5v-463h-196z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1006" d="M63 988q0 207 129.5 337.5t362.5 130.5h281v-1456h-197v520h-84q-233 0 -362.5 129.5t-129.5 338.5z" />
-<glyph unicode="&#xb7;" horiz-adv-x="540" d="M161 624v212h198v-212h-198z" />
-<glyph unicode="&#xb8;" horiz-adv-x="509" d="M119 -326q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
-<glyph unicode="&#xb9;" horiz-adv-x="557" d="M95 1320v134l301 23v-812h-174v655h-127z" />
-<glyph unicode="&#xba;" horiz-adv-x="933" d="M120 1025v117q0 148 94 241.5t251 93.5q158 0 252 -93.5t94 -241.5v-117q0 -149 -93.5 -241.5t-250.5 -92.5q-158 0 -252.5 92.5t-94.5 241.5zM293 1025q0 -88 44 -140.5t130 -52.5q83 0 127.5 53t44.5 140v117q0 84 -45 137.5t-129 53.5t-128 -53.5t-44 -137.5v-117z " />
-<glyph unicode="&#xbb;" horiz-adv-x="966" d="M110 152l255 398l-255 399h148l295 -389v-19l-295 -389h-148zM456 152l255 398l-255 399h148l295 -389v-19l-295 -389h-148z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1595" d="M184 1319v134l301 23v-812h-174v655h-127zM339 185l711 1138l109 -67l-711 -1138zM785 254l422 547h173v-519h126v-130h-126v-152h-170v152h-417zM967 282h243v310l-6 1l-13 -22z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1708" d="M184 1319v134l301 23v-812h-174v655h-127zM352 185l711 1138l109 -67l-711 -1138zM930 573q-6 99 78 169t225 70q135 0 211 -64t76 -180q0 -80 -44.5 -136t-160.5 -161l-153 -135l2 -6h361v-130h-592v130l302 262q69 60 91 97.5t22 79.5q0 50 -28.5 81t-86.5 31 q-67 0 -103.5 -32t-36.5 -82h-161z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1781" d="M128 883l1 6h163q0 -46 37.5 -74.5t100.5 -28.5q72 0 114 29.5t42 77.5q0 62 -36.5 90.5t-109.5 28.5h-132v126h132q67 0 99.5 28.5t32.5 80.5q0 43 -36.5 72t-105.5 29q-56 0 -90.5 -24t-34.5 -64h-162l-2 6q-6 94 78.5 153.5t210.5 59.5q145 0 229 -59.5t84 -169.5 q0 -55 -35.5 -100.5t-97.5 -71.5q70 -23 108 -71t38 -116q0 -111 -90 -173t-236 -62q-127 0 -217.5 58t-84.5 169zM522 185l711 1138l109 -67l-711 -1138zM974 254l422 547h173v-519h126v-130h-126v-152h-170v152h-417zM1156 282h243v310l-6 1l-13 -22z" />
-<glyph unicode="&#xbf;" horiz-adv-x="1013" d="M114 -13q0 127 70 233.5t187 220.5q53 53 65 96t12 135h197q-2 -146 -26 -202t-125 -147q-100 -118 -141.5 -181t-41.5 -150q0 -106 56 -163t162 -57q90 0 154.5 49.5t64.5 145.5h188l3 -6q2 -161 -114.5 -258t-295.5 -97q-198 0 -306.5 100.5t-108.5 280.5zM441 874v209 h206v-209h-206z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM378 1820l3 6h230l175 -266h-158zM420 540h490l-240 663h-6z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM613 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM356 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM420 540h490l-240 663h-6z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM316 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM420 540h490l-240 663h-6z " />
-<glyph unicode="&#xc4;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM319 1605v200h219v-200h-219zM420 540h490l-240 663h-6zM789 1605v200h219v-200h-219z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM457 1734q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54q-87 0 -147.5 54t-60.5 140zM560 1734q0 -43 31 -73.5t74 -30.5q42 0 72 29.5 t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1922" d="M-20 0l880 1456h967v-155h-691l20 -466h590v-155h-584l22 -526h705v-154h-895l-15 350h-557l-202 -350h-240zM525 529h447l-31 710l-5 2z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM581 -334 q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM303 1820l3 6h230l175 -266h-158z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM538 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xca;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM322 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM284 1605v200h219v-200h-219zM754 1605v200h219v-200h-219z" />
-<glyph unicode="&#xcc;" horiz-adv-x="579" d="M-34 1820l3 6h230l175 -266h-158zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#xcd;" horiz-adv-x="579" d="M190 0v1456h198v-1456h-198zM199 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xce;" horiz-adv-x="579" d="M-15 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#xcf;" horiz-adv-x="579" d="M-53 1605v200h219v-200h-219zM190 0v1456h198v-1456h-198zM417 1605v200h219v-200h-219z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1379" d="M42 663v155h168v638h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447v663h-168zM407 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-483h276v-155h-276v-509z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197zM381 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM373 1841l3 6h230l175 -266h-158z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM608 1577l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM392 1622v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM351 1649q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM354 1626v200h219v-200h-219zM824 1626v200h219v-200h-219z" />
-<glyph unicode="&#xd7;" horiz-adv-x="1096" d="M88 351l327 334l-327 334l126 126l326 -333l327 333l126 -126l-328 -334l328 -334l-126 -126l-327 332l-326 -332z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q94 0 178.5 -25.5t156.5 -71.5l81 137h149l-132 -221q77 -84 119.5 -197t42.5 -242v-259q0 -267 -165.5 -443t-429.5 -176q-85 0 -160.5 20.5t-139.5 60.5l-91 -154h-149l139 234q-84 84 -128.5 202t-44.5 256zM310 598 q0 -85 19 -158t54 -125l6 -1l544 916q-50 41 -112 63t-134 22q-172 0 -274.5 -128t-102.5 -328v-261zM475 208q44 -34 97 -51t115 -17q183 0 290.5 127.5t107.5 330.5v261q0 75 -16.5 142t-46.5 117l-6 1z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM372 1820l3 6h230l175 -266h-158z" />
-<glyph unicode="&#xda;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM607 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM391 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM353 1605v200h219v-200h-219zM823 1605v200h219v-200h-219z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525zM535 1555l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xde;" horiz-adv-x="1209" d="M163 0v1456h197v-293h269q232 0 362 -118t130 -307q0 -190 -130 -307.5t-362 -117.5h-269v-313h-197zM360 467h269q147 0 220.5 78t73.5 191q0 114 -73.5 193.5t-220.5 79.5h-269v-542z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1221" d="M137 0v1082q0 223 117.5 348t300.5 125q161 0 262 -86t101 -253q0 -118 -64.5 -228t-64.5 -167q0 -82 173.5 -224t173.5 -281q0 -167 -104.5 -252t-282.5 -85q-84 0 -172.5 20.5t-125.5 50.5l44 159q43 -28 108 -52t126 -24q108 0 159 47.5t51 125.5q0 84 -173.5 227.5 t-173.5 289.5q0 80 70.5 190.5t70.5 186.5q0 93 -51 147t-117 54q-104 0 -168 -83.5t-64 -235.5v-1082h-196z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM230 1498l3 6h230l175 -266h-158zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM465 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM249 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM208 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55 t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM211 1283v200h219v-200h-219zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM681 1283v200h219v-200h-219z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM346 1412q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54q-87 0 -147.5 54t-60.5 140z M449 1412q0 -43 31 -73.5t74 -30.5q42 0 72 29.5t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1729" d="M58 304q0 158 115 244.5t335 86.5h229v85q0 106 -51.5 166.5t-149.5 60.5q-103 0 -164 -55t-61 -133l-188 18l-2 6q-5 138 109.5 228.5t305.5 90.5q114 0 201.5 -40.5t137.5 -117.5q64 75 151.5 116.5t188.5 41.5q214 0 329.5 -130t115.5 -358v-119h-709l-2 -5 q1 -159 79.5 -258t233.5 -99q103 0 169.5 27.5t144.5 78.5l67 -138q-53 -44 -147 -83t-234 -39q-136 0 -240 48.5t-170 138.5q-56 -79 -167.5 -133t-271.5 -54q-170 0 -262.5 87t-92.5 238zM255 300q0 -74 50 -120.5t147 -46.5q76 0 159 43.5t126 100.5v216h-227 q-120 0 -187.5 -56t-67.5 -137zM953 645l2 -5h508v31q0 122 -60 199t-188 77q-113 0 -182 -84.5t-80 -217.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM440 -334q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM233 1499l3 6h230l175 -266h-158zM307 654l2 -5 h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5zM468 1235l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xea;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM252 1280v26l246 237h120l248 -238v-25h-161 l-147 148l-146 -148h-160zM307 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM214 1284v200h219v-200h-219zM307 654l2 -5h499 v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5zM684 1284v200h219v-200h-219z" />
-<glyph unicode="&#xec;" horiz-adv-x="515" d="M-71 1477l3 6h230l175 -266h-158zM153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#xed;" horiz-adv-x="515" d="M153 0v1082h197v-1082h-197zM162 1213l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xee;" horiz-adv-x="515" d="M-52 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#xef;" horiz-adv-x="515" d="M-90 1262v200h219v-200h-219zM153 0v1082h197v-1082h-197zM380 1262v200h219v-200h-219z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1202" d="M72 466q0 228 138 370t351 142q90 0 169.5 -37t131.5 -97l4 5q-9 109 -51.5 197t-110.5 154l-290 -165l-77 102l256 146q-39 22 -80.5 39t-85.5 31l60 164q79 -19 151 -52t135 -79l218 125l77 -102l-195 -112q95 -104 147 -241.5t52 -300.5v-220q0 -245 -144 -400.5 t-359 -155.5q-218 0 -357.5 140t-139.5 347zM269 466q0 -132 82 -232.5t222 -100.5q133 0 217.5 114t84.5 288v148q-35 59 -115.5 99.5t-198.5 40.5q-131 0 -211.5 -104t-80.5 -253z" />
-<glyph unicode="&#xf1;" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197zM231 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32 q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
-<glyph unicode="&#xf2;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM257 1498l3 6h230l175 -266h-158zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113 q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#xf3;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z M492 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xf4;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM276 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22 q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#xf5;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM235 1306q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5 t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#xf6;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM238 1283v200h219v-200h-219zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113 q-141 0 -213.5 -113t-72.5 -283v-22zM708 1283v200h219v-200h-219z" />
-<glyph unicode="&#xf7;" horiz-adv-x="1170" d="M71 597v188h998v-188h-998zM472 180v203h198v-203h-198zM472 999v203h198v-203h-198z" />
-<glyph unicode="&#xf8;" d="M97 529v22q0 240 130 395.5t353 155.5q56 0 107.5 -11t97.5 -31l74 149h129l-104 -211q88 -74 135 -190t47 -257v-22q0 -242 -130 -396t-354 -154q-51 0 -97 8.5t-88 24.5l-72 -147h-129l100 204q-96 71 -147.5 191t-51.5 269zM294 529q0 -91 20 -166.5t61 -123.5h6 l332 674q-29 16 -62.5 25t-70.5 9q-141 0 -213.5 -113t-72.5 -283v-22zM469 156q24 -12 52 -17.5t61 -5.5q141 0 214 112t73 284v22q0 80 -17.5 150.5t-49.5 117.5h-6z" />
-<glyph unicode="&#xf9;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM255 1477l3 6h230l175 -266h-158z" />
-<glyph unicode="&#xfa;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM490 1213l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xfb;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM274 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#xfc;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM236 1262v200h219v-200h-219zM706 1262v200h219v-200h-219z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113zM424 1213l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1186" d="M153 -416v1976h197v-598q53 68 128 104t173 36q201 0 312.5 -159.5t111.5 -421.5v-21q0 -234 -112 -377.5t-309 -143.5q-100 0 -175.5 33.5t-128.5 100.5v-529h-197zM350 275q37 -67 97 -104.5t147 -37.5q140 0 212 102.5t72 264.5v21q0 184 -72.5 302.5t-213.5 118.5 q-85 0 -145 -38.5t-97 -105.5v-523z" />
-<glyph unicode="&#xff;" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113zM170 1262v200h219v-200h-219zM640 1262v200h219v-200h-219z" />
-<glyph unicode="&#x100;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM303 1640v146h721v-146h-721zM420 540h490l-240 663h-6z" />
-<glyph unicode="&#x101;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM200 1318v146h721v-146h-721zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141z" />
-<glyph unicode="&#x102;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM369 1864l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM420 540h490l-240 663h-6z" />
-<glyph unicode="&#x103;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM261 1542l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141 z" />
-<glyph unicode="&#x104;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM962 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5 q-95 0 -155.5 55t-60.5 154z" />
-<glyph unicode="&#x105;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM667 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5 l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154z" />
-<glyph unicode="&#x106;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM588 1577 l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x107;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM447 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x108;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM372 1622 v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x109;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM231 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x10a;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM569 1625 v201h218v-201h-218z" />
-<glyph unicode="&#x10b;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM428 1282v201h218v-201h-218z" />
-<glyph unicode="&#x10c;" horiz-adv-x="1297" d="M118 598v259q0 269 155.5 444.5t402.5 175.5t393 -131.5t142 -348.5l-2 -6h-189q0 153 -90 242t-254 89q-165 0 -263 -133t-98 -330v-261q0 -199 98 -332t263 -133q164 0 254 88.5t90 244.5h189l2 -6q4 -205 -144 -343t-391 -138q-247 0 -402.5 175t-155.5 444zM364 1866 v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x10d;" horiz-adv-x="1087" d="M97 520v42q0 231 125.5 385.5t360.5 154.5q190 0 310.5 -112t116.5 -275l-2 -6h-178q0 99 -70 168.5t-177 69.5q-155 0 -221.5 -111.5t-66.5 -273.5v-42q0 -166 66 -276.5t222 -110.5q98 0 172.5 60.5t74.5 148.5h177l2 -6q5 -140 -124.5 -248.5t-301.5 -108.5 q-236 0 -361 154t-125 387zM223 1523v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x10e;" horiz-adv-x="1349" d="M180 0v1456h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447zM306 1845v20h166l147 -148l147 148h170v-18l-257 -245h-119zM377 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-1147z" />
-<glyph unicode="&#x10f;" horiz-adv-x="1314" d="M98 500v21q0 261 111.5 421t312.5 160q95 0 168.5 -35t125.5 -102v595h197v-1560h-161l-23 133q-53 -76 -130 -115t-179 -39q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67 -262.5t208 -98.5q88 0 148 40t98 112v505q-38 67 -98.5 106.5t-145.5 39.5 q-142 0 -209.5 -117t-67.5 -304v-21zM1090 1183l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x110;" horiz-adv-x="1379" d="M42 663v155h168v638h447q286 0 459 -175.5t173 -453.5v-199q0 -279 -173 -453.5t-459 -174.5h-447v663h-168zM407 154h250q202 0 318.5 133t116.5 341v201q0 206 -116.5 339t-318.5 133h-250v-483h276v-155h-276v-509z" />
-<glyph unicode="&#x111;" horiz-adv-x="1194" d="M98 500v21q0 261 111.5 421t312.5 160q95 0 168.5 -35t125.5 -102v266h-247v155h247v174h197v-174h197v-155h-197v-1231h-161l-23 133q-53 -76 -130 -115t-179 -39q-198 0 -310 143.5t-112 377.5zM295 500q0 -164 67 -262.5t208 -98.5q88 0 148 40t98 112v505 q-38 67 -98.5 106.5t-145.5 39.5q-142 0 -209.5 -117t-67.5 -304v-21z" />
-<glyph unicode="&#x112;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM273 1640v146h721v-146h-721z" />
-<glyph unicode="&#x113;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM203 1319v146h721v-146h-721zM307 654l2 -5h499 v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="&#x114;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM334 1864l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189z" />
-<glyph unicode="&#x115;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM264 1543l2 6h151q0 -66 34 -107t108 -41 q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM307 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="&#x116;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM519 1604v201h218v-201h-218z" />
-<glyph unicode="&#x117;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5zM449 1283v201h218v-201h-218z" />
-<glyph unicode="&#x118;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM399 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154z " />
-<glyph unicode="&#x119;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM307 654l2 -5h499v26q0 116 -62 194t-184 78 q-99 0 -169 -83.5t-86 -209.5zM560 -161q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154z" />
-<glyph unicode="&#x11a;" horiz-adv-x="1197" d="M180 0v1456h955v-155h-758v-471h667v-155h-667v-521h769v-154h-966zM314 1845v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x11b;" horiz-adv-x="1083" d="M99 520v44q0 231 137.5 384.5t325.5 153.5q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-226 0 -359.5 150.5t-133.5 390.5zM244 1524v20h166l147 -148l147 148h170v-18 l-257 -245h-119zM307 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5t-86 -209.5z" />
-<glyph unicode="&#x11c;" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432zM362 1622v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x11d;" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM258 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21z" />
-<glyph unicode="&#x11e;" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432zM374 1885l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189z" />
-<glyph unicode="&#x11f;" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM270 1542l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21z" />
-<glyph unicode="&#x120;" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432zM559 1625v201h218v-201h-218z" />
-<glyph unicode="&#x121;" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21zM455 1282v201h218v-201h-218z" />
-<glyph unicode="&#x122;" horiz-adv-x="1396" d="M120 578v300q0 265 159 432t410 167q250 0 393 -123t146 -317l-2 -6h-188q-9 127 -96.5 209t-252.5 82q-167 0 -269 -125t-102 -317v-302q0 -194 114 -319.5t290 -125.5q124 0 203 33t113 75v331h-319v155h516v-534q-52 -80 -180.5 -147t-332.5 -67q-261 0 -431.5 167 t-170.5 432zM521 -494l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x123;" d="M100 500v21q0 261 114 421t315 160q103 0 181 -41.5t130 -119.5l24 141h157v-1088q0 -208 -121 -319.5t-349 -111.5q-78 0 -168.5 21.5t-159.5 58.5l50 153q53 -30 128 -48.5t148 -18.5q144 0 209.5 65.5t65.5 199.5v122q-53 -68 -127 -102.5t-170 -34.5q-199 0 -313 144 t-114 377zM297 500q0 -163 69 -262t210 -99q89 0 149 40.5t99 114.5v498q-38 69 -99 109.5t-147 40.5q-141 0 -211 -118t-70 -303v-21zM459 1253v148l121 247h97l-21 -257v-138h-197z" />
-<glyph unicode="&#x124;" horiz-adv-x="1461" d="M180 0v1456h197v-658h707v658h197v-1456h-197v643h-707v-643h-197zM415 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x125;" d="M143 0v1560h197v-623q56 78 137.5 121.5t180.5 43.5q173 0 269.5 -104t96.5 -320v-678h-197v680q0 134 -57.5 198t-171.5 64q-82 0 -148.5 -38.5t-109.5 -104.5v-799h-197zM203 1600v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x126;" horiz-adv-x="1439" d="M31 1024v145h147v287h197v-287h707v287h197v-287h144v-145h-144v-1024h-197v643h-707v-643h-197v1024h-147zM375 798h707v226h-707v-226z" />
-<glyph unicode="&#x127;" horiz-adv-x="1194" d="M1 1231v155h172v174h197v-174h272v-155h-272v-294q56 78 137.5 121.5t180.5 43.5q173 0 269.5 -104t96.5 -320v-678h-197v680q0 134 -57.5 198t-171.5 64q-82 0 -148.5 -38.5t-109.5 -104.5v-799h-197v1231h-172z" />
-<glyph unicode="&#x128;" horiz-adv-x="579" d="M-56 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#x129;" horiz-adv-x="515" d="M-93 1285q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5zM153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#x12a;" horiz-adv-x="579" d="M-64 1640v146h721v-146h-721zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#x12b;" horiz-adv-x="515" d="M-101 1299v146h721v-146h-721zM153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#x12c;" horiz-adv-x="579" d="M-3 1864l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#x12d;" horiz-adv-x="515" d="M-40 1521l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#x12e;" horiz-adv-x="579" d="M46 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#x12f;" horiz-adv-x="516" d="M14 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154zM159 0v1082h197v-1082h-197zM159 1359v201h197v-201h-197z" />
-<glyph unicode="&#x130;" horiz-adv-x="579" d="M180 1604v201h218v-201h-218zM190 0v1456h198v-1456h-198z" />
-<glyph unicode="&#x131;" horiz-adv-x="515" d="M153 0v1082h197v-1082h-197z" />
-<glyph unicode="&#x132;" horiz-adv-x="1709" d="M190 0v1456h198v-1456h-198zM645 395l2 6h189q0 -135 68.5 -201.5t193.5 -66.5q109 0 178 73.5t69 196.5v1053h197v-1053q0 -195 -123.5 -309.5t-320.5 -114.5q-210 0 -334 106.5t-119 309.5z" />
-<glyph unicode="&#x133;" horiz-adv-x="1046" d="M159 0v1082h197v-1082h-197zM159 1359v201h197v-201h-197zM450 -419l14 155q14 -5 40 -8.5t43 -3.5q65 0 103.5 44t38.5 143v1171h197v-1171q0 -167 -86 -257.5t-239 -90.5q-31 0 -56.5 4.5t-54.5 13.5zM683 1363v197h197v-197h-197z" />
-<glyph unicode="&#x134;" horiz-adv-x="1130" d="M66 395l2 6h189q0 -135 68.5 -201.5t193.5 -66.5q109 0 178 73.5t69 196.5v1053h197v-1053q0 -195 -123.5 -309.5t-320.5 -114.5q-210 0 -334 106.5t-119 309.5zM550 1589v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x135;" horiz-adv-x="523" d="M-68 -419l14 150q14 -5 46.5 -9t50.5 -4q59 0 93.5 51.5t34.5 141.5v1171h197v-1171q0 -167 -86 -257.5t-239 -90.5q-31 0 -56.5 4.5t-54.5 13.5zM-34 1240v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x136;" horiz-adv-x="1317" d="M180 0v1456h197v-644h152l521 644h218l3 -5l-565 -699l606 -747l-3 -5h-235l-527 657h-170v-657h-197zM487 -477l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x137;" horiz-adv-x="1050" d="M144 0v1560h197v-904h126l296 426h236l-370 -492l423 -590h-232l-351 499h-128v-499h-197zM388 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x138;" horiz-adv-x="1144" d="M153 0v1082h197v-457h84l388 457h231l2 -5l-450 -514l483 -558l-2 -5h-241l-394 459h-101v-459h-197z" />
-<glyph unicode="&#x139;" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886zM186 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x13a;" horiz-adv-x="516" d="M159 0v1560h197v-1560h-197zM168 1594l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x13b;" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886zM480 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x13c;" horiz-adv-x="516" d="M110 -475l61 246v131h158v-140l-122 -237h-97zM159 0v1560h197v-1560h-197z" />
-<glyph unicode="&#x13d;" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886zM583 1080l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x13e;" horiz-adv-x="666" d="M159 0v1560h197v-1560h-197zM453 1183l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x13f;" horiz-adv-x="1106" d="M180 0v1456h197v-1302h689v-154h-886zM613 688v201h218v-201h-218z" />
-<glyph unicode="&#x140;" horiz-adv-x="736" d="M159 0v1560h197v-1560h-197zM485 671v201h218v-201h-218z" />
-<glyph unicode="&#x141;" horiz-adv-x="1077" d="M40 576v166l123 39v675h197v-613l269 86v-166l-269 -86v-523h689v-154h-886v615z" />
-<glyph unicode="&#x142;" horiz-adv-x="558" d="M37 578v165l142 54v763h197v-688l150 58v-165l-150 -58v-707h-197v632z" />
-<glyph unicode="&#x143;" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197zM638 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x144;" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197zM488 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x145;" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197zM580 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x146;" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197zM430 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x147;" horiz-adv-x="1461" d="M180 0v1456h197l701 -1124l6 2v1122h197v-1456h-197l-701 1126l-6 -2v-1124h-197zM414 1845v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x148;" d="M143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197zM264 1523v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x149;" d="M-32 1183l61 246v131h158v-140l-122 -237h-97zM143 0v1082h176l14 -161q54 86 135.5 133.5t185.5 47.5q175 0 271 -102.5t96 -316.5v-683h-197v679q0 143 -56.5 203t-172.5 60q-85 0 -150.5 -41t-104.5 -112v-789h-197z" />
-<glyph unicode="&#x14a;" horiz-adv-x="1416" d="M161 0v1456h197l701 -1112l6 2v1110h197v-1545q0 -167 -86 -257.5t-240 -90.5q-31 0 -57 4.5t-55 13.5l14 150q13 -5 47 -9t51 -4q60 0 94.5 51.5t34.5 141.5v89l-701 1112l-6 -2v-1110h-197z" />
-<glyph unicode="&#x14b;" d="M143 0v1082h176l13 -150q54 81 134 125.5t181 44.5q174 0 270 -102.5t96 -316.5v-772q0 -167 -86 -257.5t-240 -90.5q-31 0 -57.5 4.5t-54.5 13.5l14 160q13 -5 46.5 -8.5t51.5 -3.5q61 0 95 47t34 135v768q0 143 -57 203t-173 60q-85 0 -146.5 -33t-99.5 -92v-817h-197z " />
-<glyph unicode="&#x14c;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM343 1661v146h721v-146h-721z" />
-<glyph unicode="&#x14d;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM227 1318v146h721v-146h-721zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113 q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#x14e;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM404 1885l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189z" />
-<glyph unicode="&#x14f;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM288 1542l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73q-138 0 -219 73t-76 189zM294 529 q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#x150;" horiz-adv-x="1396" d="M113 598v259q0 266 159.5 443t414.5 177q264 0 429.5 -176.5t165.5 -443.5v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM310 598q0 -202 102.5 -330t274.5 -128q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128 t-102.5 -328v-261zM462 1622l184 266h211l2 -5l-240 -261h-157zM731 1627l241 261h229l3 -6l-300 -260h-171z" />
-<glyph unicode="&#x151;" d="M97 529v22q0 240 130 395.5t353 155.5q225 0 355.5 -155t130.5 -396v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z M346 1279l184 266h211l2 -5l-240 -261h-157zM615 1284l241 261h229l3 -6l-300 -260h-171z" />
-<glyph unicode="&#x152;" horiz-adv-x="1960" d="M104 576v304q0 265 154.5 431t403.5 166q69 0 140.5 -6t150.5 -15h907v-155h-758v-471h667v-155h-667v-521h769v-154h-918q-92 -10 -157 -15.5t-132 -5.5q-249 0 -404.5 166t-155.5 431zM301 576q0 -214 97 -328t266 -114q61 0 122 4.5t119 13.5v1151q-61 8 -122 13.5 t-121 5.5q-169 0 -265 -113.5t-96 -326.5v-306z" />
-<glyph unicode="&#x153;" horiz-adv-x="1854" d="M97 529v22q0 240 130 395.5t353 155.5q130 0 230 -54.5t164 -152.5q65 97 161.5 152t204.5 55q219 0 331 -132t112 -352v-123h-702l-3 -5q3 -156 79 -256.5t213 -100.5q100 0 175.5 28.5t130.5 78.5l77 -128q-58 -57 -153 -95t-230 -38q-131 0 -232.5 52.5t-166.5 148.5 q-64 -96 -163 -148.5t-226 -52.5q-224 0 -354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22zM1085 654l2 -5h499v26q0 116 -62 194t-184 78q-99 0 -169 -83.5 t-86 -209.5z" />
-<glyph unicode="&#x154;" horiz-adv-x="1357" d="M180 0v1455h527q239 0 365 -106t126 -308q0 -112 -58.5 -195t-170.5 -132q120 -39 172.5 -126.5t52.5 -216.5v-137q0 -68 15 -122t52 -88v-24h-203q-39 34 -50 100t-11 136v133q0 118 -69 190t-185 72h-366v-631h-197zM377 786h310q167 0 240.5 63.5t73.5 193.5 q0 123 -71.5 190.5t-222.5 67.5h-330v-515zM530 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x155;" horiz-adv-x="702" d="M143 0v1082h176l19 -158q46 84 113.5 131t155.5 47q22 0 42 -3.5t33 -7.5l-27 -183l-101 6q-78 0 -131.5 -37t-82.5 -104v-773h-197zM323 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x156;" horiz-adv-x="1357" d="M180 0v1455h527q239 0 365 -106t126 -308q0 -112 -58.5 -195t-170.5 -132q120 -39 172.5 -126.5t52.5 -216.5v-137q0 -68 15 -122t52 -88v-24h-203q-39 34 -50 100t-11 136v133q0 118 -69 190t-185 72h-366v-631h-197zM377 786h310q167 0 240.5 63.5t73.5 193.5 q0 123 -71.5 190.5t-222.5 67.5h-330v-515zM472 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x157;" horiz-adv-x="702" d="M107 -475l61 246v131h158v-140l-122 -237h-97zM143 0v1082h176l19 -158q46 84 113.5 131t155.5 47q22 0 42 -3.5t33 -7.5l-27 -183l-101 6q-78 0 -131.5 -37t-82.5 -104v-773h-197z" />
-<glyph unicode="&#x158;" horiz-adv-x="1357" d="M180 0v1455h527q239 0 365 -106t126 -308q0 -112 -58.5 -195t-170.5 -132q120 -39 172.5 -126.5t52.5 -216.5v-137q0 -68 15 -122t52 -88v-24h-203q-39 34 -50 100t-11 136v133q0 118 -69 190t-185 72h-366v-631h-197zM306 1845v20h166l147 -148l147 148h170v-18 l-257 -245h-119zM377 786h310q167 0 240.5 63.5t73.5 193.5q0 123 -71.5 190.5t-222.5 67.5h-330v-515z" />
-<glyph unicode="&#x159;" horiz-adv-x="702" d="M101 1523v20h166l147 -148l147 148h170v-18l-257 -245h-119zM143 0v1082h176l19 -158q46 84 113.5 131t155.5 47q22 0 42 -3.5t33 -7.5l-27 -183l-101 6q-78 0 -131.5 -37t-82.5 -104v-773h-197z" />
-<glyph unicode="&#x15a;" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 380.5 -131t136.5 -304l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -385.5 118t-162.5 316zM523 1577l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x15b;" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 300.5 -97t106.5 -236l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105t-113 245zM445 1234l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x15c;" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 380.5 -131t136.5 -304l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -385.5 118t-162.5 316zM307 1622v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x15d;" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 300.5 -97t106.5 -236l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105t-113 245zM229 1279v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x15e;" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 380.5 -131t136.5 -304l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -385.5 118t-162.5 316zM516 -334q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
-<glyph unicode="&#x15f;" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 300.5 -97t106.5 -236l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105t-113 245zM438 -333q72 0 116 24.5t44 73.5q0 48 -36 67t-123 26l32 135h140l-12 -52q65 -11 108 -52t43 -121q0 -96 -79 -153t-226 -57z" />
-<glyph unicode="&#x160;" horiz-adv-x="1277" d="M102 413l2 6h188q0 -140 103 -213t255 -73q149 0 236 63t87 171q0 100 -75 167.5t-266 113.5q-231 55 -360.5 162t-129.5 269q0 170 139.5 284t361.5 114q239 0 380.5 -131t136.5 -304l-2 -6h-188q0 128 -84.5 207t-242.5 79q-147 0 -225.5 -66.5t-78.5 -173.5 q0 -95 85 -158.5t276 -111.5q230 -57 350 -168t120 -275q0 -176 -144 -283t-376 -107q-218 0 -385.5 118t-162.5 316zM299 1866v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x161;" horiz-adv-x="1071" d="M109 329l2 6h188q5 -105 78 -153.5t171 -48.5q105 0 164.5 42.5t59.5 111.5q0 65 -49.5 107t-187.5 73q-197 43 -296.5 116.5t-99.5 200.5q0 132 112 225t292 93q189 0 300.5 -97t106.5 -236l-2 -6h-188q0 71 -59.5 127.5t-157.5 56.5q-105 0 -156 -46t-51 -111 q0 -64 45 -101t183 -66q205 -44 305 -119.5t100 -202.5q0 -144 -116.5 -233t-304.5 -89q-207 0 -326 105t-113 245zM221 1523v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x162;" horiz-adv-x="1200" d="M34 1301v155h1132v-155h-468v-1301h-197v1301h-467zM455 -475l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x163;" horiz-adv-x="708" d="M34 936v146h172v261h197v-261h205v-146h-205v-657q0 -76 31.5 -107t83.5 -31q17 0 37.5 4t36.5 10l26 -135q-22 -18 -64.5 -29.5t-85.5 -11.5q-120 0 -191 72.5t-71 227.5v657h-172zM308 -485l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x164;" horiz-adv-x="1200" d="M34 1301v155h1132v-155h-468v-1301h-197v1301h-467zM289 1844v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x165;" horiz-adv-x="748" d="M34 936v146h172v261h197v-261h205v-146h-205v-657q0 -76 31.5 -107t83.5 -31q17 0 37.5 4t36.5 10l26 -135q-22 -18 -64.5 -29.5t-85.5 -11.5q-120 0 -191 72.5t-71 227.5v657h-172zM545 1210l61 246v131h158v-140l-122 -237h-97z" />
-<glyph unicode="&#x166;" horiz-adv-x="1200" d="M34 1301v155h1132v-155h-468v-326h220v-155h-220v-820h-197v820h-224v155h224v326h-467z" />
-<glyph unicode="&#x167;" horiz-adv-x="708" d="M-8 600v155h214v181h-172v146h172v261h197v-261h205v-146h-205v-181h230v-155h-230v-321q0 -76 31.5 -107t83.5 -31q17 0 37.5 4t36.5 10l26 -135q-22 -18 -64.5 -29.5t-85.5 -11.5q-120 0 -191 72.5t-71 227.5v321h-214z" />
-<glyph unicode="&#x168;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM350 1628q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32 q0 -94 -59.5 -159t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
-<glyph unicode="&#x169;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM233 1285q0 93 59 161.5t150 68.5q56 0 140 -47t136 -47q41 0 71 32.5t30 79.5l108 -32q0 -94 -59.5 -159 t-149.5 -65q-71 0 -148 46.5t-128 46.5q-43 0 -72 -32.5t-29 -78.5z" />
-<glyph unicode="&#x16a;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM342 1640v146h721v-146h-721z" />
-<glyph unicode="&#x16b;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM225 1299v146h721v-146h-721z" />
-<glyph unicode="&#x16c;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM403 1864l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73 q-138 0 -219 73t-76 189z" />
-<glyph unicode="&#x16d;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM286 1521l2 6h151q0 -66 34 -107t108 -41q72 0 107 41.5t35 106.5h151l2 -6q4 -116 -77 -189t-218 -73 q-138 0 -219 73t-76 189z" />
-<glyph unicode="&#x16e;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM488 1734q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54 q-87 0 -147.5 54t-60.5 140zM591 1734q0 -43 31 -73.5t74 -30.5q42 0 72 29.5t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
-<glyph unicode="&#x16f;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM371 1391q0 84 60.5 141t147.5 57q85 0 145 -56.5t60 -141.5q0 -86 -59.5 -140t-145.5 -54 q-87 0 -147.5 54t-60.5 140zM474 1391q0 -43 31 -73.5t74 -30.5q42 0 72 29.5t30 74.5t-30 76t-72 31q-43 0 -74 -31t-31 -76z" />
-<glyph unicode="&#x170;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM461 1601l184 266h211l2 -5l-240 -261h-157zM730 1606l241 261h229l3 -6l-300 -260h-171z" />
-<glyph unicode="&#x171;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM344 1258l184 266h211l2 -5l-240 -261h-157zM613 1263l241 261h229l3 -6l-300 -260h-171z" />
-<glyph unicode="&#x172;" horiz-adv-x="1386" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-987q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5zM493 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66 t73.5 -24q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154z" />
-<glyph unicode="&#x173;" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-1082h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352zM675 -223q0 80 60.5 152t187.5 128l72 -57q-70 -52 -109.5 -99.5t-39.5 -101.5q0 -42 22.5 -66t73.5 -24 q27 0 50 7.5t49 18.5l33 -123q-36 -19 -79.5 -31.5t-103.5 -12.5q-95 0 -155.5 55t-60.5 154z" />
-<glyph unicode="&#x174;" horiz-adv-x="1809" d="M54 1456h196l222 -952l27 -182l6 -1l39 183l267 952h174l269 -952l40 -187h6l29 187l217 952h197l-351 -1456h-176l-287 1010l-26 131h-6l-25 -131l-292 -1010h-176zM592 1601v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x175;" horiz-adv-x="1550" d="M45 1082h196l179 -688l23 -131h6l28 131l216 688h158l217 -688l31 -146h6l29 146l170 688h196l-314 -1082h-159l-209 659l-45 184l-6 -1l-43 -183l-206 -659h-159zM467 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x176;" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525zM319 1600v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x177;" horiz-adv-x="1030" d="M26 1082h220l228 -681l35 -136h6l266 817h219l-455 -1248q-41 -109 -117.5 -190t-206.5 -81q-24 0 -61 5.5t-57 10.5l20 155q-6 1 35.5 -2t52.5 -3q63 0 103 56t67 124l47 113zM208 1258v26l246 237h120l248 -238v-25h-161l-147 148l-146 -148h-160z" />
-<glyph unicode="&#x178;" horiz-adv-x="1250" d="M20 1456h225l380 -740l380 740h225l-511 -944v-512h-196v525zM281 1604v200h219v-200h-219zM751 1604v200h219v-200h-219z" />
-<glyph unicode="&#x179;" horiz-adv-x="1225" d="M97 0v146l778 1155h-767v155h992v-141l-781 -1161h814v-154h-1036zM519 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x17a;" horiz-adv-x="1030" d="M94 0v138l585 788h-578v156h819v-134l-591 -794h625v-154h-860zM434 1213l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x17b;" horiz-adv-x="1225" d="M97 0v146l778 1155h-767v155h992v-141l-781 -1161h814v-154h-1036zM500 1604v201h218v-201h-218z" />
-<glyph unicode="&#x17c;" horiz-adv-x="1030" d="M94 0v138l585 788h-578v156h819v-134l-591 -794h625v-154h-860zM415 1261v201h218v-201h-218z" />
-<glyph unicode="&#x17d;" horiz-adv-x="1225" d="M97 0v146l778 1155h-767v155h992v-141l-781 -1161h814v-154h-1036zM295 1845v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x17e;" horiz-adv-x="1030" d="M94 0v138l585 788h-578v156h819v-134l-591 -794h625v-154h-860zM210 1502v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x17f;" horiz-adv-x="516" d="M159 0v1219q0 173 91 267.5t253 94.5q33 0 67.5 -5.5t76.5 -15.5l-24 -145q-20 5 -42 8t-47 3q-87 0 -132.5 -54.5t-45.5 -152.5v-1219h-197z" />
-<glyph unicode="&#x192;" horiz-adv-x="702" d="M-23 -419l14 150q12 -5 45.5 -9t51.5 -4q60 0 94 51.5t34 141.5v1025h-169v146h169v137q0 173 90.5 267.5t252.5 94.5q34 0 68.5 -5.5t76.5 -15.5l-24 -150q-18 4 -43.5 7t-52.5 3q-87 0 -129 -51.5t-42 -149.5v-137h196v-146h-196v-1025q0 -167 -85.5 -257.5 t-239.5 -90.5q-32 0 -58 4.5t-53 13.5z" />
-<glyph unicode="&#x1a0;" horiz-adv-x="1403" d="M108 598v259q0 266 159.5 443t414.5 177q120 0 223 -40t182 -113q123 11 187 96.5t64 232.5h197q0 -192 -88 -313.5t-250 -157.5q38 -71 59 -154t21 -171v-259q0 -267 -165.5 -443t-429.5 -176q-255 0 -414.5 176t-159.5 443zM305 598q0 -202 102.5 -330t274.5 -128 q183 0 290.5 127.5t107.5 330.5v261q0 200 -108 328t-290 128q-172 0 -274.5 -128t-102.5 -328v-261z" />
-<glyph unicode="&#x1a1;" horiz-adv-x="1175" d="M97 529v22q0 240 130 395.5t353 155.5q102 0 187 -35t149 -98q82 18 122 84t40 170h178q0 -143 -66.5 -237t-195.5 -126q35 -66 53.5 -144.5t18.5 -164.5v-22q0 -242 -130 -396t-354 -154t-354.5 154.5t-130.5 395.5zM294 529q0 -172 72.5 -284t215.5 -112q141 0 214 112 t73 284v22q0 170 -73.5 283t-215.5 113q-141 0 -213.5 -113t-72.5 -283v-22z" />
-<glyph unicode="&#x1af;" horiz-adv-x="1430" d="M147 469v987h197v-987q0 -165 94 -250.5t248 -85.5q162 0 261.5 85.5t99.5 250.5v987h197v-178l6 -2q86 27 132 108.5t46 206.5h190l3 -5q2 -193 -96 -314.5t-281 -155.5v-647q0 -238 -154.5 -364t-403.5 -126q-240 0 -389.5 126.5t-149.5 363.5z" />
-<glyph unicode="&#x1b0;" horiz-adv-x="1204" d="M139 444v638h197v-640q0 -173 51 -238t159 -65q105 0 173.5 42.5t103.5 120.5v780h197v-114l6 -2q100 7 142.5 71t42.5 190h169l3 -6q3 -177 -85.5 -273t-277.5 -110v-838h-177l-13 160q-51 -87 -131 -134t-185 -47q-177 0 -276 113t-99 352z" />
-<glyph unicode="&#x1f0;" horiz-adv-x="523" d="M-68 -419l14 150q14 -5 46.5 -9t50.5 -4q59 0 93.5 51.5t34.5 141.5v1171h197v-1171q0 -167 -86 -257.5t-239 -90.5q-31 0 -56.5 4.5t-54.5 13.5zM-42 1484v20h166l147 -148l147 148h170v-18l-257 -245h-119z" />
-<glyph unicode="&#x1fa;" horiz-adv-x="1326" d="M20 0l563 1456h169l554 -1456h-201l-136 375h-610l-138 -375h-201zM420 540h490l-240 663h-6zM487 1684q0 72 51 119.5t124 47.5q70 0 120 -47.5t50 -119.5t-49.5 -118t-120.5 -46q-73 0 -124 46t-51 118zM575 1684q0 -35 25.5 -59.5t61.5 -24.5q34 0 58.5 24t24.5 60 q0 37 -24.5 62.5t-58.5 25.5q-36 0 -61.5 -25.5t-25.5 -62.5zM615 1900l144 185h199l2 -6l-216 -179h-129z" />
-<glyph unicode="&#x1fb;" horiz-adv-x="1126" d="M106 304q0 155 125.5 242.5t340.5 87.5h214v107q0 95 -58 150.5t-164 55.5q-95 0 -154.5 -48.5t-59.5 -116.5h-188l-2 6q-6 118 111.5 216t303.5 98q184 0 296 -93.5t112 -269.5v-521q0 -58 6 -112t22 -106h-203q-10 49 -15.5 86.5t-6.5 75.5q-55 -78 -143.5 -130.5 t-190.5 -52.5q-169 0 -257.5 86.5t-88.5 238.5zM303 300q0 -72 45 -114t133 -42q107 0 193 55t112 126v176h-221q-119 0 -190.5 -60t-71.5 -141zM383 1362q0 72 51 119.5t124 47.5q70 0 120 -47.5t50 -119.5t-49.5 -118t-120.5 -46q-73 0 -124 46t-51 118zM471 1362 q0 -35 25.5 -59.5t61.5 -24.5q34 0 58.5 24t24.5 60q0 37 -24.5 62.5t-58.5 25.5q-36 0 -61.5 -25.5t-25.5 -62.5zM511 1578l144 185h199l2 -6l-216 -179h-129z" />
-<glyph unicode="&#x1fc;" horiz-adv-x="1922" d="M-20 0l880 1456h967v-155h-691l20 -466h590v-155h-584l22 -526h705v-154h-895l-15 350h-557l-202 -350h-240zM525 529h447l-31 710l-5 2zM845 1556l185 266h230l2 -6l-270 -260h-147z" />
-<glyph unicode="&#x1fd;" horiz-adv-x="1729" d="M58 304q0 158 115 244.5t335 86.5h229v85q0 106 -51.5 166.5t-149.5 60.5q-103 0 -164 -55t-61 -133l-188 18l-2 6q-5 138 109.5 228.5t305.5 90.5q114 0 201.5 -40.5t137.5 -117.5q64 75 151.5 116.5t188.5 41.5q214 0 329.5 -130t115.5 -358v-119h-709l-2 -5 q1 -159 79.5 -258t233.5 -99q103 0 169.5 27.5t144.5 78.5l67 -138q-53 -44 -147 -83t-234 -39q-136 0 -240 48.5t-170 138.5q-56 -79 -167.5 -133t-271.5 -54q-170 0 

<TRUNCATED>

[06/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonView.js
deleted file mode 100644
index 7c50cbb..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonView.js
+++ /dev/null
@@ -1,242 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'moment',
-    'utils/Globals',
-    'collections/VLogList',
-    'hbs!tmpl/tabs/ComparisonView_tmpl',
-], function(require, Backbone, Utils, moment, Globals, VLogList, ComparisonViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        {
-            _viewName: 'ComparisonView',
-
-            template: ComparisonViewTmpl,
-
-            regions: {
-                RVSSearch: "#r_VSSearch",
-                RLogTable: "#rLogTable",
-                RDatePicker: "#r_DatePicker"
-            },
-            /** ui selector cache */
-            ui: {
-                dateRange: "#dateRange",
-                selectDateRange: ".selectDateRange",
-                tabTitle: "[data-id='tabTitle']"
-
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                return events;
-            },
-            /**
-             * intialize a new ComparisonView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params', 'datePickerPosition'));
-                this.vent = new Backbone.Wreqr.EventAggregator();
-                this.collection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 25
-                    }
-                });
-                this.dateUtil = Utils.dateUtil;
-                this.collection.url = Globals.baseURL + "service/logs";
-                this.bindEvents();
-                this.dateRangeLabel = "Last 1 Hour"
-            },
-            bindEvents: function() {
-                this.listenTo(this.vent, "search:include:exclude", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-                this.listenTo(this.vent, "logtime:filter", function(value) {
-                    this.fetchCollection(value);
-                }, this);
-            },
-            onRender: function() {
-                if (this.params) {
-                    this.fetchCollection(this.params);
-                    if (this.params.component_name && this.params.host_name) {
-                        this.ui.tabTitle.html(this.params.host_name + ' <i class="fa fa-angle-double-right"></i> ' + this.params.component_name)
-                    }
-                } else {
-                    this.fetchCollection({
-                        "q": "*:*"
-                    });
-                }
-                this.renderVisualSearch();
-                this.renderDatePicker();
-                this.renderTable();
-
-            },
-            renderVisualSearch: function() {
-                var that = this;
-                require(['views/tabs/VisualSearchView'], function(VisualSearchView) {
-                    that.RVSSearch.show(new VisualSearchView({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params,
-                        eventName: "search:include:exclude"
-                    }));
-                })
-
-            },
-            renderDatePicker: function() {
-                var that = this;
-                require(['views/common/DatePickerLayout'], function(DatePickerLayout) {
-                    that.RDatePicker.show(new DatePickerLayout({
-                        vent: that.vent,
-                        globalVent: that.globalVent,
-                        params: that.params,
-                        datePickerPosition: that.datePickerPosition,
-                        parentEl: that.$el,
-                        rangeLabel: true
-                    }));
-                });
-            },
-            fetchCollection: function(params) {
-                var that = this;
-                this.$('#loaderToolbar').show();
-                _.extend(this.params, params);
-                $.extend(this.collection.queryParams, params);
-                this.collection.getFirstPage({
-                    reset: true,
-                    complete: function() {
-                        that.$('#loaderToolbar').hide();
-                    }
-                });
-            },
-            renderTable: function() {
-                var that = this;
-                require(['views/common/TableLayout', 'views/common/CustomBackgrid'], function(TableLayout, CustomBackgrid) {
-                    var cols = new Backgrid.Columns(that.getColumns());
-                    that.RLogTable.show(new TableLayout({
-                        columns: cols,
-                        collection: that.collection,
-                        includeFilter: false,
-                        includePagination: true,
-                        includePageSize: true,
-                        includeFooterRecords: true,
-                        includeColumnManager: true,
-                        columnOpts: {
-                            initialColumnsVisible: 2,
-                            saveState: false
-                        },
-                        gridOpts: {
-                            header: CustomBackgrid,
-                            emptyText: 'No records found!'
-                        },
-                        filterOpts: {},
-                        paginatorOpts: {}
-                    }));
-                });
-            },
-            getColumns: function() {
-                var timeZone = moment().zoneAbbr();
-                this.cols = {
-                    logtime: {
-                        label: "Log Time " + (!_.isEmpty(timeZone) ? "(" + timeZone + ")" : ""),
-                        cell: "html",
-                        editable: false,
-                        sortType: 'toggle',
-                        direction: "descending",
-                        orderable: true,
-                        displayOrder: 1,
-                        width: 17,
-                        className: "logTime",
-                        formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                            fromRaw: function(rawValue, model) {
-                                var str = "";
-                                if (rawValue)
-                                    str += "<p>" + moment(rawValue).format("YYYY-MM-DD HH:mm:ss,SSS") + "</p>";
-                                if (model.get("type"))
-                                    str += "<p style='float:left;width:90%'>" + (model.get("level") ? "<label class='label label-" + (""+model.get("level")).toUpperCase() + "'>" + (""+model.get("level")).toUpperCase() + "</label>" : "") +
-                                    "</p><a  style='width:9%' title='Open logs in new tab' data-type='C' data-host='" + model.get("host") + "' data-node='" + model.get("type") + "' href='javascript:void(0)' class='pull-right hidden'><i class='fa fa-share'></i></a>";
-                                return str;
-                            }
-                        })
-                    },
-                    log_message: {
-                        label: "Message",
-                        cell: "html",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 4,
-                        className: "logMessage",
-                        formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                            fromRaw: function(rawValue, model) {
-                                return (rawValue) ? "<pre>" + Utils.escapeHtmlChar(rawValue) + "</pre>" : "";
-                            }
-                        })
-                    },
-                    thread_name: {
-                        label: "Thread",
-                        cell: "String",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 5,
-                        width: 10
-                    },
-                    logger_name: {
-                        label: "Logger",
-                        cell: "String",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 6,
-                        width: 13
-                    },
-                    bundle_id: {
-                        label: "Bundle Id",
-                        cell: "String",
-                        editable: false,
-                        sortType: 'toggle',
-                        sortable: false,
-                        orderable: true,
-                        displayOrder: 6,
-                        width: 6
-                    }
-
-                };
-                return this.collection.constructor.getTableCols(this.cols, this.collection);
-            },
-            setDateText: function(start, end) {
-
-                this.ui.dateRange.val(this.dateUtil.getTimeZone(start, "MM/DD/YYYY H:mm:ss,SSS") + ' - ' + this.dateUtil.getTimeZone(end, "MM/DD/YYYY H:mm:ss,SSS"));
-                this.ui.dateRange.data('daterangepicker').setStartDate(start);
-                this.ui.dateRange.data('daterangepicker').setEndDate(end);
-
-            }
-
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/EventHistoryLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/EventHistoryLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/EventHistoryLayoutView.js
deleted file mode 100644
index 1eda79b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/EventHistoryLayoutView.js
+++ /dev/null
@@ -1,506 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Globals',
-    'utils/Utils',
-    'moment',
-    'timeline',
-    'collections/VEventHistoryList',
-    'hbs!tmpl/tabs/EventHistoryLayoutView_tmpl'
-], function(require, Backbone, Globals, Utils, moment, Timeline, VEventHistory, EventHistoryLayoutViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends EventHistoryLayoutViewTmpl */
-        {
-            _viewName: 'EventHistoryLayoutView',
-
-            template: EventHistoryLayoutViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                eventHistory: "#timeline",
-                saveLink: ".save-link",
-                applyLink: ".apply-link"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                events['click ' + this.ui.saveLink] = 'onSaveClick';
-                events['click ' + this.ui.applyLink] = 'onEventHistoryLoadClick';
-
-                return events;
-            },
-
-            /**
-             * intialize a new LogLevelView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'globalVent', 'params'));
-                this.searchParams = (this.params) ? this.params : {};
-                this.collection = new VEventHistory();
-                this.collection.totalCount = Globals.EventHistory.totalCount;
-                this.dateUtil = Utils.dateUtil;
-                this.data = {
-                    "timeline": {
-                        "headline": "Events",
-                        "type": "default",
-                        "text": "People say stuff"
-
-                    }
-                }
-            },
-            bindEvents: function() {
-                var that = this
-                this.listenTo(this.vent, "level:filter type:mustNot type:mustBe search:include:exclude " +
-                    "logtime:filter " + Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns,
-                    function(value) {
-                        if (this.collection.length >= this.collection.totalCount)
-                            return;
-                        _.extend(this.searchParams, value);
-                        that.eventClicked = true;
-                        if(that.time){
-                           that.addEventInTimeline(this.searchParams, Object.keys(value)[0]);  
-                       }else{
-                            that.timeundefined =[this.searchParams, Object.keys(value)[0]]
-                       }
-                       
-
-                    });
-                this.ui.eventHistory.delegate(".vco-timeline", "LOADED", function() {
-                    if (that.timeLineLoadedOnce) {
-                        /*if (typeof(Storage) !== "undefined") {
-                            if (!localStorage.getItem("startIntro")) {
-                                localStorage.setItem("startIntro", true);
-                                //Intro.Start();
-                            }
-                        } else {
-                            // Sorry! No Web Storage support..
-                        }*/
-                        that.time = new VMM.Timeline()
-                        that.timeLineLoadedOnce = false;
-                    }
-                    if(that.timeundefined){
-
-                    }
-
-                    if (that.eventClicked) {
-                        that.ui.eventHistory.find('.marker#' + (that.markerId) + " h3").click();
-                        that.eventClicked = false;
-                    }
-                    that.$("#loaderEvent").hide();
-                    that.$(".loader").hide();
-
-                });
-                this.ui.eventHistory.delegate(".marker", "click", function(event) {
-                    if (event.target.nodeName === "I") return;
-                    var typeToTrigger = $(this).find('h3').text().split(":")
-
-                    if (event.isTrigger === undefined) {
-                        that.fireReinitialize($(this).attr('id'))
-                    }
-                });
-                this.ui.eventHistory.delegate(".close", "click", function(event) {
-                    var elementId = $(event.currentTarget).attr('id');
-                    var p = $(event.currentTarget).parents(".marker")
-                    var prevClick = p.prev();
-                    //prevClick.find("h3").click();
-                    VMM.fireEvent(prevClick.find(".flag"), 'click', {
-                        number: 1
-                    });
-                    that.collection.remove(elementId);
-                    var lastStartDate, count = 1;
-                    for (var i = 0; i < that.data.timeline.date.length; i++) {
-                        if (that.data.timeline.date[i].customOption.id == elementId) {
-                            that.data.timeline.date.splice(i, 1);
-                            i = i - 1;
-                            that.markerId = that.data.timeline.date[that.data.timeline.date.length - 1].customOption.id;
-                        } else {
-                            if (i == 1) lastStartDate = that.data.timeline.date[i].startDate;
-                            if (i > 1) {
-                                that.data.timeline.date[i].startDate = moment(lastStartDate.split(',').join("-")).add((count++), 'd').format('YYYY,MM,DD');
-                            }
-                        }
-
-                    }
-                    /* that.markerId = that.data.timeline.date.length+1;*/
-                    that.fireReinitialize(prevClick.attr('id'));
-                    that.addEventInTimeline();
-                    return false;
-                })
-
-                this.listenTo(this.collection, "add remove reset", function() {
-                    this.$("[data-id='count']").text(this.collection.length);
-                    this.$("[data-id='totalCount']").text(this.collection.totalCount);
-                }, this);
-                /*that.ui.saveLink.on('click', function() {
-                    that.saveEventHistory();
-                });*/
-            },
-            fireReinitialize: function(id) {
-                this.vent.trigger("reinitialize:filter:tree reinitialize:filter:include:exclude reinitialize:filter:bubbleTable reinitialize:filter:mustNot reinitialize:filter:mustBe reinitialize:filter:level reinitialize:filter:logtime", _.extend({
-                    mustNot: null,
-                    mustBe: null,
-                    iMessage: null,
-                    eMessage: null,
-                    query: null,
-                    includeQuery: null,
-                    excludeQuery: null
-                }, this.collection.get(id).get('params')));
-            },
-            initializeData: function() {
-                var that = this;
-                this.markerId = 1;
-                that.eventClicked = true;
-                this.data.timeline.date = [{
-                    "startDate": moment('2015-01-02').format('YYYY,MM,DD'),
-                    "headline": this.getHeadline("level", this.searchParams),
-                    "params": _.extend({
-                        type: "level"
-                    }, this.searchParams),
-                    "customOption": {
-                        id: this.markerId,
-                        close: false
-                    }
-                }, {
-                    "startDate": moment('2015-01-02').add((this.markerId++), 'd').format('YYYY,MM,DD'),
-                    "headline": this.getHeadline("from", this.searchParams),
-                    /*"headline": "Logtime: " + moment(this.searchParams.from).format(Globals.dateFormat) + " TO " + moment(this.searchParams.to).format(Globals.dateFormat),*/
-                    "params": _.extend({
-                        type: "from"
-                    }, this.searchParams),
-                    "customOption": {
-                        id: this.markerId,
-                        close: false
-                    }
-                }];
-                _.each(this.data.timeline.date, function(values) {
-                    that.collection.add(new Backbone.Model({
-                        id: values.customOption.id,
-                        /* headline: values.headline,*/
-                        params: values.params
-                    }))
-                })
-
-
-                this.generateTimeline(this.data);
-            },
-
-            generateTimeline: function(data) {
-                var that = this;
-                createStoryJS({
-                    type: 'timeline',
-                    width: '100%',
-                    height: '180',
-                    source: data,
-                    embed_id: that.ui.eventHistory,
-                    debug: true
-                });
-                this.timeLineLoadedOnce = true
-            },
-            onRender: function() {
-                this.bindEvents()
-                this.initializeData();
-                //this.fetchEventHistory();
-                this.$("#loaderEvent").show();
-                this.$(".loader").show();
-            },
-            addEventInTimeline: function(params, type) {
-                if (params) {
-
-                    try {
-                        var lastDate = this.data.timeline.date[this.data.timeline.date.length - 1].startDate;
-                    } catch (e) {
-                        throw "StartDate undefined";
-                    }
-
-                    this.data.timeline.date.push({
-                        "startDate": moment(lastDate.split(',').join("-")).add(1, 'd').format('YYYY,MM,DD'),
-                        "headline": this.getHeadline(type, params),
-                        "customOption": {
-                            id: ++this.markerId,
-                            close: true
-                        }
-                    })
-
-                    params.type = type;
-                    this.collection.add({
-                        id: this.markerId,
-                        /* headline: getHeadline(),*/
-                        params: _.extend({}, params)
-                    })
-
-                }
-                if (this.time) {
-                    this.time.reload(this.data)
-                }
-
-                return;
-
-
-            },
-            getHeadline: function(type, params) {
-                var excludeInclude = function() {
-                    var str = "";
-                    if (params.iMessage) {
-                        str += "IS:" + Utils.encodeIncludeExcludeStr(params.iMessage);
-                    } else
-                        str += "IS:";
-                    if (params.eMessage) {
-                        str += " ES:" + Utils.encodeIncludeExcludeStr(params.eMessage);
-                    } else
-                        str += " ES:";
-                    return str;
-
-                };
-                var includeExcludeColumnSearch = function() {
-                    var str = "";
-                    if (params.includeQuery || params.excludeQuery) {
-                        var obj;
-                        if (type === "includeQuery") {
-                            str += "IColumn:";
-                            obj = JSON.parse(params.includeQuery)
-                        } else {
-                            str += "EColumn:";
-                            obj = JSON.parse(params.excludeQuery)
-                        }
-
-                        if (_.isArray(obj)) {
-                            for (var i = 0; i < obj.length; i++) {
-                                var key = _.keys(obj[i])[0];
-                                str += "" + key + "=" + obj[i][key];
-                                if (!(i == obj.length - 1))
-                                    str += ",";
-                            }
-
-                        }
-                    }
-                    return str;
-                };
-                return (type === "level") ?
-                    ("Level: " + params.level) : (type === "from") ?
-                    ("Logtime: " + this.dateUtil.getTimeZone(params.from) + " TO " + this.dateUtil.getTimeZone(params.to)) : (type === "mustBe") ?
-                    ("IC:" + params.mustBe) : (type === "mustNot") ?
-                    ("EC:" + params.mustNot) : ((type === "includeQuery" || type === "excludeQuery") ? (includeExcludeColumnSearch()) : (excludeInclude()))
-
-
-            },
-            onEventHistoryLoadClick: function() {
-                var that = this;
-                require(['views/dialog/ApplySearchFilterView'], function(ApplySearchFilterView) {
-                    if (that.collection.length >= 50) {
-                        Utils.alertPopup({
-                            msg: "Event History limit has reached, Please clear your history"
-                        });
-                        return;
-                    }
-                    var view = new ApplySearchFilterView({
-                        collection: new VEventHistory([], {
-                            state: {
-                                firstPage: 0,
-                                pageSize: 10 // have to pass max pageSize value or
-                                    // else it will take default pageSize
-                            }
-                        })
-                    })
-                    that.setupDialog({
-                        title: "Apply Filter",
-                        content: view,
-                        viewType: 'Save',
-                        width: 850,
-                        height: 500,
-                        buttons: [{
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onApplyDialogClosed();
-                            }
-                        }]
-                    });
-                });
-            },
-            onSaveClick: function() {
-                var that = this;
-                require(['views/dialog/SaveSearchFilterView'], function(SaveSearchFilterView) {
-                    var activeFlag = that.$('.timenav').find('.marker:gt(0).active');
-                    if (activeFlag.length == 0) {
-                        Utils.notifyInfo({
-                            content: "Item not selected in event history."
-                        });
-                        return;
-                    } else {
-                        var selectedCollectionObject = that.collection.findWhere({
-                            "id": parseInt(activeFlag.attr('id'))
-                        });
-                    }
-
-                    var view = new SaveSearchFilterView({
-                        selectedCollectionObject: selectedCollectionObject
-                    });
-
-                    that.setupDialog({
-                        title: "Save Search Filter",
-                        content: view,
-                        viewType: 'Save',
-                        width: 850,
-                        height: 500,
-                        buttons: [{
-                            id: "okBtn",
-                            text: "Save",
-                            "class": "btn btn-primary",
-                            click: function() {
-                                that.onDialogSubmitted();
-                            }
-                        }, {
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    });
-                })
-            },
-            setupDialog: function(options) {
-                var that = this;
-                require(['views/common/JBDialog'], function(JBDialog) {
-                    var opts = _.extend({
-                        appendTo: that.$el,
-                        modal: true,
-                        resizable: false,
-                        beforeClose: function(event, ui) {
-                            that.onDialogClosed();
-                        }
-                    }, options);
-                    var dialog = that.dialog = new JBDialog(opts).render().open();
-                })
-
-
-            },
-            onDialogSubmitted: function() {
-                var content = this.dialog.options.content;
-                /* if (!content.$('form')[0].reportValidity()) {
-                     return;
-                 }*/
-
-
-                    
-                if (content.$('form')[0].checkValidity && !content.$('form')[0].checkValidity()) {
-                    content.$('form').addClass('has-error');
-                    if (content.$('form')[0].reportValidity) {
-                        if (!content.$('form')[0].reportValidity()) {
-                            return;
-                        }
-                    }
-                    return;
-                } else {
-                    if(_.isEmpty(content.ui.filterName.val().trim())){
-                        if(content.$('form')[0].reportValidity){
-                            content.ui.filterName.val('')
-                            content.$('form')[0].reportValidity();
-                            return;
-                        }
-                        return;
-                    }else{
-                        content.$('form').removeClass('has-error');  
-                    }
-                    
-                }
-
-                var timeType = content.$("input[name='radio']:checked").parents("[data-id]").data('id');
-
-                if(timeType === "absolute"){
-                    content.selectedCollectionObject.get("params")["dateRangeLabel"] = "Custom Range";
-                }
-
-                content.selectedCollectionObject.get("params")["time"] = timeType;
-                var postObject = {
-                    filtername: content.ui.filterName.val(),
-                    rowType: "history",
-                    values: JSON.stringify(content.selectedCollectionObject.get('params'))
-                }
-                this.onDialogClosed();
-                this.saveEventHistory(postObject);
-            },
-            /** closing the movable/resizable popup */
-            onApplyDialogClosed: function() {
-                var content = this.dialog.options.content;
-                if (content.apllyedModel) {
-                    var params = JSON.parse(content.apllyedModel.toJSON().values);
-                    if (params.time === "relative") {
-                        var rangeNew = Utils.dateUtil.getRelativeDateFromString(params.dateRangeLabel);
-                        if (_.isArray(rangeNew)) {
-                            params.from = rangeNew[0].toJSON();
-                            params.to = rangeNew[1].toJSON();
-                        }
-                    }
-                    this.eventClicked = true;
-                    this.addEventInTimeline(params, params.type);
-                    if (this.collection.last()) {
-                        this.fireReinitialize(this.collection.last().get('id'));
-                    } else {
-                        console.log('Not going to last marker as collection is empty');
-                    }
-
-                }
-
-                this.onDialogClosed();
-
-
-            },
-            onDialogClosed: function() {
-                if (this.dialog) {
-                    this.dialog.close && this.dialog.close();
-                    this.dialog.remove && this.dialog.remove();
-                    this.dialog = null;
-                }
-            },
-            saveEventHistory: function(postObject) {
-                var that = this
-                this.$("#loaderEvent").show();
-                that.$(".loader").show();
-                this.collection.saveEventHistory(postObject, {
-                    success: function(data, textStatus, jqXHR) {
-                        Utils.notifySuccess({
-                            content: "Event History saved successfully."
-                        });
-                    },
-                    error: function(jqXHR, textStatus, errorThrown) {
-                        Utils.notifyError({
-                            content: JSON.parse(jqXHR.responseText).msgDesc || "There is some problem in Event History, Please try again later."
-                        });
-                    },
-                    complete: function() {
-                        that.$("#loaderEvent").hide();
-                        that.$(".loader").hide();
-                    }
-                });
-            }
-
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ExportLogFileView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ExportLogFileView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ExportLogFileView.js
deleted file mode 100644
index c4eaeda..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ExportLogFileView.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/tabs/ExportLogFileView_tmpl'
-], function(require, Backbone, Utils, ExportLogFileViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends ComparisonLayoutView */
-        {
-            _viewName: 'ExportLogFileView',
-            template: ExportLogFileViewTmpl,
-            /**
-             * intialize a new LogFileView Layout
-             * @constructs
-             */
-            ui: {
-                rowView: "[data-id='rowsData']"
-            },
-            initialize: function(options) {
-                _.extend(this, options);
-            },
-            onRender: function() {
-                if (this.viewType === "aggregatView") {
-                    this.ui.rowView.hide();
-                }
-            },
-
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js
deleted file mode 100644
index 43ee5db..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HierarchyTabLayoutView.js
+++ /dev/null
@@ -1,429 +0,0 @@
-/**
- * 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',
-  'backbone',
-  'utils/Globals',
-  'utils/Utils',
-  'moment',
-  'utils/ViewUtils',
-  'collections/VLogList',
-  'collections/VGroupList',
-  'hbs!tmpl/tabs/HierarchyTabLayoutView_tmpl'
-], function (require, Backbone, Globals, Utils, moment, ViewUtils, VLogList, VGroupList, HierarchyTabLayoutViewTmpl) {
-  'use strict';
-
-  return Backbone.Marionette.Layout.extend(
-    /** @lends LogLevelView */
-    {
-      _viewName: 'HierarchyTabLayoutView',
-
-      template: HierarchyTabLayoutViewTmpl,
-
-      /** Layout sub regions */
-      regions: {
-        RTreeView: "#r_TreeView",
-        RBubbleTable: "#r_BubbleTable",
-        RLogLevel: "#r_LogLevel",
-        RHistogram: "#r_Histogram",
-        RVisualSearch: "#r_vsSearch",
-        REventHistory: "#r_EventHistory",
-        RVisualSearchIncCol: "#r_vsSearchIncCol",
-        RVisualSearchExCol: "#r_vsSearchExCol",
-        RDatePicker: "#r_DatePicker",
-        RLogSnapShot: "#r_LogSnapShot",
-        RAdvanceSearch: "#r_AdvanceSearch"
-      },
-
-      /** ui selector cache */
-      ui: {
-        applySearch: '#applySearch',
-        searchBoxBtn: '[data-id="hierarchySearchBtn"]',
-        searchBox: '[data-id="hierarchySearch"]',
-        excludeComponents: "#excludeComponents",
-        includeComponents: "#includeComponents",
-        basicSearch: '[data-id="basicSearch"]',
-        advanceSearch: '[data-id="advanceSearch"]',
-        toggleTableAccessLog: '[data-id="toggleTableAccessLog"]'
-      },
-
-      /** ui events hash */
-      events: function () {
-        var events = {};
-        events["click " + this.ui.applySearch] = 'applySearchBtn';
-        events["click " + this.ui.searchBoxBtn] = 'onSearchLogClick';
-        events["click .server-info a"] = 'onLogLevelClick';
-        events["change " + this.ui.toggleTableAccessLog] = 'onSearchSwitch';
-
-        return events;
-      },
-
-      /**
-       * intialize a new LogLevelView Layout
-       * @constructs
-       */
-      initialize: function (options) {
-        _.extend(this, _.pick(options, 'globalVent'));
-        this.columnCollection = new VLogList([], {
-          state: {
-            firstPage: 0,
-            pageSize: 99999
-          }
-        });
-        this.componentsList = new VGroupList([], {
-          state: {
-            firstPage: 0,
-            pageSize: 99999
-          }
-        });
-        this.componentsList.url = Globals.baseURL + "service/logs/components";
-        this.vent = new Backbone.Wreqr.EventAggregator();
-
-        this.defaultParams = ViewUtils.getDefaultParamsForHierarchy();
-        this.bindEvents();
-      },
-      applyParamsDate: function (date) {
-        if (date) {
-          var dateString = date.split(',');
-          if (dateString.length) {
-            var checkDate = Utils.dateUtil.getMomentUTC(dateString[0]);
-            if (checkDate.isValid()) {
-              if (dateString[1]) {
-                checkDate.millisecond(dateString[1])
-              } else {
-                checkDate.millisecond('000')
-              }
-              return checkDate.toJSON();
-            }
-          }
-        }
-      },
-      bindEvents: function () {
-        this.listenTo(this.componentsList, "reset", function (col, abc) {
-          this.setupSelect2Fields(col, "type", 'type', 'excludeComponents', 'Exclude Components');
-          this.setupSelect2Fields(col, "type", 'type', 'includeComponents', 'Include Components');
-        }, this);
-        this.listenTo(this.vent, "reinitialize:filter:mustBe", function (value) {
-          this.reinitializeFilterMustBe(value);
-        }, this);
-        this.listenTo(this.vent, "reinitialize:filter:mustNot", function (value) {
-          this.reinitializeFilterMustNot(value);
-        }, this);
-        this.listenTo(this.vent, "add:include:exclude", function (value) {
-          //this.$(".vs-box").find(".fa-chevron-down").click();
-        }, this);
-        this.listenTo(this.vent, "tab:refresh", function (params) {
-          this.reRenderComponents(params);
-        }, this);
-
-        this.listenTo(this.globalVent, "reinitialize:serviceLogs", function (options) {
-          this.vent.trigger("reinitialize:filter:tree reinitialize:filter:include:exclude reinitialize:filter:bubbleTable" +
-            " reinitialize:filter:mustNot reinitialize:filter:mustBe reinitialize:filter:level reinitialize:filter:logtime", options);
-        }, this);
-      },
-      onRender: function () {
-        this.fetchServiceLogsColumns();
-        this.renderLogLevel();
-        this.renderEventHistory();
-        this.renderHistogram();
-        this.renderDatePicker();
-        this.renderLogSnapShot();
-        this.componentsList.fetch({reset: true});
-      },
-      onShow: function () {
-
-      },
-      fetchServiceLogsColumns: function () {
-        var that = this;
-        this.columnCollection.getServiceLogSchemaFields({}, {
-          success: function (data) {
-            Globals.serviceLogsColumns = ViewUtils.getLogSchemaFields(data, Globals.defaultServiceLogMappings, Globals.defaultServiceLogExcludes);
-          },
-          error: function (error, data, status) {
-            var obj = JSON.parse(error.responseText);
-            if (obj)
-              Utils.notifyError({content: obj.msgDesc});
-          },
-          complete: function () {
-            that.renderServiceColumnsVSSearch();
-            that.renderBubbleTableView();
-          }
-        });
-      },
-      renderTreeView: function () {
-        var that = this;
-        require(['views/tabs/TreeView'], function (TreeView) {
-          that.RTreeView.show(new TreeView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        });
-      },
-      renderBubbleTableView: function () {
-        var that = this;
-        require(['views/dashboard/BubbleGraphTableLayoutView'], function (BubbleTableLayoutView) {
-          that.RBubbleTable.show(new BubbleTableLayoutView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams,
-            columns: Globals.serviceLogsColumns,
-            quickHelp: true
-          }));
-        });
-      },
-      renderLogLevel: function () {
-        var that = this;
-        require(['views/dashboard/LogLevelBoxView'], function (LogLevelBoxView) {
-          that.RLogLevel.show(new LogLevelBoxView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        });
-      },
-      renderHistogram: function () {
-        var that = this;
-        require(['views/graphs/GraphLayoutView'], function (GraphLayoutView) {
-          that.RHistogram.show(new GraphLayoutView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams,
-            showUnit: true,
-            futureDate: true
-          }));
-        });
-      },
-      renderDatePicker: function () {
-        var that = this;
-        require(['views/common/DatePickerLayout'], function (DatePickerLayout) {
-          that.RDatePicker.show(new DatePickerLayout({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams,
-            datePickerPosition: 'left',
-            rangeLabel: true,
-            parentEl: that.$el.find('.topLevelFilter')
-          }));
-        });
-      },
-      renderLogSnapShot: function () {
-        var that = this;
-        require(['views/common/LogSnapShotLayout'], function (LogSnalShopLayout) {
-          that.RLogSnapShot.show(new LogSnalShopLayout({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        });
-      },
-      renderAdvanceSearch: function () {
-        var that = this;
-        require(['views/common/AdvanceSearchLayout'], function (AdvanceSearchLayout) {
-          that.RAdvanceSearch.show(new AdvanceSearchLayout({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        });
-
-
-      },
-      renderVSSearch: function () {
-        var that = this;
-        require(['views/tabs/VisualSearchView'], function (VisualSearchView) {
-          that.RVisualSearch.show(new VisualSearchView({
-            viewName: "includeExclude",
-            vent: that.vent,
-            globalVent: that.globalVent,
-            eventName: "search:include:exclude",
-            myFormatData: function (query, searchCollection) {
-              var include = [], exclude = [];
-              searchCollection.each(function (m) {
-                if (m.get("category") === "Exclude") {
-                  (!_.isEmpty(m.get("value"))) ? exclude.push(m.get("value")) : '';
-                }
-                else {
-                  (!_.isEmpty(m.get("value"))) ? include.push(m.get("value")) : '';
-                }
-              });
-              return {
-                iMessage: Utils.encodeIncludeExcludeStr(include, true),
-                eMessage: Utils.encodeIncludeExcludeStr(exclude, true),
-                query: query
-              };
-            }
-
-          }));
-        });
-      },
-      renderServiceColumnsVSSearch: function () {
-        var that = this;
-        require(['views/tabs/VisualSearchView'], function (VisualSearchView) {
-          var data = _.values(Globals.serviceLogsColumns);
-          var columns = _.without(data, _.findWhere(data, "logtime"));
-          that.RVisualSearchIncCol.show(new VisualSearchView({
-            viewName: "includeServiceColumns",
-            placeholder: "Include Search",
-            vent: that.vent,
-            globalVent: that.globalVent,
-            customOptions: columns,
-            eventName: Globals.eventName.serviceLogsIncludeColumns,
-            myFormatData: function (query, searchCollection) {
-              var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedServiceLogMappings, false);
-              return {
-                includeQuery: JSON.stringify(obj),
-                query: query
-              }
-            }
-          }));
-          that.RVisualSearchExCol.show(new VisualSearchView({
-            viewName: "excludeServiceColumns",
-            placeholder: "Exclude Search",
-            vent: that.vent,
-            globalVent: that.globalVent,
-            customOptions: columns,
-            eventName: Globals.eventName.serviceLogsExcludeColumns,
-            myFormatData: function (query, searchCollection) {
-              var obj = ViewUtils.replaceColumnNamesWithKeys(searchCollection, Globals.invertedServiceLogMappings, false);
-              return {
-                excludeQuery: JSON.stringify(obj),
-                query: query
-              }
-            }
-          }));
-        });
-      },
-      renderEventHistory: function () {
-        var that = this;
-        require(['views/common/EventHistoryLayout'], function (EventHistoryLayoutView) {
-          that.REventHistory.show(new EventHistoryLayoutView({
-            vent: that.vent,
-            globalVent: that.globalVent,
-            params: that.defaultParams
-          }));
-        });
-      },
-      fetchCollection: function (params) {
-        $.extend(this.collection.queryParams, params);
-        this.collection.fetch({reset: true});
-      },
-      onSearchLogClick: function () {
-        var value = this.ui.searchBox.val();
-        if (_.isEmpty(value)) {
-          this.ui.searchBox.val("*:*");
-          value = "*:*";
-        }
-        this.vent.trigger("main:search", {q: value});
-      },
-      setupSelect2Fields: function (col, idKey, textKey, selectTagId, placeHolder) {
-        var that = this, data = [];
-        data = _.pluck(col.models, 'attributes');
-        for (var i = 0; i < data.length; i++) {
-          data[i].id = data[i].type;
-        }
-        this.ui[selectTagId].select2({
-          dropdownParent: that.$el,
-          placeholder: (placeHolder) ? placeHolder : 'Select',
-          tags: true,
-          allowClear: true,
-          width: '100%',
-          data: {results: data, text: textKey},
-          formatSelection: function (item) {
-            return item[textKey];
-          },
-          formatResult: function (item) {
-            return item[textKey];
-          }
-        }).off("change").on("change", function (e) {
-          var data = that.ui[selectTagId].select2("data").map(function (d) {
-            return d.type
-          });
-          if (selectTagId === "excludeComponents") {
-            that.vent.trigger("tree:strike:component", data);
-            that.vent.trigger("type:mustNot", {mustNot: data.toString()});
-          }
-          if (selectTagId === "includeComponents")
-            that.vent.trigger("type:mustBe", {mustBe: data.toString()});
-        });
-      },
-      reinitializeFilterMustBe: function (values) {
-        if (values.mustBe)
-          this.ui.includeComponents.select2('val', values.mustBe.split(","));
-        else
-          this.ui.includeComponents.select2('val', []);
-      },
-      reinitializeFilterMustNot: function (values) {
-        if (values.mustNot)
-          this.ui.excludeComponents.select2('val', values.mustNot.split(","));
-        else
-          this.ui.excludeComponents.select2('val', []);
-
-      },
-      reRenderComponents: function (params) {
-        var iComponents = this.ui.includeComponents.val(), eComponents = this.ui.excludeComponents.val(), that = this;
-        this.componentsList.fetch({
-          reset: true,
-          complete: function () {
-            that.ui.includeComponents.select2('val', iComponents.split(","));
-            that.ui.excludeComponents.select2('val', eComponents.split(","));
-          }
-        });
-      },
-      onSearchSwitch: function (e) {
-        var obj = {};
-        if (e.target.checked) {
-          this.ui.advanceSearch.show();
-          this.ui.applySearch.show();
-          this.ui.basicSearch.hide();
-          obj.advanceSearch = this.RAdvanceSearch.currentView.ui.searchArea.val();
-          obj.includeQuery = null;
-          obj.excludeQuery = null;
-        } else {
-          this.ui.advanceSearch.hide();
-          this.ui.applySearch.hide();
-          this.ui.basicSearch.show();
-          obj = this.getIncludeExcludeColValues();
-          obj.advanceSearch = null;
-        }
-
-        this.vent.trigger('main:search', obj);
-
-      },
-      applySearchBtn: function () {
-        var obj = {};
-        obj.advanceSearch = this.RAdvanceSearch.currentView.ui.searchArea.val();
-
-        this.vent.trigger('main:search', obj);
-
-      },
-      getIncludeExcludeColValues: function () {
-        return _.extend(this.RVisualSearchIncCol.currentView.formatData(this.RVisualSearchIncCol.currentView.visualSearch.searchBox.value(), this.RVisualSearchIncCol.currentView.visualSearch.searchQuery),
-          this.RVisualSearchExCol.currentView.formatData(this.RVisualSearchExCol.currentView.visualSearch.searchBox.value(), this.RVisualSearchExCol.currentView.visualSearch.searchQuery));
-      },
-      toggleSearchBackToBasicSearch: function (options) {
-        if (!this.ui.advanceSearch.is(":hidden")) {
-          this.ui.advanceSearch.hide();
-          this.ui.basicSearch.show();
-          this.ui.toggleTableAccessLog[0].checked = false;
-          _.extend(options, this.getIncludeExcludeColValues(), {advanceSearch: null});
-        }
-      }
-    });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HostInfoTabLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HostInfoTabLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HostInfoTabLayoutView.js
deleted file mode 100644
index 7be5f14..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/HostInfoTabLayoutView.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
-* 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',
-    'backbone',
-    'utils/Globals',
-    'utils/Utils',
-    'moment',
-    'models/VGraphInfo',
-   	'hbs!tmpl/tabs/HostInfoTabLayoutView_tmpl' 
-],function(require,Backbone,Globals,Utils,moment,VGraphInfo,HostInfoTabLayoutViewTmpl){
-    'use strict';
-
-	return Backbone.Marionette.Layout.extend(
-		/** @lends HostInfoTabLayoutView */
-		{
-			_viewName : 'HostInfoTabLayoutView',
-
-			template: HostInfoTabLayoutViewTmpl,
-
-			/** Layout sub regions */
-			regions: {
-				
-			},
-
-			/** ui selector cache */
-			ui: {
-			},
-
-			/** ui events hash */
-			events: function() {
-				var events = {};
-				return events;
-			},
-
-			/**
-			 * intialize a new HostInfoTabLayoutView Layout
-			 * @constructs
-			 */
-			initialize: function(options) {
-				_.extend(this, _.pick(options,'globalVent'));
-				this.graphModel = new VGraphInfo();
-				this.bindEvents();
-			},
-			bindEvents : function(){
-			},
-			onRender : function(){
-				this.fetchGraphData();
-			},
-			fetchGraphData : function(){
-				var that = this;
-				this.graphModel.getCriticalLogsInfo({},{
-					dataType:"json",
-					success : function(data,textStatus,jqXHR){
-						that.graphModel.set(data);
-						that.renderGraph();
-					},
-					error : function(){
-					},
-					complete : function(){
-						that.$("#loaderGraph").hide();
-						that.$(".loader").hide();
-					}
-				});
-			},
-			renderGraph : function(){
-				var that = this;
-				var data = [];
-				var error = {
-					"key": "ERROR",
-					"color": "#E81D1D",
-					"values" : []
-				};
-				var fatal = {
-					"key": "FATAL",
-					"color": "#830A0A",
-					"values" : []	
-				}
-				if(this.graphModel.get("errorCount")){
-					_.each(this.graphModel.get("errorCount").compName,function(v,i){
-						error.values.push({
-							label : v,
-							value : that.graphModel.get("errorCount").countMsg[i],
-							message : that.graphModel.get("errorCount").cricticalMsg[i]
-						});
-					});
-				}
-				if(this.graphModel.get("fatalCount")){
-					_.each(this.graphModel.get("fatalCount").compName,function(v,i){
-						fatal.values.push({
-							label : v,
-							value : that.graphModel.get("fatalCount").countMsg[i],
-							message : that.graphModel.get("fatalCount").cricticalMsg[i]
-							
-						});
-					});
-				}
-				data.push(error);
-				data.push(fatal);
-				var parentWidth = (that.$('svg').parent().width()),
-                parentHeight = (that.$('svg').parent().height()),
-                width = ((parentWidth === 0) ? (293) : (parentWidth)), // -15 because  parent has 15 padding 
-                height = ((parentHeight === 0) ? (150) : (parentHeight)) // -15 because  parent has 15 padding
-				nv.addGraph(function() {
-					var chart = nv.models.multiBarHorizontalChart()
-						.width(width)
-					  	.height(height)
-					  	.x(function(d) { return d.label })
-					  	.y(function(d) { return d.value })
-					  	.margin({top: 15, right: 10, bottom: 25, left: 80})
-					  	.showValues(false)
-					  	//.tooltips(false)
-					  	.showControls(false)
-					  	.showLegend(false);
-
-					chart.yAxis
-					      .tickFormat(d3.format(',.2f'));
-					chart.tooltip.contentGenerator(
-                            function(data) {
-                                var tootTipTemplate = '<div>' +
-                                    '<table>' +
-                                    '<thead>' +
-                                    '<tr>' +
-                                    '<td colspan="3"><strong class="x-value">' + data.value + '</strong></td>' +
-                                    '</tr>' +
-                                    '<tr>' +
-                                    //'<td colspan="3"><small class="x-value" style="font-size:5px">' + data.data.message + '</small></td>' +
-                                    '</tr>' +
-                                    '</thead>' +
-                                    '<tbody>' +
-                                    '<tr>' +
-                                    '<td class="legend-color-guide">' +
-                                    '<div style="background-color: ' + data.color + '"></div>' +
-                                    '</td>' +
-                                    '<td class="key">' + data.data.key + '</td>' +
-                                    '<td class="value">' + data.data.value + '</td>' +
-                                    '</tr>' +
-                                    '</tbody>' +
-                                    '</table>' +
-                                    '</div>'
-
-                                return tootTipTemplate
-                            })
-					chart.tooltip.enabled();
-					chart.dispatch.on('renderEnd', function() {
-						d3.selectAll("#hostCriticalGraph g .nv-bar").on("click",function(d){
-							Utils.alertPopup({msg : "<pre>"+d.message+"</pre>"});
-						})
-					});
-					d3.select('#hostCriticalGraph svg')
-						.datum(data)
-					    .transition().duration(500)
-					    .call(chart);
-					
-					return chart;
-				});
-			}
-			
-			
-		
-	});
-	
-});
-	
\ No newline at end of file


[25/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.js
deleted file mode 100644
index a1fc7e7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/js/jquery-ui-1.11.4.js
+++ /dev/null
@@ -1,8772 +0,0 @@
-/*! jQuery UI - v1.11.4 - 2015-10-14
-* http://jqueryui.com
-* Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, autocomplete.js, button.js, dialog.js, menu.js, spinner.js
-* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
-
-(function( factory ) {
-	if ( typeof define === "function" && define.amd ) {
-
-		// AMD. Register as an anonymous module.
-		define([ "jquery" ], factory );
-	} else {
-
-		// Browser globals
-		factory( jQuery );
-	}
-}(function( $ ) {
-/*!
- * jQuery UI Core 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/category/ui-core/
- */
-
-
-// $.ui might exist from components with no dependencies, e.g., $.ui.position
-$.ui = $.ui || {};
-
-$.extend( $.ui, {
-	version: "1.11.4",
-
-	keyCode: {
-		BACKSPACE: 8,
-		COMMA: 188,
-		DELETE: 46,
-		DOWN: 40,
-		END: 35,
-		ENTER: 13,
-		ESCAPE: 27,
-		HOME: 36,
-		LEFT: 37,
-		PAGE_DOWN: 34,
-		PAGE_UP: 33,
-		PERIOD: 190,
-		RIGHT: 39,
-		SPACE: 32,
-		TAB: 9,
-		UP: 38
-	}
-});
-
-// plugins
-$.fn.extend({
-	scrollParent: function( includeHidden ) {
-		var position = this.css( "position" ),
-			excludeStaticParent = position === "absolute",
-			overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
-			scrollParent = this.parents().filter( function() {
-				var parent = $( this );
-				if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
-					return false;
-				}
-				return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
-			}).eq( 0 );
-
-		return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
-	},
-
-	uniqueId: (function() {
-		var uuid = 0;
-
-		return function() {
-			return this.each(function() {
-				if ( !this.id ) {
-					this.id = "ui-id-" + ( ++uuid );
-				}
-			});
-		};
-	})(),
-
-	removeUniqueId: function() {
-		return this.each(function() {
-			if ( /^ui-id-\d+$/.test( this.id ) ) {
-				$( this ).removeAttr( "id" );
-			}
-		});
-	}
-});
-
-// selectors
-function focusable( element, isTabIndexNotNaN ) {
-	var map, mapName, img,
-		nodeName = element.nodeName.toLowerCase();
-	if ( "area" === nodeName ) {
-		map = element.parentNode;
-		mapName = map.name;
-		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
-			return false;
-		}
-		img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
-		return !!img && visible( img );
-	}
-	return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
-		!element.disabled :
-		"a" === nodeName ?
-			element.href || isTabIndexNotNaN :
-			isTabIndexNotNaN) &&
-		// the element and all of its ancestors must be visible
-		visible( element );
-}
-
-function visible( element ) {
-	return $.expr.filters.visible( element ) &&
-		!$( element ).parents().addBack().filter(function() {
-			return $.css( this, "visibility" ) === "hidden";
-		}).length;
-}
-
-$.extend( $.expr[ ":" ], {
-	data: $.expr.createPseudo ?
-		$.expr.createPseudo(function( dataName ) {
-			return function( elem ) {
-				return !!$.data( elem, dataName );
-			};
-		}) :
-		// support: jQuery <1.8
-		function( elem, i, match ) {
-			return !!$.data( elem, match[ 3 ] );
-		},
-
-	focusable: function( element ) {
-		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
-	},
-
-	tabbable: function( element ) {
-		var tabIndex = $.attr( element, "tabindex" ),
-			isTabIndexNaN = isNaN( tabIndex );
-		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
-	}
-});
-
-// support: jQuery <1.8
-if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
-	$.each( [ "Width", "Height" ], function( i, name ) {
-		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
-			type = name.toLowerCase(),
-			orig = {
-				innerWidth: $.fn.innerWidth,
-				innerHeight: $.fn.innerHeight,
-				outerWidth: $.fn.outerWidth,
-				outerHeight: $.fn.outerHeight
-			};
-
-		function reduce( elem, size, border, margin ) {
-			$.each( side, function() {
-				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
-				if ( border ) {
-					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
-				}
-				if ( margin ) {
-					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
-				}
-			});
-			return size;
-		}
-
-		$.fn[ "inner" + name ] = function( size ) {
-			if ( size === undefined ) {
-				return orig[ "inner" + name ].call( this );
-			}
-
-			return this.each(function() {
-				$( this ).css( type, reduce( this, size ) + "px" );
-			});
-		};
-
-		$.fn[ "outer" + name] = function( size, margin ) {
-			if ( typeof size !== "number" ) {
-				return orig[ "outer" + name ].call( this, size );
-			}
-
-			return this.each(function() {
-				$( this).css( type, reduce( this, size, true, margin ) + "px" );
-			});
-		};
-	});
-}
-
-// support: jQuery <1.8
-if ( !$.fn.addBack ) {
-	$.fn.addBack = function( selector ) {
-		return this.add( selector == null ?
-			this.prevObject : this.prevObject.filter( selector )
-		);
-	};
-}
-
-// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
-if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
-	$.fn.removeData = (function( removeData ) {
-		return function( key ) {
-			if ( arguments.length ) {
-				return removeData.call( this, $.camelCase( key ) );
-			} else {
-				return removeData.call( this );
-			}
-		};
-	})( $.fn.removeData );
-}
-
-// deprecated
-$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-
-$.fn.extend({
-	focus: (function( orig ) {
-		return function( delay, fn ) {
-			return typeof delay === "number" ?
-				this.each(function() {
-					var elem = this;
-					setTimeout(function() {
-						$( elem ).focus();
-						if ( fn ) {
-							fn.call( elem );
-						}
-					}, delay );
-				}) :
-				orig.apply( this, arguments );
-		};
-	})( $.fn.focus ),
-
-	disableSelection: (function() {
-		var eventType = "onselectstart" in document.createElement( "div" ) ?
-			"selectstart" :
-			"mousedown";
-
-		return function() {
-			return this.bind( eventType + ".ui-disableSelection", function( event ) {
-				event.preventDefault();
-			});
-		};
-	})(),
-
-	enableSelection: function() {
-		return this.unbind( ".ui-disableSelection" );
-	},
-
-	zIndex: function( zIndex ) {
-		if ( zIndex !== undefined ) {
-			return this.css( "zIndex", zIndex );
-		}
-
-		if ( this.length ) {
-			var elem = $( this[ 0 ] ), position, value;
-			while ( elem.length && elem[ 0 ] !== document ) {
-				// Ignore z-index if position is set to a value where z-index is ignored by the browser
-				// This makes behavior of this function consistent across browsers
-				// WebKit always returns auto if the element is positioned
-				position = elem.css( "position" );
-				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
-					// IE returns 0 when zIndex is not specified
-					// other browsers return a string
-					// we ignore the case of nested elements with an explicit value of 0
-					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
-					value = parseInt( elem.css( "zIndex" ), 10 );
-					if ( !isNaN( value ) && value !== 0 ) {
-						return value;
-					}
-				}
-				elem = elem.parent();
-			}
-		}
-
-		return 0;
-	}
-});
-
-// $.ui.plugin is deprecated. Use $.widget() extensions instead.
-$.ui.plugin = {
-	add: function( module, option, set ) {
-		var i,
-			proto = $.ui[ module ].prototype;
-		for ( i in set ) {
-			proto.plugins[ i ] = proto.plugins[ i ] || [];
-			proto.plugins[ i ].push( [ option, set[ i ] ] );
-		}
-	},
-	call: function( instance, name, args, allowDisconnected ) {
-		var i,
-			set = instance.plugins[ name ];
-
-		if ( !set ) {
-			return;
-		}
-
-		if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
-			return;
-		}
-
-		for ( i = 0; i < set.length; i++ ) {
-			if ( instance.options[ set[ i ][ 0 ] ] ) {
-				set[ i ][ 1 ].apply( instance.element, args );
-			}
-		}
-	}
-};
-
-
-/*!
- * jQuery UI Widget 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/jQuery.widget/
- */
-
-
-var widget_uuid = 0,
-	widget_slice = Array.prototype.slice;
-
-$.cleanData = (function( orig ) {
-	return function( elems ) {
-		var events, elem, i;
-		for ( i = 0; (elem = elems[i]) != null; i++ ) {
-			try {
-
-				// Only trigger remove when necessary to save time
-				events = $._data( elem, "events" );
-				if ( events && events.remove ) {
-					$( elem ).triggerHandler( "remove" );
-				}
-
-			// http://bugs.jquery.com/ticket/8235
-			} catch ( e ) {}
-		}
-		orig( elems );
-	};
-})( $.cleanData );
-
-$.widget = function( name, base, prototype ) {
-	var fullName, existingConstructor, constructor, basePrototype,
-		// proxiedPrototype allows the provided prototype to remain unmodified
-		// so that it can be used as a mixin for multiple widgets (#8876)
-		proxiedPrototype = {},
-		namespace = name.split( "." )[ 0 ];
-
-	name = name.split( "." )[ 1 ];
-	fullName = namespace + "-" + name;
-
-	if ( !prototype ) {
-		prototype = base;
-		base = $.Widget;
-	}
-
-	// create selector for plugin
-	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
-		return !!$.data( elem, fullName );
-	};
-
-	$[ namespace ] = $[ namespace ] || {};
-	existingConstructor = $[ namespace ][ name ];
-	constructor = $[ namespace ][ name ] = function( options, element ) {
-		// allow instantiation without "new" keyword
-		if ( !this._createWidget ) {
-			return new constructor( options, element );
-		}
-
-		// allow instantiation without initializing for simple inheritance
-		// must use "new" keyword (the code above always passes args)
-		if ( arguments.length ) {
-			this._createWidget( options, element );
-		}
-	};
-	// extend with the existing constructor to carry over any static properties
-	$.extend( constructor, existingConstructor, {
-		version: prototype.version,
-		// copy the object used to create the prototype in case we need to
-		// redefine the widget later
-		_proto: $.extend( {}, prototype ),
-		// track widgets that inherit from this widget in case this widget is
-		// redefined after a widget inherits from it
-		_childConstructors: []
-	});
-
-	basePrototype = new base();
-	// we need to make the options hash a property directly on the new instance
-	// otherwise we'll modify the options hash on the prototype that we're
-	// inheriting from
-	basePrototype.options = $.widget.extend( {}, basePrototype.options );
-	$.each( prototype, function( prop, value ) {
-		if ( !$.isFunction( value ) ) {
-			proxiedPrototype[ prop ] = value;
-			return;
-		}
-		proxiedPrototype[ prop ] = (function() {
-			var _super = function() {
-					return base.prototype[ prop ].apply( this, arguments );
-				},
-				_superApply = function( args ) {
-					return base.prototype[ prop ].apply( this, args );
-				};
-			return function() {
-				var __super = this._super,
-					__superApply = this._superApply,
-					returnValue;
-
-				this._super = _super;
-				this._superApply = _superApply;
-
-				returnValue = value.apply( this, arguments );
-
-				this._super = __super;
-				this._superApply = __superApply;
-
-				return returnValue;
-			};
-		})();
-	});
-	constructor.prototype = $.widget.extend( basePrototype, {
-		// TODO: remove support for widgetEventPrefix
-		// always use the name + a colon as the prefix, e.g., draggable:start
-		// don't prefix for widgets that aren't DOM-based
-		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
-	}, proxiedPrototype, {
-		constructor: constructor,
-		namespace: namespace,
-		widgetName: name,
-		widgetFullName: fullName
-	});
-
-	// If this widget is being redefined then we need to find all widgets that
-	// are inheriting from it and redefine all of them so that they inherit from
-	// the new version of this widget. We're essentially trying to replace one
-	// level in the prototype chain.
-	if ( existingConstructor ) {
-		$.each( existingConstructor._childConstructors, function( i, child ) {
-			var childPrototype = child.prototype;
-
-			// redefine the child widget using the same prototype that was
-			// originally used, but inherit from the new version of the base
-			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
-		});
-		// remove the list of existing child constructors from the old constructor
-		// so the old child constructors can be garbage collected
-		delete existingConstructor._childConstructors;
-	} else {
-		base._childConstructors.push( constructor );
-	}
-
-	$.widget.bridge( name, constructor );
-
-	return constructor;
-};
-
-$.widget.extend = function( target ) {
-	var input = widget_slice.call( arguments, 1 ),
-		inputIndex = 0,
-		inputLength = input.length,
-		key,
-		value;
-	for ( ; inputIndex < inputLength; inputIndex++ ) {
-		for ( key in input[ inputIndex ] ) {
-			value = input[ inputIndex ][ key ];
-			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
-				// Clone objects
-				if ( $.isPlainObject( value ) ) {
-					target[ key ] = $.isPlainObject( target[ key ] ) ?
-						$.widget.extend( {}, target[ key ], value ) :
-						// Don't extend strings, arrays, etc. with objects
-						$.widget.extend( {}, value );
-				// Copy everything else by reference
-				} else {
-					target[ key ] = value;
-				}
-			}
-		}
-	}
-	return target;
-};
-
-$.widget.bridge = function( name, object ) {
-	var fullName = object.prototype.widgetFullName || name;
-	$.fn[ name ] = function( options ) {
-		var isMethodCall = typeof options === "string",
-			args = widget_slice.call( arguments, 1 ),
-			returnValue = this;
-
-		if ( isMethodCall ) {
-			this.each(function() {
-				var methodValue,
-					instance = $.data( this, fullName );
-				if ( options === "instance" ) {
-					returnValue = instance;
-					return false;
-				}
-				if ( !instance ) {
-					return $.error( "cannot call methods on " + name + " prior to initialization; " +
-						"attempted to call method '" + options + "'" );
-				}
-				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
-					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
-				}
-				methodValue = instance[ options ].apply( instance, args );
-				if ( methodValue !== instance && methodValue !== undefined ) {
-					returnValue = methodValue && methodValue.jquery ?
-						returnValue.pushStack( methodValue.get() ) :
-						methodValue;
-					return false;
-				}
-			});
-		} else {
-
-			// Allow multiple hashes to be passed on init
-			if ( args.length ) {
-				options = $.widget.extend.apply( null, [ options ].concat(args) );
-			}
-
-			this.each(function() {
-				var instance = $.data( this, fullName );
-				if ( instance ) {
-					instance.option( options || {} );
-					if ( instance._init ) {
-						instance._init();
-					}
-				} else {
-					$.data( this, fullName, new object( options, this ) );
-				}
-			});
-		}
-
-		return returnValue;
-	};
-};
-
-$.Widget = function( /* options, element */ ) {};
-$.Widget._childConstructors = [];
-
-$.Widget.prototype = {
-	widgetName: "widget",
-	widgetEventPrefix: "",
-	defaultElement: "<div>",
-	options: {
-		disabled: false,
-
-		// callbacks
-		create: null
-	},
-	_createWidget: function( options, element ) {
-		element = $( element || this.defaultElement || this )[ 0 ];
-		this.element = $( element );
-		this.uuid = widget_uuid++;
-		this.eventNamespace = "." + this.widgetName + this.uuid;
-
-		this.bindings = $();
-		this.hoverable = $();
-		this.focusable = $();
-
-		if ( element !== this ) {
-			$.data( element, this.widgetFullName, this );
-			this._on( true, this.element, {
-				remove: function( event ) {
-					if ( event.target === element ) {
-						this.destroy();
-					}
-				}
-			});
-			this.document = $( element.style ?
-				// element within the document
-				element.ownerDocument :
-				// element is window or document
-				element.document || element );
-			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
-		}
-
-		this.options = $.widget.extend( {},
-			this.options,
-			this._getCreateOptions(),
-			options );
-
-		this._create();
-		this._trigger( "create", null, this._getCreateEventData() );
-		this._init();
-	},
-	_getCreateOptions: $.noop,
-	_getCreateEventData: $.noop,
-	_create: $.noop,
-	_init: $.noop,
-
-	destroy: function() {
-		this._destroy();
-		// we can probably remove the unbind calls in 2.0
-		// all event bindings should go through this._on()
-		this.element
-			.unbind( this.eventNamespace )
-			.removeData( this.widgetFullName )
-			// support: jquery <1.6.3
-			// http://bugs.jquery.com/ticket/9413
-			.removeData( $.camelCase( this.widgetFullName ) );
-		this.widget()
-			.unbind( this.eventNamespace )
-			.removeAttr( "aria-disabled" )
-			.removeClass(
-				this.widgetFullName + "-disabled " +
-				"ui-state-disabled" );
-
-		// clean up events and states
-		this.bindings.unbind( this.eventNamespace );
-		this.hoverable.removeClass( "ui-state-hover" );
-		this.focusable.removeClass( "ui-state-focus" );
-	},
-	_destroy: $.noop,
-
-	widget: function() {
-		return this.element;
-	},
-
-	option: function( key, value ) {
-		var options = key,
-			parts,
-			curOption,
-			i;
-
-		if ( arguments.length === 0 ) {
-			// don't return a reference to the internal hash
-			return $.widget.extend( {}, this.options );
-		}
-
-		if ( typeof key === "string" ) {
-			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
-			options = {};
-			parts = key.split( "." );
-			key = parts.shift();
-			if ( parts.length ) {
-				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
-				for ( i = 0; i < parts.length - 1; i++ ) {
-					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
-					curOption = curOption[ parts[ i ] ];
-				}
-				key = parts.pop();
-				if ( arguments.length === 1 ) {
-					return curOption[ key ] === undefined ? null : curOption[ key ];
-				}
-				curOption[ key ] = value;
-			} else {
-				if ( arguments.length === 1 ) {
-					return this.options[ key ] === undefined ? null : this.options[ key ];
-				}
-				options[ key ] = value;
-			}
-		}
-
-		this._setOptions( options );
-
-		return this;
-	},
-	_setOptions: function( options ) {
-		var key;
-
-		for ( key in options ) {
-			this._setOption( key, options[ key ] );
-		}
-
-		return this;
-	},
-	_setOption: function( key, value ) {
-		this.options[ key ] = value;
-
-		if ( key === "disabled" ) {
-			this.widget()
-				.toggleClass( this.widgetFullName + "-disabled", !!value );
-
-			// If the widget is becoming disabled, then nothing is interactive
-			if ( value ) {
-				this.hoverable.removeClass( "ui-state-hover" );
-				this.focusable.removeClass( "ui-state-focus" );
-			}
-		}
-
-		return this;
-	},
-
-	enable: function() {
-		return this._setOptions({ disabled: false });
-	},
-	disable: function() {
-		return this._setOptions({ disabled: true });
-	},
-
-	_on: function( suppressDisabledCheck, element, handlers ) {
-		var delegateElement,
-			instance = this;
-
-		// no suppressDisabledCheck flag, shuffle arguments
-		if ( typeof suppressDisabledCheck !== "boolean" ) {
-			handlers = element;
-			element = suppressDisabledCheck;
-			suppressDisabledCheck = false;
-		}
-
-		// no element argument, shuffle and use this.element
-		if ( !handlers ) {
-			handlers = element;
-			element = this.element;
-			delegateElement = this.widget();
-		} else {
-			element = delegateElement = $( element );
-			this.bindings = this.bindings.add( element );
-		}
-
-		$.each( handlers, function( event, handler ) {
-			function handlerProxy() {
-				// allow widgets to customize the disabled handling
-				// - disabled as an array instead of boolean
-				// - disabled class as method for disabling individual parts
-				if ( !suppressDisabledCheck &&
-						( instance.options.disabled === true ||
-							$( this ).hasClass( "ui-state-disabled" ) ) ) {
-					return;
-				}
-				return ( typeof handler === "string" ? instance[ handler ] : handler )
-					.apply( instance, arguments );
-			}
-
-			// copy the guid so direct unbinding works
-			if ( typeof handler !== "string" ) {
-				handlerProxy.guid = handler.guid =
-					handler.guid || handlerProxy.guid || $.guid++;
-			}
-
-			var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
-				eventName = match[1] + instance.eventNamespace,
-				selector = match[2];
-			if ( selector ) {
-				delegateElement.delegate( selector, eventName, handlerProxy );
-			} else {
-				element.bind( eventName, handlerProxy );
-			}
-		});
-	},
-
-	_off: function( element, eventName ) {
-		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
-			this.eventNamespace;
-		element.unbind( eventName ).undelegate( eventName );
-
-		// Clear the stack to avoid memory leaks (#10056)
-		this.bindings = $( this.bindings.not( element ).get() );
-		this.focusable = $( this.focusable.not( element ).get() );
-		this.hoverable = $( this.hoverable.not( element ).get() );
-	},
-
-	_delay: function( handler, delay ) {
-		function handlerProxy() {
-			return ( typeof handler === "string" ? instance[ handler ] : handler )
-				.apply( instance, arguments );
-		}
-		var instance = this;
-		return setTimeout( handlerProxy, delay || 0 );
-	},
-
-	_hoverable: function( element ) {
-		this.hoverable = this.hoverable.add( element );
-		this._on( element, {
-			mouseenter: function( event ) {
-				$( event.currentTarget ).addClass( "ui-state-hover" );
-			},
-			mouseleave: function( event ) {
-				$( event.currentTarget ).removeClass( "ui-state-hover" );
-			}
-		});
-	},
-
-	_focusable: function( element ) {
-		this.focusable = this.focusable.add( element );
-		this._on( element, {
-			focusin: function( event ) {
-				$( event.currentTarget ).addClass( "ui-state-focus" );
-			},
-			focusout: function( event ) {
-				$( event.currentTarget ).removeClass( "ui-state-focus" );
-			}
-		});
-	},
-
-	_trigger: function( type, event, data ) {
-		var prop, orig,
-			callback = this.options[ type ];
-
-		data = data || {};
-		event = $.Event( event );
-		event.type = ( type === this.widgetEventPrefix ?
-			type :
-			this.widgetEventPrefix + type ).toLowerCase();
-		// the original event may come from any element
-		// so we need to reset the target on the new event
-		event.target = this.element[ 0 ];
-
-		// copy original event properties over to the new event
-		orig = event.originalEvent;
-		if ( orig ) {
-			for ( prop in orig ) {
-				if ( !( prop in event ) ) {
-					event[ prop ] = orig[ prop ];
-				}
-			}
-		}
-
-		this.element.trigger( event, data );
-		return !( $.isFunction( callback ) &&
-			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
-			event.isDefaultPrevented() );
-	}
-};
-
-$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
-	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
-		if ( typeof options === "string" ) {
-			options = { effect: options };
-		}
-		var hasOptions,
-			effectName = !options ?
-				method :
-				options === true || typeof options === "number" ?
-					defaultEffect :
-					options.effect || defaultEffect;
-		options = options || {};
-		if ( typeof options === "number" ) {
-			options = { duration: options };
-		}
-		hasOptions = !$.isEmptyObject( options );
-		options.complete = callback;
-		if ( options.delay ) {
-			element.delay( options.delay );
-		}
-		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
-			element[ method ]( options );
-		} else if ( effectName !== method && element[ effectName ] ) {
-			element[ effectName ]( options.duration, options.easing, callback );
-		} else {
-			element.queue(function( next ) {
-				$( this )[ method ]();
-				if ( callback ) {
-					callback.call( element[ 0 ] );
-				}
-				next();
-			});
-		}
-	};
-});
-
-var widget = $.widget;
-
-
-/*!
- * jQuery UI Mouse 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/mouse/
- */
-
-
-var mouseHandled = false;
-$( document ).mouseup( function() {
-	mouseHandled = false;
-});
-
-var mouse = $.widget("ui.mouse", {
-	version: "1.11.4",
-	options: {
-		cancel: "input,textarea,button,select,option",
-		distance: 1,
-		delay: 0
-	},
-	_mouseInit: function() {
-		var that = this;
-
-		this.element
-			.bind("mousedown." + this.widgetName, function(event) {
-				return that._mouseDown(event);
-			})
-			.bind("click." + this.widgetName, function(event) {
-				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
-					$.removeData(event.target, that.widgetName + ".preventClickEvent");
-					event.stopImmediatePropagation();
-					return false;
-				}
-			});
-
-		this.started = false;
-	},
-
-	// TODO: make sure destroying one instance of mouse doesn't mess with
-	// other instances of mouse
-	_mouseDestroy: function() {
-		this.element.unbind("." + this.widgetName);
-		if ( this._mouseMoveDelegate ) {
-			this.document
-				.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
-				.unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
-		}
-	},
-
-	_mouseDown: function(event) {
-		// don't let more than one widget handle mouseStart
-		if ( mouseHandled ) {
-			return;
-		}
-
-		this._mouseMoved = false;
-
-		// we may have missed mouseup (out of window)
-		(this._mouseStarted && this._mouseUp(event));
-
-		this._mouseDownEvent = event;
-
-		var that = this,
-			btnIsLeft = (event.which === 1),
-			// event.target.nodeName works around a bug in IE 8 with
-			// disabled inputs (#7620)
-			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
-		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
-			return true;
-		}
-
-		this.mouseDelayMet = !this.options.delay;
-		if (!this.mouseDelayMet) {
-			this._mouseDelayTimer = setTimeout(function() {
-				that.mouseDelayMet = true;
-			}, this.options.delay);
-		}
-
-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-			this._mouseStarted = (this._mouseStart(event) !== false);
-			if (!this._mouseStarted) {
-				event.preventDefault();
-				return true;
-			}
-		}
-
-		// Click event may never have fired (Gecko & Opera)
-		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
-			$.removeData(event.target, this.widgetName + ".preventClickEvent");
-		}
-
-		// these delegates are required to keep context
-		this._mouseMoveDelegate = function(event) {
-			return that._mouseMove(event);
-		};
-		this._mouseUpDelegate = function(event) {
-			return that._mouseUp(event);
-		};
-
-		this.document
-			.bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
-			.bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
-		event.preventDefault();
-
-		mouseHandled = true;
-		return true;
-	},
-
-	_mouseMove: function(event) {
-		// Only check for mouseups outside the document if you've moved inside the document
-		// at least once. This prevents the firing of mouseup in the case of IE<9, which will
-		// fire a mousemove event if content is placed under the cursor. See #7778
-		// Support: IE <9
-		if ( this._mouseMoved ) {
-			// IE mouseup check - mouseup happened when mouse was out of window
-			if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
-				return this._mouseUp(event);
-
-			// Iframe mouseup check - mouseup occurred in another document
-			} else if ( !event.which ) {
-				return this._mouseUp( event );
-			}
-		}
-
-		if ( event.which || event.button ) {
-			this._mouseMoved = true;
-		}
-
-		if (this._mouseStarted) {
-			this._mouseDrag(event);
-			return event.preventDefault();
-		}
-
-		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
-			this._mouseStarted =
-				(this._mouseStart(this._mouseDownEvent, event) !== false);
-			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
-		}
-
-		return !this._mouseStarted;
-	},
-
-	_mouseUp: function(event) {
-		this.document
-			.unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
-			.unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
-
-		if (this._mouseStarted) {
-			this._mouseStarted = false;
-
-			if (event.target === this._mouseDownEvent.target) {
-				$.data(event.target, this.widgetName + ".preventClickEvent", true);
-			}
-
-			this._mouseStop(event);
-		}
-
-		mouseHandled = false;
-		return false;
-	},
-
-	_mouseDistanceMet: function(event) {
-		return (Math.max(
-				Math.abs(this._mouseDownEvent.pageX - event.pageX),
-				Math.abs(this._mouseDownEvent.pageY - event.pageY)
-			) >= this.options.distance
-		);
-	},
-
-	_mouseDelayMet: function(/* event */) {
-		return this.mouseDelayMet;
-	},
-
-	// These are placeholder methods, to be overriden by extending plugin
-	_mouseStart: function(/* event */) {},
-	_mouseDrag: function(/* event */) {},
-	_mouseStop: function(/* event */) {},
-	_mouseCapture: function(/* event */) { return true; }
-});
-
-
-/*!
- * jQuery UI Position 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/position/
- */
-
-(function() {
-
-$.ui = $.ui || {};
-
-var cachedScrollbarWidth, supportsOffsetFractions,
-	max = Math.max,
-	abs = Math.abs,
-	round = Math.round,
-	rhorizontal = /left|center|right/,
-	rvertical = /top|center|bottom/,
-	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
-	rposition = /^\w+/,
-	rpercent = /%$/,
-	_position = $.fn.position;
-
-function getOffsets( offsets, width, height ) {
-	return [
-		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
-		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
-	];
-}
-
-function parseCss( element, property ) {
-	return parseInt( $.css( element, property ), 10 ) || 0;
-}
-
-function getDimensions( elem ) {
-	var raw = elem[0];
-	if ( raw.nodeType === 9 ) {
-		return {
-			width: elem.width(),
-			height: elem.height(),
-			offset: { top: 0, left: 0 }
-		};
-	}
-	if ( $.isWindow( raw ) ) {
-		return {
-			width: elem.width(),
-			height: elem.height(),
-			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
-		};
-	}
-	if ( raw.preventDefault ) {
-		return {
-			width: 0,
-			height: 0,
-			offset: { top: raw.pageY, left: raw.pageX }
-		};
-	}
-	return {
-		width: elem.outerWidth(),
-		height: elem.outerHeight(),
-		offset: elem.offset()
-	};
-}
-
-$.position = {
-	scrollbarWidth: function() {
-		if ( cachedScrollbarWidth !== undefined ) {
-			return cachedScrollbarWidth;
-		}
-		var w1, w2,
-			div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
-			innerDiv = div.children()[0];
-
-		$( "body" ).append( div );
-		w1 = innerDiv.offsetWidth;
-		div.css( "overflow", "scroll" );
-
-		w2 = innerDiv.offsetWidth;
-
-		if ( w1 === w2 ) {
-			w2 = div[0].clientWidth;
-		}
-
-		div.remove();
-
-		return (cachedScrollbarWidth = w1 - w2);
-	},
-	getScrollInfo: function( within ) {
-		var overflowX = within.isWindow || within.isDocument ? "" :
-				within.element.css( "overflow-x" ),
-			overflowY = within.isWindow || within.isDocument ? "" :
-				within.element.css( "overflow-y" ),
-			hasOverflowX = overflowX === "scroll" ||
-				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
-			hasOverflowY = overflowY === "scroll" ||
-				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
-		return {
-			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
-			height: hasOverflowX ? $.position.scrollbarWidth() : 0
-		};
-	},
-	getWithinInfo: function( element ) {
-		var withinElement = $( element || window ),
-			isWindow = $.isWindow( withinElement[0] ),
-			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
-		return {
-			element: withinElement,
-			isWindow: isWindow,
-			isDocument: isDocument,
-			offset: withinElement.offset() || { left: 0, top: 0 },
-			scrollLeft: withinElement.scrollLeft(),
-			scrollTop: withinElement.scrollTop(),
-
-			// support: jQuery 1.6.x
-			// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
-			width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
-			height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
-		};
-	}
-};
-
-$.fn.position = function( options ) {
-	if ( !options || !options.of ) {
-		return _position.apply( this, arguments );
-	}
-
-	// make a copy, we don't want to modify arguments
-	options = $.extend( {}, options );
-
-	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
-		target = $( options.of ),
-		within = $.position.getWithinInfo( options.within ),
-		scrollInfo = $.position.getScrollInfo( within ),
-		collision = ( options.collision || "flip" ).split( " " ),
-		offsets = {};
-
-	dimensions = getDimensions( target );
-	if ( target[0].preventDefault ) {
-		// force left top to allow flipping
-		options.at = "left top";
-	}
-	targetWidth = dimensions.width;
-	targetHeight = dimensions.height;
-	targetOffset = dimensions.offset;
-	// clone to reuse original targetOffset later
-	basePosition = $.extend( {}, targetOffset );
-
-	// force my and at to have valid horizontal and vertical positions
-	// if a value is missing or invalid, it will be converted to center
-	$.each( [ "my", "at" ], function() {
-		var pos = ( options[ this ] || "" ).split( " " ),
-			horizontalOffset,
-			verticalOffset;
-
-		if ( pos.length === 1) {
-			pos = rhorizontal.test( pos[ 0 ] ) ?
-				pos.concat( [ "center" ] ) :
-				rvertical.test( pos[ 0 ] ) ?
-					[ "center" ].concat( pos ) :
-					[ "center", "center" ];
-		}
-		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
-		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
-
-		// calculate offsets
-		horizontalOffset = roffset.exec( pos[ 0 ] );
-		verticalOffset = roffset.exec( pos[ 1 ] );
-		offsets[ this ] = [
-			horizontalOffset ? horizontalOffset[ 0 ] : 0,
-			verticalOffset ? verticalOffset[ 0 ] : 0
-		];
-
-		// reduce to just the positions without the offsets
-		options[ this ] = [
-			rposition.exec( pos[ 0 ] )[ 0 ],
-			rposition.exec( pos[ 1 ] )[ 0 ]
-		];
-	});
-
-	// normalize collision option
-	if ( collision.length === 1 ) {
-		collision[ 1 ] = collision[ 0 ];
-	}
-
-	if ( options.at[ 0 ] === "right" ) {
-		basePosition.left += targetWidth;
-	} else if ( options.at[ 0 ] === "center" ) {
-		basePosition.left += targetWidth / 2;
-	}
-
-	if ( options.at[ 1 ] === "bottom" ) {
-		basePosition.top += targetHeight;
-	} else if ( options.at[ 1 ] === "center" ) {
-		basePosition.top += targetHeight / 2;
-	}
-
-	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
-	basePosition.left += atOffset[ 0 ];
-	basePosition.top += atOffset[ 1 ];
-
-	return this.each(function() {
-		var collisionPosition, using,
-			elem = $( this ),
-			elemWidth = elem.outerWidth(),
-			elemHeight = elem.outerHeight(),
-			marginLeft = parseCss( this, "marginLeft" ),
-			marginTop = parseCss( this, "marginTop" ),
-			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
-			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
-			position = $.extend( {}, basePosition ),
-			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
-
-		if ( options.my[ 0 ] === "right" ) {
-			position.left -= elemWidth;
-		} else if ( options.my[ 0 ] === "center" ) {
-			position.left -= elemWidth / 2;
-		}
-
-		if ( options.my[ 1 ] === "bottom" ) {
-			position.top -= elemHeight;
-		} else if ( options.my[ 1 ] === "center" ) {
-			position.top -= elemHeight / 2;
-		}
-
-		position.left += myOffset[ 0 ];
-		position.top += myOffset[ 1 ];
-
-		// if the browser doesn't support fractions, then round for consistent results
-		if ( !supportsOffsetFractions ) {
-			position.left = round( position.left );
-			position.top = round( position.top );
-		}
-
-		collisionPosition = {
-			marginLeft: marginLeft,
-			marginTop: marginTop
-		};
-
-		$.each( [ "left", "top" ], function( i, dir ) {
-			if ( $.ui.position[ collision[ i ] ] ) {
-				$.ui.position[ collision[ i ] ][ dir ]( position, {
-					targetWidth: targetWidth,
-					targetHeight: targetHeight,
-					elemWidth: elemWidth,
-					elemHeight: elemHeight,
-					collisionPosition: collisionPosition,
-					collisionWidth: collisionWidth,
-					collisionHeight: collisionHeight,
-					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
-					my: options.my,
-					at: options.at,
-					within: within,
-					elem: elem
-				});
-			}
-		});
-
-		if ( options.using ) {
-			// adds feedback as second argument to using callback, if present
-			using = function( props ) {
-				var left = targetOffset.left - position.left,
-					right = left + targetWidth - elemWidth,
-					top = targetOffset.top - position.top,
-					bottom = top + targetHeight - elemHeight,
-					feedback = {
-						target: {
-							element: target,
-							left: targetOffset.left,
-							top: targetOffset.top,
-							width: targetWidth,
-							height: targetHeight
-						},
-						element: {
-							element: elem,
-							left: position.left,
-							top: position.top,
-							width: elemWidth,
-							height: elemHeight
-						},
-						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
-						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
-					};
-				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
-					feedback.horizontal = "center";
-				}
-				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
-					feedback.vertical = "middle";
-				}
-				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
-					feedback.important = "horizontal";
-				} else {
-					feedback.important = "vertical";
-				}
-				options.using.call( this, props, feedback );
-			};
-		}
-
-		elem.offset( $.extend( position, { using: using } ) );
-	});
-};
-
-$.ui.position = {
-	fit: {
-		left: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
-				outerWidth = within.width,
-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
-				overLeft = withinOffset - collisionPosLeft,
-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
-				newOverRight;
-
-			// element is wider than within
-			if ( data.collisionWidth > outerWidth ) {
-				// element is initially over the left side of within
-				if ( overLeft > 0 && overRight <= 0 ) {
-					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
-					position.left += overLeft - newOverRight;
-				// element is initially over right side of within
-				} else if ( overRight > 0 && overLeft <= 0 ) {
-					position.left = withinOffset;
-				// element is initially over both left and right sides of within
-				} else {
-					if ( overLeft > overRight ) {
-						position.left = withinOffset + outerWidth - data.collisionWidth;
-					} else {
-						position.left = withinOffset;
-					}
-				}
-			// too far left -> align with left edge
-			} else if ( overLeft > 0 ) {
-				position.left += overLeft;
-			// too far right -> align with right edge
-			} else if ( overRight > 0 ) {
-				position.left -= overRight;
-			// adjust based on position and margin
-			} else {
-				position.left = max( position.left - collisionPosLeft, position.left );
-			}
-		},
-		top: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
-				outerHeight = data.within.height,
-				collisionPosTop = position.top - data.collisionPosition.marginTop,
-				overTop = withinOffset - collisionPosTop,
-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
-				newOverBottom;
-
-			// element is taller than within
-			if ( data.collisionHeight > outerHeight ) {
-				// element is initially over the top of within
-				if ( overTop > 0 && overBottom <= 0 ) {
-					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
-					position.top += overTop - newOverBottom;
-				// element is initially over bottom of within
-				} else if ( overBottom > 0 && overTop <= 0 ) {
-					position.top = withinOffset;
-				// element is initially over both top and bottom of within
-				} else {
-					if ( overTop > overBottom ) {
-						position.top = withinOffset + outerHeight - data.collisionHeight;
-					} else {
-						position.top = withinOffset;
-					}
-				}
-			// too far up -> align with top
-			} else if ( overTop > 0 ) {
-				position.top += overTop;
-			// too far down -> align with bottom edge
-			} else if ( overBottom > 0 ) {
-				position.top -= overBottom;
-			// adjust based on position and margin
-			} else {
-				position.top = max( position.top - collisionPosTop, position.top );
-			}
-		}
-	},
-	flip: {
-		left: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.offset.left + within.scrollLeft,
-				outerWidth = within.width,
-				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
-				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
-				overLeft = collisionPosLeft - offsetLeft,
-				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
-				myOffset = data.my[ 0 ] === "left" ?
-					-data.elemWidth :
-					data.my[ 0 ] === "right" ?
-						data.elemWidth :
-						0,
-				atOffset = data.at[ 0 ] === "left" ?
-					data.targetWidth :
-					data.at[ 0 ] === "right" ?
-						-data.targetWidth :
-						0,
-				offset = -2 * data.offset[ 0 ],
-				newOverRight,
-				newOverLeft;
-
-			if ( overLeft < 0 ) {
-				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
-				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
-					position.left += myOffset + atOffset + offset;
-				}
-			} else if ( overRight > 0 ) {
-				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
-				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
-					position.left += myOffset + atOffset + offset;
-				}
-			}
-		},
-		top: function( position, data ) {
-			var within = data.within,
-				withinOffset = within.offset.top + within.scrollTop,
-				outerHeight = within.height,
-				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
-				collisionPosTop = position.top - data.collisionPosition.marginTop,
-				overTop = collisionPosTop - offsetTop,
-				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
-				top = data.my[ 1 ] === "top",
-				myOffset = top ?
-					-data.elemHeight :
-					data.my[ 1 ] === "bottom" ?
-						data.elemHeight :
-						0,
-				atOffset = data.at[ 1 ] === "top" ?
-					data.targetHeight :
-					data.at[ 1 ] === "bottom" ?
-						-data.targetHeight :
-						0,
-				offset = -2 * data.offset[ 1 ],
-				newOverTop,
-				newOverBottom;
-			if ( overTop < 0 ) {
-				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
-				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
-					position.top += myOffset + atOffset + offset;
-				}
-			} else if ( overBottom > 0 ) {
-				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
-				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
-					position.top += myOffset + atOffset + offset;
-				}
-			}
-		}
-	},
-	flipfit: {
-		left: function() {
-			$.ui.position.flip.left.apply( this, arguments );
-			$.ui.position.fit.left.apply( this, arguments );
-		},
-		top: function() {
-			$.ui.position.flip.top.apply( this, arguments );
-			$.ui.position.fit.top.apply( this, arguments );
-		}
-	}
-};
-
-// fraction support test
-(function() {
-	var testElement, testElementParent, testElementStyle, offsetLeft, i,
-		body = document.getElementsByTagName( "body" )[ 0 ],
-		div = document.createElement( "div" );
-
-	//Create a "fake body" for testing based on method used in jQuery.support
-	testElement = document.createElement( body ? "div" : "body" );
-	testElementStyle = {
-		visibility: "hidden",
-		width: 0,
-		height: 0,
-		border: 0,
-		margin: 0,
-		background: "none"
-	};
-	if ( body ) {
-		$.extend( testElementStyle, {
-			position: "absolute",
-			left: "-1000px",
-			top: "-1000px"
-		});
-	}
-	for ( i in testElementStyle ) {
-		testElement.style[ i ] = testElementStyle[ i ];
-	}
-	testElement.appendChild( div );
-	testElementParent = body || document.documentElement;
-	testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
-	div.style.cssText = "position: absolute; left: 10.7432222px;";
-
-	offsetLeft = $( div ).offset().left;
-	supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
-
-	testElement.innerHTML = "";
-	testElementParent.removeChild( testElement );
-})();
-
-})();
-
-var position = $.ui.position;
-
-
-/*!
- * jQuery UI Draggable 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/draggable/
- */
-
-
-$.widget("ui.draggable", $.ui.mouse, {
-	version: "1.11.4",
-	widgetEventPrefix: "drag",
-	options: {
-		addClasses: true,
-		appendTo: "parent",
-		axis: false,
-		connectToSortable: false,
-		containment: false,
-		cursor: "auto",
-		cursorAt: false,
-		grid: false,
-		handle: false,
-		helper: "original",
-		iframeFix: false,
-		opacity: false,
-		refreshPositions: false,
-		revert: false,
-		revertDuration: 500,
-		scope: "default",
-		scroll: true,
-		scrollSensitivity: 20,
-		scrollSpeed: 20,
-		snap: false,
-		snapMode: "both",
-		snapTolerance: 20,
-		stack: false,
-		zIndex: false,
-
-		// callbacks
-		drag: null,
-		start: null,
-		stop: null
-	},
-	_create: function() {
-
-		if ( this.options.helper === "original" ) {
-			this._setPositionRelative();
-		}
-		if (this.options.addClasses){
-			this.element.addClass("ui-draggable");
-		}
-		if (this.options.disabled){
-			this.element.addClass("ui-draggable-disabled");
-		}
-		this._setHandleClassName();
-
-		this._mouseInit();
-	},
-
-	_setOption: function( key, value ) {
-		this._super( key, value );
-		if ( key === "handle" ) {
-			this._removeHandleClassName();
-			this._setHandleClassName();
-		}
-	},
-
-	_destroy: function() {
-		if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
-			this.destroyOnClear = true;
-			return;
-		}
-		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
-		this._removeHandleClassName();
-		this._mouseDestroy();
-	},
-
-	_mouseCapture: function(event) {
-		var o = this.options;
-
-		this._blurActiveElement( event );
-
-		// among others, prevent a drag on a resizable-handle
-		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
-			return false;
-		}
-
-		//Quit if we're not on a valid handle
-		this.handle = this._getHandle(event);
-		if (!this.handle) {
-			return false;
-		}
-
-		this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
-
-		return true;
-
-	},
-
-	_blockFrames: function( selector ) {
-		this.iframeBlocks = this.document.find( selector ).map(function() {
-			var iframe = $( this );
-
-			return $( "<div>" )
-				.css( "position", "absolute" )
-				.appendTo( iframe.parent() )
-				.outerWidth( iframe.outerWidth() )
-				.outerHeight( iframe.outerHeight() )
-				.offset( iframe.offset() )[ 0 ];
-		});
-	},
-
-	_unblockFrames: function() {
-		if ( this.iframeBlocks ) {
-			this.iframeBlocks.remove();
-			delete this.iframeBlocks;
-		}
-	},
-
-	_blurActiveElement: function( event ) {
-		var document = this.document[ 0 ];
-
-		// Only need to blur if the event occurred on the draggable itself, see #10527
-		if ( !this.handleElement.is( event.target ) ) {
-			return;
-		}
-
-		// support: IE9
-		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
-		try {
-
-			// Support: IE9, IE10
-			// If the <body> is blurred, IE will switch windows, see #9520
-			if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
-
-				// Blur any element that currently has focus, see #4261
-				$( document.activeElement ).blur();
-			}
-		} catch ( error ) {}
-	},
-
-	_mouseStart: function(event) {
-
-		var o = this.options;
-
-		//Create and append the visible helper
-		this.helper = this._createHelper(event);
-
-		this.helper.addClass("ui-draggable-dragging");
-
-		//Cache the helper size
-		this._cacheHelperProportions();
-
-		//If ddmanager is used for droppables, set the global draggable
-		if ($.ui.ddmanager) {
-			$.ui.ddmanager.current = this;
-		}
-
-		/*
-		 * - Position generation -
-		 * This block generates everything position related - it's the core of draggables.
-		 */
-
-		//Cache the margins of the original element
-		this._cacheMargins();
-
-		//Store the helper's css position
-		this.cssPosition = this.helper.css( "position" );
-		this.scrollParent = this.helper.scrollParent( true );
-		this.offsetParent = this.helper.offsetParent();
-		this.hasFixedAncestor = this.helper.parents().filter(function() {
-				return $( this ).css( "position" ) === "fixed";
-			}).length > 0;
-
-		//The element's absolute position on the page minus margins
-		this.positionAbs = this.element.offset();
-		this._refreshOffsets( event );
-
-		//Generate the original position
-		this.originalPosition = this.position = this._generatePosition( event, false );
-		this.originalPageX = event.pageX;
-		this.originalPageY = event.pageY;
-
-		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
-		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
-
-		//Set a containment if given in the options
-		this._setContainment();
-
-		//Trigger event + callbacks
-		if (this._trigger("start", event) === false) {
-			this._clear();
-			return false;
-		}
-
-		//Recache the helper size
-		this._cacheHelperProportions();
-
-		//Prepare the droppable offsets
-		if ($.ui.ddmanager && !o.dropBehaviour) {
-			$.ui.ddmanager.prepareOffsets(this, event);
-		}
-
-		// Reset helper's right/bottom css if they're set and set explicit width/height instead
-		// as this prevents resizing of elements with right/bottom set (see #7772)
-		this._normalizeRightBottom();
-
-		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
-
-		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
-		if ( $.ui.ddmanager ) {
-			$.ui.ddmanager.dragStart(this, event);
-		}
-
-		return true;
-	},
-
-	_refreshOffsets: function( event ) {
-		this.offset = {
-			top: this.positionAbs.top - this.margins.top,
-			left: this.positionAbs.left - this.margins.left,
-			scroll: false,
-			parent: this._getParentOffset(),
-			relative: this._getRelativeOffset()
-		};
-
-		this.offset.click = {
-			left: event.pageX - this.offset.left,
-			top: event.pageY - this.offset.top
-		};
-	},
-
-	_mouseDrag: function(event, noPropagation) {
-		// reset any necessary cached properties (see #5009)
-		if ( this.hasFixedAncestor ) {
-			this.offset.parent = this._getParentOffset();
-		}
-
-		//Compute the helpers position
-		this.position = this._generatePosition( event, true );
-		this.positionAbs = this._convertPositionTo("absolute");
-
-		//Call plugins and callbacks and use the resulting position if something is returned
-		if (!noPropagation) {
-			var ui = this._uiHash();
-			if (this._trigger("drag", event, ui) === false) {
-				this._mouseUp({});
-				return false;
-			}
-			this.position = ui.position;
-		}
-
-		this.helper[ 0 ].style.left = this.position.left + "px";
-		this.helper[ 0 ].style.top = this.position.top + "px";
-
-		if ($.ui.ddmanager) {
-			$.ui.ddmanager.drag(this, event);
-		}
-
-		return false;
-	},
-
-	_mouseStop: function(event) {
-
-		//If we are using droppables, inform the manager about the drop
-		var that = this,
-			dropped = false;
-		if ($.ui.ddmanager && !this.options.dropBehaviour) {
-			dropped = $.ui.ddmanager.drop(this, event);
-		}
-
-		//if a drop comes from outside (a sortable)
-		if (this.dropped) {
-			dropped = this.dropped;
-			this.dropped = false;
-		}
-
-		if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
-			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
-				if (that._trigger("stop", event) !== false) {
-					that._clear();
-				}
-			});
-		} else {
-			if (this._trigger("stop", event) !== false) {
-				this._clear();
-			}
-		}
-
-		return false;
-	},
-
-	_mouseUp: function( event ) {
-		this._unblockFrames();
-
-		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
-		if ( $.ui.ddmanager ) {
-			$.ui.ddmanager.dragStop(this, event);
-		}
-
-		// Only need to focus if the event occurred on the draggable itself, see #10527
-		if ( this.handleElement.is( event.target ) ) {
-			// The interaction is over; whether or not the click resulted in a drag, focus the element
-			this.element.focus();
-		}
-
-		return $.ui.mouse.prototype._mouseUp.call(this, event);
-	},
-
-	cancel: function() {
-
-		if (this.helper.is(".ui-draggable-dragging")) {
-			this._mouseUp({});
-		} else {
-			this._clear();
-		}
-
-		return this;
-
-	},
-
-	_getHandle: function(event) {
-		return this.options.handle ?
-			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
-			true;
-	},
-
-	_setHandleClassName: function() {
-		this.handleElement = this.options.handle ?
-			this.element.find( this.options.handle ) : this.element;
-		this.handleElement.addClass( "ui-draggable-handle" );
-	},
-
-	_removeHandleClassName: function() {
-		this.handleElement.removeClass( "ui-draggable-handle" );
-	},
-
-	_createHelper: function(event) {
-
-		var o = this.options,
-			helperIsFunction = $.isFunction( o.helper ),
-			helper = helperIsFunction ?
-				$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
-				( o.helper === "clone" ?
-					this.element.clone().removeAttr( "id" ) :
-					this.element );
-
-		if (!helper.parents("body").length) {
-			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
-		}
-
-		// http://bugs.jqueryui.com/ticket/9446
-		// a helper function can return the original element
-		// which wouldn't have been set to relative in _create
-		if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
-			this._setPositionRelative();
-		}
-
-		if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
-			helper.css("position", "absolute");
-		}
-
-		return helper;
-
-	},
-
-	_setPositionRelative: function() {
-		if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
-			this.element[ 0 ].style.position = "relative";
-		}
-	},
-
-	_adjustOffsetFromHelper: function(obj) {
-		if (typeof obj === "string") {
-			obj = obj.split(" ");
-		}
-		if ($.isArray(obj)) {
-			obj = { left: +obj[0], top: +obj[1] || 0 };
-		}
-		if ("left" in obj) {
-			this.offset.click.left = obj.left + this.margins.left;
-		}
-		if ("right" in obj) {
-			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
-		}
-		if ("top" in obj) {
-			this.offset.click.top = obj.top + this.margins.top;
-		}
-		if ("bottom" in obj) {
-			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
-		}
-	},
-
-	_isRootNode: function( element ) {
-		return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
-	},
-
-	_getParentOffset: function() {
-
-		//Get the offsetParent and cache its position
-		var po = this.offsetParent.offset(),
-			document = this.document[ 0 ];
-
-		// This is a special case where we need to modify a offset calculated on start, since the following happened:
-		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
-		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
-		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
-		if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
-			po.left += this.scrollParent.scrollLeft();
-			po.top += this.scrollParent.scrollTop();
-		}
-
-		if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
-			po = { top: 0, left: 0 };
-		}
-
-		return {
-			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
-			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
-		};
-
-	},
-
-	_getRelativeOffset: function() {
-		if ( this.cssPosition !== "relative" ) {
-			return { top: 0, left: 0 };
-		}
-
-		var p = this.element.position(),
-			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
-
-		return {
-			top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
-			left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
-		};
-
-	},
-
-	_cacheMargins: function() {
-		this.margins = {
-			left: (parseInt(this.element.css("marginLeft"), 10) || 0),
-			top: (parseInt(this.element.css("marginTop"), 10) || 0),
-			right: (parseInt(this.element.css("marginRight"), 10) || 0),
-			bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
-		};
-	},
-
-	_cacheHelperProportions: function() {
-		this.helperProportions = {
-			width: this.helper.outerWidth(),
-			height: this.helper.outerHeight()
-		};
-	},
-
-	_setContainment: function() {
-
-		var isUserScrollable, c, ce,
-			o = this.options,
-			document = this.document[ 0 ];
-
-		this.relativeContainer = null;
-
-		if ( !o.containment ) {
-			this.containment = null;
-			return;
-		}
-
-		if ( o.containment === "window" ) {
-			this.containment = [
-				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
-				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
-				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
-				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
-			];
-			return;
-		}
-
-		if ( o.containment === "document") {
-			this.containment = [
-				0,
-				0,
-				$( document ).width() - this.helperProportions.width - this.margins.left,
-				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
-			];
-			return;
-		}
-
-		if ( o.containment.constructor === Array ) {
-			this.containment = o.containment;
-			return;
-		}
-
-		if ( o.containment === "parent" ) {
-			o.containment = this.helper[ 0 ].parentNode;
-		}
-
-		c = $( o.containment );
-		ce = c[ 0 ];
-
-		if ( !ce ) {
-			return;
-		}
-
-		isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
-
-		this.containment = [
-			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
-			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
-			( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
-				( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
-				( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
-				this.helperProportions.width -
-				this.margins.left -
-				this.margins.right,
-			( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
-				( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
-				( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
-				this.helperProportions.height -
-				this.margins.top -
-				this.margins.bottom
-		];
-		this.relativeContainer = c;
-	},
-
-	_convertPositionTo: function(d, pos) {
-
-		if (!pos) {
-			pos = this.position;
-		}
-
-		var mod = d === "absolute" ? 1 : -1,
-			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
-
-		return {
-			top: (
-				pos.top	+																// The absolute mouse position
-				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
-				( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
-			),
-			left: (
-				pos.left +																// The absolute mouse position
-				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
-				( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
-			)
-		};
-
-	},
-
-	_generatePosition: function( event, constrainPosition ) {
-
-		var containment, co, top, left,
-			o = this.options,
-			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
-			pageX = event.pageX,
-			pageY = event.pageY;
-
-		// Cache the scroll
-		if ( !scrollIsRootNode || !this.offset.scroll ) {
-			this.offset.scroll = {
-				top: this.scrollParent.scrollTop(),
-				left: this.scrollParent.scrollLeft()
-			};
-		}
-
-		/*
-		 * - Position constraining -
-		 * Constrain the position to a mix of grid, containment.
-		 */
-
-		// If we are not dragging yet, we won't check for options
-		if ( constrainPosition ) {
-			if ( this.containment ) {
-				if ( this.relativeContainer ){
-					co = this.relativeContainer.offset();
-					containment = [
-						this.containment[ 0 ] + co.left,
-						this.containment[ 1 ] + co.top,
-						this.containment[ 2 ] + co.left,
-						this.containment[ 3 ] + co.top
-					];
-				} else {
-					containment = this.containment;
-				}
-
-				if (event.pageX - this.offset.click.left < containment[0]) {
-					pageX = containment[0] + this.offset.click.left;
-				}
-				if (event.pageY - this.offset.click.top < containment[1]) {
-					pageY = containment[1] + this.offset.click.top;
-				}
-				if (event.pageX - this.offset.click.left > containment[2]) {
-					pageX = containment[2] + this.offset.click.left;
-				}
-				if (event.pageY - this.offset.click.top > containment[3]) {
-					pageY = containment[3] + this.offset.click.top;
-				}
-			}
-
-			if (o.grid) {
-				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
-				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
-				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
-
-				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
-				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
-			}
-
-			if ( o.axis === "y" ) {
-				pageX = this.originalPageX;
-			}
-
-			if ( o.axis === "x" ) {
-				pageY = this.originalPageY;
-			}
-		}
-
-		return {
-			top: (
-				pageY -																	// The absolute mouse position
-				this.offset.click.top	-												// Click offset (relative to the element)
-				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
-				( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
-			),
-			left: (
-				pageX -																	// The absolute mouse position
-				this.offset.click.left -												// Click offset (relative to the element)
-				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
-				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
-				( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
-			)
-		};
-
-	},
-
-	_clear: function() {
-		this.helper.removeClass("ui-draggable-dragging");
-		if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
-			this.helper.remove();
-		}
-		this.helper = null;
-		this.cancelHelperRemoval = false;
-		if ( this.destroyOnClear ) {
-			this.destroy();
-		}
-	},
-
-	_normalizeRightBottom: function() {
-		if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
-			this.helper.width( this.helper.width() );
-			this.helper.css( "right", "auto" );
-		}
-		if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
-			this.helper.height( this.helper.height() );
-			this.helper.css( "bottom", "auto" );
-		}
-	},
-
-	// From now on bulk stuff - mainly helpers
-
-	_trigger: function( type, event, ui ) {
-		ui = ui || this._uiHash();
-		$.ui.plugin.call( this, type, [ event, ui, this ], true );
-
-		// Absolute position and offset (see #6884 ) have to be recalculated after plugins
-		if ( /^(drag|start|stop)/.test( type ) ) {
-			this.positionAbs = this._convertPositionTo( "absolute" );
-			ui.offset = this.positionAbs;
-		}
-		return $.Widget.prototype._trigger.call( this, type, event, ui );
-	},
-
-	plugins: {},
-
-	_uiHash: function() {
-		return {
-			helper: this.helper,
-			position: this.position,
-			originalPosition: this.originalPosition,
-			offset: this.positionAbs
-		};
-	}
-
-});
-
-$.ui.plugin.add( "draggable", "connectToSortable", {
-	start: function( event, ui, draggable ) {
-		var uiSortable = $.extend( {}, ui, {
-			item: draggable.element
-		});
-
-		draggable.sortables = [];
-		$( draggable.options.connectToSortable ).each(function() {
-			var sortable = $( this ).sortable( "instance" );
-
-			if ( sortable && !sortable.options.disabled ) {
-				draggable.sortables.push( sortable );
-
-				// refreshPositions is called at drag start to refresh the containerCache
-				// which is used in drag. This ensures it's initialized and synchronized
-				// with any changes that might have happened on the page since initialization.
-				sortable.refreshPositions();
-				sortable._trigger("activate", event, uiSortable);
-			}
-		});
-	},
-	stop: function( event, ui, draggable ) {
-		var uiSortable = $.extend( {}, ui, {
-			item: draggable.element
-		});
-
-		draggable.cancelHelperRemoval = false;
-
-		$.each( draggable.sortables, function() {
-			var sortable = this;
-
-			if ( sortable.isOver ) {
-				sortable.isOver = 0;
-
-				// Allow this sortable to handle removing the helper
-				draggable.cancelHelperRemoval = true;
-				sortable.cancelHelperRemoval = false;
-
-				// Use _storedCSS To restore properties in the sortable,
-				// as this also handles revert (#9675) since the draggable
-				// may have modified them in unexpected ways (#8809)
-				sortable._storedCSS = {
-					position: sortable.placeholder.css( "position" ),
-					top: sortable.placeholder.css( "top" ),
-					left: sortable.placeholder.css( "left" )
-				};
-
-				sortable._mouseStop(event);
-
-				// Once drag has ended, the sortable should return to using
-				// its original helper, not the shared helper from draggable
-				sortable.options.helper = sortable.options._helper;
-			} else {
-				// Prevent this Sortable from removing the helper.
-				// However, don't set the draggable to remove the helper
-				// either as another connected Sortable may yet handle the removal.
-				sortable.cancelHelperRemoval = true;
-
-				sortable._trigger( "deactivate", event, uiSortable );
-			}
-		});
-	},
-	drag: function( event, ui, draggable ) {
-		$.each( draggable.sortables, function() {
-			var innermostIntersecting = false,
-				sortable = this;
-
-			// Copy over variables that sortable's _intersectsWith uses
-			sortable.positionAbs = draggable.positionAbs;
-			sortable.helperProportions = draggable.helperProportions;
-			sortable.offset.click = draggable.offset.click;
-
-			if ( sortable._intersectsWith( sortable.containerCache ) ) {
-				innermostIntersecting = true;
-
-				$.each( draggable.sortables, function() {
-					// Copy over variables that sortable's _intersectsWith uses
-					this.positionAbs = draggable.positionAbs;
-					this.helperProportions = draggable.helperProportions;
-					this.offset.click = draggable.offset.click;
-
-					if ( this !== sortable &&
-							this._intersectsWith( this.containerCache ) &&
-							$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
-						innermostIntersecting = false;
-					}
-
-					return innermostIntersecting;
-				});
-			}
-
-			if ( innermostIntersecting ) {
-				// If it intersects, we use a little isOver variable and set it once,
-				// so that the move-in stuff gets fired only once.
-				if ( !sortable.isOver ) {
-					sortable.isOver = 1;
-
-					// Store draggable's parent in case we need to reappend to it later.
-					draggable._parent = ui.helper.parent();
-
-					sortable.currentItem = ui.helper
-						.appendTo( sortable.element )
-						.data( "ui-sortable-item", true );
-
-					// Store helper option to later restore it
-					sortable.options._helper = sortable.options.helper;
-
-					sortable.options.helper = function() {
-						return ui.helper[ 0 ];
-					};
-
-					// Fire the start events of the sortable with our passed browser event,
-					// and our own helper (so it doesn't create a new one)
-					event.target = sortable.currentItem[ 0 ];
-					sortable._mouseCapture( event, true );
-					sortable._mouseStart( event, true, true );
-
-					// Because the browser event is way off the new appended portlet,
-					// modify necessary variables to reflect the changes
-					sortable.offset.click.top = draggable.offset.click.top;
-					sortable.offset.click.left = draggable.offset.click.left;
-					sortable.offset.parent.left -= draggable.offset.parent.left -
-						sortable.offset.parent.left;
-					sortable.offset.parent.top -= draggable.offset.parent.top -
-						sortable.offset.parent.top;
-
-					draggable._trigger( "toSortable", event );
-
-					// Inform draggable that the helper is in a valid drop zone,
-					// used solely in the revert option to handle "valid/invalid".
-					draggable.dropped = sortable.element;
-
-					// Need to refreshPositions of all sortables in the case that
-					// adding to one sortable changes the location of the other sortables (#9675)
-					$.each( draggable.sortables, function() {
-						this.refreshPositions();
-					});
-
-					// hack so receive/update callbacks work (mostly)
-					draggable.currentItem = draggable.element;
-					sortable.fromOutside = draggable;
-				}
-
-				if ( sortable.currentItem ) {
-					sortable._mouseDrag( event );
-					// Copy the sortable's position because the draggable's can potentially reflect
-					// a relative position, while sortable is always absolute, which the dragged
-					// element has now become. (#8809)
-					ui.position = sortable.position;
-				}
-			} else {
-				// If it doesn't intersect with the sortable, and it intersected before,
-				// we fake the drag stop of the sortable, but make sure it doesn't remove
-				// the helper by using cancelHelperRemoval.
-				if ( sortable.isOver ) {
-
-					sortable.isOver = 0;
-					sortable.cancelHelperRemoval = true;
-
-					// Calling sortable's mouseStop would trigger a revert,
-					// so revert must be temporarily false until after mouseStop is called.
-					sortable.options._revert = sortable.options.revert;
-					sortable.options.revert = false;
-
-					sortable._trigger( "out", event, sortable._uiHash( sortable ) );
-					sortable._mouseStop( event, true );
-
-					// restore sortable behaviors that were modfied
-					// when the draggable entered the sortable area (#9481)
-					sortable.options.revert = sortable.options._revert;
-					sortable.options.helper = sortable.options._helper;
-
-					if ( sortable.placeholder ) {
-						sortable.placeholder.remove();
-					}
-
-					// Restore and recalculate the draggable's offset considering the sortable
-					// may have modified them in unexpected ways. (#8809, #10669)
-					ui.helper.appendTo( draggable._parent );
-					draggable._refreshOffsets( event );
-					ui.position = draggable._generatePosition( event, true );
-
-					draggable._trigger( "fromSortable", event );
-
-					// Inform draggable that the helper is no longer in a valid drop zone
-					draggable.dropped = false;
-
-					// Need to refreshPositions of all sortables just in case removing
-					// from one sortable changes the location of other sortables (#9675)
-					$.each( draggable.sortables, function() {
-						this.refreshPositions();
-					});
-				}
-			}
-		});
-	}
-});
-
-$.ui.plugin.add("draggable", "cursor", {
-	start: function( event, ui, instance ) {
-		var t = $( "body" ),
-			o = instance.options;
-
-		if (t.css("cursor")) {
-			o._cursor = t.css("cursor");
-		}
-		t.css("cursor", o.cursor);
-	},
-	stop: function( event, ui, instance ) {
-		var o = instance.options;
-		if (o._cursor) {
-			$("body").css("cursor", o._cursor);
-		}
-	}
-});
-
-$.ui.plugin.add("draggable", "opacity", {
-	start: function( event, ui, instance ) {
-		var t = $( ui.helper ),
-			o = instance.options;
-		if (t.css("opacity")) {
-			o._opacity = t.css("opacity");
-		}
-		t.css("opacity", o.opacity);
-	},
-	stop: function( event, ui, instance ) {
-		var o = instance.options;
-		if (o._opacity) {
-			$(ui.helper).css("opacity", o._opacity);
-		}
-	}
-});
-
-$.ui.plugin.add("draggable", "scroll", {
-	start: function( event, ui, i ) {
-		if ( !i.scrollParentNotHidden ) {
-			i.scrollParentNotHidden = i.helper.scrollParent( false );
-		}
-
-		if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
-			i.overflowOffset = i.scrollParentNotHidden.offset();
-		}
-	},
-	drag: function( event, ui, i  ) {
-
-		var o = i.options,
-			scrolled = false,
-			scrollParent = i.scrollParentNotHidden[ 0 ],
-			document = i.document[ 0 ];
-
-		if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
-			if ( !o.axis || o.axis !== "x" ) {
-				if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
-					scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
-				} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
-					scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
-				}
-			}
-
-			if ( !o.axis || o.axis !== "y" ) {
-				if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
-					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
-				} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
-					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
-				}
-			}
-
-		} else {
-
-			if (!o.axis || o.axis !== "x") {
-				if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
-				} else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
-				}
-			}
-
-			if (!o.axis || o.axis !== "y") {
-				if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
-				} else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
-					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
-				}
-			}
-
-		}
-
-		if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
-			$.ui.ddmanager.prepareOffsets(i, event);
-		}
-
-	}
-});
-
-$.ui.plugin.add("draggable", "snap", {
-	start: function( event, ui, i ) {
-
-		var o = i.options;
-
-		i.snapElements = [];
-
-		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
-			var $t = $(this),
-				$o = $t.offset();
-			if (this !== i.element[0]) {
-				i.snapElements.push({
-					item: this,
-					width: $t.outerWidth(), height: $t.outerHeight(),
-					top: $o.top, left: $o.left
-				});
-			}
-		});
-
-	},
-	drag: function( event, ui, inst ) {
-
-		var ts, bs, ls, rs, l, r, t, b, i, first,
-			o = inst.options,
-			d = o.snapTolerance,
-			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
-			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
-
-		for (i = inst.snapElements.length - 1; i >= 0; i--){
-
-			l = inst.snapElements[i].left - inst.margins.left;
-			r = l + inst.snapElements[i].width;
-			t = inst.snapElements[i].top - inst.margins.top;
-			b = t + inst.snapElements[i].height;
-
-			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
-				if (inst.snapElements[i].snapping) {
-					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
-				}
-				inst.snapElements[i].snapping = false;
-				continue;
-			}
-
-			if (o.snapMode !== "inner") {
-				ts = Math.abs(t - y2) <= d;
-				bs = Math.abs(b - y1) <= d;
-				ls = Math.abs(l - x2) <= d;
-				rs = Math.abs(r - x1) <= d;
-				if (ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
-				}
-				if (bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
-				}
-				if (ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
-				}
-				if (rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
-				}
-			}
-
-			first = (ts || bs || ls || rs);
-
-			if (o.snapMode !== "outer") {
-				ts = Math.abs(t - y1) <= d;
-				bs = Math.abs(b - y2) <= d;
-				ls = Math.abs(l - x1) <= d;
-				rs = Math.abs(r - x2) <= d;
-				if (ts) {
-					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
-				}
-				if (bs) {
-					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
-				}
-				if (ls) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
-				}
-				if (rs) {
-					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
-				}
-			}
-
-			if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
-				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
-			}
-			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
-
-		}
-
-	}
-});
-
-$.ui.plugin.add("draggable", "stack", {
-	start: function( event, ui, instance ) {
-		var min,
-			o = instance.options,
-			group = $.makeArray($(o.stack)).sort(function(a, b) {
-				return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
-			});
-
-		if (!group.length) { return; }
-
-		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
-		$(group).each(function(i) {
-			$(this).css("zIndex", min + i);
-		});
-		this.css("zIndex", (min + group.length));
-	}
-});
-
-$.ui.plugin.add("draggable", "zIndex", {
-	start: function( event, ui, instance ) {
-		var t = $( ui.helper ),
-			o = instance.options;
-
-		if (t.css("zIndex")) {
-			o._zIndex = t.css("zIndex");
-		}
-		t.css("zIndex", o.zIndex);
-	},
-	stop: function( event, ui, instance ) {
-		var o = instance.options;
-
-		if (o._zIndex) {
-			$(ui.helper).css("zIndex", o._zIndex);
-		}
-	}
-});
-
-var draggable = $.ui.draggable;
-
-
-/*!
- * jQuery UI Droppable 1.11.4
- * http://jqueryui.com
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * http://api.jqueryui.com/droppable/
- */
-
-
-$.widget( "ui.droppable", {
-	version: "1.11.4",
-	widgetEventPrefix: "drop",
-	options: {
-		accept: "*",
-		activeClass: false,
-		addClasses: true,
-		greedy: false,
-		hoverClass: false,
-		scope: "default",
-		tolerance: "intersect",
-
-		// callbacks
-		activate: null,
-		deactivate: null,
-		drop: null,
-		out: null,
-		over: null
-	},
-	_create: function() {
-
-		var proportions,
-			o = this.options,
-			accept = o.accept;
-
-		this.isover = false;
-		this.isout = true;
-
-		this.accept = $.isFunction( accept ) ? accept : function( d ) {
-			return d.is( accept );
-		};
-
-		this.proportions = function( /* valueToWrite */ ) {
-			if ( arguments.length ) {
-				// Store the droppable's proportions
-				proportions = arguments[ 0 ];
-			} else {
-				// Retrieve or derive the droppable's proportions
-				return proportions ?
-					proportions :
-					proportions = {
-						width: this.element[ 0 ].offsetWidth,
-						height: this.element[ 0 ].offsetHeight
-					};
-			}
-		};
-
-		this._addToManager( o.scope );
-
-		o.addClasses && this.element.addClass( "ui-droppable" );
-
-	},
-
-	_addToManager: function( scope ) {
-		// Add the reference and positions to the manager
-		$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
-		$.ui.ddmanager.droppables[ scope ].push( this );
-	},
-
-	_splice: function( drop ) {
-		var i = 0;
-		for ( ; i < drop.length; i++ ) {
-			if ( drop[ i ] === this ) {
-				drop.splice( i, 1 );
-			}
-		}
-	},
-
-	_destroy: function() {
-		var drop = $.ui.ddmanager.droppables[ this.options.scope ];
-
-		this._splice( drop );
-
-		this.element.removeClass( "ui-droppable ui-droppable-disabled" );
-	},
-
-	_setOption: function( key, value ) {
-
-		if ( key === "accept" ) {
-			this.accept = $.isFunction( value ) ? value : function( d ) {
-				return d.is( value );
-			};
-		} else if ( key === "scope" ) {
-			var drop = $.ui.ddmanager.droppables[ this.options.scope ];
-
-			this._splice( drop );
-			this._addToManager( value );
-		}
-
-		this._super( key, value );
-	},
-
-	_activate: function( event ) {
-		var draggable = $.ui.ddmanager.current;
-		if ( this.options.activeClass ) {
-			this.element.addClass( this.options.activeClass );
-		}
-		if ( draggable ){
-			this._trigger( "activate", event, this.ui( draggable ) );
-		}
-	},
-
-	_deactivate: function( event ) {
-		var draggable = $.ui.ddmanager.current;
-		if ( this.options.activeClass ) {
-			this.element.removeClass( this.options.activeClass );
-		}
-		if ( draggable ){
-			this._trigger( "deactivate", event, this.ui( draggable ) );
-		}
-	},
-
-	_over: function( event ) {
-
-		var draggable = $.ui.ddmanager.current;
-
-		// Bail if draggable and droppable are same element
-		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
-			return;
-		}
-
-		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
-			if ( this.options.hoverClass ) {
-				this.element.addClass( this.options.hoverClass );
-			}
-			this._trigger( "over", event, this.ui( draggable ) );
-		}
-
-	},
-
-	_out: function( event ) {
-
-		var draggable = $.ui.ddmanager.current;
-
-		// Bail if draggable and droppable are same element
-		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
-			return;
-		}
-
-		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
-			if ( this.options.hoverClass ) {
-				this.element.removeClass( this.options.hoverClass );
-			}
-			this._trigger( "out", event, this.ui( draggable ) );
-		}
-
-	},
-
-	_drop: function( event, custom ) {
-
-		var draggable = custom || $.ui.ddmanager.current,
-			childrenIntersection = false;
-
-		// Bail if draggable and droppable are same element
-		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
-			return false;
-		}
-
-		this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
-			var inst = $( this ).droppable( "instance" );
-			if (
-				inst.options.greedy &&
-				!inst.options.disabled &&
-				inst.options.scope === draggable.options.scope &&
-				inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
-				$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
-			) { childrenIntersection = true; return false; }
-		});
-		if ( childrenIntersection ) {
-			return false;
-		}
-
-		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
-			if ( this.options.activeClass ) {
-				this.element.removeClass( this.options.activeClass );
-			}
-			if ( this.options.hoverClass ) {
-				this.element.removeClass( this.options.hoverClass );
-			}
-			this._trigger( "drop", event, this.ui( draggable ) );
-			return this.element;
-		}
-
-		return false;
-
-	},
-
-	ui: function( c ) {
-		return {
-			draggable: ( c.currentItem || c.element ),
-			helper: c.helper,
-			position: c.position,
-			offset: c.positionAbs
-		};
-	}
-
-});
-
-$.ui.intersect = (function() {
-	function isOverAxis( x, reference, size ) {
-		return ( x >= reference ) && ( x < ( reference + size ) );
-	}
-
-	return function( draggable, droppable, toleranceMode, event ) {
-
-		if ( !droppable.offset ) {
-			return false;
-		}
-
-		var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
-			y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
-			x2 = x1 + draggable.helperProportions.width,
-			y2 = y1 + draggable.helperProportions.height,
-			l = droppable.offset.left,
-			t = droppable.offset.top,
-			r = l + droppable.proportions().width,
-			b = t + droppable.proportions().height;
-
-		switch ( toleranceMode ) {
-		case "fit":
-			return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
-		case "intersect":
-			return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
-				x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
-				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
-				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
-		case "pointer":
-			return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
-		case "touch":
-			return (
-				( y1 >= t && y1 <= b ) || // Top edge touching
-				( y2 >= t && y2 <= b ) || // Bottom edge touching
-				( y1 < t && y2 > b ) // Surrounded vertically
-			) && (
-				( x1 >= l && x1 <= r ) || // Left edge touching
-				( x2 >= l && x2 <

<TRUNCATED>

[13/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGraphInfo.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGraphInfo.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGraphInfo.js
deleted file mode 100644
index 272e557..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGraphInfo.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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',
-	'model_bases/VGraphInfoBase',
-	'utils/Enums'
-],function(require,VGraphInfoBase,Enums){
-	'use strict';	
-
-	var VGraphInfo = VGraphInfoBase.extend(
-	/** @lends VLog.prototype */
-	{
-		/**
-		 * VLogBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VGraphInfo';
-			this.bindErrorEvents();
-		},
-
-		/** This models toString() */
-		toString : function(){
-			return this.get('name');
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VGraphInfo;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGroup.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGroup.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGroup.js
deleted file mode 100644
index ffcb273..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VGroup.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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',
-	'model_bases/VGroupBase',
-	'utils/Enums'
-],function(require,VGroupBase,Enums){
-	'use strict';	
-
-	var VGroup = VGroupBase.extend(
-	/** @lends VGroup.prototype */
-	{
-		/**
-		 * VGroupBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VGroup';
-			this.bindErrorEvents();
-		},
-
-		/** This models toString() */
-		toString : function(){
-			return this.get('message');
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VGroup;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLog.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLog.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLog.js
deleted file mode 100644
index c929c3b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLog.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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',
-	'model_bases/VLogBase',
-	'utils/Enums'
-],function(require,VLogBase,Enums){	
-	'use strict';	
-
-	var VLog = VLogBase.extend(
-	/** @lends VLog.prototype */
-	{
-		/**
-		 * VLogBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VLog';
-			this.bindErrorEvents();
-			this.toView();
-		},
-
-		toView : function(){
-			if(!_.isUndefined(this.get('isVisible'))){
-				var visible = (this.get('isVisible') == Enums.VisibilityStatus.STATUS_VISIBLE.value);
-				this.set('isVisible', visible);
-			}
-		},
-
-		toServer : function(){
-			var visible = this.get('isVisible') ? Enums.VisibilityStatus.STATUS_VISIBLE.value : Enums.VisibilityStatus.STATUS_HIDDEN.value;
-			this.set('isVisible', visible);
-		},
-		
-		/** This models toString() */
-		toString : function(){
-			return this.get('name');
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VLog;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLogLevel.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLogLevel.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLogLevel.js
deleted file mode 100644
index 1498920..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VLogLevel.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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',
-	'model_bases/VLogLevelBase',
-	'utils/Enums'
-],function(require,VLogLevelBase,Enums){
-	'use strict';	
-
-	var VLogLevel = VLogLevelBase.extend(
-	/** @lends VLogLevel.prototype */
-	{
-		/**
-		 * VLogLevelBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VLogLevel';
-			this.bindErrorEvents();
-		},
-	}, {
-		// static class members
-	});
-
-    return VLogLevel;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNameValue.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNameValue.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNameValue.js
deleted file mode 100644
index 6739bfc..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNameValue.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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',
-	'model_bases/VNameValueBase',
-	'utils/Enums'
-],function(require,VNameValueBase,Enums){
-	'use strict';	
-
-	var VNameValue = VNameValueBase.extend(
-	/** @lends VNameValue.prototype */
-	{
-		/**
-		 * VNameValueBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VNameValue';
-			this.bindErrorEvents();
-		}
-	}, {
-		// static class members
-	});
-
-    return VNameValue;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNode.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNode.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNode.js
deleted file mode 100644
index 7d8c2ad..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VNode.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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',
-	'model_bases/VNodeBase',
-	'utils/Enums'
-],function(require,VNodeBase,Enums){
-	'use strict';	
-
-
-	var VNode = VNodeBase.extend(
-	/** @lends VNodel.prototype */
-	{
-		/**
-		 * VNodeBase initialize method
-		 * @augments FSBaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VNode';
-			this.bindErrorEvents();
-		},
-	}, {
-		// static class members
-	});
-
-    return VNode;
-	
-});
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VUserFilter.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VUserFilter.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VUserFilter.js
deleted file mode 100644
index fec6e8c..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/models/VUserFilter.js
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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',
-	'model_bases/VUserFilterBase',
-	'utils/Enums'
-],function(require,VUserFilterBase,Enums){
-	'use strict';
-
-	var VUserFilter = VUserFilterBase.extend(
-	/** @lends VUserFilter.prototype */
-	{
-		/**
-		 * VUserFilterBase initialize method
-		 * @augments BaseModel
-		 * @constructs
-		 */
-		initialize: function() {
-			this.modelName = 'VUserFilter';
-			this.bindErrorEvents();
-		},
-
-		/** This models toString() */
-		toString : function(){
-			return this.get('message');
-		}
-
-	}, {
-		// static class members
-	});
-
-    return VUserFilter;
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Overrides.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Overrides.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Overrides.js
deleted file mode 100644
index 1675934..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Overrides.js
+++ /dev/null
@@ -1,234 +0,0 @@
-/**
- * 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',
- 	'App',
- 	'backgrid',
- ],function(require,App){
-	
-	/**********************************************************************
-	 *                      Backgrid related                              *
-	 **********************************************************************/
-	/*
-	 * HtmlCell renders any html code
-	 * @class Backgrid.HtmlCell
-	 * @extends Backgrid.Cell
-	*/
-	var HtmlCell = Backgrid.HtmlCell = Backgrid.Cell.extend({
-    /** @lends Backgrid.HtmlCell */
-		 className: "html-cell",
-
-		 render: function () {
-		     this.$el.empty();
-		     var rawValue = this.model.get(this.column.get("name"));
-		     var formattedValue = this.formatter.fromRaw(rawValue, this.model);
-		     this.$el.append(formattedValue);
-		     this.delegateEvents();
-		     return this;
-		 }
-	});
-	/*
-	 * Overriding Cell for adding custom className to Cell i.e <td>
-	 */
-	var cellInit = Backgrid.Cell.prototype.initialize;
-	Backgrid.Cell.prototype.initialize = function () {
-	  cellInit.apply(this, arguments);
-	  var className = this.column.get('className');
-	  if (className) this.$el.addClass(className);
-	}
-	
-	Backgrid.HeaderRow = Backgrid.HeaderRow.extend({
-	    render: function() {
-	      var that = this;
-	      Backgrid.HeaderRow.__super__.render.apply(this, arguments);
-	      _.each(this.columns.models, function(modelValue) {
-	        if (modelValue.get('width')) that.$el.find('.' + modelValue.get('name')).css('width', modelValue.get('width') + '%')
-	        if (modelValue.get('toolTip')) that.$el.find('.' + modelValue.get('name')).attr('title', modelValue.get('toolTip'))
-	      });
-	      return this;
-	    }
-	  });
-	
-	
-	$(function(){
-		$("#content").on('click', '.expand-link', function (e) {
-			var body = $('body');
-			e.preventDefault();
-			var box = $(this).closest('div.box');
-			var button = $(this).find('i');
-			button.toggleClass('fa-expand').toggleClass('fa-compress');
-			box.toggleClass('expanded');
-			body.toggleClass('body-expanded');
-			var timeout = 0;
-			if (body.hasClass('body-expanded')) {
-				timeout = 100;
-			}
-			setTimeout(function () {
-				box.toggleClass('expanded-padding');
-			}, timeout);
-			setTimeout(function () {
-				box.resize();
-				box.find('[id^=map-]').resize();
-			}, timeout + 50);
-		})
-		.on('click', '.collapse-link', function (e) {
-			e.preventDefault();
-			var box = $(this).closest('div.box');
-			var button = $(this).find('i');
-			var content = box.find('div.box-content');
-			content.slideToggle('fast');
-			button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
-			setTimeout(function () {
-				box.resize();
-				box.find('[id^=map-]').resize();
-			}, 50);
-		});
-		
-		//
-		// Swap 2 elements on page. Used by WinMove function
-		//
-		jQuery.fn.swap = function(b){
-			b = jQuery(b)[0];
-			var a = this[0];
-			var t = a.parentNode.insertBefore(document.createTextNode(''), a);
-			b.parentNode.insertBefore(a, b);
-			t.parentNode.insertBefore(b, t);
-			t.parentNode.removeChild(t);
-			return this;
-		}; 
-	})
-	/**
-	 * Highlighting text in a particular div
-	 */
-
-		jQuery.fn.highlight = function(pat,semi_highlight,elem) {
-		var i=1;
-		function innerHighlight(node, pat) {
-			var skip = 0;
-			if (node.nodeType == 3) {
-				var pos = node.data.toUpperCase().indexOf(pat);
-				if (pos >= 0) {
-					var spannode = document.createElement('span');
-					if(semi_highlight)
-						spannode.className = 'semi-highlight';
-					else
-						spannode.className = 'highlight';
-					spannode.setAttribute("data-count",i);
-					i++;
-					var middlebit = node.splitText(pos);
-					var endbit = middlebit.splitText(pat.length);
-					var middleclone = middlebit.cloneNode(true);
-					spannode.appendChild(middleclone);
-					middlebit.parentNode.replaceChild(spannode, middlebit);
-					skip = 1;
-				}
-			} else if (node.nodeType == 1 && node.childNodes
-					&& !/(script|style)/i.test(node.tagName)) {
-				for (var i = 0; i < node.childNodes.length; ++i) {
-					i += innerHighlight(node.childNodes[i], pat);
-				}
-			}
-			return skip;
-		}
-		return this.length && pat && pat.length ? this.each(function(i) {
-			/*
-			 * Excluding the clicked element for just highlighting the selection
-			 */
-			if(semi_highlight){
-				if(elem && (! $(this).is($(elem))) ){
-					innerHighlight(this, pat.toUpperCase());
-				}
-			}else
-				innerHighlight(this, pat.toUpperCase());
-				
-		}) : this;
-	};
-
-	jQuery.fn.removeHighlight = function(isSemiHighlight) {
-		if(isSemiHighlight){
-			return this.find("span.semi-highlight").each(function() {		
-			this.parentNode.firstChild.nodeName;
-			with (this.parentNode) {
-				replaceChild(this.firstChild, this);
-				normalize();
-			}
-		}).end();
-		}else{
-			return this.find("span.highlight").each(function() {		
-			this.parentNode.firstChild.nodeName;
-			with (this.parentNode) {
-				replaceChild(this.firstChild, this);
-				normalize();
-			}
-		}).end();
-		}
-		
-	};
-	
-	
-	jQuery.fn.visible = function() {
-	    return this.css('visibility', 'visible');
-	};
-
-	jQuery.fn.invisible = function() {
-	    return this.css('visibility', 'hidden');
-	};
-
-	jQuery.fn.visibilityToggle = function() {
-	    return this.css('visibility', function(i, visibility) {
-	        return (visibility == 'visible') ? 'hidden' : 'visible';
-	    });
-	};
-	//hide the context menu when clicked on window's element
-	$('body').on("mouseup",function(e){
-		if(! $(".contextMenuBody").is(":hidden")){
-			if(! $(e.target).parents(".contextMenuBody").length > 0){
-				$(".contextMenuBody").hide();
-			}
-		}
-		if(! $(".contextMenu").is(":hidden")){
-			if(! $(e.target).parents(".contextMenu").length > 0){
-				$(".contextMenu").hide();
-				//Remove highlighted text when user clicks somewhere on the screen
-				$('body').removeHighlight(true);
-			}
-		}
-	})
-	
-//	String.prototype.capitalizeFirstLetter = function() {
-//	    return this.charAt(0).toUpperCase() + this.slice(1);
-//	}
-	$('body').on("mouseenter",'.topLevelFilter.fixed',function(e){
-		$(this).find('.fixedSearchBox').removeClass('hiddeBox')
-	});
-	$('body').on("mouseleave",'.topLevelFilter.fixed',function(e){
-		if($(this).find('.fixedSearchBox .select2-container.select2-dropdown-open').length 
-			|| $(this).find('.VS-focus').length
-			|| $(this).find('.advanceSearchActive').length){
-			$(this).find('.fixedSearchBox').removeClass('hiddeBox')
-		}else{
-			$(this).find('.fixedSearchBox').addClass('hiddeBox')
-		}	
-	});
-
-	require(["nv"],function(){
-    	nv.dispatch.on("render_end",function(){
-    		$('.nvtooltip').css('opacity', '0');
-    	});
-    });
-	
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Vent.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Vent.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Vent.js
deleted file mode 100644
index ee24cd8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/Vent.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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();
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/globalize/message/en.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/globalize/message/en.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/globalize/message/en.js
deleted file mode 100644
index 841b2c1..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/modules/globalize/message/en.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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','globalize'],function(require,Globalize) {
-	'use strict';
-
-	Globalize.addCultureInfo( "en", {
-        messages:                  {
-        	// Form labels, Table headers etc
-			lbl : {
-				// Common
-				// Accounts
-				// MSLinks
-				/*
-				 * Menu related
-				 */
-				home 						: 'Home',
-				name 						: 'Name',
-				password					: 'Password',
-				passwordConfirm				: 'Password Confirm',
-			},
-			btn : {
-				add							: 'Add',
-				save						: 'Save',
-				cancel 						: 'Cancel',
-				addMore						: 'Add More..',
-				stayOnPage					: 'Stay on this page',
-				leavePage					: 'Leave this page',
-				setVisibility               : 'Set Visibility' 
-				
-			},
-			// h1, h2, h3, fieldset, title
-			h : {
-				welcome						: 'Welcome',
-				logout 						: 'Logout',
-	
-				// Menu
-				dashboard					: 'Dashboard',
-			},
-			msg : {
-				noRecordsFound			  : 'No Records Found',
-			},
-			plcHldr : {
-				search 						:'Search',
-			},
-			dialogMsg :{
-			},	
-			validationMessages : {
-				required 					: "* This field is required",
-				onlyLetterNumberUnderscore :'* Only Alpha Numeric and underscore characters are allowed',
-				alphaNumericUnderscoreDotComma :'* Only Alpha Numeric,underscore,comma,hypen,dot and space characters are allowed',
-				oldPasswordError :'Your password does not match. Please try again with proper password',
-				oldPasswordRepeatError :'You can not use old password.',
-				newPasswordError :'Invalid Password.Minimum 8 characters with min one alphabet and one numeric.',
-				emailIdError				: 'Please enter valid email address.',
-				enterValidName				: 'Please enter valid name.',
-				passwordError	            :'Invalid Password.Minimum 8 characters with min one alphabet and one numeric.'
-			},
-			serverMsg : {
-			}
-			
-
-        }
-    });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/prelogin/Prelogin.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/prelogin/Prelogin.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/prelogin/Prelogin.js
deleted file mode 100644
index 3d33d86..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/prelogin/Prelogin.js
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * 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 indexOf for IE
-if (!Array.indexOf) {
-	Array.prototype.indexOf = function(obj, start) {
-		for ( var i = (start || 0); i < this.length; i++) {
-			if (this[i] == obj) {
-				return i;
-			}
-		}
-		return -1;
-	};
-}
-
-
-function doLogin() {
-	
-	if ($("#username").val() === '' || $('#password').val() === '') {
-		$('#errorBox').show();
-		$('#signInLoading').hide();
-		$('#signIn').removeAttr('disabled');
-		$('#errorBox .errorMsg').text("The username or password you entered is incorrect..");
-		return false;
-	}
-	var userName = $('#username').val().trim();
-	var passwd = $('#password').val().trim();
-
-	var regexEmail = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
-	var regexPlain = /^([a-zA-Z0-9_\.\-\+])+$/;
-	if(!regexPlain.test(userName)){
-		if(!regexEmail.test(userName)){
-			$('#errorBox').show();
-			return false;
-		}
-	}	
-	var baseUrl = getBaseUrl();
-	if (baseUrl.lastIndexOf('/') != (baseUrl.length - 1)) {
-		if (baseUrl) {
-			baseUrl = baseUrl + '/';
-		} else {
-			baseUrl = '/';
-		}
-	}
-	var url = baseUrl + 'j_spring_security_check';
-
-	$.ajax({
-		data : {
-			j_username : userName,
-			j_password : passwd
-		},
-		url : url,
-		type : 'POST',
-		headers : {
-			"cache-control" : "no-cache"
-		},
-		success : function() {
-			if(location.hash.length > 2)
-				window.location.replace('index.html'+location.hash);
-			else
-				window.location.replace('index.html');
-		},
-		error : function(jqXHR, textStatus, err ) {
-			$('#signIn').removeAttr('disabled');
-			$('#signInLoading').css("visibility", "hidden");
-
-			if(jqXHR.status && jqXHR.status == 412){
-				$('#errorBox').hide();
-				$('#errorBoxUnsynced').show();
-			} else {
-				var resp = JSON.parse(jqXHR.responseText);
-				$('#errorBox .errorMsg').text(resp.msgDesc);
-				$('#errorBox').show();
-				$('#errorBoxUnsynced').hide();
-			}
-		}
-		
-	});
-
-}
-function getBaseUrl(){
-	if(!window.location.origin){
-		window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
-	}
-	return window.location.origin
-	+ window.location.pathname.substring(window.location.pathname
-			.indexOf('/', 2) + 1, 0);
-}
-$(function() {
-  	// register handlers
-	$('#signIn').on('click', function() {
-		$('#signIn').attr('disabled',true);
-		$('#signInLoading').css("visibility", "visible");
-		doLogin();
-		return false;
-	});
-	$('#loginForm').each(function() {
-		$('input').keypress(function(e) {
-			// Enter pressed?
-			if (e.which == 10 || e.which == 13) {
-				doLogin();
-			}
-		});
-	});
-	
-	$('#loginForm  li[class^=control-group] > input').on('change',function(e){
-		if(e.target.value === ''){
-			$(e.target).parent().addClass('error');
-		}else{
-			$(e.target).parent().removeClass('error');
-		}
-	});
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Enums.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Enums.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Enums.js
deleted file mode 100644
index 0c7a8d5..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Enums.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
-* 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','jquery'],function(require,$) {
-
-	var XAEnums = {};
-	mergeParams = function(defaults, params) {
-		if (!params) {
-			return defaults;
-		}
-		defaults || (defaults = {});
-		$.extend(true, defaults, params);
-		return defaults;
-	};
-	
-	return XAEnums;
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Globals.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Globals.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Globals.js
deleted file mode 100644
index 8356b9c..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Globals.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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', 'collections/SchemaFieldList'], function (require, SchemaFieldList) {
-  'use strict';
-
-  var Globals = {};
-
-  Globals.settings = {};
-  Globals.settings.PAGE_SIZE = 25;
-  Globals.settings.uploadDefaultOpts = {
-    disableImageResize: false,
-    maxFileSize: 5000000,
-    autoUpload: false
-  };
-  Globals.settings.MAX_VALUE = 2147483647;
-
-  Globals.keys = {};
-  Globals.keys.ENTER_KEY = 13;
-  Globals.keys.ESC_KEY = 27;
-
-  Globals.EventHistory = {
-    totalCount: 50
-  };
-
-  Globals.baseURL = '../api/v1/';
-
-  Globals.AppTabs = {
-    DASHBOARD: {value: 1, valStr: 'Dashboard'},
-    MAINVIEW: {value: 2, valStr: 'Main View'}
-  };
-
-  Globals.BooleanValue = {
-    BOOL_TRUE: {value: "true", label: 'True'},
-    BOOL_FALSE: {value: "false", label: 'False'}
-  };
-  Globals.paramsNameMapping = {
-    q: {label: 'Query'},
-    from: {label: 'From'},
-    to: {label: 'To'},
-    unit: {label: 'Unit'},
-    level: {label: 'Level'},
-    mustNot: {label: 'Exclude Component'},
-    mustBe: {label: 'Include Component'},
-    iMessage: {label: 'Include Message'},
-    eMessage: {label: 'Exclude Message'},
-    time: {label: ''},
-    includeQuery: {label: "Include Column"},
-    excludeQuery: {label: "Exclude Column"},
-    dateRangeLabel: {label: "Date Range"}
-  };
-
-  Globals.graphType = {
-    MULTILINE: {value: 1},
-    HISTOGRAM: {value: 2},
-    PIE: {value: 3},
-    TABLE: {value: 4}
-  };
-
-  Globals.dateFormat = "YYYY-MM-DD HH:mm:ss.SSS";
-  Globals.splitToken = "|i::e|";
-  Globals.eventName = {
-    serviceLogsIncludeColumns: "search:serviceLogs:include",
-    serviceLogsExcludeColumns: "search:serviceLogs:exclude"
-  };
-  Globals.serviceLogsColumns = [];
-  Globals.schemaFields = new SchemaFieldList().fetch({async: false}).responseJSON;
-  Globals.defaultServiceLogMappings = Globals.schemaFields.serviceLogMappings;
-  Globals.defaultServiceLogExcludes = Globals.schemaFields.serviceLogExcludes;
-  Globals.defaultAuditLogMappings = Globals.schemaFields.auditLogMappings;
-  Globals.defaultAuditLogExcludes = Globals.schemaFields.auditLogExcludes;
-  Globals.invertedServiceLogMappings = _.invert(Globals.defaultServiceLogMappings);
-  Globals.invertedAuditLogMappings = _.invert(Globals.defaultAuditLogMappings);
-
-  return Globals;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/LangSupport.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/LangSupport.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/LangSupport.js
deleted file mode 100644
index a445d7f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/LangSupport.js
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * 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.
- */
-
- /**
- * 
- * Loads different languages as required.Uses Globalize plugin   
- */
-
-define(['require','modules/Vent','globalize','modules/globalize/message/en'],function(require,vent){
-
-    var localization ={};
-
-    function setCulture(culture){
-        if(typeof culture !== 'undefined'){
-            localization.culture =culture;
-        }else{
-            localization.culture ="en";
-        }
-        Globalize.culture(localization.culture);
-    }
-
-	localization.setDefaultCulture = function(){
-		setCulture();
-	}
-    localization.tt = function(label){
-        var ret = label;
-  
-        var str = localization.localize(label, localization.culture);
-        if(typeof str !== 'undefined'){
-        	return str;
-        }
-        
-        if(localization.culture !== 'en' ){
-        	if(typeof localization.culture !== 'undefined')
-        		ret = (typeof localization.localize(label,"en") === 'undefined') ? label : localization.localize(label,"en");
-        	else{
-        		 ret = localization.localize(label,"en");
-        	}
-        }
-        return ret;
-    },
-    localization.localize = function(key , culture){
-    	return localization.byString(Globalize.findClosestCulture( culture ).messages, key ) || Globalize.cultures[ "default" ].messages[ key ];
-    }
-    
-    localization.byString = function(o, s) {
-        s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
-        s = s.replace(/^\./, '');           // strip a leading dot
-        var a = s.split('.');
-        while (a.length) {
-            var n = a.shift();
-            if (n in o) {
-                o = o[n];
-            } else {
-                return;
-            }
-        }
-        return o;
-    }
-    
-    localization.getMonthsAbbr = function(){
-		return Globalize.culture().calendars.standard.months.namesAbbr;
-    }
-
-    localization.getDaysOfWeek = function(label){
-		return Globalize.culture().calendars.standard.days.namesAbbr;
-    }
-
-    localization.chooseCulture = function(culture){
-		var dfd = $.Deferred();
-		dfd.done(function(validationMessages){
-			require([ 'validationEngine'],function(){
-				setCulture(culture);
-				validationMessages.setupMessages();
-				vent.trigger('Layouts:rerender');
-			});
-		});
-        switch(culture){
-            case "pt-BR" : 
-                 require(['gblMessages/message/pt-BR'], function() {
-					 require([ 'validationEngineEn' ],function(validationMessages){
-						 dfd.resolve(validationMessages);
-						 console.log('Language Changed to pt-BR');
-					 });
-					 $.fn.datepicker.dates['pt-BR'] = {
-								days: ["Domingo", "Segunda", "Ter��a", "Quarta", "Quinta", "Sexta", "S��bado", "Domingo"],
-								daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "S��b", "Dom"],
-								daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
-								months: ["Janeiro", "Fevereiro", "Mar��o", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
-								monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
-								today: "Hoje",
-								clear: "Limpar"
-					};
-					bootbox.setLocale('pt-BR'); 
-                });
-                break;
-			case "es" : 
-                 require(['gblMessages/message/es'], function() {
-					 require([ 'validationEngineEn' ],function(validationMessages){
-						 dfd.resolve(validationMessages);
-						 console.log('Language Changed to es');
-					 });
-					 $.fn.datepicker.dates['es'] = {
-								days: ["Domingo", "Lunes", "Martes", "Mi��rcoles", "Jueves", "Viernes", "S��bado", "Domingo"],
-								daysShort: ["Dom", "Lun", "Mar", "Mi��", "Jue", "Vie", "S��b", "Dom"],
-								daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
-								months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
-								monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
-								today: "Hoy"
-					};
-					bootbox.setLocale('es'); 
-                });
-                break;
-            default : 
-                 require(['gblMessages/message/en'], function() {
-					 require([ 'validationEngineEn' ],function(validationMessages){
-						 dfd.resolve(validationMessages);
-						 console.log('Language Changed to en');
-					 });
-					 bootbox.setLocale('en');
-                });
-                break;
-        }
-    }
-    
-    localization.formatDate = function(val,format){
-    	if(!val) return "";
-		var Util = require('utils/Utils');
-		var valDate = Util.DBToDateObj(val);
-    	return Globalize.format( valDate,format,localization.culture);
-    }
-    
-	//window.localization = localization;
-    return localization;
-})

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Tour.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Tour.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Tour.js
deleted file mode 100644
index f9d093b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/utils/Tour.js
+++ /dev/null
@@ -1,461 +0,0 @@
-/**
- * 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', 'tour'], function (require, TourJs) {
-  'use strict';
-
-  var TourJs = {};
-  var tour = '';
-  TourJs.Start = function () {
-    var getTourElement = function () {
-      return tour._options.steps[tour._current].element;
-    };
-    tour = new Tour({
-      name: "tour",
-      steps: [{
-        element: $('[data-id="troubleshoot"]').get(0),
-        content: "Welcome to Log Search!  Choose Troubleshooting to display high-level log and usage aggregates for all services and components in your cluster.",
-        placement: "right"
-      }, {
-        element: $('#troubleShootHeader').get(0),
-        content: "Choose a Service to display high-level information about that service. Optionally, filter by components and apply a specific diagnostic time frame.",
-        placement: "bottom"
-      }, {
-        element: $('div[data-id="dateRange"] .selectDateRange').get(0),
-        content: "Click the Date-Time picker and choose a pre-defined time slot or specify date and time values.",
-        placement: "top"
-      }, {
-        element: $("#showServicelog").get(0),
-        content: "Choose Go To Logs to further refine your examination of Service Logs for a selected service.",
-        placement: "top"
-      }, {
-        element: $('[data-id="hierarchy"]').get(0),
-        content: "Service Logs displays a high-level history of logs generated by a selected service and allows you to filter logs by component. You control your view of log data per component and host, Choose to view aggregate Service Logs or drill into details of each log message.",
-        placement: "right"
-      }, {
-        element: $("#searchIncludeExclude").get(0),
-        content: "This filter allows you to query the log data column wise(log_message, level, host etc). Include Search is basically \"or\" condition and Exclude Search is \"and\" condition between multiple input.",
-        placement: "bottom"
-      }, {
-        element: $("#compInculdeExculde").get(0),
-        content: "This filter allows you to filter the log data depending upon the component selection. Include Component is again \"or\" condition and Exclude Component is \"and\" condition between multiple selection.",
-        placement: "bottom"
-      }, {
-        element: $('[data-id="startStop"]').get(0),
-        content: "Snapshot helps you quickly see all logs generated while you reproduce an issue. Click start, reproduce your issue, click stop and we'll load all logs that were produced during that time frame.",
-        placement: "bottom"
-      }, {
-        element: $('#r_Histogram').get(0),
-        content: "Histogram displays comparative ratios of log severity during the currently defined time filter.",
-        placement: "top"
-      }, {
-        element: document.querySelectorAll('#r_BubbleTable')[1],
-        content: "The Log Data default view displays consolidated for all hosts.",
-        placement: "top",
-      }, {
-        element: document.querySelectorAll('#r_BubbleTable')[1],
-        content: "Expand the Log Data tree view and choose components to further refine your diagnostics.",
-        placement: "top",
-      }, {
-        element: $(document.querySelectorAll('#r_BubbleTable')[1]).find('.box-content')[1],
-        content: "Choose the blue arrow icon to view logs for a specific component on a new tab.",
-        placement: "right",
-      }, {
-        element: document.querySelectorAll('#r_BubbleTable')[1],
-        content: "Choose Service Logs to show a column-separated view of actual log entries.",
-        placement: "top",
-      }, {
-        element: $(document.querySelectorAll('#r_BubbleTable')[1]).find('td.logTime:first').get(0),
-        content: "The Log Time column lists a consolidated view of filtered log entries for the selected service.",
-        placement: "top"
-      }, {
-        element: $('li[data-id="audit"]').get(0),
-        content: "The Access Logs tab displays access information across services and their components. You can create different views and aggregations and apply filters for viewing access log details.",
-        placement: "right"
-      }, {
-        element: $('#r_AuditLine').get(0),
-        content: "The Line section shows component access during a specific time frame.",
-        placement: "bottom"
-      }, {
-        element: $('#AuditSearch').get(0),
-        content: "This filter allows you to query Access log data column- wise (Access Enforcer, Access type etc). Include Search applies the \"or\" condition and Exclude Search the \"and\" condition between multiple inputs.",
-        placement: "top"
-      }, {
-        element: $('li[data-id="createFilters"]').get(0),
-        content: "The Log Feeder Filter feature supports limiting data handled by LogSearch. For example, you can limit logs tracked by LogSearch to only those logs with level ERROR or FATAL.",
-        placement: "left"
-      }],
-      container: "body",
-      smartPlacement: true,
-      keyboard: true,
-      storage: false,
-      debug: false,
-      backdrop: true,
-      backdropContainer: 'body',
-      backdropPadding: 0,
-      redirect: true,
-      orphan: false,
-      duration: false,
-      delay: false,
-      basePath: "",
-      template: "<div class='popover tour'>" +
-      "<div class='arrow'></div>" +
-      "<h3 class='popover-title'></h3>" +
-      "<div class='popover-content'></div>" +
-      "<div class='popover-navigation'>" +
-      "<button class='btn btn-default' data-role='next'>Next »</button>" +
-      "<button class='btn btn-default' data-role='end'>Close</button>" +
-      "</div>" +
-      "</div>",
-      afterGetState: function (key, value) {
-      },
-      afterSetState: function (key, value) {
-      },
-      afterRemoveState: function (key, value) {
-      },
-      onShow: function (tour) {
-      },
-      onShown: function (tour) {
-        var stepElement = getTourElement(tour);
-        $(stepElement).after($('.tour-step-background'));
-        $(stepElement).before($('.tour-backdrop'));
-
-        if (tour._state.current_step == 1) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 2) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 3) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 4) {
-        } else if (tour._state.current_step == 5) {
-        } else if (tour._state.current_step == 6) {
-        } else if (tour._state.current_step == 7) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 9) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 10) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 11) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 12) {
-          appendFingerAndOverlayDiv(tour._options.showFinger[tour._state.current_step]);
-        } else if (tour._state.current_step == 13) {
-          $('[data-id="r_tableList"]').find('table thead tr').css({'display': '-webkit-box'});
-          $('[data-id="r_tableList"]').find('table tbody tr').css({'display': '-webkit-box'});
-          $('[data-id="r_tableList"]').find('table thead tr').css({'display': '-moz-box'});
-          $('[data-id="r_tableList"]').find('table tbody tr').css({'display': '-moz-box'});
-        } else if (tour._state.current_step == 14) {
-          console.log("14")
-        }
-
-        var count = $('body').find('.finger');
-        if (count.length > 1) {
-          $('body').find('.finger:first').remove();
-        }
-      }
-
-    }),
-      TourJs.bindEvent(tour),
-      tour.start();
-
-    //add all animation and overlay div
-    function appendFingerAndOverlayDiv(options) {
-      $('.tour-step-backdrop:first').append('<div class="animated infinite finger ' + options.handClass + '"><i class="fa fa-hand-o-' + options.handDirection + ' fa-2x"></i></div>');
-      $('.tour-step-backdrop:first').find('.finger').css(options.css);
-    };
-
-    var overlay = document.createElement('div');
-    overlay.setAttribute('class', 'overlayIntro');
-    $('body').append(overlay);
-  };
-
-  TourJs.bindEvent = function (tour) {
-    var that = this;
-    var tourCallBack = tour._options;
-
-    var optionSet = {
-      0: {
-        css: {
-          'top': '0px',
-          'left': '98px'
-        },
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      1: {
-        css: {
-          'top': '0px',
-          'left': '98px'
-        },
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      2: {
-        css: {
-          'top': '0',
-          'right': '95px'
-        },
-        handDirection: 'left',
-        handClass: "left-right"
-      },
-      3: {
-        css: {
-          'top': '0',
-          'left': '40px'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      },
-      4: {
-        css: {
-          'top': '0px',
-          'left': '98px'
-        },
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      5: {
-        css: {
-          'top': '10px',
-          'left': '10px'
-        },
-        handDirection: 'right',
-        handClass: "right-left"
-      },
-      // 6: {
-      //     css: {
-      //         'top': '10px',
-      //         'left': '10px'
-      //     },
-      //     handDirection: 'right',
-      //     handClass: "right-left"
-      // },
-      7: {
-        css: {
-          'top': '5px',
-          'left': '100px'
-        },
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      8: {
-        css: {
-          'top': '30px',
-          'left': '309px'
-        },
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      9: {
-        css: {
-          'top': '45px',
-          'left': '122px'
-        },
-        handDirection: 'up',
-        handClass: "up-down"
-      },
-      10: {
-        css: {
-          'top': '45px',
-          'left': '100px'
-        },
-        appendIndex: 0,
-        handDirection: 'down',
-        handClass: "up-down"
-      },
-      11: {
-        css: {
-          'top': '45px',
-          'right': '80px'
-        },
-        appendIndex: 1,
-        handDirection: 'right',
-        handText: "Components",
-        handClass: "left-right"
-
-      },
-      12: {
-        css: {
-          'top': '30px',
-          'left': '309px'
-        },
-        appendIndex: 0,
-        handDirection: 'left',
-        handClass: "left-right"
-      },
-      13: {
-        css: {
-          'top': '50px',
-          'left': '0px'
-        },
-        appendIndex: 0,
-        handDirection: 'up',
-        handClass: "up-down"
-      },
-      14: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        appendIndex: 0,
-        handDirection: 'up',
-        handClass: "up-down"
-      },
-      15: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      },
-      16: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      },
-      17: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      },
-      18: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      },
-      19: {
-        css: {
-          'top': '0',
-          'left': '0'
-        },
-        handDirection: 'right',
-        handClass: "left-right"
-      }
-    };
-
-    $.extend(tour._options, {"showFinger": optionSet});
-
-    // on tour start
-    tourCallBack.onStart = function (tour) {
-      $('.ui-dialog').fadeOut();
-      $('.ui-widget-overlay').fadeOut();
-      $('.compare').fadeOut();
-      that.dataAttribute = $('div[role="tabpanel"]').find('.nav-tabs .active').attr('data-id');
-      if (that.dataAttribute != "troubleshoot") {
-        $('div[role="tabpanel"]').find('.nav-tabs [data-id="troubleshoot"] a').click();
-      }
-    };
-
-    // on the Next button click
-    tourCallBack.onNext = function (tour) {
-      if (tour._state.current_step == 0) {
-      } else if (tour._state.current_step == 1) {
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 2) {
-        $("#showServicelog").css('z-index', '');
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 3) {
-        $('div[role="tabpanel"]').find('.nav-tabs [data-id="hierarchy"] a').click();
-        $("#showServicelog").css('z-index', 1);
-      } else if (tour._state.current_step == 4) {
-      } else if (tour._state.current_step == 5) {
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 6) {
-        ($('[id="r_Histogram"]').find('.collapse-link').first().find('i').hasClass('fa-chevron-down')) ? $('[id="r_Histogram"]').find('.collapse-link').first().find('i').click() : '';
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 7) {
-        ($('#r_BubbleTable a.collapse-link').first().find('i').hasClass('fa-chevron-down')) ? $('#r_BubbleTable a.collapse-link').first().find('i').click() : '';
-        $('#r_BubbleTable li[data-parent="true"]').first().find('span[data-state="expand"]').first().click();
-        $('#r_BubbleTable input[value="H"]').click();
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 8) {
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 9) {
-        $('#r_BubbleTable li[data-parent="true"]').first().find('span[data-state="collapse"]').first().click();
-        $('#r_BubbleTable li[data-parent="true"]').first().find('a[data-type="C"]').first().removeClass('hidden');
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 10) {
-        $('#r_BubbleTable li[data-parent="true"]').first().find('a[data-type="C"]').first().removeClass('hidden');
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 11) {
-        $('#r_BubbleTable input[value="T"]').click();
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 12) {
-        setTimeout(function () {
-          $('#rLogTable').find('.btn-quickMenu').first().click();
-        }, 300);
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 13) {
-        $('[data-id="r_tableList"]').find('table thead tr').css({'display': ''});
-        $('[data-id="r_tableList"]').find('table tbody tr').css({'display': ''});
-        $('div[role="tabpanel"]').find('.nav-tabs [data-id="audit"] a').click();
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 14) {
-        ($('#r_AuditLine a.collapse-link').first().find('i').hasClass('fa-chevron-down')) ? $('#r_AuditLine a.collapse-link').first().find('i').click() : '';
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 15) {
-        ($('#AuditSearch a.collapse-link').first().find('i').hasClass('fa-chevron-down')) ? $('#AuditSearch a.collapse-link').first().find('i').click() : '';
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 16) {
-        removeFingerAndOverlayDiv();
-      } else if (tour._state.current_step == 17) {
-      }
-
-    };
-
-    // on tour Ends
-    tourCallBack.onEnd = function (tour) {
-      tabClick();
-      $('body').find('.overlayIntro').remove();
-      $('.ui-dialog').fadeIn();
-      $('.ui-widget-overlay').fadeIn();
-      $('.compare').fadeIn();
-      removeFingerAndOverlayDiv();
-      $('[data-id="r_tableList"]').find('table thead tr').css({'display': ''});
-      $('[data-id="r_tableList"]').find('table tbody tr').css({'display': ''});
-    };
-
-    function tabClick() {
-      if (!that.dataAttribute) {
-        $('div[role="tabpanel"]').find('.nav-tabs [data-id="troubleshoot"] a').click();
-      } else {
-        $('div[role="tabpanel"]').find('.nav-tabs [data-id=' + that.dataAttribute + '] a').click();
-      }
-      window.scrollTo(0, 0);
-    };
-
-    //remove all animation and overlay div
-    function removeFingerAndOverlayDiv() {
-      $('body').find('.finger').remove();
-    };
-
-  }
-
-
-  return TourJs;
-});
\ No newline at end of file


[03/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/animate.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/animate.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/animate.css
deleted file mode 100644
index 58b7900..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/animate.css
+++ /dev/null
@@ -1,3272 +0,0 @@
-@charset "UTF-8";
-
-/*!
-Animate.css - http://daneden.me/animate
-Licensed under the MIT license - http://opensource.org/licenses/MIT
-
-Copyright (c) 2015 Daniel Eden
-*/
-
-.animated {
-  -webkit-animation-duration: 1s;
-  animation-duration: 1s;
-  -webkit-animation-fill-mode: both;
-  animation-fill-mode: both;
-}
-
-.animated.infinite {
-  -webkit-animation-iteration-count: infinite;
-  animation-iteration-count: infinite;
-}
-
-.animated.hinge {
-  -webkit-animation-duration: 2s;
-  animation-duration: 2s;
-}
-
-.animated.bounceIn,
-.animated.bounceOut {
-  -webkit-animation-duration: .75s;
-  animation-duration: .75s;
-}
-
-.animated.flipOutX,
-.animated.flipOutY {
-  -webkit-animation-duration: .75s;
-  animation-duration: .75s;
-}
-
-@-webkit-keyframes bounce {
-  from, 20%, 53%, 80%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    -webkit-transform: translate3d(0,0,0);
-    transform: translate3d(0,0,0);
-  }
-
-  40%, 43% {
-    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    -webkit-transform: translate3d(0, -30px, 0);
-    transform: translate3d(0, -30px, 0);
-  }
-
-  70% {
-    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    -webkit-transform: translate3d(0, -15px, 0);
-    transform: translate3d(0, -15px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0,-4px,0);
-    transform: translate3d(0,-4px,0);
-  }
-}
-
-@keyframes bounce {
-  from, 20%, 53%, 80%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    -webkit-transform: translate3d(0,0,0);
-    transform: translate3d(0,0,0);
-  }
-
-  40%, 43% {
-    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    -webkit-transform: translate3d(0, -30px, 0);
-    transform: translate3d(0, -30px, 0);
-  }
-
-  70% {
-    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-    -webkit-transform: translate3d(0, -15px, 0);
-    transform: translate3d(0, -15px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0,-4px,0);
-    transform: translate3d(0,-4px,0);
-  }
-}
-
-.bounce {
-  -webkit-animation-name: bounce;
-  animation-name: bounce;
-  -webkit-transform-origin: center bottom;
-  transform-origin: center bottom;
-}
-
-@-webkit-keyframes flash {
-  from, 50%, to {
-    opacity: 1;
-  }
-
-  25%, 75% {
-    opacity: 0;
-  }
-}
-
-@keyframes flash {
-  from, 50%, to {
-    opacity: 1;
-  }
-
-  25%, 75% {
-    opacity: 0;
-  }
-}
-
-.flash {
-  -webkit-animation-name: flash;
-  animation-name: flash;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes pulse {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  50% {
-    -webkit-transform: scale3d(1.05, 1.05, 1.05);
-    transform: scale3d(1.05, 1.05, 1.05);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-@keyframes pulse {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  50% {
-    -webkit-transform: scale3d(1.05, 1.05, 1.05);
-    transform: scale3d(1.05, 1.05, 1.05);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-.pulse {
-  -webkit-animation-name: pulse;
-  animation-name: pulse;
-}
-
-@-webkit-keyframes rubberBand {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  30% {
-    -webkit-transform: scale3d(1.25, 0.75, 1);
-    transform: scale3d(1.25, 0.75, 1);
-  }
-
-  40% {
-    -webkit-transform: scale3d(0.75, 1.25, 1);
-    transform: scale3d(0.75, 1.25, 1);
-  }
-
-  50% {
-    -webkit-transform: scale3d(1.15, 0.85, 1);
-    transform: scale3d(1.15, 0.85, 1);
-  }
-
-  65% {
-    -webkit-transform: scale3d(.95, 1.05, 1);
-    transform: scale3d(.95, 1.05, 1);
-  }
-
-  75% {
-    -webkit-transform: scale3d(1.05, .95, 1);
-    transform: scale3d(1.05, .95, 1);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-@keyframes rubberBand {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  30% {
-    -webkit-transform: scale3d(1.25, 0.75, 1);
-    transform: scale3d(1.25, 0.75, 1);
-  }
-
-  40% {
-    -webkit-transform: scale3d(0.75, 1.25, 1);
-    transform: scale3d(0.75, 1.25, 1);
-  }
-
-  50% {
-    -webkit-transform: scale3d(1.15, 0.85, 1);
-    transform: scale3d(1.15, 0.85, 1);
-  }
-
-  65% {
-    -webkit-transform: scale3d(.95, 1.05, 1);
-    transform: scale3d(.95, 1.05, 1);
-  }
-
-  75% {
-    -webkit-transform: scale3d(1.05, .95, 1);
-    transform: scale3d(1.05, .95, 1);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-.rubberBand {
-  -webkit-animation-name: rubberBand;
-  animation-name: rubberBand;
-}
-
-@-webkit-keyframes shake {
-  from, to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  10%, 30%, 50%, 70%, 90% {
-    -webkit-transform: translate3d(-10px, 0, 0);
-    transform: translate3d(-10px, 0, 0);
-  }
-
-  20%, 40%, 60%, 80% {
-    -webkit-transform: translate3d(10px, 0, 0);
-    transform: translate3d(10px, 0, 0);
-  }
-}
-
-@keyframes shake {
-  from, to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  10%, 30%, 50%, 70%, 90% {
-    -webkit-transform: translate3d(-10px, 0, 0);
-    transform: translate3d(-10px, 0, 0);
-  }
-
-  20%, 40%, 60%, 80% {
-    -webkit-transform: translate3d(10px, 0, 0);
-    transform: translate3d(10px, 0, 0);
-  }
-}
-
-.shake {
-  -webkit-animation-name: shake;
-  animation-name: shake;
-}
-
-@-webkit-keyframes swing {
-  20% {
-    -webkit-transform: rotate3d(0, 0, 1, 15deg);
-    transform: rotate3d(0, 0, 1, 15deg);
-  }
-
-  40% {
-    -webkit-transform: rotate3d(0, 0, 1, -10deg);
-    transform: rotate3d(0, 0, 1, -10deg);
-  }
-
-  60% {
-    -webkit-transform: rotate3d(0, 0, 1, 5deg);
-    transform: rotate3d(0, 0, 1, 5deg);
-  }
-
-  80% {
-    -webkit-transform: rotate3d(0, 0, 1, -5deg);
-    transform: rotate3d(0, 0, 1, -5deg);
-  }
-
-  to {
-    -webkit-transform: rotate3d(0, 0, 1, 0deg);
-    transform: rotate3d(0, 0, 1, 0deg);
-  }
-}
-
-@keyframes swing {
-  20% {
-    -webkit-transform: rotate3d(0, 0, 1, 15deg);
-    transform: rotate3d(0, 0, 1, 15deg);
-  }
-
-  40% {
-    -webkit-transform: rotate3d(0, 0, 1, -10deg);
-    transform: rotate3d(0, 0, 1, -10deg);
-  }
-
-  60% {
-    -webkit-transform: rotate3d(0, 0, 1, 5deg);
-    transform: rotate3d(0, 0, 1, 5deg);
-  }
-
-  80% {
-    -webkit-transform: rotate3d(0, 0, 1, -5deg);
-    transform: rotate3d(0, 0, 1, -5deg);
-  }
-
-  to {
-    -webkit-transform: rotate3d(0, 0, 1, 0deg);
-    transform: rotate3d(0, 0, 1, 0deg);
-  }
-}
-
-.swing {
-  -webkit-transform-origin: top center;
-  transform-origin: top center;
-  -webkit-animation-name: swing;
-  animation-name: swing;
-}
-
-@-webkit-keyframes tada {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  10%, 20% {
-    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
-    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
-  }
-
-  30%, 50%, 70%, 90% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
-    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
-  }
-
-  40%, 60%, 80% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
-    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-@keyframes tada {
-  from {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-
-  10%, 20% {
-    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
-    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
-  }
-
-  30%, 50%, 70%, 90% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
-    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
-  }
-
-  40%, 60%, 80% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
-    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
-  }
-
-  to {
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-.tada {
-  -webkit-animation-name: tada;
-  animation-name: tada;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes wobble {
-  from {
-    -webkit-transform: none;
-    transform: none;
-  }
-
-  15% {
-    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
-    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
-  }
-
-  30% {
-    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
-    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
-  }
-
-  45% {
-    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
-    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
-  }
-
-  60% {
-    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
-    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
-  }
-
-  75% {
-    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
-    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes wobble {
-  from {
-    -webkit-transform: none;
-    transform: none;
-  }
-
-  15% {
-    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
-    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
-  }
-
-  30% {
-    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
-    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
-  }
-
-  45% {
-    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
-    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
-  }
-
-  60% {
-    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
-    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
-  }
-
-  75% {
-    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
-    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.wobble {
-  -webkit-animation-name: wobble;
-  animation-name: wobble;
-}
-
-@-webkit-keyframes jello {
-  from, 11.1%, to {
-    -webkit-transform: none;
-    transform: none;
-  }
-
-  22.2% {
-    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
-    transform: skewX(-12.5deg) skewY(-12.5deg);
-  }
-
-  33.3% {
-    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
-    transform: skewX(6.25deg) skewY(6.25deg);
-  }
-
-  44.4% {
-    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
-    transform: skewX(-3.125deg) skewY(-3.125deg);
-  }
-
-  55.5% {
-    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
-    transform: skewX(1.5625deg) skewY(1.5625deg);
-  }
-
-  66.6% {
-    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
-    transform: skewX(-0.78125deg) skewY(-0.78125deg);
-  }
-
-  77.7% {
-    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
-    transform: skewX(0.390625deg) skewY(0.390625deg);
-  }
-
-  88.8% {
-    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
-    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
-  }
-}
-
-@keyframes jello {
-  from, 11.1%, to {
-    -webkit-transform: none;
-    transform: none;
-  }
-
-  22.2% {
-    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
-    transform: skewX(-12.5deg) skewY(-12.5deg);
-  }
-
-  33.3% {
-    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
-    transform: skewX(6.25deg) skewY(6.25deg);
-  }
-
-  44.4% {
-    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
-    transform: skewX(-3.125deg) skewY(-3.125deg);
-  }
-
-  55.5% {
-    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
-    transform: skewX(1.5625deg) skewY(1.5625deg);
-  }
-
-  66.6% {
-    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
-    transform: skewX(-0.78125deg) skewY(-0.78125deg);
-  }
-
-  77.7% {
-    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
-    transform: skewX(0.390625deg) skewY(0.390625deg);
-  }
-
-  88.8% {
-    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
-    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
-  }
-}
-
-.jello {
-  -webkit-animation-name: jello;
-  animation-name: jello;
-  -webkit-transform-origin: center;
-  transform-origin: center;
-}
-
-@-webkit-keyframes bounceIn {
-  from, 20%, 40%, 60%, 80%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  20% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1);
-    transform: scale3d(1.1, 1.1, 1.1);
-  }
-
-  40% {
-    -webkit-transform: scale3d(.9, .9, .9);
-    transform: scale3d(.9, .9, .9);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(1.03, 1.03, 1.03);
-    transform: scale3d(1.03, 1.03, 1.03);
-  }
-
-  80% {
-    -webkit-transform: scale3d(.97, .97, .97);
-    transform: scale3d(.97, .97, .97);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-@keyframes bounceIn {
-  from, 20%, 40%, 60%, 80%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  20% {
-    -webkit-transform: scale3d(1.1, 1.1, 1.1);
-    transform: scale3d(1.1, 1.1, 1.1);
-  }
-
-  40% {
-    -webkit-transform: scale3d(.9, .9, .9);
-    transform: scale3d(.9, .9, .9);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(1.03, 1.03, 1.03);
-    transform: scale3d(1.03, 1.03, 1.03);
-  }
-
-  80% {
-    -webkit-transform: scale3d(.97, .97, .97);
-    transform: scale3d(.97, .97, .97);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: scale3d(1, 1, 1);
-    transform: scale3d(1, 1, 1);
-  }
-}
-
-.bounceIn {
-  -webkit-animation-name: bounceIn;
-  animation-name: bounceIn;
-}
-
-@-webkit-keyframes bounceInDown {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -3000px, 0);
-    transform: translate3d(0, -3000px, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, 25px, 0);
-    transform: translate3d(0, 25px, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(0, -10px, 0);
-    transform: translate3d(0, -10px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0, 5px, 0);
-    transform: translate3d(0, 5px, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes bounceInDown {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -3000px, 0);
-    transform: translate3d(0, -3000px, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, 25px, 0);
-    transform: translate3d(0, 25px, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(0, -10px, 0);
-    transform: translate3d(0, -10px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0, 5px, 0);
-    transform: translate3d(0, 5px, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.bounceInDown {
-  -webkit-animation-name: bounceInDown;
-  animation-name: bounceInDown;
-}
-
-@-webkit-keyframes bounceInLeft {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: translate3d(-3000px, 0, 0);
-    transform: translate3d(-3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(25px, 0, 0);
-    transform: translate3d(25px, 0, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(-10px, 0, 0);
-    transform: translate3d(-10px, 0, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(5px, 0, 0);
-    transform: translate3d(5px, 0, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes bounceInLeft {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  0% {
-    opacity: 0;
-    -webkit-transform: translate3d(-3000px, 0, 0);
-    transform: translate3d(-3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(25px, 0, 0);
-    transform: translate3d(25px, 0, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(-10px, 0, 0);
-    transform: translate3d(-10px, 0, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(5px, 0, 0);
-    transform: translate3d(5px, 0, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.bounceInLeft {
-  -webkit-animation-name: bounceInLeft;
-  animation-name: bounceInLeft;
-}
-
-@-webkit-keyframes bounceInRight {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(3000px, 0, 0);
-    transform: translate3d(3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(-25px, 0, 0);
-    transform: translate3d(-25px, 0, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(10px, 0, 0);
-    transform: translate3d(10px, 0, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(-5px, 0, 0);
-    transform: translate3d(-5px, 0, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes bounceInRight {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(3000px, 0, 0);
-    transform: translate3d(3000px, 0, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(-25px, 0, 0);
-    transform: translate3d(-25px, 0, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(10px, 0, 0);
-    transform: translate3d(10px, 0, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(-5px, 0, 0);
-    transform: translate3d(-5px, 0, 0);
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.bounceInRight {
-  -webkit-animation-name: bounceInRight;
-  animation-name: bounceInRight;
-}
-
-@-webkit-keyframes bounceInUp {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 3000px, 0);
-    transform: translate3d(0, 3000px, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, -20px, 0);
-    transform: translate3d(0, -20px, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(0, 10px, 0);
-    transform: translate3d(0, 10px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0, -5px, 0);
-    transform: translate3d(0, -5px, 0);
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes bounceInUp {
-  from, 60%, 75%, 90%, to {
-    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-  }
-
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 3000px, 0);
-    transform: translate3d(0, 3000px, 0);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, -20px, 0);
-    transform: translate3d(0, -20px, 0);
-  }
-
-  75% {
-    -webkit-transform: translate3d(0, 10px, 0);
-    transform: translate3d(0, 10px, 0);
-  }
-
-  90% {
-    -webkit-transform: translate3d(0, -5px, 0);
-    transform: translate3d(0, -5px, 0);
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.bounceInUp {
-  -webkit-animation-name: bounceInUp;
-  animation-name: bounceInUp;
-}
-
-@-webkit-keyframes bounceOut {
-  20% {
-    -webkit-transform: scale3d(.9, .9, .9);
-    transform: scale3d(.9, .9, .9);
-  }
-
-  50%, 55% {
-    opacity: 1;
-    -webkit-transform: scale3d(1.1, 1.1, 1.1);
-    transform: scale3d(1.1, 1.1, 1.1);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-}
-
-@keyframes bounceOut {
-  20% {
-    -webkit-transform: scale3d(.9, .9, .9);
-    transform: scale3d(.9, .9, .9);
-  }
-
-  50%, 55% {
-    opacity: 1;
-    -webkit-transform: scale3d(1.1, 1.1, 1.1);
-    transform: scale3d(1.1, 1.1, 1.1);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-}
-
-.bounceOut {
-  -webkit-animation-name: bounceOut;
-  animation-name: bounceOut;
-}
-
-@-webkit-keyframes bounceOutDown {
-  20% {
-    -webkit-transform: translate3d(0, 10px, 0);
-    transform: translate3d(0, 10px, 0);
-  }
-
-  40%, 45% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, -20px, 0);
-    transform: translate3d(0, -20px, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-}
-
-@keyframes bounceOutDown {
-  20% {
-    -webkit-transform: translate3d(0, 10px, 0);
-    transform: translate3d(0, 10px, 0);
-  }
-
-  40%, 45% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, -20px, 0);
-    transform: translate3d(0, -20px, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-}
-
-.bounceOutDown {
-  -webkit-animation-name: bounceOutDown;
-  animation-name: bounceOutDown;
-}
-
-@-webkit-keyframes bounceOutLeft {
-  20% {
-    opacity: 1;
-    -webkit-transform: translate3d(20px, 0, 0);
-    transform: translate3d(20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-}
-
-@keyframes bounceOutLeft {
-  20% {
-    opacity: 1;
-    -webkit-transform: translate3d(20px, 0, 0);
-    transform: translate3d(20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-}
-
-.bounceOutLeft {
-  -webkit-animation-name: bounceOutLeft;
-  animation-name: bounceOutLeft;
-}
-
-@-webkit-keyframes bounceOutRight {
-  20% {
-    opacity: 1;
-    -webkit-transform: translate3d(-20px, 0, 0);
-    transform: translate3d(-20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-}
-
-@keyframes bounceOutRight {
-  20% {
-    opacity: 1;
-    -webkit-transform: translate3d(-20px, 0, 0);
-    transform: translate3d(-20px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-}
-
-.bounceOutRight {
-  -webkit-animation-name: bounceOutRight;
-  animation-name: bounceOutRight;
-}
-
-@-webkit-keyframes bounceOutUp {
-  20% {
-    -webkit-transform: translate3d(0, -10px, 0);
-    transform: translate3d(0, -10px, 0);
-  }
-
-  40%, 45% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, 20px, 0);
-    transform: translate3d(0, 20px, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-}
-
-@keyframes bounceOutUp {
-  20% {
-    -webkit-transform: translate3d(0, -10px, 0);
-    transform: translate3d(0, -10px, 0);
-  }
-
-  40%, 45% {
-    opacity: 1;
-    -webkit-transform: translate3d(0, 20px, 0);
-    transform: translate3d(0, 20px, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-}
-
-.bounceOutUp {
-  -webkit-animation-name: bounceOutUp;
-  animation-name: bounceOutUp;
-}
-
-@-webkit-keyframes fadeIn {
-  from {
-    opacity: 0;
-  }
-
-  to {
-    opacity: 1;
-  }
-}
-
-@keyframes fadeIn {
-  from {
-    opacity: 0;
-  }
-
-  to {
-    opacity: 1;
-  }
-}
-
-.fadeIn {
-  -webkit-animation-name: fadeIn;
-  animation-name: fadeIn;
-}
-
-@-webkit-keyframes fadeInDown {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInDown {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInDown {
-  -webkit-animation-name: fadeInDown;
-  animation-name: fadeInDown;
-}
-
-@-webkit-keyframes fadeInDownBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInDownBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInDownBig {
-  -webkit-animation-name: fadeInDownBig;
-  animation-name: fadeInDownBig;
-}
-
-@-webkit-keyframes fadeInLeft {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInLeft {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInLeft {
-  -webkit-animation-name: fadeInLeft;
-  animation-name: fadeInLeft;
-}
-
-@-webkit-keyframes fadeInLeftBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInLeftBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInLeftBig {
-  -webkit-animation-name: fadeInLeftBig;
-  animation-name: fadeInLeftBig;
-}
-
-@-webkit-keyframes fadeInRight {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInRight {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInRight {
-  -webkit-animation-name: fadeInRight;
-  animation-name: fadeInRight;
-}
-
-@-webkit-keyframes fadeInRightBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInRightBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInRightBig {
-  -webkit-animation-name: fadeInRightBig;
-  animation-name: fadeInRightBig;
-}
-
-@-webkit-keyframes fadeInUp {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInUp {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInUp {
-  -webkit-animation-name: fadeInUp;
-  animation-name: fadeInUp;
-}
-
-@-webkit-keyframes fadeInUpBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes fadeInUpBig {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.fadeInUpBig {
-  -webkit-animation-name: fadeInUpBig;
-  animation-name: fadeInUpBig;
-}
-
-@-webkit-keyframes fadeOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-  }
-}
-
-@keyframes fadeOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-  }
-}
-
-.fadeOut {
-  -webkit-animation-name: fadeOut;
-  animation-name: fadeOut;
-}
-
-@-webkit-keyframes fadeOutDown {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-}
-
-@keyframes fadeOutDown {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-}
-
-.fadeOutDown {
-  -webkit-animation-name: fadeOutDown;
-  animation-name: fadeOutDown;
-}
-
-@-webkit-keyframes fadeOutDownBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-}
-
-@keyframes fadeOutDownBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, 2000px, 0);
-    transform: translate3d(0, 2000px, 0);
-  }
-}
-
-.fadeOutDownBig {
-  -webkit-animation-name: fadeOutDownBig;
-  animation-name: fadeOutDownBig;
-}
-
-@-webkit-keyframes fadeOutLeft {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-}
-
-@keyframes fadeOutLeft {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-}
-
-.fadeOutLeft {
-  -webkit-animation-name: fadeOutLeft;
-  animation-name: fadeOutLeft;
-}
-
-@-webkit-keyframes fadeOutLeftBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-}
-
-@keyframes fadeOutLeftBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(-2000px, 0, 0);
-    transform: translate3d(-2000px, 0, 0);
-  }
-}
-
-.fadeOutLeftBig {
-  -webkit-animation-name: fadeOutLeftBig;
-  animation-name: fadeOutLeftBig;
-}
-
-@-webkit-keyframes fadeOutRight {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-}
-
-@keyframes fadeOutRight {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-}
-
-.fadeOutRight {
-  -webkit-animation-name: fadeOutRight;
-  animation-name: fadeOutRight;
-}
-
-@-webkit-keyframes fadeOutRightBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-}
-
-@keyframes fadeOutRightBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(2000px, 0, 0);
-    transform: translate3d(2000px, 0, 0);
-  }
-}
-
-.fadeOutRightBig {
-  -webkit-animation-name: fadeOutRightBig;
-  animation-name: fadeOutRightBig;
-}
-
-@-webkit-keyframes fadeOutUp {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-}
-
-@keyframes fadeOutUp {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-}
-
-.fadeOutUp {
-  -webkit-animation-name: fadeOutUp;
-  animation-name: fadeOutUp;
-}
-
-@-webkit-keyframes fadeOutUpBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-}
-
-@keyframes fadeOutUpBig {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(0, -2000px, 0);
-    transform: translate3d(0, -2000px, 0);
-  }
-}
-
-.fadeOutUpBig {
-  -webkit-animation-name: fadeOutUpBig;
-  animation-name: fadeOutUpBig;
-}
-
-@-webkit-keyframes flip {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
-    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  50% {
-    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
-    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
-    transform: perspective(400px) scale3d(.95, .95, .95);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-
-@keyframes flip {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
-    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
-    -webkit-animation-timing-function: ease-out;
-    animation-timing-function: ease-out;
-  }
-
-  50% {
-    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
-    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
-    transform: perspective(400px) scale3d(.95, .95, .95);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-}
-
-.animated.flip {
-  -webkit-backface-visibility: visible;
-  backface-visibility: visible;
-  -webkit-animation-name: flip;
-  animation-name: flip;
-}
-
-@-webkit-keyframes flipInX {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  60% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-}
-
-@keyframes flipInX {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  60% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-}
-
-.flipInX {
-  -webkit-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipInX;
-  animation-name: flipInX;
-}
-
-@-webkit-keyframes flipInY {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  60% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-}
-
-@keyframes flipInY {
-  from {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-    opacity: 0;
-  }
-
-  40% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
-    -webkit-animation-timing-function: ease-in;
-    animation-timing-function: ease-in;
-  }
-
-  60% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
-  }
-
-  to {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-}
-
-.flipInY {
-  -webkit-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipInY;
-  animation-name: flipInY;
-}
-
-@-webkit-keyframes flipOutX {
-  from {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-
-  30% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes flipOutX {
-  from {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-
-  30% {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
-    opacity: 0;
-  }
-}
-
-.flipOutX {
-  -webkit-animation-name: flipOutX;
-  animation-name: flipOutX;
-  -webkit-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-}
-
-@-webkit-keyframes flipOutY {
-  from {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-
-  30% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes flipOutY {
-  from {
-    -webkit-transform: perspective(400px);
-    transform: perspective(400px);
-  }
-
-  30% {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
-    opacity: 0;
-  }
-}
-
-.flipOutY {
-  -webkit-backface-visibility: visible !important;
-  backface-visibility: visible !important;
-  -webkit-animation-name: flipOutY;
-  animation-name: flipOutY;
-}
-
-@-webkit-keyframes lightSpeedIn {
-  from {
-    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
-    transform: translate3d(100%, 0, 0) skewX(-30deg);
-    opacity: 0;
-  }
-
-  60% {
-    -webkit-transform: skewX(20deg);
-    transform: skewX(20deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: skewX(-5deg);
-    transform: skewX(-5deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes lightSpeedIn {
-  from {
-    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
-    transform: translate3d(100%, 0, 0) skewX(-30deg);
-    opacity: 0;
-  }
-
-  60% {
-    -webkit-transform: skewX(20deg);
-    transform: skewX(20deg);
-    opacity: 1;
-  }
-
-  80% {
-    -webkit-transform: skewX(-5deg);
-    transform: skewX(-5deg);
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.lightSpeedIn {
-  -webkit-animation-name: lightSpeedIn;
-  animation-name: lightSpeedIn;
-  -webkit-animation-timing-function: ease-out;
-  animation-timing-function: ease-out;
-}
-
-@-webkit-keyframes lightSpeedOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
-    transform: translate3d(100%, 0, 0) skewX(30deg);
-    opacity: 0;
-  }
-}
-
-@keyframes lightSpeedOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
-    transform: translate3d(100%, 0, 0) skewX(30deg);
-    opacity: 0;
-  }
-}
-
-.lightSpeedOut {
-  -webkit-animation-name: lightSpeedOut;
-  animation-name: lightSpeedOut;
-  -webkit-animation-timing-function: ease-in;
-  animation-timing-function: ease-in;
-}
-
-@-webkit-keyframes rotateIn {
-  from {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: rotate3d(0, 0, 1, -200deg);
-    transform: rotate3d(0, 0, 1, -200deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes rotateIn {
-  from {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: rotate3d(0, 0, 1, -200deg);
-    transform: rotate3d(0, 0, 1, -200deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.rotateIn {
-  -webkit-animation-name: rotateIn;
-  animation-name: rotateIn;
-}
-
-@-webkit-keyframes rotateInDownLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInDownLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.rotateInDownLeft {
-  -webkit-animation-name: rotateInDownLeft;
-  animation-name: rotateInDownLeft;
-}
-
-@-webkit-keyframes rotateInDownRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInDownRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.rotateInDownRight {
-  -webkit-animation-name: rotateInDownRight;
-  animation-name: rotateInDownRight;
-}
-
-@-webkit-keyframes rotateInUpLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInUpLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.rotateInUpLeft {
-  -webkit-animation-name: rotateInUpLeft;
-  animation-name: rotateInUpLeft;
-}
-
-@-webkit-keyframes rotateInUpRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -90deg);
-    transform: rotate3d(0, 0, 1, -90deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-@keyframes rotateInUpRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -90deg);
-    transform: rotate3d(0, 0, 1, -90deg);
-    opacity: 0;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: none;
-    transform: none;
-    opacity: 1;
-  }
-}
-
-.rotateInUpRight {
-  -webkit-animation-name: rotateInUpRight;
-  animation-name: rotateInUpRight;
-}
-
-@-webkit-keyframes rotateOut {
-  from {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: rotate3d(0, 0, 1, 200deg);
-    transform: rotate3d(0, 0, 1, 200deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOut {
-  from {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: center;
-    transform-origin: center;
-    -webkit-transform: rotate3d(0, 0, 1, 200deg);
-    transform: rotate3d(0, 0, 1, 200deg);
-    opacity: 0;
-  }
-}
-
-.rotateOut {
-  -webkit-animation-name: rotateOut;
-  animation-name: rotateOut;
-}
-
-@-webkit-keyframes rotateOutDownLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutDownLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 45deg);
-    transform: rotate3d(0, 0, 1, 45deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutDownLeft {
-  -webkit-animation-name: rotateOutDownLeft;
-  animation-name: rotateOutDownLeft;
-}
-
-@-webkit-keyframes rotateOutDownRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutDownRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutDownRight {
-  -webkit-animation-name: rotateOutDownRight;
-  animation-name: rotateOutDownRight;
-}
-
-@-webkit-keyframes rotateOutUpLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutUpLeft {
-  from {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: left bottom;
-    transform-origin: left bottom;
-    -webkit-transform: rotate3d(0, 0, 1, -45deg);
-    transform: rotate3d(0, 0, 1, -45deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutUpLeft {
-  -webkit-animation-name: rotateOutUpLeft;
-  animation-name: rotateOutUpLeft;
-}
-
-@-webkit-keyframes rotateOutUpRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 90deg);
-    transform: rotate3d(0, 0, 1, 90deg);
-    opacity: 0;
-  }
-}
-
-@keyframes rotateOutUpRight {
-  from {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform-origin: right bottom;
-    transform-origin: right bottom;
-    -webkit-transform: rotate3d(0, 0, 1, 90deg);
-    transform: rotate3d(0, 0, 1, 90deg);
-    opacity: 0;
-  }
-}
-
-.rotateOutUpRight {
-  -webkit-animation-name: rotateOutUpRight;
-  animation-name: rotateOutUpRight;
-}
-
-@-webkit-keyframes hinge {
-  0% {
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  20%, 60% {
-    -webkit-transform: rotate3d(0, 0, 1, 80deg);
-    transform: rotate3d(0, 0, 1, 80deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  40%, 80% {
-    -webkit-transform: rotate3d(0, 0, 1, 60deg);
-    transform: rotate3d(0, 0, 1, 60deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 700px, 0);
-    transform: translate3d(0, 700px, 0);
-    opacity: 0;
-  }
-}
-
-@keyframes hinge {
-  0% {
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  20%, 60% {
-    -webkit-transform: rotate3d(0, 0, 1, 80deg);
-    transform: rotate3d(0, 0, 1, 80deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-  }
-
-  40%, 80% {
-    -webkit-transform: rotate3d(0, 0, 1, 60deg);
-    transform: rotate3d(0, 0, 1, 60deg);
-    -webkit-transform-origin: top left;
-    transform-origin: top left;
-    -webkit-animation-timing-function: ease-in-out;
-    animation-timing-function: ease-in-out;
-    opacity: 1;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 700px, 0);
-    transform: translate3d(0, 700px, 0);
-    opacity: 0;
-  }
-}
-
-.hinge {
-  -webkit-animation-name: hinge;
-  animation-name: hinge;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes rollIn {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
-    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-@keyframes rollIn {
-  from {
-    opacity: 0;
-    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
-    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
-  }
-
-  to {
-    opacity: 1;
-    -webkit-transform: none;
-    transform: none;
-  }
-}
-
-.rollIn {
-  -webkit-animation-name: rollIn;
-  animation-name: rollIn;
-}
-
-/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
-
-@-webkit-keyframes rollOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
-    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
-  }
-}
-
-@keyframes rollOut {
-  from {
-    opacity: 1;
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
-    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
-  }
-}
-
-.rollOut {
-  -webkit-animation-name: rollOut;
-  animation-name: rollOut;
-}
-
-@-webkit-keyframes zoomIn {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  50% {
-    opacity: 1;
-  }
-}
-
-@keyframes zoomIn {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  50% {
-    opacity: 1;
-  }
-}
-
-.zoomIn {
-  -webkit-animation-name: zoomIn;
-  animation-name: zoomIn;
-}
-
-@-webkit-keyframes zoomInDown {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomInDown {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomInDown {
-  -webkit-animation-name: zoomInDown;
-  animation-name: zoomInDown;
-}
-
-@-webkit-keyframes zoomInLeft {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
-    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomInLeft {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
-    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomInLeft {
-  -webkit-animation-name: zoomInLeft;
-  animation-name: zoomInLeft;
-}
-
-@-webkit-keyframes zoomInRight {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
-    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomInRight {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
-    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomInRight {
-  -webkit-animation-name: zoomInRight;
-  animation-name: zoomInRight;
-}
-
-@-webkit-keyframes zoomInUp {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomInUp {
-  from {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  60% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomInUp {
-  -webkit-animation-name: zoomInUp;
-  animation-name: zoomInUp;
-}
-
-@-webkit-keyframes zoomOut {
-  from {
-    opacity: 1;
-  }
-
-  50% {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  to {
-    opacity: 0;
-  }
-}
-
-@keyframes zoomOut {
-  from {
-    opacity: 1;
-  }
-
-  50% {
-    opacity: 0;
-    -webkit-transform: scale3d(.3, .3, .3);
-    transform: scale3d(.3, .3, .3);
-  }
-
-  to {
-    opacity: 0;
-  }
-}
-
-.zoomOut {
-  -webkit-animation-name: zoomOut;
-  animation-name: zoomOut;
-}
-
-@-webkit-keyframes zoomOutDown {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
-    -webkit-transform-origin: center bottom;
-    transform-origin: center bottom;
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomOutDown {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
-    -webkit-transform-origin: center bottom;
-    transform-origin: center bottom;
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomOutDown {
-  -webkit-animation-name: zoomOutDown;
-  animation-name: zoomOutDown;
-}
-
-@-webkit-keyframes zoomOutLeft {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
-    transform: scale(.1) translate3d(-2000px, 0, 0);
-    -webkit-transform-origin: left center;
-    transform-origin: left center;
-  }
-}
-
-@keyframes zoomOutLeft {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
-    transform: scale(.1) translate3d(-2000px, 0, 0);
-    -webkit-transform-origin: left center;
-    transform-origin: left center;
-  }
-}
-
-.zoomOutLeft {
-  -webkit-animation-name: zoomOutLeft;
-  animation-name: zoomOutLeft;
-}
-
-@-webkit-keyframes zoomOutRight {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
-    transform: scale(.1) translate3d(2000px, 0, 0);
-    -webkit-transform-origin: right center;
-    transform-origin: right center;
-  }
-}
-
-@keyframes zoomOutRight {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
-    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
-    transform: scale(.1) translate3d(2000px, 0, 0);
-    -webkit-transform-origin: right center;
-    transform-origin: right center;
-  }
-}
-
-.zoomOutRight {
-  -webkit-animation-name: zoomOutRight;
-  animation-name: zoomOutRight;
-}
-
-@-webkit-keyframes zoomOutUp {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
-    -webkit-transform-origin: center bottom;
-    transform-origin: center bottom;
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-@keyframes zoomOutUp {
-  40% {
-    opacity: 1;
-    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
-    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
-  }
-
-  to {
-    opacity: 0;
-    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
-    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
-    -webkit-transform-origin: center bottom;
-    transform-origin: center bottom;
-    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
-  }
-}
-
-.zoomOutUp {
-  -webkit-animation-name: zoomOutUp;
-  animation-name: zoomOutUp;
-}
-
-@-webkit-keyframes slideInDown {
-  from {
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes slideInDown {
-  from {
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.slideInDown {
-  -webkit-animation-name: slideInDown;
-  animation-name: slideInDown;
-}
-
-@-webkit-keyframes slideInLeft {
-  from {
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes slideInLeft {
-  from {
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.slideInLeft {
-  -webkit-animation-name: slideInLeft;
-  animation-name: slideInLeft;
-}
-
-@-webkit-keyframes slideInRight {
-  from {
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes slideInRight {
-  from {
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.slideInRight {
-  -webkit-animation-name: slideInRight;
-  animation-name: slideInRight;
-}
-
-@-webkit-keyframes slideInUp {
-  from {
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-@keyframes slideInUp {
-  from {
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-    visibility: visible;
-  }
-
-  to {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-}
-
-.slideInUp {
-  -webkit-animation-name: slideInUp;
-  animation-name: slideInUp;
-}
-
-@-webkit-keyframes slideOutDown {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-}
-
-@keyframes slideOutDown {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(0, 100%, 0);
-    transform: translate3d(0, 100%, 0);
-  }
-}
-
-.slideOutDown {
-  -webkit-animation-name: slideOutDown;
-  animation-name: slideOutDown;
-}
-
-@-webkit-keyframes slideOutLeft {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-}
-
-@keyframes slideOutLeft {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(-100%, 0, 0);
-    transform: translate3d(-100%, 0, 0);
-  }
-}
-
-.slideOutLeft {
-  -webkit-animation-name: slideOutLeft;
-  animation-name: slideOutLeft;
-}
-
-@-webkit-keyframes slideOutRight {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-}
-
-@keyframes slideOutRight {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(100%, 0, 0);
-    transform: translate3d(100%, 0, 0);
-  }
-}
-
-.slideOutRight {
-  -webkit-animation-name: slideOutRight;
-  animation-name: slideOutRight;
-}
-
-@-webkit-keyframes slideOutUp {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-}
-
-@keyframes slideOutUp {
-  from {
-    -webkit-transform: translate3d(0, 0, 0);
-    transform: translate3d(0, 0, 0);
-  }
-
-  to {
-    visibility: hidden;
-    -webkit-transform: translate3d(0, -100%, 0);
-    transform: translate3d(0, -100%, 0);
-  }
-}
-
-.slideOutUp {
-  -webkit-animation-name: slideOutUp;
-  animation-name: slideOutUp;
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/app-font.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/app-font.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/app-font.css
deleted file mode 100644
index c5a91ca..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/app-font.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.
- */
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 300;
-  src: local('Open Sans Light'), local('OpenSans-Light'), url(../fonts/fontopensans/open-sans-300.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 400;
-  src: local('Open Sans'), local('OpenSans'), url(../fonts/fontopensans/open-sans-400.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 600;
-  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(../fonts/fontopensans/open-sans-600.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: normal;
-  font-weight: 700;
-  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(../fonts/fontopensans/open-sans-700.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: italic;
-  font-weight: 300;
-  src: local('Open Sans Light Italic'), local('OpenSansLight-Italic'), url(../fonts/fontopensans/open-sans-300i.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: italic;
-  font-weight: 400;
-  src: local('Open Sans Italic'), local('OpenSans-Italic'), url(../fonts/fontopensans/open-sans-400i.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: italic;
-  font-weight: 600;
-  src: local('Open Sans Semibold Italic'), local('OpenSans-SemiboldItalic'), url(../fonts/fontopensans/open-sans-600i.woff) format('woff');
-}
-@font-face {
-  font-family: 'Open Sans';
-  font-style: italic;
-  font-weight: 700;
-  src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), url(../fonts/fontopensans/open-sans-700i.woff) format('woff');
-}
\ No newline at end of file


[30/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.svg
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.svg b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 8e63114..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,415 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!--
-   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 svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t1
 9 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28
 t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -1
 13 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t
 -22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 
 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 
 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17
 t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-1
 5 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5

<TRUNCATED>

[39/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/.angular-cli.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/.angular-cli.json b/ambari-logsearch/ambari-logsearch-web/.angular-cli.json
new file mode 100644
index 0000000..cc74739
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/.angular-cli.json
@@ -0,0 +1,64 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "project": {
+    "name": "ambari-logsearch-web-new"
+  },
+  "apps": [
+    {
+      "root": "src",
+      "outDir": "dist",
+      "assets": [
+        "assets",
+        "favicon.ico"
+      ],
+      "index": "index.html",
+      "main": "main.ts",
+      "polyfills": "polyfills.ts",
+      "test": "test.ts",
+      "tsconfig": "tsconfig.app.json",
+      "testTsconfig": "tsconfig.spec.json",
+      "prefix": "app",
+      "styles": [
+        "styles.less",
+        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
+        "../node_modules/font-awesome/css/font-awesome.min.css",
+        "../src/vendor/css/bootstrap-logsearch.min.css"
+      ],
+      "scripts": [
+        "../node_modules/jquery/dist/jquery.min.js",
+        "../node_modules/bootstrap/dist/js/bootstrap.min.js",
+        "../src/vendor/js/bootstrap-logsearch.min.js"
+      ],
+      "environmentSource": "environments/environment.ts",
+      "environments": {
+        "dev": "environments/environment.ts",
+        "prod": "environments/environment.prod.ts"
+      }
+    }
+  ],
+  "e2e": {
+    "protractor": {
+      "config": "./protractor.conf.js"
+    }
+  },
+  "lint": [
+    {
+      "project": "src/tsconfig.app.json"
+    },
+    {
+      "project": "src/tsconfig.spec.json"
+    },
+    {
+      "project": "e2e/tsconfig.e2e.json"
+    }
+  ],
+  "test": {
+    "karma": {
+      "config": "./karma.conf.js"
+    }
+  },
+  "defaults": {
+    "styleExt": "less",
+    "component": {}
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/.bowerrc
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/.bowerrc b/ambari-logsearch/ambari-logsearch-web/.bowerrc
deleted file mode 100644
index 1a4d0c7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "directory": "libs"
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/.editorconfig
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/.editorconfig b/ambari-logsearch/ambari-logsearch-web/.editorconfig
new file mode 100644
index 0000000..6e87a00
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/.editorconfig
@@ -0,0 +1,13 @@
+# Editor configuration, see http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/.gitignore
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/.gitignore b/ambari-logsearch/ambari-logsearch-web/.gitignore
index ae3c172..54bfd20 100644
--- a/ambari-logsearch/ambari-logsearch-web/.gitignore
+++ b/ambari-logsearch/ambari-logsearch-web/.gitignore
@@ -1 +1,42 @@
-/bin/
+# See http://help.github.com/ignore-files/ for more about ignoring files.
+
+# compiled output
+/dist
+/tmp
+/out-tsc
+
+# dependencies
+/node_modules
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# misc
+/.sass-cache
+/connect.lock
+/coverage
+/libpeerconnection.log
+npm-debug.log
+testem.log
+/typings
+
+# e2e
+/e2e/*.js
+/e2e/*.map
+
+# System Files
+.DS_Store
+Thumbs.db

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/Gruntfile.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/Gruntfile.js b/ambari-logsearch/ambari-logsearch-web/Gruntfile.js
deleted file mode 100644
index aaad310..0000000
--- a/ambari-logsearch/ambari-logsearch-web/Gruntfile.js
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * 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.
- */
-module.exports = function(grunt) {
-  'use strict';
-
-  var bowerLibsDir = 'libs/';
-  var vendorDir = "../libs/";
-  var sourceBowerLibsDir = '../../src/main/webapp/libs/bower';
-  var sourceCustomLibsDir = '../../src/main/webapp/libs/custom';
-
-  grunt.initConfig({
-    clean: {
-      vendors: [ vendorDir ]
-    },
-    copy: {
-      main: {
-        files: [
-          {
-            expand: true, cwd: bowerLibsDir, src:
-            [
-              'backbone/backbone.js', 'backbone/LICENSE',
-              'backbone.localstorage/backbone.localStorage-min.js',
-              'backgrid-filter/backgrid-filter.min.js', 'backgrid-filter/backgrid-filter.min.css',
-              'backgrid-paginator/backgrid-paginator.min.js', 'backgrid-paginator/backgrid-paginator.min.css',
-              'backgrid-select-all/backgrid-select-all.min.js', 'backgrid-select-all/backgrid-select-all.min.css',
-              'backgrid-sizeable-columns/backgrid-sizeable-columns.js', 'backgrid-sizeable-columns/backgrid-sizeable-columns.css',
-              'backgrid-orderable-columns/backgrid-orderable-columns.js', 'backgrid-orderable-columns/backgrid-orderable-columns.css',
-              'bootbox/bootbox.js',
-              'bootstrap-notify/js/bootstrap-notify.js', 'bootstrap-notify/css/bootstrap-notify.css',
-              'jquery/jquery.min.js',
-              'jquery-toggles/toggles.min.js', 'jquery-toggles/toggles.css',
-              'requirejs/require.js',
-              'require-handlebars-plugin/hbs.js',
-              'select2/select2.css', 'select2/select2.min.js', 'select2/select2.png', 'select2/select2-spinner.gif',
-              'd3/d3.min.js',
-              'underscore/underscore-min.js'
-            ], dest: vendorDir, filter: 'isFile'
-          },
-          // Merge source files to vendor
-          {
-            expand: true, cwd: sourceBowerLibsDir, src: ['**'], dest: vendorDir, filter: 'isFile'
-          },
-          // Merge custom source files to vendor
-          {
-            expand: true, cwd: sourceCustomLibsDir, src: ['**'], dest: vendorDir, filter: 'isFile'
-          },
-          // Custom mappings
-          {
-            expand: true, cwd: bowerLibsDir + 'backbone.babysitter/lib/', src: ['backbone.babysitter.min.js', 'backbone.babysitter.min.js.map'], dest: vendorDir + 'backbone.babysitter', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'backbone.marionette/lib/', src: ['backbone.marionette.min.js', 'backbone.marionette.map'], dest: vendorDir + 'backbone.marionette', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'backbone.wreqr/lib/', src: ['backbone.wreqr.min.js', 'backbone.wreqr.min.js.map'], dest: vendorDir + 'backbone.wreqr', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'backbone-forms/distribution/', src: ['**'], dest: vendorDir + 'backbone-forms', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'backgrid/lib/', src: ['backgrid.min.js', 'backgrid.min.css'], dest: vendorDir + 'backgrid', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir, src: ['backgrid-sizeable-columns/backgrid-sizeable-columns.js', 'backgrid-sizeable-columns/backgrid-sizeable-columns.css'], dest: vendorDir, filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir, src: ['backgrid-orderable-columns/backgrid-orderable-columns.js', 'backgrid-orderable-columns/backgrid-orderable-columns.css'], dest: vendorDir, filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'bootstrap/dist/js', src: ['bootstrap.min.js'], dest: vendorDir + 'bootstrap', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'bootstrap/dist/css', src: ['bootstrap.min.css', 'bootstrap-theme.min.css', 'bootstrap-theme.css.map', 'bootstrap.css.map'], dest: vendorDir + 'bootstrap', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'globalize/lib', src: ['**'], dest: vendorDir + 'globalize', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'moment/min/', src: ['moment.min.js'], dest: vendorDir + 'moment', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'moment-timezone/builds/', src: ['moment-timezone-with-data.min.js'], dest: vendorDir + 'moment', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'require-handlebars-plugin/hbs', src: ['i18nprecompile.js', 'json2.js'], dest: vendorDir + 'require-handlebars-plugin', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir, src: ['i18nprecompile.js', 'json2.js'], dest: vendorDir + 'require-handlebars-plugin', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'nvd3/build/', src: ['nv.d3.min.js', 'nv.d3.min.css'], dest: vendorDir + 'nvd3', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'noty/js/noty/packaged', src: ['jquery.noty.packaged.min.js'], dest: vendorDir + 'noty', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'gridster.js/dist/', src: ['jquery.gridster.min.js', 'jquery.gridster.min.css'], dest: vendorDir + 'gridster', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'bootstrap-tour/build/js/', src: ['bootstrap-tour.min.js'], dest: vendorDir + 'bootstrap-tour', filter: 'isFile'
-          },
-          {
-            expand: true, cwd: bowerLibsDir + 'bootstrap-tour/build/css/', src: ['bootstrap-tour.min.css'], dest: vendorDir + 'bootstrap-tour', filter: 'isFile'
-          }
-        ]
-      }
-    }
-  });
-
-  grunt.loadNpmTasks('grunt-contrib-copy');
-  grunt.registerTask('default', ['copy']);
-  grunt.registerTask('build', 'Copy necessary files (js/css) from third party libraries.', function() {
-    if (!grunt.file.isDir(vendorDir)) {
-      grunt.file.mkdir(vendorDir);
-
-      grunt.log.oklns(grunt.template.process('Directory "<%= directory %>" was created successfully.',
-        {
-          data: { directory: vendorDir }
-        }));
-    }
-    grunt.task.run('copy');
-  });
-
-};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/LICENSE.txt
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/LICENSE.txt b/ambari-logsearch/ambari-logsearch-web/LICENSE.txt
deleted file mode 100644
index 49c4907..0000000
--- a/ambari-logsearch/ambari-logsearch-web/LICENSE.txt
+++ /dev/null
@@ -1,339 +0,0 @@
-			       Apache License
-                           Version 2.0, June 2016
-                        http://www.apache.org/licenses/
-            ------------------------------------------------------
-
-    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-
-
-APACHE LOGSEARCH SUBCOMPONENTS:
-
-The Apache Logsearch project contains subcomponents with separate copyright
-notices and license terms. Your use of the source code for the these
-subcomponents is subject to the terms and conditions of the following
-licenses. 
-
------------------------------------------------------------------------
-The MIT License
------------------------------------------------------------------------  
-The Apache Logsearch project bundles the following files under the MIT License:
-
-
-This product includes jQuery v1.10.2 (http://jquery.org - MIT license), Copyright © 2016, jQuery Foundation.
-This product includes jQuery UI v1.11.4 (http://jqueryui.com - MIT license), Copyright © 2016 jQuery Foundation.
-This product includes Bootstrap v3.2.0 (http://getbootstrap.com - MIT license), Copyright © 2011-2016 Twitter, Inc.
-This product include Backbone v1.1.2(http://backbonejs.org - MIT license), Copyright © 2010-2014 by Jeremy Ashkenas.
-This product includes Backbone-amd v1.1.2 (http://backbonejs.org - MIT license), Copyright © 2010-2014 by Jeremy Ashkenas.
-This product includes Underscore v1.5.2 (http://underscorejs.org - MIT license), Copyright © 2009-2013 by Jeremy Ashkenas.
-This product includes Underscore-amd v1.5.2 (http://underscorejs.org - MIT license), Copyright © 2009-2013 by Jeremy Ashkenas.
-This product includes Backbone.Marionette v1.8.8 (http://marionettejs.com - MIT license), Copyright © 2014 by Derick Bailey.
-This product includes Backbone.wreqr v0.2.0 (http://github.com/marionettejs/backbone.wreqr - MIT license), Copyright © 2013 by Derick Bailey.
-This product includes Backbone.babysitter v0.0.6 (http://github.com/babysitterjs/backbone.babysitter - MIT license), Copyright © 2013 by Derick Bailey.
-This product includes Backbone.localstorage  v1.1.7 (https://github.com/jeromegn/Backbone.localStorage - MIT license), Copyright © 2010 Jerome Gravel-Niquet.
-This product includes Bootstrap-datapicker (http://www.eyecon.ro/bootstrap-datepicker - MIT license), Copyright © 2012 Stefan Petre.
-This product includes Handlebar v1.3.0 (http://github.com/jrburke/require-cs - MIT license), Copyright © 2011 by Yehuda Katz.
-This product includes i18nprecompile (http://github.com/jrburke/require-cs - MIT license), Copyright ©  2014 by Tom de Grunt.
-This product includes hbs v0.4.0 (http://github.com/jrburke/require-cs - MIT license), Copyright © by Alex Sexton.
-This product includes Backgrid (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-filter (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-select-all (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-paginator (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-columnmanager (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-sizeable (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backgrid-orderable (http://github.com/wyuenho/backgrid - MIT license), Copyright © by 2014 Jimmy Yuen Ho Wong and contributors.
-This product includes Backbone-pageable v1.3.2 (http://github.com/wyuenho/backbone-pageable - MIT license)
-Copyright ©  2013 Jimmy Yuen Ho Wong.
-This product includes Daterangepicker v2.0 (http://www.dangrossman.info - MIT license), Copyright ©  2012-2015 Dan Grossman.
-This product includes select2 v3.5.1 (https://github.com/select2/select2 - MIT license), Copyright ©  2012 Igor Vaynberg.
-This product includes Bootbox v4.4.0 (http://bootboxjs.com - MIT license), Copyright ©  2011-2015 by Nick Payne.
-This product includes Moment v2.10.3 (http://momentjs.com - MIT license), Copyright ©  2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors.
-This product includes Moment-tz v0.4.1 (http://github.com/moment/moment-timezone - MIT license), Copyright ©  2011-2016 Tim Wood, Iskren Chernev, Moment.js contributors.
-This product includes Globalize (http://github.com/jquery/globalize - MIT license), Copyright © Software Freedom Conservancy, Inc.
-This product includes Noty v2.3.5 (http://needim.github.com/noty/ - MIT license), Copyright ©  2012 Nedim Arabacı.
-This product includes jstz (timezone detection) v1.0.4 (https://github.com/mde/timezone-js - MIT license), Copyright © 2010 Matthew Eernisse.
-This product includes jquery.sparkline v2.1.2 (http://jquery.sparkline.js - MIT license), Copyright ©  by Splunk, Inc.
-This product includes jquery.gridster v0.5.6 (http://gridster.net - MIT license), Copyright ©  2014 by ducksboard.
-This product includes RequireJS v2.1.8 (http://github.com/jrburke/requirejs - MIT license), Copyright © 2010-2012 by The Dojo Foundation.
-This product includes Bootstrap-notify.js v1.0 (http://goodybag.github.com/bootstrap-notify - MIT license), Copyright © 2012 by Goodybag, Inc.
-This product includes jQuery toggles v2.0.4 (https://github.com/simontabor/jquery-toggles - MIT license), Copyright ©  2013 by Simon Tabor.
-This product includes jquery tag-it v2.0 (http://aehlke.github.com/tag-it/ - MIT license), Copyright ©  2011 by Levy Carneiro Jr.
-This is product includes X-editable - v1.5.0 (http://github.com/vitalets/x-editable - MIT license), Copyright © 2013 by Vitaliy Potapov.
-This product includes Font Awesome 4.3.0 (http://fontawesome.io/ - MIT license), Copyright © by Dave Gandy
-This product includes jQuery-Cookies v1.4.0 (https://github.com/carhartl/jquery-cookie - MIT license), Copyright ©  2013 by Klaus Hartl.
-This product includes Backbone-fetch-cache v1.4.0 (https://github.com/mrappleton/backbone-fetch-cache.git - MIT license), Copyright ©  by Andy Appleton.
-This product includes loadCss (https://github.com/filamentgroup/loadCSS - MIT license), Copyright © by Filament Group, Inc.
-This product includes Backone-forms v0.12.0 (http://github.com/powmedia/backbone-forms - MIT license), Copyright © 2013 Charles Davison, Pow Media Ltd.
-
-
-
------------------------------------------------------------------------
-The Apache License
------------------------------------------------------------------------
-The Apache Logsearch project bundles the following files under the Apache License
-
-
-This product includes Nv.d3 v1.8.1 (https://github.com/novus/nvd3 - Apache license), Copyright © 2011-2014 Novus Partners, Inc.
-This product includes d3 v3.5.5 (https://d3js.org - Apache license), Copyright ©  2010-2016 Mike Bostock.
-This product includes d3.tip v3.5.5 (https://github.com/Caged/d3-tip - Apache license), Copyright © 2013 Justin Palmer.
-
-
-
-------------------------------------------------------------------------
-Public Domain License
-------------------------------------------------------------------------
-The Apache Logsearch project bundles the following files under the Public Domain License
-
-This product includes json2.js (https://github.com/douglascrockford/JSON-js - Public Domain license) by Douglas Crockford
-
-
-
------------------------------------------------------------------------
- VisualSearch License 
------------------------------------------------------------------------
-This product includes VisualSearch.js 0.5.0 (http://documentcloud.github.com/visualsearch), © 2011 Samuel Clay, @samuelclay, DocumentCloud Inc.
-
-
-
-
-Copyright (c) 2011 Samuel Clay, @samuelclay, DocumentCloud
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-
-
------------------------------------------------------------------------
- The WTFPL License
------------------------------------------------------------------------
-This product includes Require.js Handlebars Plugin (https://github.com/SlexAxton/require-handlebars-plugin- WTFPL + requirejs + handlebars), Copyright © 2011-2014 by Yehuda Katz.
-
-Full License information is available at http://www.wtfpl.net/about/
-
------------------------------------------------------------------------
-SIL Open Font License (OFL)
------------------------------------------------------------------------
-
-This product includes Font Awesome 4.3.0 (http://fontawesome.io/ - SIL Open Font License (OFL) licensee) by Dave Gandy
-
-
-
-
-----------------------------------------------------------------------------------------------------------
-
-
-
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/README.md
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/README.md b/ambari-logsearch/ambari-logsearch-web/README.md
new file mode 100644
index 0000000..ff1456e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/README.md
@@ -0,0 +1,28 @@
+# AmbariLogsearchWeb
+
+This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.0.0.
+
+## Development server
+
+Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
+
+## Code scaffolding
+
+Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`.
+
+## Build
+
+Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
+
+## Running unit tests
+
+Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
+
+## Running end-to-end tests
+
+Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
+Before running the tests make sure you are serving the app via `ng serve`.
+
+## Further help
+
+To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/bower.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/bower.json b/ambari-logsearch/ambari-logsearch-web/bower.json
deleted file mode 100644
index 849ae41..0000000
--- a/ambari-logsearch/ambari-logsearch-web/bower.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "name": "ambari-logserach-web",
-  "description": "<!-- {% comment %} 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",
-  "version": "0.5.0",
-  "appPath": "src/main/webapp",
-  "directory": "libs",
-  "dependencies": {
-    "jquery": "1.10.2",
-    "jquery-ui": "1.11.4",
-    "jquery-toggles": "2.0.4",
-    "bootbox": "4.4.0",
-    "bootstrap": "3.2.0",
-    "bootstrap-notify": "0.1.0",
-    "bootstrap-tour" : "0.10.3",
-    "backgrid": "0.3.5",
-    "backgrid-filter": "0.3.5",
-    "backgrid-columnmanager": "0.2.4",
-    "backgrid-paginator": "0.3.5",
-    "backgrid-select-all": "0.3.5",
-    "backgrid-sizeable-columns": "0.1.1",
-    "backgrid-orderable-columns": "0.1.2",
-    "backbone": "1.1.2",
-    "backbone.localstorage": "1.1.7",
-    "backbone.marionette": "1.8.8",
-    "backbone-forms": "0.12.0",
-    "d3" : "3.5.5",
-    "noty" : "2.3.5",
-    "nvd3" : "1.8.1",
-    "gridster.js" : "0.5.6",
-    "globalize": "0.1.1",
-    "handlebars": "1.3.0",
-    "moment": "2.10.3",
-    "moment-timezone" : "0.4.1",
-    "require-handlebars-plugin" : "0.4.0",
-    "requirejs": "2.1.8",
-    "select2": "3.5.1",
-    "underscore": "1.5.2"
-  }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/build.properties
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/build.properties b/ambari-logsearch/ambari-logsearch-web/build.properties
deleted file mode 100644
index 1656934..0000000
--- a/ambari-logsearch/ambari-logsearch-web/build.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-#   Licensed under the Apache License, Version 2.0 (the "License");
-#   you may not use this file except in compliance with the License.
-#   You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS,
-#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#   See the License for the specific language governing permissions and
-#   limitations under the License.
-app.target.dir=${builddir}/target/classes/static
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/build.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/build.xml b/ambari-logsearch/ambari-logsearch-web/build.xml
deleted file mode 100644
index d757241..0000000
--- a/ambari-logsearch/ambari-logsearch-web/build.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!--
-   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.
--->
-<project basedir="." default="build" name="logsearch">
-  <property environment="env"/>
-  <property name="debuglevel" value="source,lines,vars"/>
-  <dirname property="builddir" file="build.xml"/>
-  <property name="target" value="1.7"/>
-  <property name="source" value="1.7"/>
-  <property file="build.properties"/>
-
-  <target name="init">
-  </target>
-  <target name="build"/>
-  <target name="package">
-    <copy todir="${app.target.dir}" includeEmptyDirs="no">
-      <fileset dir="src/main/webapp"/>
-    </copy>
-  </target>
-
-  <target description="Build all projects which reference this project. Useful to propagate changes."
-          name="build-refprojects"/>
-</project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/e2e/app.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/e2e/app.e2e-spec.ts b/ambari-logsearch/ambari-logsearch-web/e2e/app.e2e-spec.ts
new file mode 100644
index 0000000..ebfdcb9
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/e2e/app.e2e-spec.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {AmbariLogsearchWebNewPage} from './app.po';
+
+describe('ambari-logsearch-web-new App', () => {
+  let page: AmbariLogsearchWebNewPage;
+
+  beforeEach(() => {
+    page = new AmbariLogsearchWebNewPage();
+  });
+
+  it('should display title', () => {
+    page.navigateTo();
+    expect(page.getParagraphText()).toEqual('Ambari Log Search');
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/e2e/app.po.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/e2e/app.po.ts b/ambari-logsearch/ambari-logsearch-web/e2e/app.po.ts
new file mode 100644
index 0000000..c446bfb
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/e2e/app.po.ts
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+import { browser, element, by } from 'protractor';
+
+export class AmbariLogsearchWebNewPage {
+  navigateTo() {
+    return browser.get('/');
+  }
+
+  getParagraphText() {
+    return element(by.css('app-root h1')).getText();
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/e2e/tsconfig.e2e.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/e2e/tsconfig.e2e.json b/ambari-logsearch/ambari-logsearch-web/e2e/tsconfig.e2e.json
new file mode 100644
index 0000000..ac7a373
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/e2e/tsconfig.e2e.json
@@ -0,0 +1,12 @@
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/e2e",
+    "module": "commonjs",
+    "target": "es5",
+    "types":[
+      "jasmine",
+      "node"
+    ]
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/karma.conf.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/karma.conf.js b/ambari-logsearch/ambari-logsearch-web/karma.conf.js
new file mode 100644
index 0000000..0512808
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/karma.conf.js
@@ -0,0 +1,62 @@
+/**
+ * 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.
+ */
+
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/0.13/config/configuration-file.html
+
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular/cli'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage-istanbul-reporter'),
+      require('@angular/cli/plugins/karma')
+    ],
+    client:{
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    files: [
+      { pattern: './src/test.ts', watched: false }
+    ],
+    preprocessors: {
+      './src/test.ts': ['@angular/cli']
+    },
+    mime: {
+      'text/x-typescript': ['ts','tsx']
+    },
+    coverageIstanbulReporter: {
+      reports: [ 'html', 'lcovonly' ],
+      fixWebpackSourcePaths: true
+    },
+    angularCli: {
+      environment: 'dev'
+    },
+    reporters: config.angularCli && config.angularCli.codeCoverage
+              ? ['progress', 'coverage-istanbul']
+              : ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome'],
+    singleRun: false
+  });
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/package.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/package.json b/ambari-logsearch/ambari-logsearch-web/package.json
index 92fd245..96733eb 100644
--- a/ambari-logsearch/ambari-logsearch-web/package.json
+++ b/ambari-logsearch/ambari-logsearch-web/package.json
@@ -1,25 +1,64 @@
 {
   "name": "ambari-logsearch-web",
-  "version": "0.5.0",
-  "description": "Front-end package for the Apache Ambari Log Search",
-  "homepage": "http://ambari.apache.org/",
-  "license" : "Apache-2.0",
-  "private": true,
-  "repository": {
-    "type": "git",
-    "url": "https://git-wip-us.apache.org/repos/asf/ambari/repo?p=ambari.git;a=summary"
+  "version": "3.0.0",
+  "license": "Apache 2.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "ng serve",
+    "build": "ng build",
+    "build-prod": "ng build -prod",
+    "test": "ng test",
+    "lint": "ng lint",
+    "e2e": "ng e2e"
   },
   "dependencies": {
-    "del": "^2.2.0",
-    "run-sequence": "^1.1.5",
-    "yargs": "^3.32.0",
-    "bower": "~1.7.2",
-    "grunt": "~0.4.5",
-    "grunt-cli": "~0.1.13",
-    "grunt-contrib-jshint": "~0.11.3",
-    "grunt-contrib-copy": "0.4.x"
+    "@angular/common": "^4.0.0",
+    "@angular/compiler": "^4.0.0",
+    "@angular/core": "^4.0.0",
+    "@angular/forms": "^4.0.0",
+    "@angular/http": "^4.0.0",
+    "@angular/platform-browser": "^4.0.0",
+    "@angular/platform-browser-dynamic": "^4.0.0",
+    "@angular/router": "^4.0.0",
+    "@ngrx/core": "^1.2.0",
+    "@ngrx/store": "^2.2.2",
+    "@ngx-translate/core": "^6.0.1",
+    "@ngx-translate/http-loader": "^0.0.3",
+    "angular-moment-timezone": "^0.2.1",
+    "angular2-moment": "^1.4.0",
+    "bootstrap": "^3.3.7",
+    "core-js": "^2.4.1",
+    "d3": "^4.10.0",
+    "font-awesome": "^4.7.0",
+    "jquery": "^1.12.4",
+    "moment": "^2.18.1",
+    "moment-timezone": "^0.5.13",
+    "ngx-bootstrap": "^1.6.6",
+    "rxjs": "^5.1.0",
+    "zone.js": "^0.8.4"
   },
-  "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+  "devDependencies": {
+    "@angular/cli": "1.0.0",
+    "@angular/compiler-cli": "^4.0.0",
+    "@types/d3": "^4.10.0",
+    "@types/jasmine": "2.5.38",
+    "@types/jquery": "^1.10.33",
+    "@types/moment": "^2.13.0",
+    "@types/moment-timezone": "^0.2.34",
+    "@types/node": "~6.0.60",
+    "angular-in-memory-web-api": "^0.3.1",
+    "codelyzer": "~2.0.0",
+    "jasmine-core": "~2.5.2",
+    "jasmine-spec-reporter": "~3.2.0",
+    "karma": "~1.4.1",
+    "karma-chrome-launcher": "~2.0.0",
+    "karma-cli": "~1.0.1",
+    "karma-coverage-istanbul-reporter": "^0.2.0",
+    "karma-jasmine": "~1.1.0",
+    "karma-jasmine-html-reporter": "^0.2.2",
+    "protractor": "~5.1.0",
+    "ts-node": "~2.0.0",
+    "tslint": "~4.5.0",
+    "typescript": "~2.2.0"
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/pom.xml b/ambari-logsearch/ambari-logsearch-web/pom.xml
index 5c193f8..075527b 100644
--- a/ambari-logsearch/ambari-logsearch-web/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-web/pom.xml
@@ -6,18 +6,15 @@
    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.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
     <artifactId>ambari-logsearch</artifactId>
     <groupId>org.apache.ambari</groupId>
@@ -25,81 +22,81 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>ambari-logsearch-web</artifactId>
-  <url>http://maven.apache.org</url>
   <name>Ambari Logsearch Web</name>
+  <version>2.0.0.0-SNAPSHOT</version>
+  <groupId>org.apache.ambari</groupId>
+  <description>Ambari Logsearch Web</description>
+
   <properties>
-    <nodeVersion>v4.5.0</nodeVersion>
-    <npmVersion>2.15.0</npmVersion>
+    <logsearch.npm.config.tmp>/tmp/logsearch_npm_config_tmp</logsearch.npm.config.tmp>
+    <node.version>v6.9.0</node.version>
+    <yarn.version>v0.23.3</yarn.version>
   </properties>
+
   <build>
     <plugins>
       <plugin>
         <groupId>com.github.eirslett</groupId>
         <artifactId>frontend-maven-plugin</artifactId>
-        <version>0.0.22</version>
+        <version>1.4</version>
+        <configuration>
+          <nodeVersion>${node.version}</nodeVersion>
+          <yarnVersion>${yarn.version}</yarnVersion>
+          <workingDirectory>${project.build.directory}/webapp-build</workingDirectory>
+          <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
+          <!-- setting npm_config_tmp environment variable is a workaround for
+               https://github.com/Medium/phantomjs/issues/673 -->
+          <environmentVariables>
+            <npm_config_tmp>${logsearch.npm.config.tmp}</npm_config_tmp>
+          </environmentVariables>
+        </configuration>
         <executions>
           <execution>
-            <id>install node and npm</id>
+            <id>install node and yarn</id>
+            <phase>generate-resources</phase>
             <goals>
-              <goal>install-node-and-npm</goal>
+              <goal>install-node-and-yarn</goal>
             </goals>
-            <configuration>
-              <nodeVersion>${nodeVersion}</nodeVersion>
-              <npmVersion>${npmVersion}</npmVersion>
-            </configuration>
           </execution>
           <execution>
-            <id>npm install</id>
-            <goals>
-              <goal>npm</goal>
-            </goals>
+            <id>yarn install</id>
             <phase>generate-resources</phase>
-          </execution>
-          <execution>
-            <id>bower install</id>
             <goals>
-              <goal>bower</goal>
+              <goal>yarn</goal>
             </goals>
             <configuration>
-              <arguments>install</arguments>
+              <arguments>install --ignore-engines --pure-lockfile</arguments>
             </configuration>
           </execution>
           <execution>
-            <id>grunt build</id>
+            <id>generate dist</id>
+            <phase>generate-resources</phase>
             <goals>
-              <goal>grunt</goal>
+             <goal>yarn</goal>
             </goals>
-            <phase>generate-resources</phase>
             <configuration>
-              <arguments>build</arguments>
+              <arguments>build-prod</arguments>
             </configuration>
           </execution>
+          <!-- TODO: Use this for testing and make it skippable:
+          <execution>
+            <id>run tests</id>
+            <phase>test</phase>
+            <goals>
+            <goal>yarn</goal>
+           </goals>
+           <configuration>
+            <arguments>test</arguments>
+           </configuration>
+          </execution>
+          -->
         </executions>
-        <configuration>
-          <workingDirectory>target/webapp-build</workingDirectory>
-        </configuration>
       </plugin>
       <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         <version>2.6</version>
         <executions>
           <execution>
-            <id>copy-resources</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${basedir}/target/classes/static</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>src/main/webapp</directory>
-                  <filtering>false</filtering>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-          <execution>
             <id>process-webapp-sources</id>
             <phase>process-sources</phase>
             <goals>
@@ -111,26 +108,31 @@
                 <resource>
                   <directory>${basedir}</directory>
                   <includes>
-                    <include>bower.json</include>
-                    <include>.bowerrc</include>
+                    <include>e2e/**</include>
+                    <include>src/**</include>
+                    <include>.*</include>
                     <include>package.json</include>
-                    <include>Gruntfile.js</include>
+                    <include>protactor.conf.js</include>
+                    <include>yarn.lock</include>
+                    <include>karma.conf.js</include>
+                    <include>tsconfig.json</include>
+                    <include>tslint.json</include>
                   </includes>
                 </resource>
               </resources>
             </configuration>
           </execution>
           <execution>
-            <id>copy-webapp-libs</id>
-            <phase>prepare-package</phase>
+            <id>copy-resources</id>
+            <phase>process-resources</phase>
             <goals>
               <goal>copy-resources</goal>
             </goals>
             <configuration>
-              <outputDirectory>${basedir}/target/classes/static/libs/bower</outputDirectory>
+              <outputDirectory>${basedir}/target/classes/dist</outputDirectory>
               <resources>
                 <resource>
-                  <directory>${basedir}/target/libs</directory>
+                  <directory>${basedir}/target/webapp-build/dist</directory>
                   <filtering>false</filtering>
                 </resource>
               </resources>
@@ -139,37 +141,19 @@
         </executions>
       </plugin>
       <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <version>1.7</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <configuration>
-              <target>
-                <ant antfile="build.xml">
-                  <target name="package"/>
-                </ant>
-              </target>
-            </configuration>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
         <groupId>org.apache.rat</groupId>
         <artifactId>apache-rat-plugin</artifactId>
         <configuration>
           <excludes>
-            <exclude>src/main/webapp/libs/**/*</exclude>
-            <exclude>src/main/webapp/robots.txt</exclude>
-            <exclude>src/main/webapp/styles/animate.css</exclude>
-            <exclude>src/main/webapp/styles/visualsearch.css</exclude>
+            <exclude>README.md</exclude>
+            <exclude>*.editorconfig</exclude>
+            <exclude>src/vendor/**</exclude>
+            <exclude>yarn.lock</exclude>
+            <exclude>node_modules/**</exclude>
+            <exclude>dist/**</exclude>
             <exclude>**/*.json</exclude>
             <exclude>**/*.log</exclude>
-            <exclude>.bowerrc</exclude>
+            <exclude>**/*.txt</exclude>
           </excludes>
         </configuration>
         <executions>
@@ -183,4 +167,5 @@
       </plugin>
     </plugins>
   </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/protractor.conf.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/protractor.conf.js b/ambari-logsearch/ambari-logsearch-web/protractor.conf.js
new file mode 100644
index 0000000..6b4a31c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/protractor.conf.js
@@ -0,0 +1,48 @@
+/**
+ * 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.
+ */
+
+// Protractor configuration file, see link for more information
+// https://github.com/angular/protractor/blob/master/lib/config.ts
+
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+  allScriptsTimeout: 11000,
+  specs: [
+    './e2e/**/*.e2e-spec.ts'
+  ],
+  capabilities: {
+    'browserName': 'chrome'
+  },
+  directConnect: true,
+  baseUrl: 'http://localhost:4200/',
+  framework: 'jasmine',
+  jasmineNodeOpts: {
+    showColors: true,
+    defaultTimeoutInterval: 30000,
+    print: function() {}
+  },
+  beforeLaunch: function() {
+    require('ts-node').register({
+      project: 'e2e/tsconfig.e2e.json'
+    });
+  },
+  onPrepare() {
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+  }
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
new file mode 100644
index 0000000..c08cb3a
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/app.module.ts
@@ -0,0 +1,169 @@
+/**
+ * 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.
+ */
+
+import {BrowserModule} from '@angular/platform-browser';
+import {NgModule, CUSTOM_ELEMENTS_SCHEMA, Injector} from '@angular/core';
+import {FormsModule, ReactiveFormsModule} from '@angular/forms';
+import {HttpModule, Http, XHRBackend, BrowserXhr, ResponseOptions, XSRFStrategy} from '@angular/http';
+import {InMemoryBackendService} from 'angular-in-memory-web-api';
+import {AlertModule} from 'ngx-bootstrap';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {MomentModule} from 'angular2-moment';
+import {MomentTimezoneModule} from 'angular-moment-timezone';
+import {environment} from '@envs/environment';
+import {mockApiDataService} from '@app/services/mock-api-data.service'
+import {HttpClientService} from '@app/services/http-client.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {ComponentGeneratorService} from '@app/services/component-generator.service';
+
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
+import {AuditLogsService} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService} from '@app/services/storage/service-logs.service';
+import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
+import {GraphsService} from '@app/services/storage/graphs.service';
+import {HostsService} from '@app/services/storage/hosts.service';
+import {UserConfigsService} from '@app/services/storage/user-configs.service';
+import {FiltersService} from '@app/services/storage/filters.service';
+import {ClustersService} from '@app/services/storage/clusters.service';
+import {ComponentsService} from '@app/services/storage/components.service';
+import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
+import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
+import {reducer} from '@app/services/storage/reducers.service';
+
+import {AppComponent} from '@app/components/app.component';
+import {LoginFormComponent} from '@app/components/login-form/login-form.component';
+import {TopMenuComponent} from '@app/components/top-menu/top-menu.component';
+import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
+import {MainContainerComponent} from '@app/components/main-container/main-container.component';
+import {FiltersPanelComponent} from '@app/components/filters-panel/filters-panel.component';
+import {FilterDropdownComponent} from '@app/components/filter-dropdown/filter-dropdown.component';
+import {DropdownListComponent} from '@app/components/dropdown-list/dropdown-list.component';
+import {FilterTextFieldComponent} from '@app/components/filter-text-field/filter-text-field.component';
+import {FilterButtonComponent} from '@app/components/filter-button/filter-button.component';
+import {AccordionPanelComponent} from '@app/components/accordion-panel/accordion-panel.component';
+import {LogsListComponent} from '@app/components/logs-list/logs-list.component';
+import {DropdownButtonComponent} from '@app/components/dropdown-button/dropdown-button.component';
+import {PaginationComponent} from '@app/components/pagination/pagination.component';
+import {PaginationControlsComponent} from '@app/components/pagination-controls/pagination-controls.component';
+import {TimeHistogramComponent} from '@app/components/time-histogram/time-histogram.component';
+import {LogsContainerComponent} from '@app/components/logs-container/logs-container.component';
+import {ModalComponent} from '@app/components/modal/modal.component';
+import {TimeZonePickerComponent} from '@app/components/timezone-picker/timezone-picker.component';
+import {NodeBarComponent} from '@app/components/node-bar/node-bar.component';
+
+import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
+
+export function HttpLoaderFactory(http: Http) {
+  // adding 'static' parameter to step over mock data request
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json?static=true');
+}
+
+export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSRFStrategy, options: ResponseOptions): any {
+  if (environment.production) {
+    return new XHRBackend(browser, options, xsrf);
+  } else {
+    return new InMemoryBackendService(
+      injector,
+      new mockApiDataService(),
+      {
+        passThruUnknownUrl: true,
+        rootPath: ''
+      }
+    );
+  }
+}
+
+@NgModule({
+  declarations: [
+    AppComponent,
+    LoginFormComponent,
+    TopMenuComponent,
+    MenuButtonComponent,
+    MainContainerComponent,
+    FiltersPanelComponent,
+    DropdownListComponent,
+    FilterDropdownComponent,
+    FilterTextFieldComponent,
+    FilterButtonComponent,
+    AccordionPanelComponent,
+    LogsListComponent,
+    DropdownButtonComponent,
+    PaginationComponent,
+    PaginationControlsComponent,
+    TimeHistogramComponent,
+    LogsContainerComponent,
+    ModalComponent,
+    TimeZonePickerComponent,
+    NodeBarComponent,
+    TimeZoneAbbrPipe
+  ],
+  imports: [
+    BrowserModule,
+    FormsModule,
+    ReactiveFormsModule,
+    HttpModule,
+    AlertModule.forRoot(),
+    TranslateModule.forRoot({
+      loader: {
+        provide: TranslateLoader,
+        useFactory: HttpLoaderFactory,
+        deps: [Http]
+      }
+    }),
+    StoreModule.provideStore(reducer),
+    MomentModule,
+    MomentTimezoneModule
+  ],
+  providers: [
+    HttpClientService,
+    ComponentActionsService,
+    FilteringService,
+    UtilsService,
+    LogsContainerService,
+    ComponentGeneratorService,
+    AppSettingsService,
+    AppStateService,
+    AuditLogsService,
+    ServiceLogsService,
+    ServiceLogsHistogramDataService,
+    GraphsService,
+    HostsService,
+    UserConfigsService,
+    FiltersService,
+    ClustersService,
+    ComponentsService,
+    ServiceLogsFieldsService,
+    AuditLogsFieldsService,
+    {
+      provide: XHRBackend,
+      useFactory: getXHRBackend,
+      deps: [Injector, BrowserXhr, XSRFStrategy, ResponseOptions]
+    }
+  ],
+  bootstrap: [AppComponent],
+  entryComponents: [NodeBarComponent],
+  schemas: [CUSTOM_ELEMENTS_SCHEMA]
+})
+export class AppModule {
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
new file mode 100644
index 0000000..ef8cf28
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/audit-logs-query-params.class.ts
@@ -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.
+ */
+
+import {QueryParams} from '@app/classes/queries/query-params.class';
+
+export const defaultParams = {
+  page: '0',
+  pageSize: '10'
+};
+
+export class AuditLogsQueryParams extends QueryParams {
+  constructor(options: AuditLogsQueryParams) {
+    let finalParams = Object.assign({}, defaultParams, options);
+    const page = parseInt(finalParams.page),
+      pageSize = parseInt(finalParams.pageSize);
+    finalParams.startIndex = isNaN(page) || isNaN(pageSize) ? '' : (page * pageSize).toString();
+    super(finalParams);
+  }
+  page: string;
+  pageSize: string;
+  startIndex: string;
+  sortBy?: string;
+  sortType?: string;
+  start_time?: string;
+  end_time?: string;
+  clusters?: string;
+  iMessage?: string;
+  eMessage?: string;
+  mustBe?: string;
+  mustNot?: string;
+  includeQuery?: string;
+  excludeQuery?: string;
+  from?: string;
+  to?: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/query-params.class.ts
new file mode 100644
index 0000000..83c3261
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/query-params.class.ts
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+export class QueryParams {
+  constructor(options: QueryParams) {
+    Object.assign(this, options);
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
new file mode 100644
index 0000000..efa2459
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
@@ -0,0 +1,203 @@
+/**
+ * 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.
+ */
+
+import {ServiceLogsHistogramQueryParams} from './service-logs-histogram-query-params.class';
+
+describe('ServiceLogsHistogramQueryParams', () => {
+
+  describe('constructor', () => {
+    const cases = [
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:00:00.100Z'
+        },
+        unit: '+100MILLISECOND',
+        title: 'less than 1s'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:00:01Z'
+        },
+        unit: '+100MILLISECOND',
+        title: '1s'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:00:20Z'
+        },
+        unit: '+500MILLISECOND',
+        title: 'between 1s and 30s'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:00:20Z'
+        },
+        unit: '+500MILLISECOND',
+        title: '30s'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:00:40Z'
+        },
+        unit: '+2SECOND',
+        title: 'between 30s and 1m'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:01:00Z'
+        },
+        unit: '+2SECOND',
+        title: '1m'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:20:00Z'
+        },
+        unit: '+1MINUTE',
+        title: 'between 1m and 30m'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T00:30:00Z'
+        },
+        unit: '+2MINUTE',
+        title: '30m'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T01:00:00Z'
+        },
+        unit: '+2MINUTE',
+        title: 'between 30m and 2h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T02:00:00Z'
+        },
+        unit: '+5MINUTE',
+        title: '2h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T04:00:00Z'
+        },
+        unit: '+5MINUTE',
+        title: 'between 2h and 6h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T06:00:00Z'
+        },
+        unit: '+10MINUTE',
+        title: '6h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T08:00:00Z'
+        },
+        unit: '+10MINUTE',
+        title: 'between 6h and 10h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T10:00:00Z'
+        },
+        unit: '+10MINUTE',
+        title: '10h'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-01T22:00:00Z'
+        },
+        unit: '+1HOUR',
+        title: 'between 10h and 1d'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-02T00:00:00Z'
+        },
+        unit: '+1HOUR',
+        title: '1d'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-10T00:00:00Z'
+        },
+        unit: '+8HOUR',
+        title: 'between 1d and 15d'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-01-16T00:00:00Z'
+        },
+        unit: '+1DAY',
+        title: '15d'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-03-31T00:00:00Z'
+        },
+        unit: '+1DAY',
+        title: 'between 15d and 3M'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-04-01T00:00:00Z'
+        },
+        unit: '+1DAY',
+        title: '3M'
+      },
+      {
+        options: {
+          from: '2017-01-01T00:00:00Z',
+          to: '2017-05-01T00:00:00Z'
+        },
+        unit: '+1MONTH',
+        title: 'over 3M'
+      }
+    ];
+
+    cases.forEach(test => {
+      it(test.title, () => {
+        const paramsObject = new ServiceLogsHistogramQueryParams(test.options);
+        expect(paramsObject.unit).toEqual(test.unit);
+      });
+    });
+  });
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
new file mode 100644
index 0000000..87e82f6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-histogram-query-params.class.ts
@@ -0,0 +1,69 @@
+/**
+ * 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.
+ */
+
+import {QueryParams} from '@app/classes/queries/query-params.class';
+
+export class ServiceLogsHistogramQueryParams extends QueryParams {
+  constructor(options: ServiceLogsHistogramQueryParams) {
+    let unit;
+    const diffTimeStamp = new Date(options.to).valueOf() - new Date(options.from).valueOf();
+    switch (true) {
+      case diffTimeStamp <= 1000:
+        unit = '+100MILLISECOND';
+        break;
+      case diffTimeStamp <= 30000:
+        unit = '+500MILLISECOND';
+        break;
+      case diffTimeStamp <= 60000:
+        unit = '+2SECOND';
+        break;
+      case diffTimeStamp < 1800000:
+        unit = '+1MINUTE';
+        break;
+      case diffTimeStamp < 7200000:
+        unit = '+2MINUTE';
+        break;
+      case diffTimeStamp < 21600000:
+        unit = '+5MINUTE';
+        break;
+      case diffTimeStamp <= 36000000:
+        unit = '+10MINUTE';
+        break;
+      case diffTimeStamp <= 86400000:
+        unit = '+1HOUR';
+        break;
+      case diffTimeStamp < 1296000000:
+        unit = '+8HOUR';
+        break;
+      case diffTimeStamp <= 7776000000:
+        unit = '+1DAY';
+        break;
+      default:
+        unit = '+1MONTH';
+        break;
+    }
+    options.unit = unit;
+    super(options);
+  }
+  from: string;
+  to: string;
+  unit?: string;
+  clusters?: string;
+  iMessage?: string;
+  level?: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
new file mode 100644
index 0000000..c88ec46
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/classes/queries/service-logs-query-params.class.ts
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+
+import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
+
+export class ServiceLogsQueryParams extends AuditLogsQueryParams {
+  level?: string;
+  host_name?: string;
+  file_name?: string;
+  bundle_id?: string;
+  hostList?: string;
+  find?: string;
+  sourceLogId?: string;
+  keywordType?: string;
+  token?: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.html
new file mode 100644
index 0000000..1b134c3
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.html
@@ -0,0 +1,25 @@
+<!--
+  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.
+-->
+
+<div class="panel panel-default">
+  <div class="panel-body">
+    <ng-template [ngTemplateOutlet]="template"></ng-template>
+    <div class="accordion-toggle">
+      <span class="fa collapsed toggle-icon" data-toggle="collapse" attr.data-target="#{{toggleId}}" aria-expanded="false">&nbsp;</span>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.less
new file mode 100644
index 0000000..8366952
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.less
@@ -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.
+ */
+
+@import '../variables';
+
+.panel-body {
+  position: relative;
+
+  .accordion-toggle {
+    position: absolute;
+
+    // TODO get rid of magic numbers, base on actual design
+    right: 10px;
+    top: 15px;
+
+    .toggle-icon {
+      .clickable-item;
+
+      &:before {
+        content: '\F077';
+      }
+
+      &.collapsed:before {
+        content: '\F078';
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.spec.ts
new file mode 100644
index 0000000..3706d51
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.spec.ts
@@ -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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {AccordionPanelComponent} from './accordion-panel.component';
+
+describe('AccordionPanelComponent', () => {
+  let component: AccordionPanelComponent;
+  let fixture: ComponentFixture<AccordionPanelComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [AccordionPanelComponent]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(AccordionPanelComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});


[50/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/pom.xml b/ambari-logsearch/ambari-logsearch-web-new/pom.xml
deleted file mode 100644
index 28e1754..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/pom.xml
+++ /dev/null
@@ -1,171 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-    <artifactId>ambari-logsearch</artifactId>
-    <groupId>org.apache.ambari</groupId>
-    <version>2.0.0.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>ambari-logsearch-web-new</artifactId>
-  <name>Ambari LogSearch Web New</name>
-  <version>2.0.0.0-SNAPSHOT</version>
-  <groupId>org.apache.ambari</groupId>
-  <description>Ambari Logsearch Web New</description>
-
-  <properties>
-    <logsearch.npm.config.tmp>/tmp/logsearch_npm_config_tmp</logsearch.npm.config.tmp>
-    <node.version>v6.9.0</node.version>
-    <yarn.version>v0.23.3</yarn.version>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.github.eirslett</groupId>
-        <artifactId>frontend-maven-plugin</artifactId>
-        <version>1.4</version>
-        <configuration>
-          <nodeVersion>${node.version}</nodeVersion>
-          <yarnVersion>${yarn.version}</yarnVersion>
-          <workingDirectory>${project.build.directory}/webapp-build</workingDirectory>
-          <npmInheritsProxyConfigFromMaven>false</npmInheritsProxyConfigFromMaven>
-          <!-- setting npm_config_tmp environment variable is a workaround for
-               https://github.com/Medium/phantomjs/issues/673 -->
-          <environmentVariables>
-            <npm_config_tmp>${logsearch.npm.config.tmp}</npm_config_tmp>
-          </environmentVariables>
-        </configuration>
-        <executions>
-          <execution>
-            <id>install node and yarn</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>install-node-and-yarn</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>yarn install</id>
-            <phase>generate-resources</phase>
-            <goals>
-              <goal>yarn</goal>
-            </goals>
-            <configuration>
-              <arguments>install --ignore-engines --pure-lockfile</arguments>
-            </configuration>
-          </execution>
-          <execution>
-            <id>generate dist</id>
-            <phase>generate-resources</phase>
-            <goals>
-             <goal>yarn</goal>
-            </goals>
-            <configuration>
-              <arguments>build-prod</arguments>
-            </configuration>
-          </execution>
-          <!-- TODO: Use this for testing and make it skippable:
-          <execution>
-            <id>run tests</id>
-            <phase>test</phase>
-            <goals>
-            <goal>yarn</goal>
-           </goals>
-           <configuration>
-            <arguments>test</arguments>
-           </configuration>
-          </execution>
-          -->
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-resources-plugin</artifactId>
-        <version>2.6</version>
-        <executions>
-          <execution>
-            <id>process-webapp-sources</id>
-            <phase>process-sources</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${basedir}/target/webapp-build</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>${basedir}</directory>
-                  <includes>
-                    <include>e2e/**</include>
-                    <include>src/**</include>
-                    <include>.*</include>
-                    <include>package.json</include>
-                    <include>protactor.conf.js</include>
-                    <include>yarn.lock</include>
-                    <include>karma.conf.js</include>
-                    <include>tsconfig.json</include>
-                    <include>tslint.json</include>
-                  </includes>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-          <execution>
-            <id>copy-resources</id>
-            <phase>process-resources</phase>
-            <goals>
-              <goal>copy-resources</goal>
-            </goals>
-            <configuration>
-              <outputDirectory>${basedir}/target/classes/dist</outputDirectory>
-              <resources>
-                <resource>
-                  <directory>${basedir}/target/webapp-build/dist</directory>
-                  <filtering>false</filtering>
-                </resource>
-              </resources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <configuration>
-          <excludes>
-            <exclude>README.md</exclude>
-            <exclude>*.editorconfig</exclude>
-            <exclude>src/vendor/**</exclude>
-            <exclude>yarn.lock</exclude>
-            <exclude>node_modules/**</exclude>
-            <exclude>dist/**</exclude>
-            <exclude>**/*.json</exclude>
-            <exclude>**/*.log</exclude>
-            <exclude>**/*.txt</exclude>
-          </excludes>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>test</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/protractor.conf.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/protractor.conf.js b/ambari-logsearch/ambari-logsearch-web-new/protractor.conf.js
deleted file mode 100644
index 6b4a31c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/protractor.conf.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * 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.
- */
-
-// Protractor configuration file, see link for more information
-// https://github.com/angular/protractor/blob/master/lib/config.ts
-
-const { SpecReporter } = require('jasmine-spec-reporter');
-
-exports.config = {
-  allScriptsTimeout: 11000,
-  specs: [
-    './e2e/**/*.e2e-spec.ts'
-  ],
-  capabilities: {
-    'browserName': 'chrome'
-  },
-  directConnect: true,
-  baseUrl: 'http://localhost:4200/',
-  framework: 'jasmine',
-  jasmineNodeOpts: {
-    showColors: true,
-    defaultTimeoutInterval: 30000,
-    print: function() {}
-  },
-  beforeLaunch: function() {
-    require('ts-node').register({
-      project: 'e2e/tsconfig.e2e.json'
-    });
-  },
-  onPrepare() {
-    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
deleted file mode 100644
index c08cb3a..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/app.module.ts
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * 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.
- */
-
-import {BrowserModule} from '@angular/platform-browser';
-import {NgModule, CUSTOM_ELEMENTS_SCHEMA, Injector} from '@angular/core';
-import {FormsModule, ReactiveFormsModule} from '@angular/forms';
-import {HttpModule, Http, XHRBackend, BrowserXhr, ResponseOptions, XSRFStrategy} from '@angular/http';
-import {InMemoryBackendService} from 'angular-in-memory-web-api';
-import {AlertModule} from 'ngx-bootstrap';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {MomentModule} from 'angular2-moment';
-import {MomentTimezoneModule} from 'angular-moment-timezone';
-import {environment} from '@envs/environment';
-import {mockApiDataService} from '@app/services/mock-api-data.service'
-import {HttpClientService} from '@app/services/http-client.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-import {ComponentGeneratorService} from '@app/services/component-generator.service';
-
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {AuditLogsService} from '@app/services/storage/audit-logs.service';
-import {ServiceLogsService} from '@app/services/storage/service-logs.service';
-import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
-import {GraphsService} from '@app/services/storage/graphs.service';
-import {HostsService} from '@app/services/storage/hosts.service';
-import {UserConfigsService} from '@app/services/storage/user-configs.service';
-import {FiltersService} from '@app/services/storage/filters.service';
-import {ClustersService} from '@app/services/storage/clusters.service';
-import {ComponentsService} from '@app/services/storage/components.service';
-import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
-import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
-import {reducer} from '@app/services/storage/reducers.service';
-
-import {AppComponent} from '@app/components/app.component';
-import {LoginFormComponent} from '@app/components/login-form/login-form.component';
-import {TopMenuComponent} from '@app/components/top-menu/top-menu.component';
-import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
-import {MainContainerComponent} from '@app/components/main-container/main-container.component';
-import {FiltersPanelComponent} from '@app/components/filters-panel/filters-panel.component';
-import {FilterDropdownComponent} from '@app/components/filter-dropdown/filter-dropdown.component';
-import {DropdownListComponent} from '@app/components/dropdown-list/dropdown-list.component';
-import {FilterTextFieldComponent} from '@app/components/filter-text-field/filter-text-field.component';
-import {FilterButtonComponent} from '@app/components/filter-button/filter-button.component';
-import {AccordionPanelComponent} from '@app/components/accordion-panel/accordion-panel.component';
-import {LogsListComponent} from '@app/components/logs-list/logs-list.component';
-import {DropdownButtonComponent} from '@app/components/dropdown-button/dropdown-button.component';
-import {PaginationComponent} from '@app/components/pagination/pagination.component';
-import {PaginationControlsComponent} from '@app/components/pagination-controls/pagination-controls.component';
-import {TimeHistogramComponent} from '@app/components/time-histogram/time-histogram.component';
-import {LogsContainerComponent} from '@app/components/logs-container/logs-container.component';
-import {ModalComponent} from '@app/components/modal/modal.component';
-import {TimeZonePickerComponent} from '@app/components/timezone-picker/timezone-picker.component';
-import {NodeBarComponent} from '@app/components/node-bar/node-bar.component';
-
-import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
-
-export function HttpLoaderFactory(http: Http) {
-  // adding 'static' parameter to step over mock data request
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json?static=true');
-}
-
-export function getXHRBackend(injector: Injector, browser: BrowserXhr, xsrf: XSRFStrategy, options: ResponseOptions): any {
-  if (environment.production) {
-    return new XHRBackend(browser, options, xsrf);
-  } else {
-    return new InMemoryBackendService(
-      injector,
-      new mockApiDataService(),
-      {
-        passThruUnknownUrl: true,
-        rootPath: ''
-      }
-    );
-  }
-}
-
-@NgModule({
-  declarations: [
-    AppComponent,
-    LoginFormComponent,
-    TopMenuComponent,
-    MenuButtonComponent,
-    MainContainerComponent,
-    FiltersPanelComponent,
-    DropdownListComponent,
-    FilterDropdownComponent,
-    FilterTextFieldComponent,
-    FilterButtonComponent,
-    AccordionPanelComponent,
-    LogsListComponent,
-    DropdownButtonComponent,
-    PaginationComponent,
-    PaginationControlsComponent,
-    TimeHistogramComponent,
-    LogsContainerComponent,
-    ModalComponent,
-    TimeZonePickerComponent,
-    NodeBarComponent,
-    TimeZoneAbbrPipe
-  ],
-  imports: [
-    BrowserModule,
-    FormsModule,
-    ReactiveFormsModule,
-    HttpModule,
-    AlertModule.forRoot(),
-    TranslateModule.forRoot({
-      loader: {
-        provide: TranslateLoader,
-        useFactory: HttpLoaderFactory,
-        deps: [Http]
-      }
-    }),
-    StoreModule.provideStore(reducer),
-    MomentModule,
-    MomentTimezoneModule
-  ],
-  providers: [
-    HttpClientService,
-    ComponentActionsService,
-    FilteringService,
-    UtilsService,
-    LogsContainerService,
-    ComponentGeneratorService,
-    AppSettingsService,
-    AppStateService,
-    AuditLogsService,
-    ServiceLogsService,
-    ServiceLogsHistogramDataService,
-    GraphsService,
-    HostsService,
-    UserConfigsService,
-    FiltersService,
-    ClustersService,
-    ComponentsService,
-    ServiceLogsFieldsService,
-    AuditLogsFieldsService,
-    {
-      provide: XHRBackend,
-      useFactory: getXHRBackend,
-      deps: [Injector, BrowserXhr, XSRFStrategy, ResponseOptions]
-    }
-  ],
-  bootstrap: [AppComponent],
-  entryComponents: [NodeBarComponent],
-  schemas: [CUSTOM_ELEMENTS_SCHEMA]
-})
-export class AppModule {
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/audit-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/audit-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/audit-logs-query-params.class.ts
deleted file mode 100644
index ef8cf28..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/audit-logs-query-params.class.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * 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.
- */
-
-import {QueryParams} from '@app/classes/queries/query-params.class';
-
-export const defaultParams = {
-  page: '0',
-  pageSize: '10'
-};
-
-export class AuditLogsQueryParams extends QueryParams {
-  constructor(options: AuditLogsQueryParams) {
-    let finalParams = Object.assign({}, defaultParams, options);
-    const page = parseInt(finalParams.page),
-      pageSize = parseInt(finalParams.pageSize);
-    finalParams.startIndex = isNaN(page) || isNaN(pageSize) ? '' : (page * pageSize).toString();
-    super(finalParams);
-  }
-  page: string;
-  pageSize: string;
-  startIndex: string;
-  sortBy?: string;
-  sortType?: string;
-  start_time?: string;
-  end_time?: string;
-  clusters?: string;
-  iMessage?: string;
-  eMessage?: string;
-  mustBe?: string;
-  mustNot?: string;
-  includeQuery?: string;
-  excludeQuery?: string;
-  from?: string;
-  to?: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/query-params.class.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/query-params.class.ts
deleted file mode 100644
index 83c3261..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/query-params.class.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.
- */
-
-export class QueryParams {
-  constructor(options: QueryParams) {
-    Object.assign(this, options);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
deleted file mode 100644
index efa2459..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.spec.ts
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * 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.
- */
-
-import {ServiceLogsHistogramQueryParams} from './service-logs-histogram-query-params.class';
-
-describe('ServiceLogsHistogramQueryParams', () => {
-
-  describe('constructor', () => {
-    const cases = [
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:00:00.100Z'
-        },
-        unit: '+100MILLISECOND',
-        title: 'less than 1s'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:00:01Z'
-        },
-        unit: '+100MILLISECOND',
-        title: '1s'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:00:20Z'
-        },
-        unit: '+500MILLISECOND',
-        title: 'between 1s and 30s'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:00:20Z'
-        },
-        unit: '+500MILLISECOND',
-        title: '30s'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:00:40Z'
-        },
-        unit: '+2SECOND',
-        title: 'between 30s and 1m'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:01:00Z'
-        },
-        unit: '+2SECOND',
-        title: '1m'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:20:00Z'
-        },
-        unit: '+1MINUTE',
-        title: 'between 1m and 30m'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T00:30:00Z'
-        },
-        unit: '+2MINUTE',
-        title: '30m'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T01:00:00Z'
-        },
-        unit: '+2MINUTE',
-        title: 'between 30m and 2h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T02:00:00Z'
-        },
-        unit: '+5MINUTE',
-        title: '2h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T04:00:00Z'
-        },
-        unit: '+5MINUTE',
-        title: 'between 2h and 6h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T06:00:00Z'
-        },
-        unit: '+10MINUTE',
-        title: '6h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T08:00:00Z'
-        },
-        unit: '+10MINUTE',
-        title: 'between 6h and 10h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T10:00:00Z'
-        },
-        unit: '+10MINUTE',
-        title: '10h'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-01T22:00:00Z'
-        },
-        unit: '+1HOUR',
-        title: 'between 10h and 1d'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-02T00:00:00Z'
-        },
-        unit: '+1HOUR',
-        title: '1d'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-10T00:00:00Z'
-        },
-        unit: '+8HOUR',
-        title: 'between 1d and 15d'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-01-16T00:00:00Z'
-        },
-        unit: '+1DAY',
-        title: '15d'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-03-31T00:00:00Z'
-        },
-        unit: '+1DAY',
-        title: 'between 15d and 3M'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-04-01T00:00:00Z'
-        },
-        unit: '+1DAY',
-        title: '3M'
-      },
-      {
-        options: {
-          from: '2017-01-01T00:00:00Z',
-          to: '2017-05-01T00:00:00Z'
-        },
-        unit: '+1MONTH',
-        title: 'over 3M'
-      }
-    ];
-
-    cases.forEach(test => {
-      it(test.title, () => {
-        const paramsObject = new ServiceLogsHistogramQueryParams(test.options);
-        expect(paramsObject.unit).toEqual(test.unit);
-      });
-    });
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.ts
deleted file mode 100644
index 87e82f6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-histogram-query-params.class.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.
- */
-
-import {QueryParams} from '@app/classes/queries/query-params.class';
-
-export class ServiceLogsHistogramQueryParams extends QueryParams {
-  constructor(options: ServiceLogsHistogramQueryParams) {
-    let unit;
-    const diffTimeStamp = new Date(options.to).valueOf() - new Date(options.from).valueOf();
-    switch (true) {
-      case diffTimeStamp <= 1000:
-        unit = '+100MILLISECOND';
-        break;
-      case diffTimeStamp <= 30000:
-        unit = '+500MILLISECOND';
-        break;
-      case diffTimeStamp <= 60000:
-        unit = '+2SECOND';
-        break;
-      case diffTimeStamp < 1800000:
-        unit = '+1MINUTE';
-        break;
-      case diffTimeStamp < 7200000:
-        unit = '+2MINUTE';
-        break;
-      case diffTimeStamp < 21600000:
-        unit = '+5MINUTE';
-        break;
-      case diffTimeStamp <= 36000000:
-        unit = '+10MINUTE';
-        break;
-      case diffTimeStamp <= 86400000:
-        unit = '+1HOUR';
-        break;
-      case diffTimeStamp < 1296000000:
-        unit = '+8HOUR';
-        break;
-      case diffTimeStamp <= 7776000000:
-        unit = '+1DAY';
-        break;
-      default:
-        unit = '+1MONTH';
-        break;
-    }
-    options.unit = unit;
-    super(options);
-  }
-  from: string;
-  to: string;
-  unit?: string;
-  clusters?: string;
-  iMessage?: string;
-  level?: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-query-params.class.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-query-params.class.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-query-params.class.ts
deleted file mode 100644
index c88ec46..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/classes/queries/service-logs-query-params.class.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 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.
- */
-
-import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
-
-export class ServiceLogsQueryParams extends AuditLogsQueryParams {
-  level?: string;
-  host_name?: string;
-  file_name?: string;
-  bundle_id?: string;
-  hostList?: string;
-  find?: string;
-  sourceLogId?: string;
-  keywordType?: string;
-  token?: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.html
deleted file mode 100644
index 1b134c3..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-  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.
--->
-
-<div class="panel panel-default">
-  <div class="panel-body">
-    <ng-template [ngTemplateOutlet]="template"></ng-template>
-    <div class="accordion-toggle">
-      <span class="fa collapsed toggle-icon" data-toggle="collapse" attr.data-target="#{{toggleId}}" aria-expanded="false">&nbsp;</span>
-    </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.less
deleted file mode 100644
index 8366952..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.less
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.panel-body {
-  position: relative;
-
-  .accordion-toggle {
-    position: absolute;
-
-    // TODO get rid of magic numbers, base on actual design
-    right: 10px;
-    top: 15px;
-
-    .toggle-icon {
-      .clickable-item;
-
-      &:before {
-        content: '\F077';
-      }
-
-      &.collapsed:before {
-        content: '\F078';
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.spec.ts
deleted file mode 100644
index 3706d51..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.spec.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-
-import {AccordionPanelComponent} from './accordion-panel.component';
-
-describe('AccordionPanelComponent', () => {
-  let component: AccordionPanelComponent;
-  let fixture: ComponentFixture<AccordionPanelComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [AccordionPanelComponent]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(AccordionPanelComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
deleted file mode 100644
index 131edcd..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/accordion-panel/accordion-panel.component.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input, ContentChild, TemplateRef} from '@angular/core';
-
-@Component({
-  selector: 'accordion-panel',
-  templateUrl: './accordion-panel.component.html',
-  styleUrls: ['./accordion-panel.component.less']
-})
-export class AccordionPanelComponent {
-
-  @Input()
-  toggleId: string;
-
-  @ContentChild(TemplateRef)
-  template;
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.html
deleted file mode 100644
index a0444c9..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-  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.
--->
-
-<header>
-  <nav class="navbar navbar-fixed-top">
-    <div class="container-fluid">
-      <h1 [ngClass]="{'full-flex-width': !isAuthorized, 'navbar-left': true}">{{'common.title' | translate}}</h1>
-      <top-menu *ngIf="isAuthorized" class="navbar-right"></top-menu>
-    </div>
-  </nav>
-</header>
-
-<main-container>
-  <ng-template>
-    <!-- hidden element for moving the main bar outside the fixed header -->
-    <div class="navbar invisible">
-      <h1>&nbsp;</h1>
-    </div>
-  </ng-template>
-</main-container>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.less
deleted file mode 100644
index d1aa7ff..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.less
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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.
- */
-
-@import 'variables';
-
-:host {
-  .full-size;
-  display: flex;
-  flex-direction: column;
-  background-color: @main-background-color; // TODO implement actual color
-  line-height: @default-line-height;
-
-  .navbar {
-    margin-bottom: 0;
-    border-radius: 0;
-    background-color: @navbar-background-color;
-    color: #fff;
-
-    .container-fluid {
-      .default-flex;
-    }
-
-    h1 {
-      flex-basis: 70%;
-      margin-bottom: @h1-vertical-margin;
-      text-transform: uppercase;
-
-      &.full-flex-width {
-        flex-basis: 100%;
-      }
-    }
-
-    /deep/ top-menu {
-      flex-basis: 30%;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
deleted file mode 100644
index bc16ea4..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.spec.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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.
- */
-
-import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
-import {TestBed, async} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppStateService, appState} from '@app/services/storage/app-state.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-import {AppComponent} from './app.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('AppComponent', () => {
-  beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {}
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      declarations: [AppComponent],
-      imports: [
-        StoreModule.provideStore({
-          appState
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppStateService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        }
-      ],
-      schemas: [CUSTOM_ELEMENTS_SCHEMA]
-    }).compileComponents();
-  }));
-
-  it('should create the app', async(() => {
-    const fixture = TestBed.createComponent(AppComponent);
-    const app = fixture.debugElement.componentInstance;
-    expect(app).toBeTruthy();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
deleted file mode 100644
index 4de47ea..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/app.component.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * 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.
- */
-
-import {Component} from '@angular/core';
-import {TranslateService} from '@ngx-translate/core';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-@Component({
-  selector: 'app-root',
-  templateUrl: './app.component.html',
-  styleUrls: ['./app.component.less']
-})
-
-export class AppComponent {
-
-  constructor(private httpClient: HttpClientService, private translate: TranslateService, private appState: AppStateService) {
-    appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
-    appState.setParameter('isInitialLoading', true);
-    this.httpClient.get('status').subscribe(() => this.appState.setParameters({
-      isAuthorized: true,
-      isInitialLoading: false
-    }), () => this.appState.setParameter('isInitialLoading', false));
-    translate.setDefaultLang('en');
-    translate.use('en');
-  }
-
-  isAuthorized: boolean = false;
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.html
deleted file mode 100644
index a16b205..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-  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.
--->
-
-<div class="filter-label" *ngIf="label">{{label | translate}}</div>
-<div [ngClass]="{'dropup': isDropup}">
-  <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
-    <span *ngIf="!isMultipleChoice">{{selectedLabel | translate}}</span> <span class="caret"></span>
-  </button>
-  <ul data-component="dropdown-list" [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"
-      [items]="options" [isMultipleChoice]="isMultipleChoice" (selectedItemChange)="updateValue($event)"></ul>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.less
deleted file mode 100644
index 55699b4..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.less
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  .default-flex;
-  position: relative;
-  float: left;
-
-  .filter-label {
-    padding: @input-group-addon-padding;
-  }
-
-  .btn {
-    text-transform: none;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.spec.ts
deleted file mode 100644
index 8efe320..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.spec.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-
-import {DropdownButtonComponent} from './dropdown-button.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('DropdownButtonComponent', () => {
-  let component: DropdownButtonComponent;
-  let fixture: ComponentFixture<DropdownButtonComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [DropdownButtonComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings,
-          clusters,
-          components
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        FilteringService,
-        UtilsService,
-        ComponentActionsService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(DropdownButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.ts
deleted file mode 100644
index 5800190..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-button/dropdown-button.component.ts
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit, Input} from '@angular/core';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {UtilsService} from '@app/services/utils.service';
-
-@Component({
-  selector: 'dropdown-button',
-  templateUrl: './dropdown-button.component.html',
-  styleUrls: ['./dropdown-button.component.less']
-})
-export class DropdownButtonComponent implements OnInit {
-
-  constructor(protected actions: ComponentActionsService, protected utils: UtilsService) {
-  }
-
-  ngOnInit() {
-    this.selectedLabel = this.defaultLabel;
-  }
-  
-  @Input()
-  label?: string;
-
-  @Input()
-  options?: any[];
-
-  @Input()
-  defaultValue?: string;
-
-  @Input()
-  defaultLabel?: string;
-
-  @Input()
-  action?: string;
-
-  @Input()
-  additionalArgs: any[] = [];
-
-  @Input()
-  isMultipleChoice: boolean = false;
-
-  @Input()
-  isRightAlign: boolean = false;
-
-  @Input()
-  isDropup: boolean = false;
-
-  protected selectedValue?: any;
-
-  selectedLabel: string;
-
-  get value(): any {
-    return this.selectedValue;
-  }
-
-  set value(value: any) {
-    this.selectedValue = value;
-  }
-
-  updateValue(eventOptions: any): void {
-    const value = eventOptions && eventOptions.value,
-      action = this.action && this.actions[this.action];
-    if (this.isMultipleChoice) {
-      this.value = this.utils.updateMultiSelectValue(this.value, value, eventOptions.isChecked);
-      this.options.find(item => item.value === value).isChecked = eventOptions.isChecked;
-      if (action) {
-        action(this.options.filter(item => item.isChecked).map(item => item.value), ...this.additionalArgs);
-      }
-    } else {
-      if (this.utils.valueHasChanged(this.value, value)) {
-        this.value = value;
-        this.selectedLabel = eventOptions.label;
-        if (action) {
-          action(this.value, ...this.additionalArgs);
-        }
-      }
-    }
-  }
-  
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.html
deleted file mode 100644
index 1baebed..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
-  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.
--->
-
-<li *ngFor="let item of items">
-  <label class="list-item-label" *ngIf="isMultipleChoice">
-    <input type="checkbox" [attr.id]="item.id || item.value" [attr.checked]="item.isChecked ? 'checked' : null"
-           (change)="changeSelectedItem({value: item.value, isChecked: $event.currentTarget.checked})">
-    <label [attr.for]="item.id || item.value" class="label-container">{{item.label | translate}}
-      <div #additionalComponent></div>
-    </label>
-  </label>
-  <span class="list-item-label label-container" *ngIf="!isMultipleChoice"
-        (click)="changeSelectedItem({value: item.value, label: item.label})">
-    {{item.label | translate}}
-    <div #additionalComponent></div>
-  </span>
-</li>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.less
deleted file mode 100644
index d47160f..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.less
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  max-height: 500px; // TODO get rid of magic number, base on actual design
-  overflow-y: auto;
-
-  .list-item-label {
-    .dropdown-item-default;
-
-    label {
-      margin-bottom: 0;
-      cursor: pointer;
-    }
-
-    input[type=checkbox]:checked + label:after {
-      top: @checkbox-top;
-    }
-
-    .label-container {
-      width: 100%;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.spec.ts
deleted file mode 100644
index 5409d30..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.spec.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
-import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
-import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {ComponentGeneratorService} from '@app/services/component-generator.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-
-import {DropdownListComponent} from './dropdown-list.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('DropdownListComponent', () => {
-  let component: DropdownListComponent;
-  let fixture: ComponentFixture<DropdownListComponent>;
-
-  beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      declarations: [DropdownListComponent],
-      imports: [
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        }),
-        StoreModule.provideStore({
-          hosts,
-          auditLogs,
-          serviceLogs,
-          auditLogsFields,
-          serviceLogsFields,
-          serviceLogsHistogramData,
-          appSettings,
-          clusters,
-          components
-        })
-      ],
-      providers: [
-        ComponentGeneratorService,
-        LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        FilteringService,
-        HostsService,
-        AuditLogsService,
-        ServiceLogsService,
-        AuditLogsFieldsService,
-        ServiceLogsFieldsService,
-        ServiceLogsHistogramDataService,
-        AppSettingsService,
-        ClustersService,
-        ComponentsService
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(DropdownListComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('#changeSelectedItem()', () => {
-
-    const options = {
-      label: 'l',
-      value: 'v'
-    };
-
-    beforeEach(() => {
-      spyOn(component.selectedItemChange, 'emit').and.callFake(() => {});
-      component.changeSelectedItem(options);
-    });
-
-    it('event should be emitted', () => {
-      expect(component.selectedItemChange.emit).toHaveBeenCalled();
-    });
-
-    it('event emitter should be called with correct arguments', () => {
-      expect(component.selectedItemChange.emit).toHaveBeenCalledWith(options);
-    });
-
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
deleted file mode 100644
index 3de664e..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/dropdown-list/dropdown-list.component.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, AfterViewInit, Input, Output, EventEmitter, ViewChildren, ViewContainerRef, QueryList} from '@angular/core';
-import {ComponentGeneratorService} from '@app/services/component-generator.service';
-
-@Component({
-  selector: 'ul[data-component="dropdown-list"]',
-  templateUrl: './dropdown-list.component.html',
-  styleUrls: ['./dropdown-list.component.less']
-})
-export class DropdownListComponent implements AfterViewInit {
-
-  constructor(private componentGenerator: ComponentGeneratorService) {
-  }
-
-  ngAfterViewInit() {
-    const setter = this.additionalLabelComponentSetter;
-    if (setter) {
-      this.containers.forEach((container, index) => this.componentGenerator[setter](this.items[index].value, container));
-    }
-  }
-
-  @Input()
-  items: any[];
-
-  @Input()
-  defaultAction: Function;
-
-  @Input()
-  isMultipleChoice?: boolean = false;
-
-  @Input()
-  additionalLabelComponentSetter?: string;
-
-  @Output()
-  selectedItemChange: EventEmitter<any> = new EventEmitter();
-
-  @ViewChildren('additionalComponent', {
-    read: ViewContainerRef
-  })
-  containers: QueryList<ViewContainerRef>;
-
-  changeSelectedItem(options: any): void {
-    this.selectedItemChange.emit(options);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.spec.ts
deleted file mode 100644
index 5d58b5c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.spec.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-
-import {FilterButtonComponent} from './filter-button.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('FilterButtonComponent', () => {
-  let component: FilterButtonComponent;
-  let fixture: ComponentFixture<FilterButtonComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [FilterButtonComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings,
-          clusters,
-          components
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })],
-      providers: [
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        ComponentActionsService,
-        FilteringService,
-        UtilsService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(FilterButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
deleted file mode 100644
index 9940d73..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-button/filter-button.component.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input, forwardRef} from '@angular/core';
-import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {UtilsService} from '@app/services/utils.service';
-import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
-
-@Component({
-  selector: 'filter-button',
-  templateUrl: '../menu-button/menu-button.component.html',
-  styleUrls: ['../menu-button/menu-button.component.less'],
-  providers: [
-    {
-      provide: NG_VALUE_ACCESSOR,
-      useExisting: forwardRef(() => FilterButtonComponent),
-      multi: true
-    }
-  ]
-})
-export class FilterButtonComponent extends MenuButtonComponent implements ControlValueAccessor {
-
-  constructor(protected actions: ComponentActionsService, private utils: UtilsService) {
-    super(actions);
-  }
-
-  @Input()
-  defaultValue?: string;
-
-  private selectedValue: any;
-
-  private onChange: (fn: any) => void;
-
-  get value(): any {
-    return this.selectedValue;
-  }
-
-  set value(newValue: any) {
-    this.selectedValue = newValue;
-    this.onChange(newValue);
-  }
-
-  updateValue(options: any): void {
-    const value = options && options.value;
-    if (this.isMultipleChoice) {
-      this.value = this.utils.updateMultiSelectValue(this.value, value, options.isChecked);
-    } else {
-      if (this.utils.valueHasChanged(this.selectedValue, value)) {
-        this.value = value;
-      }
-    }
-  }
-
-  writeValue() {
-  }
-
-  registerOnChange(callback: any): void {
-    this.onChange = callback;
-  }
-
-  registerOnTouched() {
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
deleted file mode 100644
index 323aa56..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-
-import {FilterDropdownComponent} from './filter-dropdown.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('FilterDropdownComponent', () => {
-  let component: FilterDropdownComponent;
-  let fixture: ComponentFixture<FilterDropdownComponent>;
-  const filtering = {
-    filters: {
-      f: {
-        options: [
-          {
-            value: 'v0',
-            label: 'l0'
-          },
-          {
-            value: 'v1',
-            label: 'l1'
-          }
-        ]
-      }
-    }
-  };
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [FilterDropdownComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        {
-          provide: FilteringService,
-          useValue: filtering
-        },
-        UtilsService,
-        ComponentActionsService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(FilterDropdownComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
deleted file mode 100644
index 9e5a6f1..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-dropdown/filter-dropdown.component.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, forwardRef} from '@angular/core';
-import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {UtilsService} from '@app/services/utils.service';
-import {DropdownButtonComponent} from '@app/components/dropdown-button/dropdown-button.component';
-
-@Component({
-  selector: 'filter-dropdown',
-  templateUrl: '../dropdown-button/dropdown-button.component.html',
-  styleUrls: ['../dropdown-button/dropdown-button.component.less'],
-  providers: [
-    {
-      provide: NG_VALUE_ACCESSOR,
-      useExisting: forwardRef(() => FilterDropdownComponent),
-      multi: true
-    }
-  ]
-})
-export class FilterDropdownComponent extends DropdownButtonComponent implements ControlValueAccessor {
-
-  constructor(protected actions: ComponentActionsService, protected utils: UtilsService) {
-    super(actions, utils);
-  }
-
-  private onChange: (fn: any) => void;
-
-  get value(): any {
-    return this.selectedValue;
-  }
-
-  set value(newValue: any) {
-    this.selectedValue = newValue;
-    this.onChange(newValue);
-  }
-
-  writeValue() {
-  }
-
-  registerOnChange(callback: any): void {
-    this.onChange = callback;
-  }
-
-  registerOnTouched() {
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.html
deleted file mode 100644
index 3f00e8b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-  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.
--->
-
-<div class="input-group">
-  <span class="input-group-addon">{{label | translate}}</span>
-  <input type="text" class="form-control" [(ngModel)]="instantValue" (ngModelChange)="updateInstantValue($event)">
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.less
deleted file mode 100644
index 1395959..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.input-group {
-  border: @input-border;
-  border-right-width: 0;
-}
-
-.input-group-addon {
-  border: none;
-  background-color: transparent;
-  text-transform: uppercase;
-
-  & + input {
-    border: none;
-  }
-}


[08/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/MainLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/MainLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/MainLayoutView.js
deleted file mode 100644
index 929ca98..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/MainLayoutView.js
+++ /dev/null
@@ -1,670 +0,0 @@
-/**
-* 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',
-    'backbone',
-    'utils/Utils',
-    'utils/ViewUtils',
-    'utils/Globals',
-    'hbs!tmpl/dashboard/MainLayoutView_tmpl',
-    'select2',
-    'sparkline',
-    'd3.tip'
-],function(require,Backbone,Utils,ViewUtils,Globals,MainLayoutViewTmpl){
-    'use strict';
-
-    var MainLayoutView = Backbone.Marionette.Layout.extend(
-    /** @lends MainLayoutView */
-    {
-        _viewName : 'MainLayoutView',
-
-        template: MainLayoutViewTmpl,
-
-        /** Layout sub regions */
-        regions: {
-            RLogLevel : "#r_logLevel",
-            RComponents : "#r_components",
-            RHosts : "#r_hosts",
-            RHierarchyTab : "#r_Hierarchy",
-            RHostInfoTab : "#r_HostInfo",
-            RBubbleTable : "#r_BubbleTable",
-            RAuditTab : "#r_AuditInfo",
-            RAuditDashboard:"#r_AuditDashboard",
-            RTroubleShoot:"#r_TroubleShoot"
-        },
-
-        /** ui selector cache */
-        ui: {
-//            graph : "#graphAgg",
-            searchBox : '[data-id="mainSearch"]',
-            searchBoxBtn : '[data-id="mainSearchBtn"]',
-            compare:".compare .panel-heading",
-            CompareButton:"[data-id='CompareButton']",
-            CompareClearAll:"[data-id='CompareClearAll']",
-            CloseCompareComponent:".hostCompList .closeComponent"
-            //viewType: "input[name='viewType']",
-        },
-
-        /** ui events hash */
-        events: function() {
-            var events = {};
-            //events['click #searchLog'] = 'onSearchLogClick';
-            events["click "+this.ui.searchBoxBtn] = 'onSearchLogClick';
-            events['change ' + this.ui.viewType]  = 'onViewTypeChange';
-            events['click button[data-tab-id]']  = 'onDeleteTabClick';
-            events["click "+this.ui.compare] = function(e){
-                this.togglePanelPosition(false,false);
-            }
-            events["click "+this.ui.CompareButton] = 'onCompareButtonClick';
-            events["click "+this.ui.CompareClearAll] = 'onCompareClearAllClick';
-            events["click "+this.ui.CloseCompareComponent] = function(e){
-                this.onCloseCompareComponentClick($(e.currentTarget).parents('span').data().id,true);
-            }
-            events["click .nav.nav-tabs li"] = function(e){
-                this.hideContextMenu();
-            }
-            return events;
-        },
-
-        /**
-         * intialize a new MainLayoutView Layout
-         * @constructs
-         */
-        initialize: function(options) {
-            _.extend(this, _.pick(options,'globalVent'));
-            this.vent = new Backbone.Wreqr.EventAggregator();
-            this.dateUtil = Utils.dateUtil;
-            this.bindEvents();
-            this.componetList =[];
-        },
-        bindEvents : function(){
-            this.listenTo(this.globalVent,"render:tab",function(options){
-                var that = this;
-                this.hideContextMenu();
-                this.renderLogFileTab(options);
-                setTimeout(function(){
-                    that.reAdjustTab()
-                },1000);
-
-            },this);
-            this.listenTo(this.globalVent,"render:comparison:tab",function(options){
-                this.hideContextMenu();
-                this.renderComparisonTab(options);
-            },this);
-            this.listenTo(this.globalVent,"show:tab",function(tabName){
-                this.showTab(tabName);
-            },this);
-            this.listenTo(this.globalVent,"add:compare",function($el){
-                this.quickMenuCompare = true;
-                this.onCompareLink($el);
-            },this);
-        },
-        onRender : function(){
-            this.renderTroubleShootTab();
-            this.renderHierarchyTab();
-            this.renderAuditTab();
-            this.togglePanelPosition(true);
-            this.bindTabCheckboxClick();
-            this.bindTabClickListener();
-            this.tabScrollBind();
-        },
-        onShow : function(){
-            //navigating to specific component tab
-            var params = ViewUtils.getDefaultParams();
-            if(params.host_name && params.component_name){
-                this.globalVent.trigger("render:tab",{
-                    params:_.extend({},{
-                        host_name :  params.host_name,
-                        component_name : params.component_name
-                    },params),
-                    globalVent : this.globalVent
-                });
-            }
-        },
-        renderLogFileTab : function(view){
-            var that = this;
-            require(['views/tabs/LogFileView'], function(LogFileView){
-                var tabName = (view.params.host_name + view.params.component_name).replace(/\./g,"_");
-                if(_.isUndefined(that[tabName])){
-                    var region = {};
-                    region[tabName] = '#' + tabName;
-                    $('<div/>', {
-                        'id': tabName,
-                        'class': 'tab-pane',
-                        'role':"tabpanel"
-                    }).appendTo(that.$('.tab-content'));
-                    that.addRegions(region);
-                    var region = that.getRegion(tabName);
-                    region.show(new LogFileView(view));
-                    that.$(".nav.nav-tabs").append('<li data-id="'+tabName+'" role="presentation">'+
-                            '<a data-id="'+tabName+'" data-host="'+view.params.host_name+'" data-component="'+view.params.component_name+'" href="#'+tabName+'" aria-controls="profile" role="tab" data-toggle="tab" title="'+view.params.host_name.split(".")[0]+' >> '+view.params.component_name+' ">'+view.params.host_name.split(".")[0]+'<b> >> </b>'+view.params.component_name+'</a>'+
-    //                        '<span class="air air-top-right">'+
-                                '<button data-tab-id="'+tabName+'" class="btn-closeTab"><i class="fa fa-times-circle"></i></button>'+
-                                '<div class="compareClick" title="Compare"><i class="fa fa-square-o"></i></div>');
-    //                            '<i class="fa fa-times"></i>'+
-    //                            '</button></span></li>');
-                }else{
-                    if(that[tabName].currentView){
-                        _.extend(that[tabName].currentView.params,view.params);
-                        that[tabName].currentView.render();
-                    }
-                }
-                //$("html, body").animate({ scrollTop: 0 }, 500);
-                that.showTab(tabName);
-            });
-        },
-        renderComparisonTab:function(view){
-            var that = this;
-            require(['views/tabs/ComparisonLayoutView'], function(ComparisonLayoutView){
-                var tabName = "";
-                _.each(view.componetList,function(object){
-                    if(object.host_name && object.component_name){
-                        tabName += (object.host_name + object.component_name).replace(/\./g,"_");
-                    }
-                });
-                if(_.isUndefined(that[tabName])){
-                    var region = {};
-                    region[tabName] = '#' + tabName;
-                    $('<div/>', {
-                        'id': tabName,
-                        'class': 'tab-pane',
-                        'role':"tabpanel"
-                    }).appendTo(that.$('.tab-content'));
-                    that.addRegions(region);
-                    var region = that.getRegion(tabName);
-                    region.show(new ComparisonLayoutView(view));
-                    that.$(".nav.nav-tabs").append('<li data-id="'+tabName+'" role="presentation">'+
-                            '<a data-id="'+tabName+'"  href="#'+tabName+'" aria-controls="profile" role="tab" data-toggle="tab">Compare</a>'+
-    //                        '<span class="air air-top-right">'+
-                                '<button data-tab-id="'+tabName+'" class="btn-closeTab"><i class="fa fa-times-circle"></i></button>');
-    //                            '<i class="fa fa-times"></i>'+
-    //                            '</button></span></li>');
-                }else{
-                    if(that[tabName].currentView){
-                        _.extend(that[tabName].currentView.params,view.params);
-                        that[tabName].currentView.render();
-                    }
-                }
-                $("html, body").animate({ scrollTop: 0 }, 500);
-                that.showTab(tabName);
-            });
-
-        },
-        showTab : function(tabId){
-            this.$(".nav.nav-tabs li").removeClass("active");
-            this.$("li[data-id='"+tabId+"']").addClass("active");
-            this.$(".tab-pane").removeClass("active");
-            this.$("#"+tabId).addClass("active");
-            this.tabOpen = true;
-            this.reAdjustTab();
-        },
-        onDeleteTabClick : function(e){
-            var tabId = $(e.currentTarget).data("tab-id");
-            if(this[tabId]){
-                this[tabId].close && this[tabId].close();
-                this.removeRegion(tabId);
-                this.$("li[data-id="+tabId+"]").remove();
-                this.$("#"+tabId).remove();
-                this.showTab(this.$(".nav.nav-tabs li").last().data("id"));
-            }
-        },
-        bindDraggableEvent : function(){
-            Utils.bindDraggableEvent(this.$( "div.box").not('.no-drop'));
-        },
-        renderLogLevel : function(){
-            var that = this;
-            require(['views/dashboard/LogLevelView'], function(LogLevelView){
-                 that.RLogLevel.show(new LogLevelView({
-                    vent : that.vent,
-                    globalVent:that.globalVent
-                }));
-            })
-
-        },
-        renderComponents : function(){
-            var that = this;
-            require(['views/dashboard/ComponentsView'], function(ComponentsView){
-                that.RComponents.show(new ComponentsView({
-                    vent : that.vent,
-                    globalVent:that.globalVent
-                }));
-            })
-        },
-        renderHosts : function(){
-            var that = this;
-            require(['views/dashboard/HostsView'], function(HostsView){
-                that.RHosts.show(new HostsView({
-                    vent : that.vent,
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        renderBubbleTableView : function(){
-            var that = this;
-            require(['views/dashboard/BubbleGraphTableLayoutView'], function(BubbleTableLayoutView){
-                that.RBubbleTable.show(new BubbleTableLayoutView({
-                    vent : that.vent,
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        renderTroubleShootTab:function(){
-            var that = this;
-            require(['views/troubleshoot/TroubleShootLayoutView'], function(TroubleShootLayoutView){
-
-                that.RTroubleShoot.show(new TroubleShootLayoutView({
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        renderHierarchyTab : function(){
-            var that = this;
-            require(['views/tabs/HierarchyTabLayoutView'], function(HierarchyTabLayoutView){
-                that.RHierarchyTab.show(new HierarchyTabLayoutView({
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        renderHostInfoTab : function(){
-            var that = this;
-            require(['views/tabs/HostInfoTabLayoutView'], function(HostInfoTabLayoutView){
-                that.RHostInfoTab.show(new HostInfoTabLayoutView({
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        renderAuditTab : function(){
-            var that = this;
-            require(['views/audit/AuditTabLayoutView'], function(AuditTabLayoutView){
-                that.RAuditTab.show(new AuditTabLayoutView({
-                    globalVent:that.globalVent
-                }));
-            });
-        },
-        hideContextMenu : function(){
-            $(".contextMenu").hide();
-        },
-        onSearchLogClick : function(){
-            var value = this.ui.searchBox.val();
-            if(_.isEmpty(value)){
-                this.ui.searchBox.val("*:*");
-                value = "*:*";
-            }
-//            this.fetchGraphData({q : value});
-//            this.fetchTableData(value);
-            this.vent.trigger("main:search",{q:value});
-        },
-        //Style 2
-        renderGraph : function(){
-            var root = {
-                    name : "",
-                    dataList : this.graphModel.get("graphData")
-            };
-            var margin = 20,
-            diameter = 880;//this.ui.graph.width();//960;
-            this.ui.graph.empty();
-//        var color = d3.scale.linear()
-//            .domain([-1, 5])
-//            .range(["hsl(152,90%,90%)", "hsl(228,30%,40%)"])
-//            .interpolate(d3.interpolateHcl);
-        var color = d3.scale.ordinal()
-            .domain([0,1])
-            //.range(["#ECFCBD","#ECFCBD","#ECE78F","#f4f4c8"]);
-            .range(["#dddddd","#cccccc","#F5F5F5"]);
-        var pack = d3.layout.pack()
-            .padding(2)
-            .size([diameter - margin, diameter - margin])
-            .value(function(d) {
-                return d.count; })
-            .children(function(d){
-                return d.dataList;
-            })
-
-        var svg = d3.select(this.ui.graph[0]).append("svg")
-            .attr("width", diameter)
-            .attr("height", diameter)
-          .append("g")
-            .attr("transform", "translate(" + diameter / 2 + "," + diameter / 2 + ")");
-
-        //d3.json("flare.json", function(error, root) {
-
-          var focus = root,
-              nodes = pack.nodes(root),
-              view;
-          /*
-           * Tip
-           */
-          var tipCirclePack = tip()
-              .attr('class', 'd3-tip')
-              .offset([-10, 0])
-              .html(function(d) {
-                  var tempName = "<div>";
-                  if(d.parent){
-                      if(d.depth > 1)
-                          tempName += d.parent.name+" => ";
-                      tempName += d.name;
-                  }
-                  return tempName + "</div>";
-              })
-          svg.call(tipCirclePack);
-          var circle = svg.selectAll("circle")
-              .data(nodes)
-            .enter().append("circle")
-              .attr("class", function(d) {
-                  return d.parent ? d.children ? "node" : "node node--leaf "+d.name : "node node--root"; })
-              .style("fill", function(d) {
-                  return d.children ? color(d.depth) : null; })
-              .on("click", function(d) {
-                  if(d3.event.shiftKey){
-                      alert("open in new tab")
-                  }else{
-                      if (focus !== d) zoom(d), d3.event.stopPropagation();
-                  }
-
-              })
-              .on('mouseover', function (d,i) {
-                    if (d.x) {
-                        tipCirclePack.show(d);
-                    }
-                })
-              .on('mouseout', function (d,i) {
-                    if (d.x) {
-                        tipCirclePack.hide(d);
-                    }
-                });
-
-          var text = svg.selectAll("text")
-              .data(nodes)
-            .enter().append("text")
-              .attr("class", "label")
-              .style("fill-opacity", function(d) { return d.parent === root ? 1 : 0; })
-              .style("display", function(d) { return d.parent === root ? null : "none"; })
-              .text(function(d) {
-                  if(d.count){
-                      if(d.count > 0)
-                          return d.name;
-                      else
-                          return "";
-                  }else
-                      return d.name;
-
-              });
-
-          var node = svg.selectAll("circle,text");
-
-          d3.select(this.ui.graph[0])
-              .style("background", color(-1))
-              .on("click", function() { zoom(root); });
-
-          zoomTo([root.x, root.y, root.r * 2 + margin]);
-          function zoom(d) {
-            var focus0 = focus; focus = d;
-
-            var transition = d3.transition()
-                .duration(d3.event.altKey ? 7500 : 750)
-                .tween("zoom", function(d) {
-                  var i = d3.interpolateZoom(view, [focus.x, focus.y, focus.r * 2 + margin]);
-                  return function(t) { zoomTo(i(t)); };
-                });
-
-            transition.selectAll("text")
-              .filter(function(d) { return d.parent === focus || this.style.display === "inline"; })
-                .style("fill-opacity", function(d) { return d.parent === focus ? 1 : 0; })
-                .each("start", function(d) { if (d.parent === focus) this.style.display = "inline"; })
-                .each("end", function(d) { if (d.parent !== focus) this.style.display = "none"; });
-          }
-
-          function zoomTo(v) {
-            var k = diameter / v[2]; view = v;
-            node.attr("transform", function(d) { return "translate(" + (d.x - v[0]) * k + "," + (d.y - v[1]) * k + ")"; });
-            circle.attr("r", function(d) { return d.r * k; });
-          }
-        },
-        bindTabCheckboxClick:function(){
-            var that = this;
-            this.$('div[role="tabpanel"] ul').on('click','li div.compareClick',function(){
-                that.tabcheckBoxSelectDeselect($(this))
-            })
-        },
-        tabcheckBoxSelectDeselect:function(el,fromEvent){
-            var that = this,
-            clickedId = this.$('div[role="tabpanel"] ul').find(el).parents('li').data('id');
-            if (el.find('i').hasClass('fa-square-o')) {
-                var idList = _.pluck(this.componetList, 'id');
-                if (! _.contains(idList, clickedId)) {
-                    if(this.componetList.length >= 4){
-                        Utils.alertPopup({
-                            msg: "Currently only four components comparison supported."
-                        });
-                        return;
-                    }else{
-                        el.find('i').removeClass('fa-square-o').addClass('fa-check-square-o');
-                        this.quickMenuCompare = false;
-                        this.onCompareLink(el);
-                    }
-                }else{
-                    el.find('i').removeClass('fa-square-o').addClass('fa-check-square-o');
-                }
-            } else {
-                el.find('i').removeClass('fa-check-square-o').addClass('fa-square-o');
-                if (!fromEvent) {
-                    this.onCloseCompareComponentClick(el.parents('li').find('a').data().id)
-                }
-            }
-        },
-        onCompareLink:function($el){
-            this.togglePanelPosition(false, true);
-            var clickedId = "",
-                newValue = true,
-                dataValue;
-            if (this.quickMenuCompare) {
-                dataValue = $el.data();
-                if(dataValue.host){
-                    dataValue.id = dataValue.host.replace(/\./g, '_') + dataValue.node;
-                }
-            } else {
-                dataValue = $el.parents('li').find('a').data();
-            }
-            if (dataValue.id) {
-                var clickedId = dataValue.id;
-            }
-            _.each(this.componetList, function(object) {
-                if (object.id.match(clickedId)) {
-                    newValue = false;
-                }
-            });
-            if (this.componetList.length >= 4) {
-                if (newValue) {
-                    Utils.alertPopup({
-                        msg: "Currently only four components comparison supported."
-                    });
-                    return;
-                }
-            }
-            if (this.componetList.length <= 3 && newValue) {
-                if (dataValue.host && (dataValue.component || dataValue.node)) {
-                    var host = dataValue.host;
-                    var component = dataValue.component || dataValue.node;
-                    var spanLength = this.$('.compare .panel-body span.hasNode');
-                    if (spanLength.length != 0 && spanLength.length >= 1) {
-                        this.componetList.push({ 'host_name': host, 'component_name': component, id: clickedId });
-                        this.$('.compare .panel-body .hostCompList').append('<span class="hasNode" data-id="' + clickedId + '"><i class=" closeComponent fa fa-times-circle"></i>' + host.split(".")[0] + ' <i class="fa fa-angle-double-right"></i><br> ' + component + '</span>');
-                    } else {
-                        this.componetList.push({ 'host_name': host, 'component_name': component, id: clickedId });
-                        this.$('.compare .panel-body .hostCompList').html('<span class="hasNode" data-id="' + clickedId + '"><i class=" closeComponent fa fa-times-circle"></i>' + host.split(".")[0] + ' <i class="fa fa-angle-double-right"></i><br> ' + component + '</span>');
-                    }
-                }
-            }
-            this.quickMenuCompare = false;
-        },
-        onCompareButtonClick:function(){
-            if(this.componetList.length == 1){
-                Utils.alertPopup({
-                        msg: "Minimum two components are required for comparison. Please select one more component and try again."
-                });
-            }else{
-                var dateRangeLabel ='Last 1 Hour';
-                var dateObj = this.dateUtil.getRelativeDateFromString(dateRangeLabel);
-
-                if (this.RHierarchyTab.currentView && this.RHierarchyTab.currentView.defaultParams) {
-                    var dateParams = this.RHierarchyTab.currentView.defaultParams;
-                    if (!_.isUndefined(dateParams) && _.isObject(dateParams)) {
-                        dateObj = {
-                            from: dateParams.from,
-                            to: dateParams.to,
-                            dateRangeLabel: dateParams.dateRangeLabel
-                        };
-                    }
-                }
-
-                this.globalVent.trigger("render:comparison:tab",{
-                    params: dateObj,
-                    componetList:this.componetList,
-                    globalVent : this.globalVent
-                });
-            }
-            this.togglePanelPosition(false,false)
-        },
-        togglePanelPosition:function(hideFully,clickFromLi){
-            if(hideFully){
-                this.$('.compare').css('bottom', "-136px");
-                this.$('.compare .panel-heading').addClass("down");
-                return;
-            }
-            if (this.$('.compare .panel-heading').hasClass('down')) {
-                this.$('.compare').css('bottom', "0px");
-                this.$('.compare .panel-heading').removeClass("down")
-                    /*   setTimeout(function() {
-                           this.$('.compare').css('bottom', (-(this.$('.compare .panel-body').height() + 39)) + "px");
-                           this.$('.compare .panel-heading').addClass("down");;
-                       }, 2000);*/
-            } else if (!clickFromLi) {
-                this.$('.compare').css('bottom', (-(this.$('.compare .panel-body').height() + 32)) + "px");
-                this.$('.compare .panel-heading').addClass("down");
-            }
-        },
-        onCompareClearAllClick:function(e){
-            e.stopPropagation();
-            this.componetList =[];
-            this.$('.compare .panel-body .hostCompList').html('');
-            this.$('div[role="tabpanel"] ul').find('li div.compareClick i').removeClass('fa-check-square-o').addClass('fa-square-o');
-            this.togglePanelPosition(true)
-        },
-        onCloseCompareComponentClick:function(id,fromEvent){
-            var clickedId = id,that = this;
-            if (clickedId) {
-                var clickedIndex = undefined;
-                _.each(this.componetList, function(object, i) {
-                    if (object.id.match(clickedId)) {
-                        that.$('.compare .panel-body .hostCompList').find('span[data-id="'+id+'"]').remove();
-                        clickedIndex = i + 1;
-                    }
-                });
-                if (clickedIndex) {
-                    this.componetList.splice(clickedIndex - 1, 1);
-                    if(this.componetList.length == 0){
-                        this.togglePanelPosition(true);
-                    }else{
-                        this.togglePanelPosition(false,true);
-                    }
-                }
-                if(fromEvent){
-                    this.tabcheckBoxSelectDeselect(this.$('div[role="tabpanel"] ul').find('li[data-id="'+clickedId+'"] div.compareClick'),true)
-                }
-            }
-        },
-        bindTabClickListener:function(){
-            var that = this;
-            this.$("ul[role='tablist']").on('click','li',function(){
-                that.globalVent.trigger("tab:click",this);
-            });
-        },
-        tabScrollBind:function(){
-            var hidWidth;
-            var scrollBarWidths = 40;
-            var that = this;
-
-            var widthOfList = function(){
-              var itemsWidth = 0;
-              that.$('.list li').each(function(){
-                var itemWidth = $(this).outerWidth();
-                itemsWidth+=itemWidth;
-              });
-              return itemsWidth;
-            };
-
-            var widthOfHidden = function(){
-              return (($('.wrapper').outerWidth())-widthOfList()-getLeftPosi())-scrollBarWidths;
-            };
-
-            var getLeftPosi = function(){
-              return that.$('.list').position().left;
-            };
-
-            this.reAdjustTab = function(){
-              if ((that.$('.wrapper').outerWidth()) < widthOfList()) {
-                  if(that.tabOpen){
-                      that.$('.list').animate({left:"+="+widthOfHidden()+"px"},'slow');
-                      that.tabOpen = false;
-                  }
-                that.$('.scroller-right').show();
-              }
-              else {
-                that.$('.scroller-right').hide();
-              }
-
-              if (getLeftPosi()<0) {
-                that.$('.scroller-left').show();
-              }
-              else {
-                that.$('.item').animate({left:"-="+(-200)+"px"},'slow');
-                  that.$('.scroller-left').hide();
-              }
-            }
-
-
-            this.$('.scroller-right').click(function(e) {
-
-             /* that.$('.scroller-left').fadeIn('slow');
-              that.$('.scroller-right').fadeOut('slow');*/
-              //console.log(widthOfHidden())
-              if(widthOfHidden()+55 < 0){
-                   that.$('.list').animate({left:"+="+(-43)+"px"},0,function(){
-                      that.reAdjustTab();
-                  });
-              }
-
-            });
-
-            this.$('.scroller-left').click(function() {
-
-                /*that.$('.scroller-right').fadeIn('slow');
-                that.$('.scroller-left').fadeOut('slow');*/
-                  //console.log(getLeftPosi())
-                  if(getLeftPosi() < 0){
-                      that.$('.list').animate({left:"-="+(-40)+"px"},0,function(){
-                      that.reAdjustTab();
-                  });
-                  }
-
-            });
-        },
-    });
-    return MainLayoutView;
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/ApplySearchFilterView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/ApplySearchFilterView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/ApplySearchFilterView.js
deleted file mode 100644
index 62b74c8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/ApplySearchFilterView.js
+++ /dev/null
@@ -1,214 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/dialog/ApplySearchFilterView_tmpl'
-], function(require, Backbone, Utils, ApplySearchFilterViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends SaveSearchFilterView */
-        {
-            _viewName: 'SaveSearchFilterView',
-
-            template: ApplySearchFilterViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                applyFilter: "[data-id = 'applyFilter']",
-                deleteFilter: "[data-id = 'deleteFilter']"
-            },
-
-            regions: {
-                'rTable': 'div[data-id="r_table"]'
-            },
-
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['click ' + this.ui.applyFilter] = 'onApplyClick';
-                events['click ' + this.ui.deleteFilter] = 'onDeleteClick';
-                events["click [data-id='searchFilter']"] = 'onSearchFilterClick';
-                events["keypress [data-id='filterName']"] = 'onSearchFilterKeypress';
-                return events;
-            },
-
-            /**
-             * intialize a new SaveSearchFilterView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'collection'));
-                this.dateUtil = Utils.dateUtil;
-                this.bindEvents();
-                this.fetchFilters();
-
-            },
-            bindEvents: function() {
-                this.listenTo(this.collection, 'reset', function() {
-
-                }, this);
-            },
-            onRender: function() {
-                this.renderTable();
-            },
-            fetchFilters: function() {
-
-                var that = this;
-                $.extend(this.collection.queryParams, {
-                    rowType:"history"
-                });
-                this.collection.getFirstPage({
-                    error: function(jqXHR, textStatus, errorThrown) {
-                        Utils.notifyError({
-                            content: "There is some problem in Event History, Please try again later."
-                        });
-                        that.initializeData();
-                    },
-                    reset: true
-                });
-            },
-            renderTable: function() {
-                var that = this;
-                var cols = new Backgrid.Columns(this.getColumns());
-                require(['views/common/TableLayout'],function(TableLayout){
-                    that.rTable.show(new TableLayout({
-                        columns: cols,
-                        collection: that.collection,
-                        includeFilter: false,
-                        includePagination: true,
-                        includePageSize: true,
-                        includeFooterRecords: true,
-                        gridOpts: {
-                            emptyText: 'No records found!'
-                        },
-                        filterOpts: {},
-                        paginatorOpts: {}
-                    })); 
-                });
-            },
-            getColumns: function() {
-                var that = this,
-                    cols = {
-                        filtername: {
-                            label: "Name",
-                            cell: "String",
-                            editable: false,
-                            sortType: 'toggle',
-                            sortable: true,
-                            direction: 'ascending',
-                            className: "filterName",
-                            width: 20
-                        },
-                        values: {
-                            label: "Message",
-                            cell: "html",
-                            editable: false,
-                            sortType: 'toggle',
-                            sortable: false,
-                            className: "logMessage",
-                            formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-                                fromRaw: function(rawValue, model) {
-                                    return that.showParams(JSON.parse(rawValue), model.get('id'))
-
-                                }
-                            })
-
-                        }
-                    }
-
-
-                return this.collection.constructor.getTableCols(cols, this.collection);
-            },
-            showParams: function(params, id) {
-               
-                return '<pre class="applyFilter">' +
-                       '<button class="btn btn-primary btn-app-sm pull-right" data-nameId="' + id + '" data-id="applyFilter"><i class="fa fa-check"></i></button>' +
-                       '<button class="btn btn-primary btn-app-sm pull-right" data-nameId="' + id + '" data-id="deleteFilter"><i class="fa fa-times"></i></button>' +
-                       '<strong>Range:</strong>' + (this.createInnerSpan(params, "from")) + '<strong>&nbsp:To:&nbsp:</strong>' + (this.createInnerSpan(params, "to")) + '<br>' +
-                       '<strong>Level:</strong>' + (this.createInnerSpan(params, "level")) + '<br>' +
-                       '<strong>Include Components:</strong>' + (this.createInnerSpan(params, "mustBe")) + '<br>' +
-                       '<strong>Exclude Components:</strong>' + (this.createInnerSpan(params, "mustNot")) + '<br>' +
-                       '<strong>Include Columns:</strong>' + (this.createInnerSpan(params, "includeQuery")) + '<br>' +
-                       '<strong>Exclude Columns:</strong>' + (this.createInnerSpan(params, "excludeQuery")) +
-                       '</pre>';
-
-            },
-            createInnerSpan: function(params, type) {
-                var typeString = "",
-                    that = this;
-                if (params[type]) {
-                    if(type == "includeQuery" || type == "excludeQuery"){
-                        typeString += "<span>"+params[type].replace("},{",",").replace("[{","").replace("}]","")+"</span>";
-                    }else{
-                        Utils.encodeIncludeExcludeStr(params[type], false, ((type == "iMessage" || type == "eMessage") ? ("|i::e|") : (","))).map(function(typeName) {
-                            typeString += '<span class="' + ((type != "level") ? (type) : (typeName)) + '">' +
-                                ((type == "from" || type == "to") ? (that.dateUtil.getTimeZone(params[type])) : (Utils.escapeHtmlChar(typeName))) + '</span>' +
-                                ((type == "level") ? (",") : (""));
-                        });
-                    }
-
-                }
-                return ((typeString.length == 0) ? ("-") : ((type == "level") ? ((typeString).slice(0, -1)) : (typeString)))
-            },
-            onApplyClick: function(e) {
-                this.selectedModel = this.collection.findWhere({
-                    id: ""+parseInt($(arguments[0].currentTarget).attr('data-nameId'))
-                });
-                this.trigger("apply:filter",this.selectedModel);
-            },
-            onDeleteClick: function(e) {
-                var that = this;
-                var postObject = {
-                    id: parseInt($(arguments[0].currentTarget).attr('data-nameId'))
-                }
-                this.collection.deleteEventHistory(postObject, {
-                    success: function(data, textStatus, jqXHR) {
-                        Utils.notifySuccess({
-                            content: "Event History Deleted successfully."
-                        });
-                        that.fetchFilters();
-                    },
-                    error: function(jqXHR, textStatus, errorThrown) {
-                        Utils.notifyError({
-                            content: "There is some problem in Event History, Please try again later."
-                        });
-                    }
-                });
-
-            },
-            onSearchFilterClick: function() {
-                var filterName = this.$("[data-id='filterName']").val();
-                $.extend(this.collection.queryParams, {
-                    filterName: filterName
-                });
-                this.fetchFilters();
-            },
-            onSearchFilterKeypress: function(e) {
-                if (e.which == 13) {
-                    this.onSearchFilterClick();
-                }
-            }
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/DetailLogFileView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/DetailLogFileView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/DetailLogFileView.js
deleted file mode 100644
index 689bacd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/DetailLogFileView.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'utils/ViewUtils',
-    'hbs!tmpl/dialog/DetailLogFileView_tmpl',
-    'collections/VLogList'
-],function(require,Backbone,Utils,ViewUtils,DetailLogFileView_tmpl, VLogList) {
-    'use strict';
-
-    return Backbone.Marionette.ItemView.extend(
-        /** @lends DetailLogFileView */
-        {
-            _viewName: 'DetailLogFileView',
-
-            template: DetailLogFileView_tmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                logsContainer: ".logsContainer",
-                prevBtn : "[data-id='prev']",
-                nextBtn : "[data-id='next']"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events["click .logsDetail button"] = 'onButtonClick';
-                return events;
-            },
-
-            /**
-             * intialize a new TimeZoneChangeView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'model'));
-                this.collection = new VLogList([],{
-                	state: {
-                        firstPage: 0,
-                        pageSize: 9999
-                    }
-                });
-                this.defaultRecords = 10;
-                this.params = {};
-            },
-            bindEvents: function() {
-                var that = this;
-            },
-            onRender: function() {
-            	var that = this;
-            	this.fetchLogs({
-            		host_name : this.model.get("host"),
-            		component_name : this.model.get("type"),
-            		numberRows : this.defaultRecords,
-            		id : this.model.get("id")
-            	},{
-            		beforeSend : function(){
-            			that.ui.logsContainer.append("<b>Loading...</b>");
-            		},
-            		success : function(data){
-            			that.collection.reset(data.logList);
-            			that.renderLogs();
-            		}
-            	});
-            },
-            fetchLogs : function(params,options){
-            	$.extend(this.params,params);
-            	this.collection.getTruncatedLogs(this.params,_.extend({
-            		error :function(error,data,status){
-            			var obj = JSON.parse(error.responseText);
-            			Utils.notifyError({content:obj.msgDesc});
-            			that.ui.logsContainer.html("");
-            		}
-            	},options));
-            },
-            renderLogs: function() {
-            	var that = this;
-            	that.ui.logsContainer.html("<hr>")
-            	this.collection.each(function(model){
-            		var highlightClass = "highlightLog";
-            		that.ui.logsContainer.append("<div data-id='"+model.get("id")+"' class='"+(that.model.get("id") === model.get("id") ? highlightClass : "")+"'><pre>"+ViewUtils.foramtLogMessageAsLogFile(model, "mess")+"</pre></div>");
-            	});
-            	that.ui.logsContainer.append("<hr>")
-            	var top = this.$("[data-id="+this.model.get("id")+"]").position().top;
-            	this.scrollToLogEntry(top -200,300);
-            	this.$("button[data-id]").removeClass("hidden");
-            },
-            appendLogs : function(data,type){
-            	var isNext = (type === "next") ? true : false,that=this;
-            	if(data.length == 0 && (!isNext)){
-            		that.ui.logsContainer.prepend("<span>no records found!</span>");
-            		that.ui.prevBtn.hide();
-            	}
-            	_.each(data,function(log,i){
-            		var html = "<div data-id='"+log.id+"'><pre>"+ViewUtils.foramtLogMessageAsLogFile(new Backbone.Model(log),"mess")+"</pre></div>";
-            		if(isNext)
-                		that.ui.logsContainer.append(html);
-            		else
-            			that.ui.logsContainer.prepend(html);
-            	});
-            	if(isNext)
-            		that.ui.logsContainer.append("<hr>");
-            	else
-            		that.ui.logsContainer.prepend("<hr>");
-            },
-            onButtonClick : function(e){
-            	var $el = $(e.currentTarget),that=this,type = $el.data("id"),isNext = (type === "next") ? true : false;
-            	$el.addClass("disabled");
-            	$el.find("span").text("loading more "+this.defaultRecords);
-            	this.toggleLoadMoreBtn($el);
-            	var $row = isNext ? this.ui.logsContainer.find("[data-id]").last() : this.ui.logsContainer.find("[data-id]").first();
-            	if($row){
-            		this.fetchLogs({
-            			id : $row.data("id"),
-            			scrollType : isNext ? "after" : "before"
-            		},{
-            			success : function(data){
-            				that.appendLogs(data.logList,type);
-            			},
-            			complete : function(){
-            				$el.removeClass("disabled");
-            				$el.find("span").text("Load more");
-            				that.toggleLoadMoreBtn($el);
-            				if(! isNext){
-            					var top = that.$("[data-id="+$row.data("id")+"]").position().top;
-            					that.scrollToLogEntry(top - 50,0);
-            				}
-            			}
-            		});
-            	}
-            },
-            toggleLoadMoreBtn : function($btn){
-            	var $i = $btn.find('i'),className = ($btn.data("id") === "next") ? "fa-arrow-down" : "fa-arrow-up";
-            	if($i.hasClass(className)){
-            		$i.removeClass(className).addClass("fa-spinner fa-spin");
-            	}else
-            		$i.removeClass("fa-spinner fa-spin").addClass(className);
-            },
-            scrollToLogEntry : function(top,speed){
-            	this.$(".logsDetail").animate({ scrollTop : (top) }, speed);
-            },
-            onClose : function(){
-            }
-
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionCompositeView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionCompositeView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionCompositeView.js
deleted file mode 100644
index ffef322..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionCompositeView.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Globals',
-    'collections/VGroupList',
-    'hbs!tmpl/dialog/GlobalExclusionCompositeView_tmpl',
-    'views/dialog/GlobalExclusionItemView'
-],function(require,Backbone,Globals,VGroupList,GlobalExclusionCompositeView,GlobalExclusionItemView) {
-    'use strict';
-
-    return Backbone.Marionette.CompositeView.extend(
-        /** @lends GlobalExclusionListView */
-        {
-            _viewName: 'GlobalExclusionListView',
-
-            template: GlobalExclusionCompositeView,
-
-            itemView: GlobalExclusionItemView,
-
-            itemViewContainer: "div[data-id='addRowDiv']",
-
-            itemViewOptions: function() {
-                return {
-                    col: this.componentsList
-                }
-            },
-
-            initialize: function(options) {
-
-                _.extend(this, _.pick(options, 'exclusionObj'));
-                this.componentsList = new VGroupList([], {
-                    state: {
-                        pageSize: 1000
-                    }
-                });
-                this.componentsList.url = Globals.baseURL + "service/logs/components";
-
-                this.collection = this.exclusionObj.logMessageCollection;
-                if (this.collection.length == 0) {
-                    this.collection.add(new this.collection.model());
-                }
-
-                this.bindEvents();
-            },
-            /** Layout sub regions */
-            regions: {},
-
-            /** ui selector cache */
-            ui: {
-                addRow: "button[data-id='addRowButton']",
-                addRowDiv: "div[data-id='addRowDiv']",
-                getRow: "div[data-id='getRow']",
-                select2Input: ".select2IComponents",
-                select2Load:".select2Load"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['click ' + this.ui.addRow] = 'onAddRow';
-                return events;
-            },
-
-            /**
-             * intialize a new GlobalExclusionLView Layout
-             * @constructs
-             */
-
-            onRender: function() {
-                this.componentsList.fetch({
-                    reset: true
-                });
-                this.ui.select2Input.select2({
-                    placeholder: 'Exclude Components',
-                    data: [],
-                    width: '75%',
-                });
-                this.ui.select2Input.select2("disable");
-            },
-            onAddRow: function() {
-                this.collection.add(new this.collection.model());
-            },
-            bindEvents: function() {
-                this.listenTo(this.componentsList, "reset", function(col, abc) {
-                    this.setupSelect2Fields(col, "type", 'type', 'excludeComponents', 'Exclude Components');
-                    this.setComponentsList(this.exclusionObj.components)
-                        // this.setupSelect2Fields(col, "type", 'type', 'includeComponents', 'Include Components');
-                }, this);
-            },
-            setupSelect2Fields: function(col, idKey, textKey, selectTagId, placeHolder) {
-                var that = this,
-                    data = [];
-                data = _.pluck(col.models, 'attributes');
-                for (var i = 0; i < data.length; i++) {
-                    data[i].id = data[i].type;
-                }
-                this.ui.select2Input.select2({
-                    placeholder: (placeHolder) ? placeHolder : 'Select',
-                    tags: true,
-                    allowClear: true,
-                    width: '75%',
-                    data: {
-                        results: data,
-                        text: textKey
-                    },
-                    formatSelection: function(item) {
-                        return item[textKey];
-                    },
-                    formatResult: function(item) {
-                        return item[textKey];
-                    }
-                })
-                this.ui.select2Input.select2("enable");
-                this.ui.select2Load.hide();
-            },
-            setComponentsList: function(values) {
-                if (values)
-                    this.ui.select2Input.select2('val', values);
-                else
-                    this.ui.select2Input.select2('val', []);
-            }
-
-        });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionItemView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionItemView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionItemView.js
deleted file mode 100644
index 855a1c9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GlobalExclusionItemView.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Globals',
-    'collections/VGroupList',
-    'hbs!tmpl/dialog/GlobalExclusionItemView_tmpl'
-],function(require,Backbone,Globals,VGroupList,GlobalExclusionItemViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.ItemView.extend(
-        /** @lends GlobalExclusionListView */
-        {
-
-            template: GlobalExclusionItemViewTmpl,
-
-            /** Layout sub regions */
-            regions: {},
-
-            /** ui selector cache */
-            ui: {
-                selectionTypeLOV: "select[data-id='selectionTypeLOV']",
-                /* select2Input: ".select2IComponents",*/
-                textArea: "div[data-id='L']",
-                closeButton: "div[data-id='closeButton']"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.selectionTypeLOV] = 'onSelectionTypeLOVClicked';
-                events['click ' + this.ui.closeButton] = 'onCloseButton';
-                return events;
-            },
-
-            /**
-             * intialize a new GlobalExclusionComponentView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                this.componentsList = options.col
-                this.bindEvents();
-            },
-            onRender: function() {
-                var that = this;
-                this.$('textarea').text(that.model.get('message'));
-            },
-            bindEvents: function() {},
-            /*changeDisplayType: function() {
-                if (this.ui.selectionTypeLOV.val() == "C") {
-                    this.ui.textArea.hide();
-                    this.$('.select2IComponents').show();
-                } else if (this.ui.selectionTypeLOV.val() == "L") {
-                    this.$('.select2IComponents').hide();
-                    this.ui.textArea.show();
-
-                }
-            },*/
-            onSelectionTypeLOVClicked: function() {
-                this.changeDisplayType();
-            },
-
-            onCloseButton: function() {
-                this.model.destroy();
-            }
-
-        });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GridGraphSettingView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GridGraphSettingView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GridGraphSettingView.js
deleted file mode 100644
index c1d1d22..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/GridGraphSettingView.js
+++ /dev/null
@@ -1,476 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'utils/Globals',
-    'collections/VAuditLogList',
-    'hbs!tmpl/dialog/GridGraphSettingView_tmpl',
-    'bootstrap-daterangepicker'
-], function(require, Backbone, Utils, Globals, VAuditLogList, GridGraphSettingViewTmpl, daterangepicker) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends GridGraphSettingView */
-        {
-            _viewName: 'GridGraphSettingView',
-
-            template: GridGraphSettingViewTmpl,
-            templateHelpers: function() {
-                return {
-                    title: this.options.title,
-                    showLegend: this.options.showLegend,
-                    showY: this.options.showY,
-                    showX: this.options.showX,
-                    unit: this.options.unit,
-                    xTimeFormat: this.options.xTimeFormat,
-                    xNormalFormat: this.options.xNormalFormat,
-                    yAxisFormat: this.options.yAxisFormat,
-                    stackOrGroup: this.options.stackOrGroup,
-                    pieOrDonut: this.options.pieOrDonut,
-                    viewTypePie: this.pieView,
-                    firstTime: this.firstTime
-                };
-            },
-
-
-            /** ui selector cache */
-            ui: {
-                select2XColumns: ".select2XColumns",
-                select2XType: ".select2XType",
-                select2Y: ".select2Y",
-                select2StackColumns: ".select2StackColumns",
-                startDate: "#startDate",
-                endDate: "#endDate",
-                dateRangeTitle: ".dateRangeTitle:not('.custome')",
-                input: "input:not('.unbind')",
-                select: "select[data-fetch='true']",
-                selectXAxis: "[data-id='selectx']",
-                column: "[data-id='column']",
-                time: "[data-id='time']",
-                showXBox: "[data-id='showX']",
-                alert: "[data-id='alert']",
-                stackOrGroupLov: "[data-id='stackOrGroupLov']"
-            },
-
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['click ' + this.ui.applyFilter] = 'onApplyClick';
-                events['click ' + this.ui.deleteFilter] = 'onDeleteClick';
-                events['click ' + this.ui.dateRangeTitle] = 'onRelativeDateClick';
-                events['change ' + this.ui.selectXAxis] = 'onSelectXAxis';
-                events['change ' + this.ui.input] = 'onInputChanges';
-                events['change ' + this.ui.select] = 'onInputChanges';
-                return events;
-            },
-
-            /**
-             * intialize a new GridGraphSettingView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'model', 'viewType'));
-                if (this.model) {
-                    this.options = this.model.toJSON();
-                    if (!this.options.params) {
-                        this.firstTime = true;
-                    }
-                }
-                this.dateUtil = Utils.dateUtil;
-
-                this.params = {};
-                if (!this.viewType || this.viewType == Globals.graphType.HISTOGRAM.value) {
-                    this.histogramView = true;
-                } else if (this.viewType == Globals.graphType.MULTILINE.value) {
-                    this.lineView = true;
-                } else if (this.viewType == Globals.graphType.PIE.value) {
-                    this.pieView = true;
-                }
-                this.initializeCollection();
-                this.bindEvents();
-            },
-            bindEvents: function() {
-
-
-            },
-            onRender: function() {
-                this.initializePlugins(this.listOfselect2);
-                //this.ui.column.hide();
-                this.initializeDateRangePicker();
-                this.initializePopover();
-                if (this.options) {
-                    if (!this.options.stackOrGroup && (this.options.stackOrGroup == "" || this.options)) {
-                        this.$('.normalRadio').prop("checked", true);
-                    }
-                    if (this.options.xAxis == "evtTime") {
-                        this.$('.xTimeFormat').show();
-                        this.$('.xNormalFormat').hide();
-
-                    } else {
-                        this.$('.xNormalFormat').show();
-                        this.$('.xTimeFormat').hide();
-                    }
-
-                }
-                this.stackPrvValue = "Normal";
-            },
-            getDefaultDate: function() {
-                var todayDate = this.dateUtil.getRelativeDateFromString('Today');
-                return todayDate;
-            },
-            initializeDateRangePicker: function() {
-                var that = this;
-                this.ui.startDate.daterangepicker({
-                    singleDatePicker: true,
-                    showDropdowns: false,
-                    timePicker: true,
-                    autoApply: true,
-                    autoUpdateInput: true,
-                    timePicker: true,
-                    timePickerIncrement: 1,
-                    timePicker24Hour: true,
-                    timePickerSeconds: true,
-                    timeZone: 0,
-                    locale: {
-                        format: 'MM/DD/YYYY H:mm:ss,SSS'
-                    }
-                }, function(start, end, labe) {
-                    if (that.relativeDateSet) {
-                        that.relativeDateSet = false;
-                    }
-                    that.$el.find('.dateRangeTitle.custome').addClass('active').siblings().removeClass('active');
-                    that.startDate = start;
-                    that.onDateChanged();
-                });
-                this.ui.endDate.daterangepicker({
-                    singleDatePicker: true,
-                    showDropdowns: true,
-                    timePicker: true,
-                    autoApply: true,
-                    autoUpdateInput: true,
-                    timePicker: true,
-                    timePickerIncrement: 1,
-                    timePicker24Hour: true,
-                    timePickerSeconds: true,
-                    timeZone: 0,
-                    locale: {
-                        format: 'MM/DD/YYYY H:mm:ss,SSS'
-                    }
-                }, function(start, end, labe) {
-                    if (that.relativeDateSet) {
-                        that.relativeDateSet = false;
-                    }
-                    that.$el.find('.dateRangeTitle.custome').addClass('active').siblings().removeClass('active');
-                    that.endDate = start;
-                    that.onDateChanged();
-                });
-                if (this.options && this.options.params) {
-                    this.setDateText(this.dateUtil.getMomentObject(this.options.params.from), this.dateUtil.getMomentObject(this.options.params.to));
-                    this.params = this.options.params;
-                    if (this.params.dateRangeTitle) {
-                        that.$el.find('.dateRangeTitle:contains(' + this.params.dateRangeTitle + ')').addClass('active').siblings().removeClass('active');
-                    }
-                } else {
-                    var getdateObject = this.getDefaultDate();
-                    this.setDateText(getdateObject[0], getdateObject[1]);
-                    this.params = this.setDateParams();
-                }
-
-
-
-            },
-            onInputChanges: function(e) {
-                var data = $(e.currentTarget).data(),
-                    key = e.currentTarget.name,
-                    dataObject = this.getData(),
-                    value = dataObject[key];
-                if (key == "stackOrGroup") {
-                    this.ui.stackOrGroupLov.find('label').text(value);
-                    if (value == "Normal") {
-                        this.stackPrvValue = value;
-                        this.vent.trigger('graph:data:update', {
-                            "stackBy": null
-                        }, dataObject);
-
-                        this.ui.select2StackColumns.select2("disable");
-                        return;
-                    } else {
-                        this.ui.select2StackColumns.select2("enable");
-                        if (this.stackPrvValue == "Normal" && this.ui.select2StackColumns.val() != "") {
-                            this.stackPrvValue = value;
-                            this.vent.trigger('graph:data:update', {
-                                "stackBy": this.ui.select2StackColumns.val()
-                            }, dataObject);
-
-                            return;
-                        } else {
-                            this.stackPrvValue = value;
-                        }
-
-                    }
-
-                }
-                if (key == "xAxis") {
-                    if (value == "evtTime") {
-                        this.$('.xTimeFormat').show();
-                        this.$('.xNormalFormat').hide();
-                    } else {
-                        this.$('.xTimeFormat').hide();
-                        this.$('.xNormalFormat').show();
-                    }
-                }
-                var obj = {};
-                // For Temp we set y axis explicitly
-                if (dataObject.yAxis && dataObject.yAxis != "") {
-                    obj['yAxis'] = dataObject['yAxis'];
-                }
-                if (data.fetch) {
-                    obj[key] = value;
-
-                    /*   if (key == "xAxis" && key == "yAxis" && dataObject.xAxis && dataObject.xAxis != "") {
-                           if (this.ui.time.is(':hidden')) {
-                               this.ui.alert.removeClass('text-danger').addClass(' text-success');
-                           } else {
-                               this.ui.alert.removeClass('text-success').addClass('text-danger');
-                           }
-                       } else {
-                           this.ui.alert.removeClass('text-success').addClass('text-danger');
-                       }*/
-                    this.triggerFetch(obj, dataObject);
-                } else if (data.grid) {
-                    this.vent.trigger('graph:grid:update', dataObject);
-                } else {
-                    this.vent.trigger('graph:update', dataObject);
-
-                }
-            },
-            onDateChanged: function(value) {
-                var dataObject = this.getData();
-                var params = this.setDateParams();
-                if (dataObject.xAxis && dataObject.xAxis != "" && dataObject.yAxis && dataObject.yAxis != "") {
-                    this.triggerFetch(params, dataObject);
-                }
-
-            },
-            setDateParams: function() {
-                if (this.startDate && this.endDate) {
-
-                    var dateUnit = this.dateUtil.calculateUnit({
-                        startDate: this.startDate,
-                        endDate: this.endDate
-                    });
-                    $('input[name="unit"]').val(dateUnit.substr(1));
-
-                    var params = {
-                        from: this.startDate.toJSON(),
-                        to: this.endDate.toJSON(),
-                        unit: dateUnit
-                    }
-                    return params;
-                }
-            },
-            triggerFetch: function(params, object) {
-                this.vent.trigger('graph:data:update', $.extend(this.params, params), object);
-            },
-            getData: function() {
-                return Utils.getFormData(this.$("#CreateLogicForm").serializeArray());
-            },
-            onRelativeDateClick: function(e) {
-                this.relativeDateSet = true;
-                this.params['dateRangeTitle'] = $(e.currentTarget).text()
-                $(e.currentTarget).addClass('active').siblings().removeClass('active');
-                var relativeDate = $(e.currentTarget).text()
-                var date = this.dateUtil.getRelativeDateFromString(relativeDate);
-                this.setDateText(date[0], date[1], true);
-            },
-            setDateText: function(start, end, fetch) {
-                this.ui.startDate.data('daterangepicker').setStartDate(start);
-                this.startDate = start;
-                this.ui.startDate.val(this.dateUtil.getTimeZone(start, "MM/DD/YYYY H:mm:ss,SSS"));
-                this.ui.endDate.data('daterangepicker').setStartDate(end);
-                this.endDate = end;
-                if (fetch) {
-                    this.ui.endDate.val(this.dateUtil.getTimeZone(end, "MM/DD/YYYY H:mm:ss,SSS"));
-                    this.onDateChanged();
-                } else {
-                    this.ui.endDate.val(this.dateUtil.getTimeZone(end, "MM/DD/YYYY H:mm:ss,SSS"));
-                }
-
-
-            },
-            initializePopover: function() {
-                var that = this;
-                this.$('.timeInfo').popover({
-                    html: true,
-                    animation: true,
-                    container: 'body',
-                    placement: "auto",
-                    trigger: 'click',
-                    content: function() {
-                        return ('<ul class="d3TimeDetails">' +
-                            '<li>' +
-                            '<code>%a</code> - abbreviated weekday name.</li>' +
-                            '<li>' +
-                            '<code>%A</code> - full weekday name.</li>' +
-                            '<li>' +
-                            '<code>%b</code> - abbreviated month name.</li>' +
-                            '<li>' +
-                            '<code>%B</code> - full month name.</li>' +
-                            '<li>' +
-                            '<code>%c</code> - date and time, as "%a %b %e %H:%M:%S %Y".</li>' +
-                            '<li>' +
-                            '<code>%d</code> - zero-padded day of the month as a decimal number [01,31].</li>' +
-                            '<li>' +
-                            '<code>%e</code> - space-padded day of the month as a decimal number [ 1,31]; equivalent to <code>%_d</code>.</li>' +
-                            '<li>' +
-                            '<code>%H</code> - hour (24-hour clock) as a decimal number [00,23].</li>' +
-                            '<li>' +
-                            '<code>%I</code> - hour (12-hour clock) as a decimal number [01,12].</li>' +
-                            '<li>' +
-                            '<code>%j</code> - day of the year as a decimal number [001,366].</li>' +
-                            '<li>' +
-                            '<code>%m</code> - month as a decimal number [01,12].</li>' +
-                            '<li>' +
-                            '<code>%M</code> - minute as a decimal number [00,59].</li>' +
-                            '<li>' +
-                            '<code>%L</code> - milliseconds as a decimal number [000, 999].</li>' +
-                            '<li>' +
-                            '<code>%p</code> - either AM or PM.</li>' +
-                            '<li>' +
-                            '<code>%S</code> - second as a decimal number [00,61].</li>' +
-                            '<li>' +
-                            '<code>%U</code> - week number of the year (Sunday as the first day of the week) as a decimal number [00,53].</li>' +
-                            '<li>' +
-                            '<code>%w</code> - weekday as a decimal number [0(Sunday),6].</li>' +
-                            '<li>' +
-                            '<code>%W</code> - week number of the year (Monday as the first day of the week) as a decimal number [00,53].</li>' +
-                            '<li>' +
-                            '<code>%x</code> - date, as "%m/%d/%Y".</li>' +
-                            '<li>' +
-                            '<code>%X</code> - time, as "%H:%M:%S".</li>' +
-                            '<li>' +
-                            '<code>%y</code> - year without century as a decimal number [00,99].</li>' +
-                            '<li>' +
-                            '<code>%Y</code> - year with century as a decimal number.</li>' +
-                            '<li>' +
-                            '<code>%Z</code> - time zone offset, such as "-0700".</li>' +
-                            '<li>' +
-                            '<code>%</code> - a literal "%" character.</li>' +
-                            '</ul>');
-                    }
-                });
-                this.$el.find('.Header span[data-id="gridSettingPopup"]').on('shown.bs.popover', function(e) {
-                    //$(this).addClass("gridPopover")
-                });
-
-            },
-            initializeCollection: function() {
-                var that = this;
-                this.auditLogList = new VAuditLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 50
-                    }
-                });
-
-                var getAuditSchemaFieldsName = function(el) {
-                    that.auditLogList.getAuditSchemaFieldsName({}, {
-                        beforeSend: function() {
-                            that.$("#loaderAudit").show();
-                        },
-                        success: function(data) {
-                            var myData = [];
-                            _.each(data, function(a, b) {
-                                myData.push({
-                                    id: b,
-                                    text: a
-                                })
-                            })
-                            el.select2({
-                                data: myData
-                            });
-                            if (el[0].name == "xAxis") {
-                                el.select2("enable");
-                            }
-                            if (el[0].name == "stackBy" && (that.options.stackOrGroup == "Group" || that.options.stackOrGroup == "Stack")) {
-                                el.select2("enable");
-                            }
-                            if (that.model) {
-                                if (that.model.get('xAxis') && el[0].name == "xAxis") {
-                                    that.ui.select2XColumns.select2('val', that.model.get('xAxis'))
-                                }
-                                if (that.model.get('stackBy') && el[0].name == "stackBy") {
-                                    that.ui.select2StackColumns.select2('val', that.model.get('stackBy'))
-                                }
-
-                            }
-                            //that.collection.reset(new Backbone.Model(myData));
-                        },
-                        error: function(error, data, status) {
-                            var obj = JSON.parse(error.responseText);
-                            if (obj)
-                                Utils.notifyError({
-                                    content: obj.msgDesc
-                                });
-                        },
-                        complete: function() {
-                            that.$("#loaderAudit").hide();
-                        }
-                    });
-
-                }
-
-                this.listOfselect2 = [{
-                    id: "select2XType",
-                    placeholder: "Select X axis",
-                    mandatory: false,
-                    attachSelect: true
-                }, {
-                    id: "select2Y",
-                    placeholder: "select Y",
-                    mandatory: false,
-                    attachSelect: true
-                }, {
-                    id: "select2XColumns",
-                    placeholder: "select Columns",
-                    collection: this.auditLogList, //pass string or object reference
-                    mandatory: false,
-                    nonCrud: getAuditSchemaFieldsName, // pass function
-                    fetch: true
-                }]
-                if (!this.pieView) {
-                    this.listOfselect2.push({
-                        id: "select2StackColumns",
-                        placeholder: "select Columns",
-                        collection: this.auditLogList, //pass string or object reference
-                        mandatory: false,
-                        nonCrud: getAuditSchemaFieldsName, // pass function
-                        fetch: true
-                    })
-                }
-            },
-            initializePlugins: function(listOfselect2) {
-                Utils.genrateSelect2(listOfselect2, this);
-            }
-
-
-        })
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
deleted file mode 100644
index fc44f61..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/SaveSearchFilterView.js
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'utils/Globals',
-    'hbs!tmpl/dialog/SaveSearchFilterView_tmpl'
-], function(require, Backbone, Utils, Globals, SaveSearchFilterViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends SaveSearchFilterView */
-        {
-            _viewName: 'SaveSearchFilterView',
-
-            template: SaveSearchFilterViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                radioAbsolute: "[data-id = 'absolute']",
-                radioRelative: "[data-id='relative']",
-                paramsPanelBody: "[data-id='panelBody']",
-                panelHeading: "[data-id='panelHeading']",
-                filterName: "[data-id='name']"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                return events;
-            },
-
-            /**
-             * intialize a new SaveSearchFilterView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'selectedCollectionObject'));
-                this.dateUtil = Utils.dateUtil;
-
-
-            },
-            bindEvents: function() {
-                this.listenTo(this, "dialog:rendered", function(value) {
-                    this.popoverForTd();
-                }, this);
-            },
-            onRender: function() {
-                this.params = this.selectedCollectionObject.get('params');
-                //this.ui.panelHeading.html("Filter Parameter From : <strong>"+ this.dateUtil.getTimeZone(this.params.from) +"</strong> To <strong>" +this.dateUtil.getTimeZone(this.params.from)+"</strong>" )
-                this.ui.radioAbsolute.find('label').html(' <input type="radio" name="radio" checked>' + this.dateUtil.getTimeZone(this.params.from) + '&emsp;&emsp;&emsp;TO&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;' + this.dateUtil.getTimeZone(this.params.to) + '<i class="fa fa-circle-o small"></i>');
-                if (this.params.dateRangeLabel == "Custom Range") {
-                    this.ui.radioRelative.find('label').html(' <input type="radio" name="radio" disabled="disabled">' + this.params.dateRangeLabel + '<i class="fa fa-circle-o small"></i>');
-                    this.ui.radioRelative.css('color', '#8C8C8C');
-                } else {
-                    this.ui.radioRelative.find('label').html(' <input type="radio" name="radio">' + this.params.dateRangeLabel + '<i class="fa fa-circle-o small"></i>');
-                }
-                this.showParams();
-            },
-            showParams: function() {
-                var tableSting = "",
-                    that = this;
-                var customParam = {"mustNot":[],"mustBe":[],"includeQuery":[],"excludeQuery":[]};
-                var paramNames = _.extend({},this.params,customParam);
-                _.each(paramNames, function(value, key) {
-                    if ((key != "from" && (! _.isEmpty(value) || _.isArray(value)) && key != "to" && key != "bundleId" && key != "start_time" && 
-                    		key != "end_time" && key != "q" && key != "unit" && key != "query" && key != "type" && 
-                    		key != "time" && key != "dateRangeLabel" && key != "advanceSearch" && !_.isUndefined(Globals.paramsNameMapping[key]) )) {
-                        tableSting += '<tr class="' + key + '"><td>' + Globals.paramsNameMapping[key].label + '</td><td>' + (that.createInnerSpan(key)) + '</td><tr>'
-                    }
-                });
-                this.ui.paramsPanelBody.html(tableSting);
-            },
-            createInnerSpan: function(type) {
-                var typeString = "",
-                    that = this;
-                if (this.params[type]) {
-                    Utils.encodeIncludeExcludeStr(this.params[type], false, ((type == "iMessage" || type == "eMessage") ? ("|i::e|") : (","))).map(function(typeName) {
-                        typeString += '<span class="' + ((type != "level") ? (type) : (typeName)) + '">' +
-                            ((type == "from" || type == "to") ? (that.dateUtil.getTimeZone(that.params[type])) : (Utils.escapeHtmlChar(typeName))) + '</span>' +
-                            ((type == "level") ? (",") : (""));
-                    });
-                }
-                return ((typeString.length == 0) ? ("[ ]") : ((type == "level") ? ((typeString).slice(0, -1)) : (typeString)))
-            },
-            popoverForTd: function() {
-                this.ui.paramsPanelBody.find('td:nth-child(2) span').map(function() {
-                    if (this.offsetWidth < this.scrollWidth) {
-                        $(this).popover({
-                            html: true,
-                            content: function() {
-                                return this.textContent
-                            },
-                            placement: 'left',
-                            container: 'body',
-                            trigger: 'hover'
-                        });
-                    }
-                });
-            }
-        });
-});


[09/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentListView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentListView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentListView.js
deleted file mode 100644
index f3bf985..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentListView.js
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'utils/ViewUtils',
-	'collections/VNodeList',
-	'hbs!tmpl/dashboard/ComponentListView_tmpl'
-],function(require,Backbone,Globals,ViewUtils,VNodeList,ComponentListViewTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.ItemView.extend(
-			/** @lends ComponentListView */
-			{
-				_viewName : 'ComponentListView',
-
-				template: ComponentListViewTmpl,
-				
-				/** ui selector cache */
-				ui: {
-					componentsList : "[data-id='componentContainer']",
-					content : "[data-id='content']"
-				},
-
-				/** ui events hash */
-				events: function() {
-					var events={};
-					events["click li"] = 'onComponentClick';
-					events["click .host-info a[data-host]"] = 'onNewTabIconClick';
-					events["mouseenter .host-info"] = function(e){
-						$(e.currentTarget).children("a[data-host]").removeClass("hidden");
-					};
-					events["mouseleave .host-info"] = function(e){
-						$(e.currentTarget).children("a[data-host]").addClass("hidden");
-					};
-					return events;
-				},
-				/**
-				 * intialize a new ComponentListView ItemView
-				 * @constructs
-				 */
-				initialize: function(options) {
-					_.extend(this, _.pick(options,'vent','globalVent','params'));
-					this.searchParams = (this.params)? this.params :{};
-					this.initializeCollection();
-					this.bindEvents();
-				},
-				initializeCollection : function(){
-					this.componentsList = new VNodeList([],{
-						state: {
-		                    firstPage: 0,
-		                    pageSize: 99999
-		                }
-					});
-					this.componentsList.url = Globals.baseURL + "service/logs/components/levels/counts";
-					this.hostList = new VNodeList([],{
-						state: {
-		                    firstPage: 0,
-		                    pageSize: 99999
-		                }
-					});
-					this.hostList.url = Globals.baseURL + "service/logs/hosts/components";
-				},
-				/** all events binding here */
-				bindEvents : function(){
-					this.listenTo(this.componentsList,"reset",function(collection){
-						this.renderComponents();
-						this.$("#dashboard_tabs").height(this.ui.componentsList.height());
-						//this.renderGraph();
-					},this);
-					this.listenTo(this.hostList,"reset",function(collection){
-						this.renderHostDetails();
-					},this);
-					this.listenTo(this.vent,"main:search level:filter type:mustNot type:mustBe search:include:exclude " +
-							"logtime:filter reinitialize:filter:tree tab:refresh " +
-							Globals.eventName.serviceLogsIncludeColumns+" "+Globals.eventName.serviceLogsExcludeColumns,function(value){
-		            	_.extend(this.searchParams,value);
-		            	this.fetchComponents(this.searchParams);
-		            	this.fetchComponentsHost(this.searchParams);
-		            },this);
-					this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-						_.extend(this.searchParams,value);
-		            	this.fetchComponents(this.searchParams);
-		            	this.fetchComponentsHost(this.searchParams);
-					},this);
-				},
-				/** on render callback */
-				onRender: function() {
-					this.fetchComponents((this.params) ? this.params : {q:"*:*"});
-				},
-				fetchComponents : function(params){
-					var that = this;
-					$.extend(this.componentsList.queryParams,params);
-					this.componentsList.fetch({
-						beforeSend : function(){
-							that.ui.componentsList.siblings(".loader").show();
-						},
-						reset:true,
-						complete : function(){
-							that.ui.componentsList.siblings(".loader").hide();
-						}
-					});
-				},
-				fetchComponentsHost : function(params){
-					var that = this;
-					$.extend(this.hostList.queryParams,params);
-					this.hostList.fetch({
-						beforeSend : function(){
-							that.ui.content.siblings(".loader").show()
-						},
-						reset:true,
-						complete : function(){
-							that.ui.content.siblings(".loader").hide()
-						}
-					});
-				},
-				renderComponents : function(){
-					var that = this;
-					that.ui.componentsList.find('.nodebar').popover('destroy');
-					that.ui.componentsList.empty();
-					if(this.componentsList.length == 0){
-						this.$("#dashboard_tabs").hide();
-					}else{
-						this.$("#dashboard_tabs").show();
-						this.componentsList.each(function(model){
-							var total=0,logLevelCount = model.get("logLevelCount");
-							for(var i=0;i < logLevelCount.length;i++){
-								if(logLevelCount[i].value)
-									total = total +parseInt(logLevelCount[i].value,10);
-							}
-							that.ui.componentsList.append('<li data-name="'+model.get("name")+'"><a href="javascript:void(0);" class="tab-link" id="clients">'+model.get("name")+' ('+total+')</a>'+ViewUtils.getCountDistributionHTML(model.attributes)+'</li>');
-							that.appendPopover(that.ui.componentsList.find("li").last(),model.attributes);
-						});
-					}
-					
-					if(that.lastComponentLI && that.ui.componentsList.find("li[data-name='"+that.lastComponentLI+"']").length){
-						that.ui.componentsList.find("li").removeClass("active");
-						that.ui.componentsList.find("li[data-name='"+that.lastComponentLI+"']").addClass("active");
-					}else{
-						if(that.ui.componentsList.find("li").first().length > 0){
-							that.ui.componentsList.find("li").first().click();
-						}
-					}
-				},
-				renderHostDetails : function(){
-					var that=this;
-					that.ui.content.find('.nodebar').popover('destroy');
-					that.ui.content.empty();
-					that.ui.content.append('<div id="dashboard-overview" class="row" style="visibility: visible; position: relative;"></div>');
-					if(this.hostList.length > 0){
-						var model = this.hostList.first();
-						_.each(model.get("childs"),function(m){
-							var html = '<div class="col-md-3"><div class="host-info">';
-							html += '<a data-host="'+m.name+'" title="'+m.name+' -> '+model.get("name")+'" data-type = "'+model.get("name")+'" href="javascript:void(0)" class="pull-right hidden"><i class="fa fa-share"></i></a>';
-							html += '<h5>'+m.name.split(".")[0] + ' ('+m.value+')</h5>';
-							html += ViewUtils.getCountDistributionHTML(m);
-							html += '</div></div>';
-							that.ui.content.append(html);
-							that.appendPopover(that.ui.content.find('.col-md-3').last(),m);
-						});
-					}
-				},
-				onComponentClick : function(e){
-					var $el = $(e.currentTarget);
-					this.lastComponentLI = $el.data("name");
-					this.ui.componentsList.find("li").removeClass("active");
-					$el.addClass("active");
-					this.fetchComponentsHost(_.extend({component_name:$el.data("name")},this.searchParams));
-				},
-				onNewTabIconClick : function(e){
-					var $el = $(e.currentTarget),host,component,that=this;
-					host = $el.data("host");
-					component = $el.data("type");
-					that.globalVent.trigger("render:tab",{
-						params:_.extend({},{
-							host_name :  host,
-							component_name : component
-            }, that.searchParams, {hostList: null}),
-						globalVent : that.globalVent
-					});
-				},
-				appendPopover : function(node,data){
-					node.find('.nodebar').popover({
-						trigger: 'hover',
-						placement: "top",
-						html: true,
-						container: 'body',
-						template : '<div class="popover log-count" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
-						content: this.getPopoverHTML(data)
-					});
-				},
-				getPopoverHTML : function(node){
-					if(! node.logLevelCount)
-						return "";
-					var html="";
-					//if count for all elements is zero then popover should not appear
-					if(_.find(node.logLevelCount,function(d){ return parseInt(d.value,10) > 0})){
-						_.each(node.logLevelCount,function(data){
-							html += "<span class='"+data.name+"'><i class='fa fa-circle'></i> "+data.name+": <strong>"+data.value+"</strong></span>";
-						});
-					}
-					return html;
-				},
-				renderGraph : function(){
-					var fatalData=[],errorData=[],warnData=[],infoData=[],debugData=[],traceData=[],
-						fatalIndex={},errorIndex={},warnIndex={},infoIndex={},debugIndex={},traceIndex={},tooltipIndex={};
-					this.componentsList.each(function(m,i){
-						var attr = m.get("logLevelCount");
-						tooltipIndex[i] =m.get("name");
-						//fatal
-						var fatal = _.findWhere(attr,{name:"FATAL"});
-						if(fatal){
-							fatalData.push(fatal.value);
-							fatalIndex[fatalData.length -1] =m.get("name");
-						}
-						//error
-						var error = _.findWhere(attr,{name:"ERROR"});
-						if(error){
-							errorData.push(error.value);
-							errorIndex[errorData.length -1]=m.get("name");
-						}
-						//warn
-						var warn = _.findWhere(attr,{name:"WARN"});
-						if(warn){
-							warnData.push(warn.value);
-							warnIndex[warnData.length -1] =m.get("name");
-						}
-						//info
-						var info = _.findWhere(attr,{name:"INFO"});
-						if(info){
-							infoData.push(info.value);
-							infoIndex[infoData.length -1] =m.get("name");
-						}
-						//debug
-						var debug = _.findWhere(attr,{name:"DEBUG"});
-						if(debug){
-							debugData.push(debug.value);
-							debugIndex[debugData.length -1] =m.get("name");
-						}
-						//trace
-						var trace = _.findWhere(attr,{name:"TRACE"});
-						if(trace){
-							traceData.push(trace.value);
-							traceIndex[traceData.length -1] =m.get("name");
-						}
-					});
-					var barOptions = {
-						type : "bar",
-						barWidth : 8,
-						highlightColor : '#353535',
-						barSpacing : 2,
-						height : 30,
-						tooltipFormat : '{{offset:offset}} {{value}}'
-					};
-					this.$(".g-fatal").sparkline(fatalData,
-							_.extend({}, barOptions, {
-								barColor : '#830A0A',
-								tooltipValueLookups : {
-									'offset' : fatalIndex
-								},
-							}));
-					this.$(".g-error").sparkline(errorData,
-							_.extend({}, barOptions, {
-								barColor : '#E81D1D',
-								tooltipValueLookups : {
-									'offset' : errorIndex
-								},
-							}));
-					this.$(".g-warn").sparkline(warnData,
-							_.extend({}, barOptions, {
-								barColor : '#FF8916',
-								tooltipValueLookups : {
-									'offset' : warnIndex
-								},
-							}));
-
-					this.$(".g-info").sparkline(infoData,
-							_.extend({}, barOptions, {
-								barColor : '#2577B5',
-								tooltipValueLookups : {
-									'offset' : infoIndex
-								},
-							}));
-
-					this.$(".g-debug").sparkline(debugData,
-							_.extend({}, barOptions, {
-								barColor : '#65E8FF',
-								tooltipValueLookups : {
-									'offset' : debugIndex
-								},
-							}));
-
-					this.$(".g-trace").sparkline(debugData,
-							_.extend({}, barOptions, {
-								barColor : '#65E8FF',
-								tooltipValueLookups : {
-									'offset' : traceIndex
-								},
-							}));
-					
-				}
-			});
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentsView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentsView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentsView.js
deleted file mode 100644
index 424236d..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/ComponentsView.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'collections/VLogLevelList',
-	'hbs!tmpl/dashboard/ComponentsView_tmpl',
-	'select2'
-],function(require,Backbone,Globals,VLogLevel,ComponentsTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.Layout.extend(
-	/** @lends LogLevelView */
-	{
-		_viewName : 'ComponentsView',
-
-		template: ComponentsTmpl,
-
-		/** Layout sub regions */
-		regions: {
-		},
-
-		/** ui selector cache */
-		ui: {
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent'));
-			this.collection = new VLogLevel();
-			this.collection.url = Globals.baseURL+"service/logs/components/count";
-			this.bindEvents();
-		},
-		onRender : function(){
-			this.fetchCollection();
-		},
-		bindEvents : function(){
-			this.listenTo(this.collection,"reset",function(collection){
-				this.populateDetails();
-			},this);
-			this.listenTo(this.collection, 'request', function(){
-				this.$("#loader").show();
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-            	this.$("#loader").hide();
-			},this);
-            this.listenTo(this.vent,"main:search",function(value){
-            	this.fetchCollection({q:value});
-            });
-		},
-		fetchCollection : function(params){
-			$.extend(this.collection.queryParams, params);
-			this.collection.fetch({reset:true});
-		},
-		populateDetails : function(){
-			var that = this;
-			that.$("tbody").empty();
-			var actions = '<td>'+
-            				'<a href="javascript:void(0);"><i class="fa fa-search"></i></a>'+
-            				//'<a href="javascript:void(0);"><i class="fa fa-ban"></i></a>'+
-            				'</td>';
-			this.collection.each(function(m,i){
-				var html = "<tr>";
-				html += "<td>"+m.get("name")+"</td>";
-				html += "<td>"+m.get("count")+"</td>";
-				html += actions;
-				that.$("tbody").append(html);
-			});
-		}
-	});
-	
-	
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/DashboardView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/DashboardView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/DashboardView.js
deleted file mode 100644
index 461e132..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/DashboardView.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'hbs!tmpl/dashboard/DashboardView_tmpl',
-	'collections/VGroupList',
-	'select2',
-	'd3'
-],function(require,Backbone,Globals,DashboardviewTmpl,VGroupList){
-    'use strict';
-
-
-	var DashboardView = Backbone.Marionette.Layout.extend(
-	/** @lends DashboardView */
-	{
-		_viewName : 'DashboardView',
-
-		template: DashboardviewTmpl,
-
-		/** Layout sub regions */
-		regions: {
-			RLogDetail : "#r_LogDetail"
-		},
-
-		/** ui selector cache */
-		ui: {
-			hosts : "#hosts",
-			components : "#components",
-			time	: "#time"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['click #searchLog'] = 'onSearchLogClick';
-			//events['click #searchLog'] = 'onSearchLogClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new DashboardView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options, 'collection'));
-			this.setupCollections();
-			this.bindEvents();
-			this.hostCollection.fetch({reset:true});
-			this.cComponents.fetch({reset:true});
-		},
-		setupCollections : function(){
-			this.logRegions = new Backbone.Collection();
-			this.hostCollection = new VGroupList([],{});
-			this.cComponents = new VGroupList([],{});
-			this.cComponents.url = Globals.baseURL + "service/logs/components";
-			this.cTime = new VGroupList(Globals.timeQueryLOV,{});
-		},
-		/** all events binding here */
-		bindEvents : function(){
-			this.listenTo(this.hostCollection, "reset", function(col, abc){
-				this.setupSelect2Fields(col,"host", 'host', 'hosts');
-			}, this);
-			this.listenTo(this.cComponents, "reset", function(col, abc){
-				this.setupSelect2Fields(col,"type", 'type', 'components');
-			}, this);
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.setupSelect2Fields(this.cTime,"value","text","time");
-		},
-		showLogDetail : function(){
-			var that = this;
-			require(['views/dashboard/LogDetailView'],function(LogDetailView){
-				that.RLogDetail.show(new LogDetailView({}));
-			})
-		},
-		setupSelect2Fields: function(col, idKey, textKey, selectTagId){
-			var that = this, data = [];
-			data = _.pluck(col.models, 'attributes');
-
-			this.ui[selectTagId].select2({
-				placeholder: 'Select',
-				allowClear : true,
-				width: '100%',
-				data: { results: data, text: textKey },
-				formatSelection: function(item){
-					return item[textKey];
-				},
-    			formatResult: function(item){
-    				return item[textKey];
-				}
-			});
-		},
-		onSearchLogClick : function(e){
-			var searchParams = this.getSearchparams();
-
-			if(this.logRegions.length == 0){
-				var model = new Backbone.Model({
-					id : 1,
-					params : searchParams
-				});
-				this.generateView(model);
-			}else{
-
-				var existsMod = this.logRegions.find(function(m){
-					return JSON.stringify(searchParams) === JSON.stringify(m.get('params'))
-				});
-				if(existsMod){
-					$('html, body').animate({
-				        'scrollTop' : this.$("#"+existsMod.get("tabName")).position().top
-				    });
-					return;
-				}
-				var lastModel = this.logRegions.last();
-				var model = new Backbone.Model({
-					id : parseInt(lastModel.get("id"),10) + 1,
-					params : searchParams
-				});
-				this.generateView(model);
-			}
-		},
-		generateView : function(model){
-			var tabName = "r_LogDetail"+model.get("id");
-			model.set("tabName",tabName);
-			$('<div/>', {
-				'id': tabName,
-				'class': 'r-tab-content col-md-12',
-			}).appendTo(this.$('#r_LogDetail'));
-			var region = {};
-			region[tabName] = '#' + tabName;
-			this.addRegions(region);
-			this.logRegions.add(model);
-			this.renderRegion(model);
-		},
-		renderRegion : function(model){
-			var region = this.getRegion(model.get("tabName"));
-			require(['views/dashboard/LogDetailView'],function(LogDetailView){
-				region.show(new LogDetailView({model: model}));
-			})
-
-		},
-		getSearchparams : function(){
-			var obj={hosts : null, components : null, time:null};
-			if(this.ui.hosts.select2("data") != undefined || this.ui.hosts.select2("data") != null){
-				if(this.ui.hosts.select2("data").host)
-					obj.hosts = this.ui.hosts.select2("data").host;
-			}
-			if(this.ui.components.select2("data") != undefined || this.ui.components.select2("data") != null){
-				if(this.ui.components.select2("data").host)
-					obj.components = this.ui.components.select2("data").type;
-			}
-			if(this.ui.time.select2("data") != undefined || this.ui.time.select2("data") != null){
-				if(this.ui.time.select2("data").id)
-					obj.time = this.ui.time.select2("val");
-			}
-			return obj;
-
-		},
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return DashboardView;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/GridTableLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/GridTableLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/GridTableLayoutView.js
deleted file mode 100644
index da930ea..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/GridTableLayoutView.js
+++ /dev/null
@@ -1,219 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'moment',
-    'd3.tip',
-    'utils/Globals',
-    'utils/Utils',
-    'collections/VLogList',
-    'hbs!tmpl/dashboard/GridTableLayoutView_tmpl',
-    'bootstrap-daterangepicker',
-    'nv'
-], function(require, Backbone, moment, tip, Globals, Utils, VLogList, GridTableLayoutViewTmpl, daterangepicker) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends GridGraphLayoutView */
-        {
-            _viewName: 'GridGraphLayoutView',
-
-            template: GridTableLayoutViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                dateRange: "#dateRange",
-                selectDateRange: ".selectDateRange",
-                dateRangeTitle: "span[data-id='dateRangeTitle']",
-                gridSettingPopup: "[data-id='gridSettingPopup']",
-                gridHeader: ".gridHeader"
-
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                events['click [data-id="refresh-tab-graph"]'] = 'onTabRefresh';
-                events['click ' + this.ui.gridSettingPopup] = 'onGridSettingPopupClick';
-                return events;
-            },
-
-            /**
-             * intialize a new GridGraphLayoutView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params', 'viewType', 'dashboard', 'model', 'gridHelp'));
-                this.vent = new Backbone.Wreqr.EventAggregator();
-                this.collection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 999999999,
-
-                    }
-                });
-
-                this.dateUtil = Utils.dateUtil;
-                this.dateRangeLabel = new String();
-
-                this.bindEvents();
-                this.graphParams = {};
-                this.unit = (this.model.params && this.model.params.unit) ? this.model.params.unit : "+1HOUR";
-                this.firstRender = true;
-                this.collection.url = Globals.baseURL + "audit/logs/anygraph";
-                this.collection.modelAttrName = "graphData";
-
-            },
-            bindEvents: function() {
-                this.listenTo(this.collection, "reset", function(collection) {
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                }, this);
-                this.listenTo(this.collection, 'request', function() {
-                    this.$(".loader").show();
-                    this.$("#loaderGraph").show();
-                }, this);
-                this.listenTo(this.collection, 'sync error', function() {
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                }, this);
-                this.listenTo(this.vent, "graph:update", function(options) {
-
-                    options['params'] = this.params
-                    if (this.model) {
-                        this.model.clear().set(options)
-                    }
-                    this.configureChart(options);
-                }, this);
-                this.listenTo(this.vent, "graph:data:update", function(params, options) {
-                    this.params = params
-                    options['params'] = this.params
-                    if (this.model) {
-                        this.model.clear().set(options)
-                    }
-                    this.fetchGraphData(params, options);
-                }, this);
-                this.listenTo(this.vent, "table:grid:update", function(options) {
-                    options['params'] = this.params
-                    if (this.model) {
-                        this.model.clear().set(options)
-                    }
-                    this.updateGrid(options)
-                }, this);
-
-            },
-            onRender: function() {
-                var that = this;
-                if (this.model) {
-                    var mObject = this.model.toJSON();
-                    if (mObject.params) {
-                        this.params = mObject.params;
-                        this.fetchGraphData(mObject.params, mObject);
-                    }
-                    this.updateGrid(mObject);
-                }
-                if (this.gridHelp) {
-                    setTimeout(function() {
-                        this.$('.gridSettinghand').hide();
-                    }, 3000);
-                } else {
-                    this.$('.gridSettinghand').hide();
-                }
-
-            },
-
-            fetchGraphData: function(params, options) {
-                var that = this;
-                that.$("#loaderGraph").show();
-                that.$(".loader").show();
-                _.extend(this.collection.queryParams, params);
-                this.collection.fetch({
-                    reset: true,
-                    success: function() {
-                        that.createDataForGraph(options)
-                    }
-                });
-            },
-            updateGrid: function(options) {
-                if (options.title) {
-                    this.ui.gridHeader.find('.gridTitle').text(options.title);
-                }
-            },
-            setupDialog: function(options) {
-                var that = this;
-                require(['views/common/JBDialog'], function(JBDialog) {
-                    var opts = _.extend({
-                        appendTo: that.$el,
-                        modal: true,
-                        resizable: false,
-                        beforeClose: function(event, ui) {
-                            that.onDialogClosed();
-                        }
-                    }, options);
-                    var dialog = that.dialog = new JBDialog(opts).render().open();
-                })
-
-            },
-            onGridSettingPopupClick: function() {
-                this.$('.gridSettinghand').hide();
-                this.dashboard.disable();
-                var that = this;
-                var overlay = document.createElement('div');
-                overlay.setAttribute('class', 'overlayDashboard');
-                this.$el.append(overlay);
-                require(['views/dialog/GridGraphSettingView'], function(GridGraphSettingView) {
-                    var view = new GridGraphSettingView({
-                        vent: that.vent,
-                        params: (that.model) ? (that.params) : ({}),
-                        model: that.model,
-                        viewType: that.viewType
-                    });
-
-                    that.setupDialog({
-                        title: "Setting",
-                        content: view,
-                        viewType: 'Save',
-                        width: 560,
-                        height: 500,
-                        buttons: [{
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    });
-                });
-            },
-            onDialogClosed: function() {
-                this.$el.find('.overlayDashboard').remove();
-                this.dashboard.enable();
-                if (this.dialog) {
-                    this.dialog.close && this.dialog.close();
-                    this.dialog.remove && this.dialog.remove();
-                    this.dialog = null;
-                }
-            }
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostListView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostListView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostListView.js
deleted file mode 100644
index 4283f02..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostListView.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'hbs!tmpl/dashboard/HostListView_tmpl',
-	'collections/VNodeList'
-],function(require,Backbone,Globals,HostListViewTmpl,VNodeList){
-    'use strict';
-	
-	var HostListView = Backbone.Marionette.ItemView.extend(
-	/** @lends HostListView */
-	{
-		_viewName : 'HostListView',
-
-		template: HostListViewTmpl,
-		
-		/** ui selector cache */
-		ui: {
-			hostNameTxt : "[data-id='hostName']",
-			searcHostBtn : "[data-id='searchHost']",
-			mainCheck : "#mainCheck"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events["change "+this.ui.mainCheck] = 'onMainCheckboxClick';
-			events["click "+this.ui.searcHostBtn] = 'onSearchHostClick';
-			events["change .tree input[type='checkbox']"] = 'onChangeNodeCheckbox';
-			events["keypress "+this.ui.hostNameTxt] = 'onSearchHostKeypress';
-			events["click .tree a[data-type='C']"] = 'onNewTabIconClick';
-			events["mouseenter .tree li[data-type='C']"] = function(e){
-				$(e.currentTarget).children("a").removeClass("hidden");
-			};
-			events["mouseleave .tree li[data-type='C']"] = function(e){
-				$(e.currentTarget).children("a").addClass("hidden");
-			};
-			events["click [data-id='collapseAll']"] = function(e){
-				//_.each(this.$("[data-state='expand']"));
-				this.$("[data-state='expand']").click();
-			};
-			events["click [data-id='expandAll']"] = function(e){
-				//_.each(this.$("[data-state='expand']"));
-				this.$("[data-state='collapse']").click();
-			};
-			return events;
-		},
-
-		/**
-		 * intialize a new HostListView ItemView
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent','globalVent','params'));
-			this.searchParams = (this.params)? this.params :{};
-			this.collection = new VNodeList([], {
-                state: {
-                    firstPage: 0,
-                    pageSize: 50
-                }
-            });
-			this.bindEvents();
-			this.hostState = {};
-		},
-		/** all events binding here */
-		bindEvents : function(){
-			this.listenTo(this.vent,"main:search level:filter type:mustNot type:mustBe search:include:exclude " +
-					"logtime:filter reinitialize:filter:tree tab:refresh " +
-					Globals.eventName.serviceLogsIncludeColumns+" "+Globals.eventName.serviceLogsExcludeColumns,function(value){
-            	_.extend(this.searchParams,value);
-            	this.fetchHosts(this.searchParams);
-            },this);
-			
-			this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-				_.extend(this.searchParams,value);
-            	this.fetchHosts(this.searchParams);
-			},this);
-			
-//			this.listenTo(this.vent, "tab:refresh", function(params) {
-//				_.extend(this.searchParams,params);
-//            	this.fetchHosts(this.searchParams);
-//			},this);
-			
-			this.listenTo(this.collection,"reset",function(){
-				this.removeSpinner();
-				this.renderHosts();
-			});
-		},
-		/** on render callback */
-		onRender: function() {
-			this.fetchHosts((this.params) ? this.params : {q:"*:*"});
-		},
-		fetchHosts : function(params){
-			var that = this;
-      $.extend(this.collection.queryParams, params, {hostList: null});
-			this.collection.fetch({
-				reset:true,
-				complete : function(){
-					that.removeSpinner();
-				}
-			});
-		},
-		renderHosts : function(){
-			var $el = this.$(".hostNodes"),that=this;
-			this.$('.nodebar').popover('destroy');
-			$el.empty();
-			var $ul;
-			this.collection.each(function(data,i){
-				//appending box for every host
-				//if(i==0 || (i % 5 == 0)){
-					//($ul) ? that.formatTree($ul.parent(".tree")) : "";
-					$el.append("<div class='col-md-3'><div class='box box-dashed'><div class='box-contentHost'><div class='tree smart-form'><ul></ul></div></div></div></div>");
-					$ul = $el.find(".tree.smart-form").last().find("ul");
-				//}
-				if(data.get("isParent")  === "true" || data.get("isParent") == true){
-					$ul.append(that.getParentNode(data.attributes));
-					var rootNode = $ul.find("li[data-node='"+data.get("name")+"']");
-					that.appendChilNodes(data.attributes,rootNode);
-					that.appendPopover(rootNode,data.attributes);
-				}
-			});
-			this.formatTree();
-			this.restoreCheckbox();
-		},
-		formatTree : function(){
-			var that = this;
-			this.$('.tree > ul').attr('role', 'tree').find('ul').attr('role', 'group');
-		    this.$('.tree').find('li:has(ul)').addClass('parent_li').attr('role', 'treeitem').find(' > span').attr('title', 'Expand this branch').attr("data-state","collapse").on('click', function(e) {
-		        var children = $(this).parent('li.parent_li').find(' > ul > li');
-		        if (children.is(':visible')) {
-		        	that.hostState[$(this).parent().data("node")] = false;
-		            children.hide('fast');
-		            $(this).attr('title', 'Expand this branch').attr("data-state","collapse").find(' > i').removeClass().addClass('fa fa-plus-circle');
-		        } else {
-		        	that.hostState[$(this).parent().data("node")] = true;
-		            children.show('fast');
-		            $(this).attr('title', 'Collapse this branch').attr("data-state","expand").find(' > i').removeClass().addClass('fa fa-minus-circle');
-		        }
-		        e.stopPropagation();
-		    });
-		    //this.$('[data-toggle="tooltip"]').tooltip();
-		},
-		getParentNode : function(node){
-			return '<li data-type="'+node.type+'" data-parent="'+node.isParent+'" data-node = "'+node.name+'"> '+this.getCountDistribution(node)+this.getCheckbox(node)+' <span><i class="fa fa-plus-circle"></i> <strong>'+node.name.split(".")[0]+'</strong> ('+node.value+')</span></li>';
-		},
-		getChildNode : function(node){
-			return '<li style="display:none;" data-type="'+node.type+'" data-node = "'+node.name+'" >'+
-			'<a data-type="'+node.type+'" data-node = "'+node.name+'" href="javascript:void(0)" class="pull-right hidden"><i class="fa fa-share"></i></a>'+
-			this.getCountDistribution(node)+
-			//this.getCheckbox(node)+
-			' <span><strong>'+node.name+'</strong> ('+node.value+')</span></li>';
-		},
-		getCheckbox : function(node){
-			return '<label class="checkbox no-margin"> <input  data-parent="'+node.isParent+'" data-type="'+node.type+'" data-node="'+node.name+'" checked="checked" type="checkbox"> <i class="fa fa-square-o small"></i></label>';
-		},
-		appendChilNodes : function(data, $parentNode){
-			$parentNode.append('<ul>');
-			data.childs = _.isArray(data.childs) ? data.childs : new Array(data.childs);
-			var $el = $parentNode.find('ul'),that=this;
-			_.each(data.childs,function(node){
-				if(! _.isUndefined(node.childs)){
-					$el.append(this.getParentNode(node));
-					var rootNode = $el.find("li[data-node='"+data.name+"']");
-					that.appendChilNodes(node,rootNode);
-				}
-					
-				if(node.isParent === "true" || node.isParent == true)
-					$el.append(that.getParentNode(node));
-				else{
-					$el.append(that.getChildNode(node));
-				}
-				that.appendPopover($el.find('li').last(),node);
-			});
-		},
-		appendPopover : function(node,data){
-			node.children('.nodebar').popover({
-				trigger: 'hover',
-				placement: "top",
-				html: true,
-				container: 'body',
-				template : '<div class="popover log-count" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
-				content: this.getPopoverHTML(data)
-			});
-		},
-		getPopoverHTML : function(node){
-			//<span style='color:#E2D014'><i class='fa fa-circle'></i> 12876</span>
-			if(! node.logLevelCount)
-				return "";
-			var html="";
-			//if count for all elements is zero then popover should not appear
-			if(_.find(node.logLevelCount,function(d){ return parseInt(d.value,10) > 0})){
-				_.each(node.logLevelCount,function(data){
-					html += "<span class='"+data.name+"'><i class='fa fa-circle'></i> "+data.name+": <strong>"+data.value+"</strong></span>";
-				});
-			}
-			return html;
-		},
-		getCountDistribution : function(node){
-			if(! node.logLevelCount)
-				return "";
-			return '<div data-node = "'+node.name+'" class="nodebar">'+this.getLevelDistribution(node)+'</div>';
-		},
-		getLevelDistribution : function(node){
-			var html="";
-			if(! _.isUndefined(node.logLevelCount) && ! _.isArray(node.logLevelCount))
-				node.logLevelCount = [node.logLevelCount];
-			var toPct = this.calculatePercentge(node.logLevelCount);
-			_.each(node.logLevelCount,function(data){
-				//html += '<div class="node '+data.name+'" style="width:'+toPct(data)+'%;" data-toggle="tooltip" title="'+data.value+'" data-original-title="'+data.value+'"></div>';
-				html += '<div class="node '+data.name+'" style="width:'+toPct(data)+'%;"></div>';
-			});
-			return html;
-		},
-		calculatePercentge : function(values) {
-		       var sum = 0;
-		       for( var i = 0; i != values.length; ++i ) {
-		    	   sum = sum + parseInt(values[i].value,10); 
-		       }
-		       var scale = 100/sum;
-		       return function( x ){ 
-		         return (parseInt(x.value,10)*scale)/*.toFixed(5)*/;
-		       };
-		},
-		onNewTabIconClick : function(e){
-			var $el = $(e.currentTarget),host,component,that=this;
-			if($el.children().is('img')){
-				this.onCompareLink($el);
-			}else{
-				if($el.parents("[data-parent=true]")){
-					host = $el.parents("[data-parent=true]").data("node");
-					component = $el.data("node");
-					that.globalVent.trigger("render:tab",{
-						params:_.extend({},{
-							host_name :  host,
-							component_name : component
-						},that.searchParams,{hostList:null}),
-						globalVent : that.globalVent
-					});
-				}
-			}
-		
-		},
-		onChangeNodeCheckbox : function(e){
-			var $el = $(e.currentTarget);
-			if($el.data("parent") == "true" || $el.data("parent") == true){
-				if($el[0].checked)
-					$el.parent().siblings("ul").find("input").prop("checked",true);
-				else
-					$el.parent().siblings("ul").find("input").prop("checked",false);
-			}else{
-				var mainParent = $el.parents("[data-type='H']");
-				var checkedLen = mainParent.find("ul :checkbox:checked").length;
-				var totalCheckboxLen = mainParent.find("ul :checkbox").length;
-				if(checkedLen > 0)
-					mainParent.find("input[data-type='H']").prop("checked",true);
-				else
-					mainParent.find("input[data-type='H']").prop("checked",false);
-				if(checkedLen < totalCheckboxLen)
-					mainParent.find("input[data-type='H']").prop("indeterminate",true);
-				else
-					mainParent.find("input[data-type='H']").prop("indeterminate",false);
-				
-			}
-      var data = this.getCheckedHierarchyData();
-      this.vent.trigger("tree:search", {hostList: (_.pluck(data, "h")).toString()});
-		},
-		getCheckedHierarchyData : function(){
-			var data=[];
-			var parents = this.$('.tree :checkbox:checked').filter('[data-parent="true"]');
-			_.each(parents,function(p){
-				var obj = {
-						h : $(p).data("node"),
-						c : []
-				};
-				_.each($(p).parent().siblings("ul").find(":checkbox:checked"),function(c){
-					obj.c.push($(c).data("node"));
-				});
-				data.push(obj);
-			});
-			return data;
-		},
-		onMainCheckboxClick : function(e){
-			if(e.target.checked){
-				this.$('.tree  input[type="checkbox"]').prop({"checked":true,"indeterminate":false});
-				
-			}else
-				this.$('.tree  input[type="checkbox"]').prop({"checked":false,"indeterminate":false});
-			var data = this.getCheckedHierarchyData();
-			this.params.hostList = _.extend({},data);
-			this.vent.trigger("tree:search",{hostList : (_.pluck(data,"h")).toString()});
-			
-		},
-		onSearchHostClick : function(e){
-			var hostName = this.ui.hostNameTxt.val();
-			this.searchHostNameCallBck(hostName);
-		},
-		searchHostNameCallBck : function(name){
-			this.$('.nodebar').popover('destroy');
-			this.addSpinner();
-			this.$(".hostNodes").empty().html("Loading.....");
-			this.fetchHosts({hostName:$.trim(name)});
-		},
-		onSearchHostKeypress : function(e){
-			if(e.which == 13){
-				this.searchHostNameCallBck(e.currentTarget.value);
-			}
-		},
-		addSpinner : function(){
-			this.ui.searcHostBtn.find("i").removeClass().addClass("fa fa-spinner fa-spin");
-		},
-		removeSpinner : function(){
-			this.ui.searcHostBtn.find("i").removeClass().addClass("fa fa-search");
-		},
-		restoreCheckbox : function(){
-      var params = (this.params.hostList) ? this.params.hostList.toString() : undefined, that = this;
-			if(params){
-				that.$("input[data-node]").prop("checked",false);
-				_.each(params,function(node){
-					if(node){
-						that.$("input[data-type='H'][data-node='"+node+"']").prop("checked",true);
-					}
-					
-						
-				});
-			}
-			if(this.hostState){
-				_.each(this.hostState,function(value,key){
-					if(value){
-						that.$("li[data-type='H'][data-node='"+key+"']").find("span").click();
-					}
-				});
-			}
-		},
-		/** on close */
-		onClose: function(){
-		},
-	});
-	return HostListView;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostsView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostsView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostsView.js
deleted file mode 100644
index 2440fd0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/HostsView.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'collections/VLogLevelList',
-	'hbs!tmpl/dashboard/HostsView_tmpl',
-	'select2'
-],function(require,Backbone,Globals,VLogLevel,HostsTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.Layout.extend(
-	/** @lends HostsView */
-	{
-		_viewName : 'HostsView',
-
-		template: HostsTmpl,
-
-		/** Layout sub regions */
-		regions: {
-		},
-
-		/** ui selector cache */
-		ui: {
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent'));
-			this.collection = new VLogLevel();
-			this.collection.url = Globals.baseURL+"service/logs/hosts/count";
-			this.bindEvents();
-		},
-		onRender : function(){
-			this.fetchCollection();
-		},
-		bindEvents : function(){
-			this.listenTo(this.collection,"reset",function(collection){
-				this.populateDetails();
-			},this);
-			this.listenTo(this.collection, 'request', function(){
-				this.$("#loader").show();
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-            	this.$("#loader").hide();
-			},this);
-            this.listenTo(this.vent,"main:search",function(value){
-            	this.fetchCollection({q:value});
-            });
-		},
-		fetchCollection : function(params){
-			$.extend(this.collection.queryParams, params);
-			this.collection.fetch({reset:true});
-		},
-		populateDetails : function(){
-			var that = this;
-			that.$("tbody").empty();
-			var actions = '<td>'+
-            				'<a href="javascript:void(0);"><i class="fa fa-search"></i></a>'+
-            				//'<a href="javascript:void(0);"><i class="fa fa-ban"></i></a>'+
-            				'</td>';
-			this.collection.each(function(m,i){
-				var html = "<tr>";
-				html += "<td>"+m.get("name")+"</td>";
-				html += "<td>"+m.get("count")+"</td>";
-				html += actions;
-				that.$("tbody").append(html);
-			});
-		}
-	});
-	
-	
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogDetailView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogDetailView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogDetailView.js
deleted file mode 100644
index 1de9b96..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogDetailView.js
+++ /dev/null
@@ -1,249 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'collections/VLogList',
-	'hbs!tmpl/dashboard/LogDetailView_tmpl'
-],function(require,Backbone,VUserList,LogDetailViewTmpl){
-    'use strict';
-	
-	var LogDetailView = Backbone.Marionette.ItemView.extend(
-	/** @lends LogDetailView */
-	{
-		_viewName : 'LogDetailView',
-
-		template: LogDetailViewTmpl,
-		
-		templateHelpers : function(){
-//			return {
-//				logData : this.logData
-//			};
-		},
-
-		/** ui selector cache */
-		ui: {
-			btnPin : ".btn-pin",
-			searchTags : "#tags"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['click ' + this.ui.btnPin] = 'onBtnPinClick';
-			events['click .btn-minimize'] = 'onBtnMinimizeClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new LogDetailView ItemView
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options));
-			
-			this.logData = {};
-			this.collection = new VUserList([], {
-                state: {
-                    firstPage: 0,
-                    pageSize: 50
-                }
-            });
-			var query = {q:""};
-			if(this.model.get("params")){
-				if(this.model.get("params").hosts){
-					query.hosts = this.model.get("params").hosts; 
-				}
-				if(this.model.get("params").components){
-					query.components = this.model.get("params").components
-				}
-				if(this.model.get("params").time){
-					query.time = this.model.get("params").time
-				}
-			}
-			this.mergeParams(query);
-			this.isLoading = false;
-			this.bindEvents();
-		},
-		/** all events binding here */
-		bindEvents : function(){
-			this.listenTo(this.collection, "reset", function(){
-				this.renderLogLines(this.collection);
-			}, this);
-			this.listenTo(this.collection, 'request', function(){
-				this.isLoading = true;
-				this.$("#logLines").append('<div class="loading-lines" align="center"><img src="images/loading.gif"/></div>');
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-            	this.isLoading = false;
-            	this.$(".loading-lines").remove();
-			},this);
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.fetchCollection();
-			this.initializePlugins();
-			
-		},
-		initializePlugins : function(){
-			var that = this;
-			this.infiniteScrolling();
-			this.ui.searchTags.select2({
-				 placeholder: "Manual search",
-				 closeOnSelect : true,
-				 tags:true,
-				 multiple: true,
-				 minimumInputLength: 1,
-				 tokenSeparators: [",", " "]
-			}).on("change",function(){
-				that.$("#logLines").empty();
-				var q = "";
-				if(  _.isObject(that.ui.searchTags) && (! _.isEmpty(that.ui.searchTags.select2('val'))) ){
-					var arr = that.ui.searchTags.select2('val'),qArr=[];
-					
-					_.each(arr,function(d){
-						qArr.push("*"+d+"*");
-					});
-					q = qArr.toString();
-				}
-				that.mergeParams({q : q});
-				that.collection.getFirstPage({reset:true});
-			});
-		},
-		initializeResize : function(){
-			if(! this.$('.record').hasClass("ui-resizable")){
-				var org = this.$('.record').height(),that=this;
-				this.$('.record').resizable({ghost:false,minHeight: 386,handles: 's'}).on("resize",function(e,ui){
-					var current = $(e.currentTarget).height();
-					var height = (current - org) + that.$('.record-panel').height(); 
-					that.$('.record').find('.record-panel').height(height);
-					org += (current - org);
-				});
-			}
-		},
-		mergeParams : function(obj){
-			$.extend(this.collection.queryParams, obj);
-		},
-		fetchCollection : function(){
-			this.collection.fetch({reset:true});
-		},
-		infiniteScrolling : function(){
-			var that = this;
-			this.$('.record-panel').bind('scroll', function() {
-		        if($(this).scrollTop() + $(this).innerHeight() >= this.scrollHeight) {
-		        	if(! that.isLoading){
-		        		that.infiniteScrollCallBack();
-		        	}
-		        		
-		        }
-		    })
-		},
-		infiniteScrollCallBack : function(){
-			if(this.collection.hasNext())
-				this.collection.getNextPage({reset:true});
-		},
-		onBtnPinClick : function(e){
-			this.ui.btnPin.toggleClass("unpin");
-		},
-		onBtnMinimizeClick : function(e){
-			e.preventDefault();
-			var box = $(e.currentTarget).closest('div.record');
-			var button = $(e.currentTarget).find('i');
-			var content = box.find('div.record-content');
-			content.slideToggle('fast');
-			button.toggleClass('fa-chevron-up').toggleClass('fa-chevron-down');
-			content.parent().css('height','auto');
-			if(! button.hasClass('fa-chevron-up')){
-				this.$('.record').resizable('disable');
-			}else
-				this.$('.record').resizable('enable');
-		},
-		/*getData : function(params){
-			var that = this;
-			that.$("#logLines").append('<div class="loading-lines" align="center"><img src="images/loading.gif"/></div>');
-			this.isLoading = true;
-			$.ajax({
-				url:"service/test/solr",
-				data : params,
-				success : function(data,textStatus,jqXHR ){
-					that.logData = data;
-					that.$(".loading-lines").remove();
-					that.renderLogLines(data);
-					that.renderRecordsInfo();
-					that.isLoading = false;
-				},
-				error : function(jqXHR,textStatus,errorThrown){
-					console.log("ERROR:"+errorThrown);
-				}
-			});
-		},
-		renderRecordsInfo : function(){
-			if(this.logData){
-				this.$("#recFetched").text(this.logData.startIndex + this.logData.pageSize);
-				this.$("#recTotal").text(this.logData.totalCount);
-			}
-		},
-		getQueryParams : function(){
-			var startIndex = this.logData.startIndex,
-					pageSize = this.logData.pageSize ? this.logData.pageSize : 10,obj={};
-			if(_.isUndefined(startIndex)){
-				obj.startIndex = 0;
-			}else
-				obj.startIndex =  startIndex + pageSize;
-			obj.pageSize = pageSize;
-			return obj;
-		},*/
-		renderLogLines : function(collection){
-			var $el = this.$("#logLines"),state=this.collection.state,recordsFetched =0;
-			if(collection.length > 0){
-				_.each(collection.models,function(d){
-					$el.append("<p class='log-line'>["+d.get("message")+"]</p>");
-				});
-			}else{
-				$el.append("<span class='no-record'>no records found !</span>");
-			}
-				
-			
-			if(this.collection.hasNext())
-				recordsFetched = (state.currentPage + 1) * state.pageSize;
-			else
-				recordsFetched = state.totalRecords;
-			this.$("#recFetched").text(recordsFetched);
-			this.$("#recTotal").text(state.totalRecords);
-			this.highlightSearch();
-			this.initializeResize();
-		},
-		highlightSearch : function(){
-			var str = this.ui.searchTags.select2('val').toString(),that=this;
-			if(! _.isEmpty(str)){
-				var arr = str.split(",");
-				_.each(arr,function(v){
-					var searchStr = v.replace(/\*/g,'');
-					that.$("#logLines").highlight(searchStr);
-				});
-			}
-		},
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return LogDetailView;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js
deleted file mode 100644
index eb73fb8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelBoxView.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'collections/VLogLevelList',
-	'hbs!tmpl/dashboard/LogLevelBoxView_tmpl',
-	'select2'
-],function(require,Backbone,Globals,VLogLevelList,LogLevelBoxTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.Layout.extend(
-	/** @lends LogLevelBoxView */
-	{
-		_viewName : 'LogLevelBoxView',
-
-		template: LogLevelBoxTmpl,
-
-		/** Layout sub regions */
-		regions: {
-		},
-
-		/** ui selector cache */
-		ui: {
-			INFO : "[data-id='INFO']",
-			WARN : "[data-id='WARN']",
-			ERROR : "[data-id='ERROR']",
-			DEBUG : "[data-id='DEBUG']",
-			FATAL : "[data-id='FATAL']",
-			TRACE : "[data-id='TRACE']",
-			UNKNOWN : "[data-id='UNKNOWN']",
-			loader:".server-info .fa-spin"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events["click .server-info a"] = 'onLogLevelClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelBoxView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent','globalVent','params'));
-			this.logLevelList = new VLogLevelList();
-			this.logLevelList.url = Globals.baseURL + "service/logs/levels/counts";
-			this.logLevelList.modelAttrName = "vNameValues";
-			this.bindEvents();
-		},
-		onRender : function(){
-//			this.fetchLogLevelCounts({level:(this.params) ? this.params.level : null});
-			this.fetchLogLevelCounts((this.params) ? this.params : {});
-			if(this.params && this.params.level){
-				var levels = this.params.level.split(",");
-				this.highlightLevels(levels);
-			}
-		},
-		highlightLevels : function(levels){
-			this.$(".node").removeClass("active")
-			for(var i=0;i<levels.length;i++){
-				this.$(".node."+levels[i]).addClass("active");
-			}
-		},
-		fetchLogLevelCounts : function(params){
-			$.extend(this.logLevelList.queryParams,params,{level: "FATAL,ERROR,WARN,INFO,DEBUG,TRACE,UNKNOWN"});
-			this.ui.loader.show();
-			this.logLevelList.fetch({reset:true});
-		},
-		bindEvents : function(){
-			this.listenTo(this.logLevelList,"reset",function(){
-				this.ui.loader.hide();
-				this.renderLogLevelCounts();
-			},this);
-			this.listenTo(this.vent,"main:search tree:search type:mustNot type:mustBe logtime:filter" +
-					" search:include:exclude "+Globals.eventName.serviceLogsIncludeColumns+" "+Globals.eventName.serviceLogsExcludeColumns,function(value){
-				this.fetchLogLevelCounts(value);
-			},this);
-//			this.listenTo(this.vent,"tree:search",function(value){
-//            	this.fetchLogLevelCounts(value);
-//            },this);
-//			this.listenTo(this.vent,"type:mustNot",function(value){
-//            	this.fetchLogLevelCounts(value);
-//            },this);
-//			this.listenTo(this.vent,"type:mustBe",function(value){
-//            	this.fetchLogLevelCounts(value);
-//            },this);
-//			this.listenTo(this.vent,"logtime:filter",function(value){
-//            	this.fetchLogLevelCounts(value);
-//            },this);
-//			this.listenTo(this.vent,"search:include:exclude",function(value){
-//            	this.fetchLogLevelCounts(value);
-//            },this);
-			this.listenTo(this.vent,"reinitialize:filter:level",function(value){
-            	this.reinitializeFilter(value);
-            },this);
-            this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-                this.fetchLogLevelCounts(value);
-            },this);
-            this.listenTo(this.vent,"tab:refresh",function(params){
-            	this.reRenderView(params);
-            },this);
-		},
-		renderLogLevelCounts : function(){
-			var that = this;
-			this.logLevelList.each(function(model){
-				that.$("[data-total='"+model.get("name")+"']").parent().prop('title',model.get("value"))
-				that.$("[data-total='"+model.get("name")+"']").text(model.get("value"));
-			});
-		},
-		onLogLevelClick : function(e){
-			var $el = $(e.currentTarget);
-			if($el.hasClass("active")){
-				$el.removeClass("active");
-			}else{
-				$el.addClass("active");
-			}
-			var params = [];
-			_.each(this.$(".server-info a.active"),function(e){
-				params.push($(e).find("strong").data("total"));
-			});
-			this.fetchLogLevelCounts({level:params.toString()});
-			this.vent.trigger("level:filter",{level:params.toString()});
-		},
-		reinitializeFilter : function(value){
-			this.fetchLogLevelCounts(value);
-			if(value.level)
-				this.highlightLevels(value.level.split(","));
-			
-		},
-		reRenderView : function(params){
-			this.fetchLogLevelCounts(params);
-		}
-	});
-	
-	
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelView.js
deleted file mode 100644
index 79c8bcf..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/LogLevelView.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'utils/Globals',
-	'collections/VLogLevelList',
-	'hbs!tmpl/dashboard/LogLevelView_tmpl',
-	'select2'
-],function(require,Backbone,Globals,VLogLevel,LogLevelTmpl){
-    'use strict';
-	
-	return Backbone.Marionette.Layout.extend(
-	/** @lends LogLevelView */
-	{
-		_viewName : 'LogLevelView',
-
-		template: LogLevelTmpl,
-
-		/** Layout sub regions */
-		regions: {
-			RLogLevelPieChart : "#r_logLevelPieChart",
-		},
-
-		/** ui selector cache */
-		ui: {
-			INFO : "[data-id='INFO']",
-			WARN : "[data-id='WARN']",
-			ERROR : "[data-id='ERROR']",
-			DEBUG : "[data-id='DEBUG']",
-			FATAL : "[data-id='FATAL']",
-			TRACE : "[data-id='TRACE']",
-			UNKNOWN : "[data-id='UNKNOWN']",
-			togglePieViewButton:'#logToggle',
-			pieRegionId:'#r_logLevelPieChart',
-			logTable:'#logTable'
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['click #searchLog'] = 'onSearchLogClick';
-			events['click ' + this.ui.togglePieViewButton] = 'onToggaleView';
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent'));
-			this.collection = new VLogLevel();
-			this.bindEvents();
-		},
-		onRender : function(){
-			this.fetchCollection();
-			this.ui.pieRegionId.hide();
-		},
-		fetchCollection : function(params){
-			$.extend(this.collection.queryParams, params);
-			this.collection.fetch({reset:true});
-		},
-		bindEvents : function(){
-			this.listenTo(this.collection,"reset",function(collection){
-				this.populateDetails();
-				this.renderLogLevelPieChart();
-			},this);
-			this.listenTo(this.collection, 'request', function(){
-				this.$("#loader").show();
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-            	this.$("#loader").hide();
-			},this);
-            this.listenTo(this.vent,"main:search",function(value){
-            	this.fetchCollection({q:value});
-            });
-		},
-		populateDetails : function(){
-			var that = this;
-			this.collection.each(function(m,i){
-				that.ui[m.get("name")].text(m.get("count"));
-			});
-		},
-		renderLogLevelPieChart:function(){
-			var that = this;
-			require(['views/graphs/PieChartGraphLayoutView'],function(PieChartGraphLayoutView){
-				that.RLogLevelPieChart.show(new PieChartGraphLayoutView({
-					vent : that.vent,
-					collection:that.collection
-					/*parentView:this*/
-				}));
-			})
-		},
-		onToggaleView:function(){
-		    this.ui.togglePieViewButton.children().toggleClass('fa-pie-chart fa-th');
-		    this.ui.pieRegionId.toggle();
-		    this.ui.logTable.toggle()
-		}
-	});
-	
-	
-});
\ No newline at end of file


[51/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/02360dd5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/02360dd5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/02360dd5

Branch: refs/heads/trunk
Commit: 02360dd5d788fd2ad7b0edd2f706051c1cc690e8
Parents: 93011b2
Author: oleewere <ol...@gmail.com>
Authored: Fri Sep 1 16:55:25 2017 +0200
Committer: oleewere <ol...@gmail.com>
Committed: Tue Sep 5 21:32:02 2017 +0200

----------------------------------------------------------------------
 .../ambari-logsearch-server/build.xml           |    3 +
 .../ambari-logsearch-server/pom.xml             |    7 +-
 .../auth/filter/AbstractJWTFilter.java          |  193 +
 .../auth/model/JWTAuthenticationToken.java      |   47 +
 .../ambari/logsearch/conf/SecurityConfig.java   |   38 +-
 .../LogsearchLogoutSuccessHandler.java          |    1 -
 .../web/filters/LogsearchJWTFilter.java         |  150 +-
 .../web/model/JWTAuthenticationToken.java       |   53 -
 .../ambari-logsearch-web-new/.angular-cli.json  |   64 -
 .../ambari-logsearch-web-new/.editorconfig      |   13 -
 .../ambari-logsearch-web-new/.gitignore         |   42 -
 .../ambari-logsearch-web-new/README.md          |   28 -
 .../e2e/app.e2e-spec.ts                         |   32 -
 .../ambari-logsearch-web-new/e2e/app.po.ts      |   29 -
 .../e2e/tsconfig.e2e.json                       |   12 -
 .../ambari-logsearch-web-new/karma.conf.js      |   62 -
 .../ambari-logsearch-web-new/package.json       |   64 -
 .../ambari-logsearch-web-new/pom.xml            |  171 -
 .../ambari-logsearch-web-new/protractor.conf.js |   48 -
 .../src/app/app.module.ts                       |  169 -
 .../queries/audit-logs-query-params.class.ts    |   50 -
 .../app/classes/queries/query-params.class.ts   |   23 -
 ...ce-logs-histogram-query-params.class.spec.ts |  203 -
 ...service-logs-histogram-query-params.class.ts |   69 -
 .../queries/service-logs-query-params.class.ts  |   31 -
 .../accordion-panel.component.html              |   25 -
 .../accordion-panel.component.less              |   42 -
 .../accordion-panel.component.spec.ts           |   42 -
 .../accordion-panel.component.ts                |   33 -
 .../src/app/components/app.component.html       |   34 -
 .../src/app/components/app.component.less       |   51 -
 .../src/app/components/app.component.spec.ts    |   71 -
 .../src/app/components/app.component.ts         |   45 -
 .../dropdown-button.component.html              |   25 -
 .../dropdown-button.component.less              |   32 -
 .../dropdown-button.component.spec.ts           |   79 -
 .../dropdown-button.component.ts                |   96 -
 .../dropdown-list/dropdown-list.component.html  |   31 -
 .../dropdown-list/dropdown-list.component.less  |   41 -
 .../dropdown-list.component.spec.ts             |  130 -
 .../dropdown-list/dropdown-list.component.ts    |   63 -
 .../filter-button.component.spec.ts             |   78 -
 .../filter-button/filter-button.component.ts    |   80 -
 .../filter-dropdown.component.spec.ts           |   92 -
 .../filter-dropdown.component.ts                |   63 -
 .../filter-text-field.component.html            |   21 -
 .../filter-text-field.component.less            |   33 -
 .../filter-text-field.component.spec.ts         |   82 -
 .../filter-text-field.component.ts              |   87 -
 .../filters-panel/filters-panel.component.html  |   46 -
 .../filters-panel/filters-panel.component.less  |   51 -
 .../filters-panel.component.spec.ts             |   93 -
 .../filters-panel/filters-panel.component.ts    |   44 -
 .../login-form/login-form.component.html        |   33 -
 .../login-form/login-form.component.less        |   22 -
 .../login-form/login-form.component.spec.ts     |  122 -
 .../login-form/login-form.component.ts          |   59 -
 .../logs-container.component.html               |   22 -
 .../logs-container.component.less               |   25 -
 .../logs-container.component.spec.ts            |  102 -
 .../logs-container/logs-container.component.ts  |  105 -
 .../logs-list/logs-list.component.html          |   54 -
 .../logs-list/logs-list.component.less          |  138 -
 .../logs-list/logs-list.component.spec.ts       |  102 -
 .../components/logs-list/logs-list.component.ts |   62 -
 .../main-container.component.html               |   24 -
 .../main-container.component.less               |   24 -
 .../main-container.component.spec.ts            |   65 -
 .../main-container/main-container.component.ts  |   66 -
 .../menu-button/menu-button.component.html      |   28 -
 .../menu-button/menu-button.component.less      |   33 -
 .../menu-button/menu-button.component.spec.ts   |  133 -
 .../menu-button/menu-button.component.ts        |   97 -
 .../app/components/modal/modal.component.html   |   40 -
 .../components/modal/modal.component.spec.ts    |   57 -
 .../src/app/components/modal/modal.component.ts |  122 -
 .../components/node-bar/node-bar.component.html |   19 -
 .../components/node-bar/node-bar.component.less |   39 -
 .../node-bar/node-bar.component.spec.ts         |   43 -
 .../components/node-bar/node-bar.component.ts   |   35 -
 .../pagination-controls.component.html          |   23 -
 .../pagination-controls.component.less          |   23 -
 .../pagination-controls.component.spec.ts       |   43 -
 .../pagination-controls.component.ts            |   73 -
 .../pagination/pagination.component.html        |   24 -
 .../pagination/pagination.component.less        |   28 -
 .../pagination/pagination.component.spec.ts     |   69 -
 .../pagination/pagination.component.ts          |   72 -
 .../time-histogram.component.html               |   18 -
 .../time-histogram.component.less               |   29 -
 .../time-histogram.component.spec.ts            |   53 -
 .../time-histogram/time-histogram.component.ts  |  161 -
 .../timezone-picker.component.html              |   26 -
 .../timezone-picker.component.less              |   45 -
 .../timezone-picker.component.spec.ts           |   73 -
 .../timezone-picker.component.ts                |   77 -
 .../components/top-menu/top-menu.component.html |   21 -
 .../components/top-menu/top-menu.component.less |   22 -
 .../top-menu/top-menu.component.spec.ts         |   45 -
 .../components/top-menu/top-menu.component.ts   |  122 -
 .../src/app/components/variables.less           |  118 -
 .../src/app/mock-data.ts                        | 1067 ---
 .../src/app/models/app-settings.model.ts        |   27 -
 .../src/app/models/app-state.model.ts           |   33 -
 .../src/app/models/audit-log-field.model.ts     |  225 -
 .../src/app/models/audit-log.model.ts           |   46 -
 .../src/app/models/bar-graph.model.ts           |   24 -
 .../src/app/models/common-entry.model.ts        |   22 -
 .../src/app/models/count.model.ts               |   22 -
 .../src/app/models/filter.model.ts              |   25 -
 .../src/app/models/graph.model.ts               |   23 -
 .../src/app/models/log-field.model.ts           |   27 -
 .../src/app/models/log.model.ts                 |   37 -
 .../src/app/models/node.model.ts                |   29 -
 .../src/app/models/service-log-field.model.ts   |  107 -
 .../src/app/models/service-log.model.ts         |   27 -
 .../app/models/solr-collection-state.model.ts   |   23 -
 .../src/app/models/store.model.ts               |  169 -
 .../src/app/models/user-config.model.ts         |   26 -
 .../src/app/pipes/timezone-abbr.pipe.spec.ts    |   26 -
 .../src/app/pipes/timezone-abbr.pipe.ts         |   31 -
 .../services/component-actions.service.spec.ts  |   43 -
 .../app/services/component-actions.service.ts   |   53 -
 .../component-generator.service.spec.ts         |   84 -
 .../app/services/component-generator.service.ts |   57 -
 .../src/app/services/filtering.service.spec.ts  |   67 -
 .../src/app/services/filtering.service.ts       |  352 -
 .../app/services/http-client.service.spec.ts    |   67 -
 .../src/app/services/http-client.service.ts     |  138 -
 .../app/services/logs-container.service.spec.ts |   82 -
 .../src/app/services/logs-container.service.ts  |  148 -
 .../app/services/mock-api-data.service.spec.ts  |   81 -
 .../src/app/services/mock-api-data.service.ts   |  178 -
 .../services/storage/app-settings.service.ts    |   33 -
 .../app/services/storage/app-state.service.ts   |   33 -
 .../storage/audit-logs-fields.service.ts        |   32 -
 .../app/services/storage/audit-logs.service.ts  |   32 -
 .../app/services/storage/clusters.service.ts    |   32 -
 .../app/services/storage/components.service.ts  |   32 -
 .../src/app/services/storage/filters.service.ts |   33 -
 .../src/app/services/storage/graphs.service.ts  |   33 -
 .../src/app/services/storage/hosts.service.ts   |   32 -
 .../app/services/storage/reducers.service.ts    |   52 -
 .../storage/service-logs-fields.service.ts      |   32 -
 .../service-logs-histogram-data.service.ts      |   32 -
 .../services/storage/service-logs.service.ts    |   32 -
 .../services/storage/user-configs.service.ts    |   33 -
 .../src/app/services/utils.service.spec.ts      |   86 -
 .../src/app/services/utils.service.ts           |   46 -
 .../src/assets/i18n/en.json                     |  124 -
 .../src/environments/environment.prod.ts        |   21 -
 .../src/environments/environment.ts             |   21 -
 .../ambari-logsearch-web-new/src/favicon.ico    |  Bin 1150 -> 0 bytes
 .../ambari-logsearch-web-new/src/index.html     |   31 -
 .../ambari-logsearch-web-new/src/main.ts        |   29 -
 .../ambari-logsearch-web-new/src/polyfills.ts   |   86 -
 .../ambari-logsearch-web-new/src/styles.less    |   17 -
 .../ambari-logsearch-web-new/src/test.ts        |   50 -
 .../src/tsconfig.app.json                       |   13 -
 .../src/tsconfig.spec.json                      |   20 -
 .../ambari-logsearch-web-new/src/typings.d.ts   |   23 -
 .../src/vendor/css/bootstrap-logsearch.min.css  |   18 -
 .../vendor/css/fonts/Roboto-Regular-webfont.eot |  Bin 79547 -> 0 bytes
 .../vendor/css/fonts/Roboto-Regular-webfont.svg | 7606 ---------------
 .../vendor/css/fonts/Roboto-Regular-webfont.ttf |  Bin 234464 -> 0 bytes
 .../css/fonts/Roboto-Regular-webfont.woff       |  Bin 105700 -> 0 bytes
 .../src/vendor/js/WorldMapGenerator.min.js      |   11 -
 .../src/vendor/js/bootstrap-logsearch.min.js    |   19 -
 .../ambari-logsearch-web-new/tsconfig.json      |   31 -
 .../ambari-logsearch-web-new/tslint.json        |  116 -
 .../ambari-logsearch-web-new/yarn.lock          | 5766 ------------
 .../ambari-logsearch-web/.angular-cli.json      |   64 +
 ambari-logsearch/ambari-logsearch-web/.bowerrc  |    3 -
 .../ambari-logsearch-web/.editorconfig          |   13 +
 .../ambari-logsearch-web/.gitignore             |   43 +-
 .../ambari-logsearch-web/Gruntfile.js           |  139 -
 .../ambari-logsearch-web/LICENSE.txt            |  339 -
 ambari-logsearch/ambari-logsearch-web/README.md |   28 +
 .../ambari-logsearch-web/bower.json             |   39 -
 .../ambari-logsearch-web/build.properties       |   12 -
 ambari-logsearch/ambari-logsearch-web/build.xml |   37 -
 .../ambari-logsearch-web/e2e/app.e2e-spec.ts    |   32 +
 .../ambari-logsearch-web/e2e/app.po.ts          |   29 +
 .../ambari-logsearch-web/e2e/tsconfig.e2e.json  |   12 +
 .../ambari-logsearch-web/karma.conf.js          |   62 +
 .../ambari-logsearch-web/package.json           |   75 +-
 ambari-logsearch/ambari-logsearch-web/pom.xml   |  143 +-
 .../ambari-logsearch-web/protractor.conf.js     |   48 +
 .../ambari-logsearch-web/src/app/app.module.ts  |  169 +
 .../queries/audit-logs-query-params.class.ts    |   50 +
 .../app/classes/queries/query-params.class.ts   |   23 +
 ...ce-logs-histogram-query-params.class.spec.ts |  203 +
 ...service-logs-histogram-query-params.class.ts |   69 +
 .../queries/service-logs-query-params.class.ts  |   31 +
 .../accordion-panel.component.html              |   25 +
 .../accordion-panel.component.less              |   42 +
 .../accordion-panel.component.spec.ts           |   42 +
 .../accordion-panel.component.ts                |   33 +
 .../src/app/components/app.component.html       |   34 +
 .../src/app/components/app.component.less       |   51 +
 .../src/app/components/app.component.spec.ts    |   71 +
 .../src/app/components/app.component.ts         |   45 +
 .../dropdown-button.component.html              |   25 +
 .../dropdown-button.component.less              |   32 +
 .../dropdown-button.component.spec.ts           |   79 +
 .../dropdown-button.component.ts                |   96 +
 .../dropdown-list/dropdown-list.component.html  |   31 +
 .../dropdown-list/dropdown-list.component.less  |   41 +
 .../dropdown-list.component.spec.ts             |  130 +
 .../dropdown-list/dropdown-list.component.ts    |   63 +
 .../filter-button.component.spec.ts             |   78 +
 .../filter-button/filter-button.component.ts    |   80 +
 .../filter-dropdown.component.spec.ts           |   92 +
 .../filter-dropdown.component.ts                |   63 +
 .../filter-text-field.component.html            |   21 +
 .../filter-text-field.component.less            |   33 +
 .../filter-text-field.component.spec.ts         |   82 +
 .../filter-text-field.component.ts              |   87 +
 .../filters-panel/filters-panel.component.html  |   46 +
 .../filters-panel/filters-panel.component.less  |   51 +
 .../filters-panel.component.spec.ts             |   93 +
 .../filters-panel/filters-panel.component.ts    |   44 +
 .../login-form/login-form.component.html        |   33 +
 .../login-form/login-form.component.less        |   22 +
 .../login-form/login-form.component.spec.ts     |  122 +
 .../login-form/login-form.component.ts          |   59 +
 .../logs-container.component.html               |   22 +
 .../logs-container.component.less               |   25 +
 .../logs-container.component.spec.ts            |  102 +
 .../logs-container/logs-container.component.ts  |  105 +
 .../logs-list/logs-list.component.html          |   54 +
 .../logs-list/logs-list.component.less          |  138 +
 .../logs-list/logs-list.component.spec.ts       |  102 +
 .../components/logs-list/logs-list.component.ts |   62 +
 .../main-container.component.html               |   24 +
 .../main-container.component.less               |   24 +
 .../main-container.component.spec.ts            |   65 +
 .../main-container/main-container.component.ts  |   66 +
 .../menu-button/menu-button.component.html      |   28 +
 .../menu-button/menu-button.component.less      |   33 +
 .../menu-button/menu-button.component.spec.ts   |  133 +
 .../menu-button/menu-button.component.ts        |   97 +
 .../app/components/modal/modal.component.html   |   40 +
 .../components/modal/modal.component.spec.ts    |   57 +
 .../src/app/components/modal/modal.component.ts |  122 +
 .../components/node-bar/node-bar.component.html |   19 +
 .../components/node-bar/node-bar.component.less |   39 +
 .../node-bar/node-bar.component.spec.ts         |   43 +
 .../components/node-bar/node-bar.component.ts   |   35 +
 .../pagination-controls.component.html          |   23 +
 .../pagination-controls.component.less          |   23 +
 .../pagination-controls.component.spec.ts       |   43 +
 .../pagination-controls.component.ts            |   73 +
 .../pagination/pagination.component.html        |   24 +
 .../pagination/pagination.component.less        |   28 +
 .../pagination/pagination.component.spec.ts     |   69 +
 .../pagination/pagination.component.ts          |   72 +
 .../time-histogram.component.html               |   18 +
 .../time-histogram.component.less               |   29 +
 .../time-histogram.component.spec.ts            |   53 +
 .../time-histogram/time-histogram.component.ts  |  161 +
 .../timezone-picker.component.html              |   26 +
 .../timezone-picker.component.less              |   45 +
 .../timezone-picker.component.spec.ts           |   73 +
 .../timezone-picker.component.ts                |   77 +
 .../components/top-menu/top-menu.component.html |   21 +
 .../components/top-menu/top-menu.component.less |   22 +
 .../top-menu/top-menu.component.spec.ts         |   45 +
 .../components/top-menu/top-menu.component.ts   |  122 +
 .../src/app/components/variables.less           |  118 +
 .../ambari-logsearch-web/src/app/mock-data.ts   | 1067 +++
 .../src/app/models/app-settings.model.ts        |   27 +
 .../src/app/models/app-state.model.ts           |   33 +
 .../src/app/models/audit-log-field.model.ts     |  225 +
 .../src/app/models/audit-log.model.ts           |   46 +
 .../src/app/models/bar-graph.model.ts           |   24 +
 .../src/app/models/common-entry.model.ts        |   22 +
 .../src/app/models/count.model.ts               |   22 +
 .../src/app/models/filter.model.ts              |   25 +
 .../src/app/models/graph.model.ts               |   23 +
 .../src/app/models/log-field.model.ts           |   27 +
 .../src/app/models/log.model.ts                 |   37 +
 .../src/app/models/node.model.ts                |   29 +
 .../src/app/models/service-log-field.model.ts   |  107 +
 .../src/app/models/service-log.model.ts         |   27 +
 .../app/models/solr-collection-state.model.ts   |   23 +
 .../src/app/models/store.model.ts               |  169 +
 .../src/app/models/user-config.model.ts         |   26 +
 .../src/app/pipes/timezone-abbr.pipe.spec.ts    |   26 +
 .../src/app/pipes/timezone-abbr.pipe.ts         |   31 +
 .../services/component-actions.service.spec.ts  |   43 +
 .../app/services/component-actions.service.ts   |   53 +
 .../component-generator.service.spec.ts         |   84 +
 .../app/services/component-generator.service.ts |   57 +
 .../src/app/services/filtering.service.spec.ts  |   67 +
 .../src/app/services/filtering.service.ts       |  352 +
 .../app/services/http-client.service.spec.ts    |   67 +
 .../src/app/services/http-client.service.ts     |  138 +
 .../app/services/logs-container.service.spec.ts |   82 +
 .../src/app/services/logs-container.service.ts  |  148 +
 .../app/services/mock-api-data.service.spec.ts  |   81 +
 .../src/app/services/mock-api-data.service.ts   |  178 +
 .../services/storage/app-settings.service.ts    |   33 +
 .../app/services/storage/app-state.service.ts   |   33 +
 .../storage/audit-logs-fields.service.ts        |   32 +
 .../app/services/storage/audit-logs.service.ts  |   32 +
 .../app/services/storage/clusters.service.ts    |   32 +
 .../app/services/storage/components.service.ts  |   32 +
 .../src/app/services/storage/filters.service.ts |   33 +
 .../src/app/services/storage/graphs.service.ts  |   33 +
 .../src/app/services/storage/hosts.service.ts   |   32 +
 .../app/services/storage/reducers.service.ts    |   52 +
 .../storage/service-logs-fields.service.ts      |   32 +
 .../service-logs-histogram-data.service.ts      |   32 +
 .../services/storage/service-logs.service.ts    |   32 +
 .../services/storage/user-configs.service.ts    |   33 +
 .../src/app/services/utils.service.spec.ts      |   86 +
 .../src/app/services/utils.service.ts           |   46 +
 .../src/assets/i18n/en.json                     |  124 +
 .../src/environments/environment.prod.ts        |   21 +
 .../src/environments/environment.ts             |   21 +
 .../ambari-logsearch-web/src/favicon.ico        |  Bin 0 -> 1150 bytes
 .../ambari-logsearch-web/src/index.html         |   31 +
 .../ambari-logsearch-web/src/main.ts            |   29 +
 .../src/main/webapp/404.html                    |  170 -
 .../src/main/webapp/ajax_failure.jsp            |   31 -
 .../src/main/webapp/ajax_success.html           |   26 -
 .../src/main/webapp/favicon.ico                 |  Bin 1150 -> 0 bytes
 .../webapp/fonts/fontawesome/FontAwesome.otf    |  Bin 61896 -> 0 bytes
 .../fonts/fontawesome/fontawesome-webfont.eot   |  Bin 37405 -> 0 bytes
 .../fonts/fontawesome/fontawesome-webfont.svg   |  415 -
 .../fonts/fontawesome/fontawesome-webfont.ttf   |  Bin 79076 -> 0 bytes
 .../fonts/fontawesome/fontawesome-webfont.woff  |  Bin 43572 -> 0 bytes
 .../fonts/fontopensans/open-sans-300.woff       |  Bin 22656 -> 0 bytes
 .../fonts/fontopensans/open-sans-300i.woff      |  Bin 21524 -> 0 bytes
 .../fonts/fontopensans/open-sans-400.woff       |  Bin 21956 -> 0 bytes
 .../fonts/fontopensans/open-sans-400i.woff      |  Bin 21092 -> 0 bytes
 .../fonts/fontopensans/open-sans-600.woff       |  Bin 22604 -> 0 bytes
 .../fonts/fontopensans/open-sans-600i.woff      |  Bin 21252 -> 0 bytes
 .../fonts/fontopensans/open-sans-700.woff       |  Bin 22748 -> 0 bytes
 .../fonts/fontopensans/open-sans-700i.woff      |  Bin 21184 -> 0 bytes
 .../main/webapp/images/System-Settings-icon.png |  Bin 17540 -> 0 bytes
 .../src/main/webapp/images/avatar.png           |  Bin 761 -> 0 bytes
 .../src/main/webapp/images/blank.gif            |  Bin 43 -> 0 bytes
 .../src/main/webapp/images/blockLoading.gif     |  Bin 3209 -> 0 bytes
 .../src/main/webapp/images/body-bg.png          |  Bin 3375 -> 0 bytes
 .../src/main/webapp/images/cancel_search.png    |  Bin 541 -> 0 bytes
 .../src/main/webapp/images/clear.png            |  Bin 509 -> 0 bytes
 .../src/main/webapp/images/comp.png             |  Bin 1603 -> 0 bytes
 .../src/main/webapp/images/data-grey.png        |  Bin 1468 -> 0 bytes
 .../main/webapp/images/database_table_32.png    |  Bin 1329 -> 0 bytes
 .../src/main/webapp/images/error-404-icon.png   |  Bin 2529 -> 0 bytes
 .../src/main/webapp/images/error-500-icon.png   |  Bin 2986 -> 0 bytes
 .../src/main/webapp/images/folder-grey.png      |  Bin 1372 -> 0 bytes
 .../src/main/webapp/images/folder.png           |  Bin 920 -> 0 bytes
 .../src/main/webapp/images/folder2.png          |  Bin 946 -> 0 bytes
 .../src/main/webapp/images/form.png             |  Bin 3329 -> 0 bytes
 .../src/main/webapp/images/hbase.jpg            |  Bin 4575 -> 0 bytes
 .../src/main/webapp/images/hdfs.jpg             |  Bin 5232 -> 0 bytes
 .../src/main/webapp/images/hive.png             |  Bin 20483 -> 0 bytes
 .../src/main/webapp/images/hline.png            |  Bin 99 -> 0 bytes
 .../src/main/webapp/images/icon-collapse.png    |  Bin 18815 -> 0 bytes
 .../src/main/webapp/images/icon-expand.png      |  Bin 20092 -> 0 bytes
 .../src/main/webapp/images/knox.gif             |  Bin 2347 -> 0 bytes
 .../src/main/webapp/images/knox1.png            |  Bin 34126 -> 0 bytes
 .../src/main/webapp/images/loading.gif          |  Bin 1849 -> 0 bytes
 .../src/main/webapp/images/loading_game.gif     |  Bin 16098 -> 0 bytes
 .../src/main/webapp/images/logo-white.png       |  Bin 4538 -> 0 bytes
 .../src/main/webapp/images/logo.png             |  Bin 1168 -> 0 bytes
 .../src/main/webapp/images/router-grey.png      |  Bin 1533 -> 0 bytes
 .../src/main/webapp/images/search_glyph.png     |  Bin 420 -> 0 bytes
 .../src/main/webapp/images/sortingCollapse.png  |  Bin 13320 -> 0 bytes
 .../src/main/webapp/images/sortingExpand.png    |  Bin 13283 -> 0 bytes
 .../src/main/webapp/images/storm.png            |  Bin 6174 -> 0 bytes
 .../src/main/webapp/images/storm1.png           |  Bin 19620 -> 0 bytes
 .../src/main/webapp/images/task-grey.png        |  Bin 1187 -> 0 bytes
 .../src/main/webapp/images/timezone.png         |  Bin 353544 -> 0 bytes
 .../src/main/webapp/index.html                  |  108 -
 .../backbone-pageable/backbone-pageable.min.js  |    8 -
 .../webapp/libs/bower/backbone.fetch-cache.js   |  326 -
 .../src/main/webapp/libs/bower/d3/d3.tip.js     |  293 -
 .../webapp/libs/bower/dashboard/dashboard.js    |  393 -
 .../bower/font-awesome/css/font-awesome.css     | 1801 ----
 .../bower/font-awesome/css/font-awesome.min.css |    4 -
 .../bower/font-awesome/fonts/FontAwesome.otf    |  Bin 61896 -> 0 bytes
 .../font-awesome/fonts/fontawesome-webfont.eot  |  Bin 37405 -> 0 bytes
 .../font-awesome/fonts/fontawesome-webfont.svg  |  415 -
 .../font-awesome/fonts/fontawesome-webfont.ttf  |  Bin 79076 -> 0 bytes
 .../font-awesome/fonts/fontawesome-webfont.woff |  Bin 43572 -> 0 bytes
 .../fonts/fontawesome-webfont.woff2             |  Bin 56780 -> 0 bytes
 .../libs/bower/font-awesome/less/animated.less  |   34 -
 .../font-awesome/less/bordered-pulled.less      |   16 -
 .../libs/bower/font-awesome/less/core.less      |   13 -
 .../bower/font-awesome/less/fixed-width.less    |    6 -
 .../bower/font-awesome/less/font-awesome.less   |   17 -
 .../libs/bower/font-awesome/less/icons.less     |  596 --
 .../libs/bower/font-awesome/less/larger.less    |   13 -
 .../libs/bower/font-awesome/less/list.less      |   19 -
 .../libs/bower/font-awesome/less/mixins.less    |   27 -
 .../libs/bower/font-awesome/less/path.less      |   15 -
 .../font-awesome/less/rotated-flipped.less      |   20 -
 .../libs/bower/font-awesome/less/stacked.less   |   20 -
 .../libs/bower/font-awesome/less/variables.less |  606 --
 .../libs/bower/font-awesome/scss/_animated.scss |   34 -
 .../font-awesome/scss/_bordered-pulled.scss     |   16 -
 .../libs/bower/font-awesome/scss/_core.scss     |   13 -
 .../bower/font-awesome/scss/_fixed-width.scss   |    6 -
 .../libs/bower/font-awesome/scss/_icons.scss    |  596 --
 .../libs/bower/font-awesome/scss/_larger.scss   |   13 -
 .../libs/bower/font-awesome/scss/_list.scss     |   19 -
 .../libs/bower/font-awesome/scss/_mixins.scss   |   27 -
 .../libs/bower/font-awesome/scss/_path.scss     |   15 -
 .../font-awesome/scss/_rotated-flipped.scss     |   20 -
 .../libs/bower/font-awesome/scss/_stacked.scss  |   20 -
 .../bower/font-awesome/scss/_variables.scss     |  606 --
 .../bower/font-awesome/scss/font-awesome.scss   |   17 -
 .../jquery-ui/css/images/animated-overlay.gif   |  Bin 1738 -> 0 bytes
 .../ui-bg_diagonals-thick_18_b81900_40x40.png   |  Bin 418 -> 0 bytes
 .../ui-bg_diagonals-thick_20_666666_40x40.png   |  Bin 312 -> 0 bytes
 .../css/images/ui-bg_flat_0_aaaaaa_40x100.png   |  Bin 180 -> 0 bytes
 .../css/images/ui-bg_flat_10_000000_40x100.png  |  Bin 205 -> 0 bytes
 .../css/images/ui-bg_glass_100_f6f6f6_1x400.png |  Bin 262 -> 0 bytes
 .../css/images/ui-bg_glass_100_fdf5ce_1x400.png |  Bin 348 -> 0 bytes
 .../css/images/ui-bg_glass_65_ffffff_1x400.png  |  Bin 207 -> 0 bytes
 .../ui-bg_gloss-wave_35_f6a828_500x100.png      |  Bin 5815 -> 0 bytes
 .../ui-bg_highlight-soft_100_eeeeee_1x100.png   |  Bin 278 -> 0 bytes
 .../ui-bg_highlight-soft_75_ffe45c_1x100.png    |  Bin 328 -> 0 bytes
 .../css/images/ui-icons_222222_256x240.png      |  Bin 6922 -> 0 bytes
 .../css/images/ui-icons_228ef1_256x240.png      |  Bin 4549 -> 0 bytes
 .../css/images/ui-icons_454545_256x240.png      |  Bin 4369 -> 0 bytes
 .../css/images/ui-icons_888888_256x240.png      |  Bin 4369 -> 0 bytes
 .../css/images/ui-icons_ef8c08_256x240.png      |  Bin 4549 -> 0 bytes
 .../css/images/ui-icons_ffd27a_256x240.png      |  Bin 4549 -> 0 bytes
 .../css/images/ui-icons_ffffff_256x240.png      |  Bin 6299 -> 0 bytes
 .../bower/jquery-ui/css/jquery-ui-1.11.4.css    |  850 --
 .../jquery-ui/css/jquery-ui-1.11.4.min.css      |    7 -
 .../bower/jquery-ui/css/jquery-ui-bootstrap.css | 2549 -----
 .../libs/bower/jquery-ui/js/jquery-ui-1.11.4.js | 8772 ------------------
 .../bower/jquery-ui/js/jquery-ui-1.11.4.min.js  |   10 -
 .../src/main/webapp/libs/bower/loadCSS.js       |   73 -
 .../require-handlebars-plugin/Handlebars.js     | 2752 ------
 .../webapp/libs/bower/select2/select2x2.png     |  Bin 845 -> 0 bytes
 .../libs/bower/sparkline/jquery.sparkline.js    | 3054 ------
 .../Backgrid.ColumnManager.css                  |  114 -
 .../Backgrid.ColumnManager.js                   | 1045 ---
 .../daterangepicker/css/daterangepicker.css     |  415 -
 .../daterangepicker/js/daterangepicker.js       | 1560 ----
 .../libs/custom/timezone/WorldMapGenerator.js   | 3474 -------
 .../libs/custom/timezone/jstz-1.0.4.min.js      |    2 -
 .../webapp/libs/custom/visualsearch/.bower.json |   45 -
 .../custom/visualsearch/models/search_facets.js |   67 -
 .../custom/visualsearch/models/search_query.js  |   70 -
 .../visualsearch/templates/search_box.jst       |    8 -
 .../visualsearch/templates/search_facet.jst     |    9 -
 .../visualsearch/templates/search_input.jst     |    1 -
 .../custom/visualsearch/templates/templates.js  |    7 -
 .../visualsearch/utils/backbone_extensions.js   |   17 -
 .../libs/custom/visualsearch/utils/hotkeys.js   |   99 -
 .../libs/custom/visualsearch/utils/inflector.js |   21 -
 .../visualsearch/utils/jquery_extensions.js     |  197 -
 .../custom/visualsearch/utils/search_parser.js  |   87 -
 .../custom/visualsearch/views/search_box.js     |  458 -
 .../custom/visualsearch/views/search_facet.js   |  442 -
 .../custom/visualsearch/views/search_input.js   |  418 -
 .../libs/custom/visualsearch/visualsearch.js    | 1984 ----
 .../src/main/webapp/login.html                  |  154 -
 .../src/main/webapp/robots.txt                  |    3 -
 .../src/main/webapp/scripts/App.js              |   86 -
 .../src/main/webapp/scripts/Init.js             |  196 -
 .../src/main/webapp/scripts/Main.js             |   35 -
 .../src/main/webapp/scripts/RegionManager.js    |   83 -
 .../collection_bases/VAuditLogListBase.js       |   73 -
 .../collection_bases/VEventHistoryListBase.js   |   87 -
 .../scripts/collection_bases/VGroupListBase.js  |   82 -
 .../collection_bases/VLogLevelListBase.js       |   96 -
 .../scripts/collection_bases/VLogListBase.js    |  127 -
 .../collection_bases/VNameValueListBase.js      |   57 -
 .../scripts/collection_bases/VNodeListBase.js   |   74 -
 .../scripts/collections/BaseCollection.js       |  172 -
 .../scripts/collections/SchemaFieldList.js      |   29 -
 .../webapp/scripts/collections/VAuditLogList.js |   36 -
 .../scripts/collections/VEventHistoryList.js    |   33 -
 .../webapp/scripts/collections/VGroupList.js    |   36 -
 .../webapp/scripts/collections/VLogLevelList.js |   36 -
 .../main/webapp/scripts/collections/VLogList.js |   36 -
 .../scripts/collections/VNameValueList.js       |   36 -
 .../webapp/scripts/collections/VNodeList.js     |   36 -
 .../src/main/webapp/scripts/communicator.js     |   61 -
 .../webapp/scripts/controllers/Controller.js    |  240 -
 .../webapp/scripts/model_bases/VAuditLogBase.js |   61 -
 .../scripts/model_bases/VCommonModelBase.js     |   51 -
 .../scripts/model_bases/VEventHistoryBase.js    |   51 -
 .../scripts/model_bases/VGraphInfoBase.js       |   62 -
 .../webapp/scripts/model_bases/VGroupBase.js    |   51 -
 .../main/webapp/scripts/model_bases/VLogBase.js |   51 -
 .../webapp/scripts/model_bases/VLogLevelBase.js |   51 -
 .../scripts/model_bases/VNameValueBase.js       |   51 -
 .../webapp/scripts/model_bases/VNodeBase.js     |   51 -
 .../scripts/model_bases/VUserFilterBase.js      |   51 -
 .../src/main/webapp/scripts/models/BaseModel.js |  110 -
 .../src/main/webapp/scripts/models/VAppState.js |   44 -
 .../src/main/webapp/scripts/models/VAuditLog.js |   47 -
 .../main/webapp/scripts/models/VCommonModel.js  |   48 -
 .../main/webapp/scripts/models/VEventHistory.js |   48 -
 .../main/webapp/scripts/models/VGraphInfo.js    |   53 -
 .../src/main/webapp/scripts/models/VGroup.js    |   53 -
 .../src/main/webapp/scripts/models/VLog.js      |   66 -
 .../src/main/webapp/scripts/models/VLogLevel.js |   47 -
 .../main/webapp/scripts/models/VNameValue.js    |   47 -
 .../src/main/webapp/scripts/models/VNode.js     |   48 -
 .../main/webapp/scripts/models/VUserFilter.js   |   51 -
 .../main/webapp/scripts/modules/Overrides.js    |  234 -
 .../src/main/webapp/scripts/modules/Vent.js     |   26 -
 .../scripts/modules/globalize/message/en.js     |   79 -
 .../main/webapp/scripts/prelogin/Prelogin.js    |  130 -
 .../src/main/webapp/scripts/utils/Enums.js      |   32 -
 .../src/main/webapp/scripts/utils/Globals.js    |   91 -
 .../main/webapp/scripts/utils/LangSupport.js    |  151 -
 .../src/main/webapp/scripts/utils/Tour.js       |  461 -
 .../src/main/webapp/scripts/utils/Utils.js      | 1241 ---
 .../src/main/webapp/scripts/utils/ViewUtils.js  |  266 -
 .../webapp/scripts/utils/XATemplateHelpers.js   |  170 -
 .../scripts/views/audit/AuditAggregatedView.js  |  416 -
 .../scripts/views/audit/AuditTabLayoutView.js   |  429 -
 .../scripts/views/common/AdvanceSearchLayout.js |  146 -
 .../webapp/scripts/views/common/BreadCrumbs.js  |   83 -
 .../scripts/views/common/CustomBackgrid.js      |  284 -
 .../scripts/views/common/DatePickerLayout.js    |  228 -
 .../webapp/scripts/views/common/ErrorView.js    |  100 -
 .../scripts/views/common/EventHistoryLayout.js  |  486 -
 .../main/webapp/scripts/views/common/Footer.js  |   80 -
 .../main/webapp/scripts/views/common/Header.js  |  481 -
 .../webapp/scripts/views/common/JBDialog.js     |  211 -
 .../scripts/views/common/LogSnapShotLayout.js   |  141 -
 .../webapp/scripts/views/common/ProfileBar.js   |  105 -
 .../main/webapp/scripts/views/common/Spinner.js |   85 -
 .../webapp/scripts/views/common/TableLayout.js  |  405 -
 .../webapp/scripts/views/common/TimerView.js    |  126 -
 .../main/webapp/scripts/views/common/TopNav.js  |   93 -
 .../dashboard/BubbleGraphTableLayoutView.js     |  716 --
 .../views/dashboard/ComponentListView.js        |  319 -
 .../scripts/views/dashboard/ComponentsView.js   |   98 -
 .../scripts/views/dashboard/DashboardView.js    |  184 -
 .../views/dashboard/GridTableLayoutView.js      |  219 -
 .../scripts/views/dashboard/HostListView.js     |  356 -
 .../webapp/scripts/views/dashboard/HostsView.js |   98 -
 .../scripts/views/dashboard/LogDetailView.js    |  249 -
 .../scripts/views/dashboard/LogLevelBoxView.js  |  155 -
 .../scripts/views/dashboard/LogLevelView.js     |  118 -
 .../scripts/views/dashboard/MainLayoutView.js   |  670 --
 .../views/dialog/ApplySearchFilterView.js       |  214 -
 .../scripts/views/dialog/DetailLogFileView.js   |  167 -
 .../dialog/GlobalExclusionCompositeView.js      |  141 -
 .../views/dialog/GlobalExclusionItemView.js     |   84 -
 .../views/dialog/GridGraphSettingView.js        |  476 -
 .../views/dialog/SaveSearchFilterView.js        |  120 -
 .../scripts/views/dialog/TimeZoneChangeView.js  |  101 -
 .../views/filter/CreateLogfeederFilterView.js   |  383 -
 .../scripts/views/graphs/GraphLayoutView.js     |  559 --
 .../scripts/views/graphs/GridGraphLayoutView.js |  594 --
 .../scripts/views/tabs/ComparisonLayoutView.js  |   93 -
 .../webapp/scripts/views/tabs/ComparisonView.js |  242 -
 .../views/tabs/EventHistoryLayoutView.js        |  506 -
 .../scripts/views/tabs/ExportLogFileView.js     |   50 -
 .../views/tabs/HierarchyTabLayoutView.js        |  429 -
 .../scripts/views/tabs/HostInfoTabLayoutView.js |  178 -
 .../webapp/scripts/views/tabs/LogFileView.js    |  864 --
 .../main/webapp/scripts/views/tabs/TreeView.js  |  365 -
 .../scripts/views/tabs/VisualSearchView.js      |  202 -
 .../troubleshoot/TroubleShootLayoutView.js      |  553 --
 .../src/main/webapp/static/schema_fields.json   |   90 -
 .../src/main/webapp/styles/animate.css          | 3272 -------
 .../src/main/webapp/styles/app-font.css         |   64 -
 .../src/main/webapp/styles/bootstrap.css        | 6422 -------------
 .../src/main/webapp/styles/bootstrap.min.css    | 6422 -------------
 .../main/webapp/styles/custom/visualsearch.css  |  369 -
 .../src/main/webapp/styles/style.css            | 2964 ------
 .../src/main/webapp/styles/style_v2.css         | 2596 ------
 .../audit/AuditAggregatedView_tmpl.html         |   54 -
 .../audit/AuditTabLayoutView_tmpl.html          |  100 -
 .../common/AdvanceSearchLayout_tmpl.html        |   30 -
 .../templates/common/DatePickerLayout_tmpl.html |   29 -
 .../webapp/templates/common/ErrorView_tmpl.html |   28 -
 .../common/EventHistoryItemView_tmpl.html       |   32 -
 .../common/EventHistoryLayout_tmpl.html         |   44 -
 .../webapp/templates/common/Footer_tmpl.html    |   42 -
 .../webapp/templates/common/Header_tmpl.html    |   98 -
 .../common/LogSnapShotLayout_tmpl.html          |   23 -
 .../templates/common/TableLayout_tmpl.html      |   37 -
 .../webapp/templates/common/TimerView_tmpl.html |   25 -
 .../webapp/templates/common/TopNav_tmpl.html    |   52 -
 .../webapp/templates/common/breadcrumbs.html    |   46 -
 .../webapp/templates/common/formInputItem.html  |   54 -
 .../templates/common/formInputItemList.html     |   42 -
 .../webapp/templates/common/loading_tmpl.html   |   45 -
 .../BubbleGraphTableLayoutView_tmpl.html        |   79 -
 .../dashboard/ComponentListView_tmpl.html       |   35 -
 .../dashboard/ComponentsView_tmpl.html          |   57 -
 .../templates/dashboard/DashboardView_tmpl.html |  122 -
 .../dashboard/GridTableLayoutView_tmpl.html     |   28 -
 .../templates/dashboard/HostListView_tmpl.html  |   48 -
 .../templates/dashboard/HostsView_tmpl.html     |   56 -
 .../templates/dashboard/LogDetailView_tmpl.html |   75 -
 .../dashboard/LogLevelBoxView_tmpl.html         |   49 -
 .../templates/dashboard/LogLevelView_tmpl.html  |  110 -
 .../dashboard/MainLayoutView_tmpl.html          |  111 -
 .../dialog/ApplySearchFilterView_tmpl.html      |   30 -
 .../dialog/DetailLogFileView_tmpl.html          |   22 -
 .../GlobalExclusionCompositeView_tmpl.html      |   32 -
 .../dialog/GlobalExclusionItemView_tmpl.html    |   26 -
 .../dialog/GridGraphSettingView_tmpl.html       |  284 -
 .../dialog/SaveSearchFilterView_tmpl.html       |   70 -
 .../dialog/TimeZoneChangeView_tmpl.html         |  475 -
 .../filter/CreateLogfeederFilter_tmpl.html      |   53 -
 .../templates/graphs/GraphLayoutView_tmpl.html  |   50 -
 .../graphs/GridGraphLayoutView_tmpl.html        |   28 -
 .../src/main/webapp/templates/graphs/backup.js  |  586 --
 .../main/webapp/templates/helpers/Helpers.js    |  520 --
 .../tabs/ComparisonLayoutView_tmpl.html         |   20 -
 .../templates/tabs/ComparisonView_tmpl.html     |   56 -
 .../tabs/EventHistoryLayoutView_tmpl.html       |   45 -
 .../templates/tabs/ExportLogFileView_tmpl.html  |   46 -
 .../tabs/HierarchyTabLayoutView_tmpl.html       |  124 -
 .../tabs/HostInfoTabLayoutView_tmpl.html        |   46 -
 .../webapp/templates/tabs/LogFileView_tmpl.html |  122 -
 .../webapp/templates/tabs/TreeView_tmpl.html    |   54 -
 .../templates/tabs/VisualSearchView_tmpl.html   |   20 -
 .../TroubleShootLayoutView_tmpl.html            |  150 -
 .../main/webapp/themejs/1.3.0/bootstrap.min.js  |   19 -
 .../ambari-logsearch-web/src/polyfills.ts       |   86 +
 .../ambari-logsearch-web/src/styles.less        |   17 +
 .../ambari-logsearch-web/src/test.ts            |   50 +
 .../ambari-logsearch-web/src/tsconfig.app.json  |   13 +
 .../ambari-logsearch-web/src/tsconfig.spec.json |   20 +
 .../ambari-logsearch-web/src/typings.d.ts       |   23 +
 .../src/vendor/css/bootstrap-logsearch.min.css  |   18 +
 .../vendor/css/fonts/Roboto-Regular-webfont.eot |  Bin 0 -> 79547 bytes
 .../vendor/css/fonts/Roboto-Regular-webfont.svg | 7606 +++++++++++++++
 .../vendor/css/fonts/Roboto-Regular-webfont.ttf |  Bin 0 -> 234464 bytes
 .../css/fonts/Roboto-Regular-webfont.woff       |  Bin 0 -> 105700 bytes
 .../src/vendor/js/WorldMapGenerator.min.js      |   11 +
 .../src/vendor/js/bootstrap-logsearch.min.js    |   19 +
 .../ambari-logsearch-web/tsconfig.json          |   31 +
 .../ambari-logsearch-web/tslint.json            |  116 +
 ambari-logsearch/ambari-logsearch-web/yarn.lock | 5766 ++++++++++++
 ambari-logsearch/docker/bin/start.sh            |    1 -
 ambari-logsearch/docker/logsearch-docker.sh     |    4 +-
 .../LOGSEARCH/0.5.0/package/scripts/params.py   |    2 +-
 648 files changed, 23709 insertions(+), 105810 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/build.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/build.xml b/ambari-logsearch/ambari-logsearch-server/build.xml
index aadacd7..5c50485 100644
--- a/ambari-logsearch/ambari-logsearch-server/build.xml
+++ b/ambari-logsearch/ambari-logsearch-server/build.xml
@@ -32,6 +32,9 @@
     <copy todir="target/package/libs" includeEmptyDirs="no">
       <fileset dir="target/libs"/>
     </copy>
+    <copy todir="target/classes/static" includeEmptyDirs="no">
+      <fileset dir="target/dist"/>
+    </copy>
     <copy todir="target/package/classes" includeEmptyDirs="no">
       <fileset dir="target/classes"/>
     </copy>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/pom.xml b/ambari-logsearch/ambari-logsearch-server/pom.xml
index e60cc14..e90c58d 100755
--- a/ambari-logsearch/ambari-logsearch-server/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-server/pom.xml
@@ -77,6 +77,9 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <version>${spring-boot.version}</version>
+            <configuration>
+              <classifier>exec</classifier>
+            </configuration>
             <executions>
               <execution>
                 <goals>
@@ -102,8 +105,8 @@
                       <groupId>org.apache.ambari</groupId>
                       <artifactId>ambari-logsearch-web</artifactId>
                       <version>${project.version}</version>
-                      <outputDirectory>${project.build.outputDirectory}/</outputDirectory>
-                      <includes>static/**</includes>
+                      <outputDirectory>${project.build.directory}/</outputDirectory>
+                      <includes>dist/**</includes>
                     </artifactItem>
                   </artifactItems>
                 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
new file mode 100644
index 0000000..80fbf6b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
@@ -0,0 +1,193 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.logsearch.auth.filter;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.ExpiredJwtException;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.MalformedJwtException;
+import io.jsonwebtoken.SignatureException;
+import org.apache.ambari.logsearch.auth.model.JWTAuthenticationToken;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.security.interfaces.RSAPublicKey;
+import java.util.Collection;
+import java.util.List;
+
+public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessingFilter {
+
+  private static final Logger LOG = LoggerFactory.getLogger(AbstractJWTFilter.class);
+
+  private static final String PEM_HEADER = "-----BEGIN CERTIFICATE-----\n";
+  private static final String PEM_FOOTER = "\n-----END CERTIFICATE-----";
+
+  protected AbstractJWTFilter(RequestMatcher requestMatcher) {
+    super(requestMatcher);
+  }
+
+  @Override
+  public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
+    if (StringUtils.isEmpty(getProvidedUrl())) {
+      throw new BadCredentialsException("Authentication provider URL must not be null or empty.");
+    }
+    if (StringUtils.isEmpty(getPublicKey())) {
+      throw new BadCredentialsException("Public key for signature validation must be provisioned.");
+    }
+
+    try {
+      Claims claims = Jwts
+        .parser()
+        .setSigningKey(parseRSAPublicKey(getPublicKey()))
+        .parseClaimsJws(getJWTFromCookie(request))
+        .getBody();
+
+      String userName  = claims.getSubject();
+      LOG.info("USERNAME: " + userName);
+      LOG.info("URL = " + request.getRequestURL());
+      if (StringUtils.isNotEmpty(claims.getAudience()) && !getAudiences().contains(claims.getAudience())) {
+        throw new IllegalArgumentException(String.format("Audience validation failed. (Not found: %s)", claims.getAudience()));
+      }
+      Authentication authentication = new JWTAuthenticationToken(userName, getPublicKey(), getAuthorities());
+      authentication.setAuthenticated(true);
+      SecurityContextHolder.getContext().setAuthentication(authentication);
+      return authentication;
+    } catch (ExpiredJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
+      LOG.info("URL = " + request.getRequestURL());
+      LOG.warn("Error during JWT authentication: ", e.getMessage());
+      throw new BadCredentialsException(e.getMessage(), e);
+    }
+  }
+
+  @Override
+  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
+    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+    if (!isAuthJwtEnabled() || isAuthenticated(authentication)) {
+      chain.doFilter(req, res);
+      return;
+    }
+    super.doFilter(req, res, chain);
+  }
+
+  @Override
+  protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
+    super.successfulAuthentication(request, response, chain, authResult);
+    response.sendRedirect(request.getRequestURL().toString() + getOriginalQueryString(request));
+  }
+
+  @Override
+  protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
+    super.unsuccessfulAuthentication(request, response, failed);
+    String loginUrl = constructLoginURL(request);
+    response.sendRedirect(loginUrl);
+  }
+
+  private String getJWTFromCookie(HttpServletRequest req) {
+    String serializedJWT = null;
+    Cookie[] cookies = req.getCookies();
+    if (cookies != null) {
+      for (Cookie cookie : cookies) {
+        if (getCookieName().equals(cookie.getName())) {
+          LOG.info(getCookieName() + " cookie has been found and is being processed");
+          serializedJWT = cookie.getValue();
+          break;
+        }
+      }
+    }
+    return serializedJWT;
+  }
+
+  private RSAPublicKey parseRSAPublicKey(String pem) throws ServletException {
+    String fullPem = PEM_HEADER + pem + PEM_FOOTER;
+    try {
+      CertificateFactory fact = CertificateFactory.getInstance("X.509");
+      ByteArrayInputStream is = new ByteArrayInputStream(fullPem.getBytes("UTF8"));
+
+      X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
+      return (RSAPublicKey) cer.getPublicKey();
+    } catch (CertificateException ce) {
+      String message;
+      if (pem.startsWith(PEM_HEADER)) {
+        message = "CertificateException - be sure not to include PEM header "
+          + "and footer in the PEM configuration element.";
+      } else {
+        message = "CertificateException - PEM may be corrupt";
+      }
+      throw new ServletException(message, ce);
+    } catch (UnsupportedEncodingException uee) {
+      throw new ServletException(uee);
+    }
+  }
+
+  private String constructLoginURL(HttpServletRequest request) {
+    String delimiter = "?";
+    if (getProvidedUrl().contains("?")) {
+      delimiter = "&";
+    }
+    return getProvidedUrl() + delimiter
+      + getOriginalUrlQueryParam() + "="
+      + request.getRequestURL().toString() + getOriginalQueryString(request);
+  }
+
+  private String getOriginalQueryString(HttpServletRequest request) {
+    String originalQueryString = request.getQueryString();
+    return (originalQueryString == null) ? "" : "?" + originalQueryString;
+  }
+
+  private boolean isAuthenticated(Authentication authentication) {
+    return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();
+  }
+
+  protected abstract String getPublicKey();
+
+  protected abstract String getProvidedUrl();
+
+  protected abstract boolean isAuthJwtEnabled();
+
+  protected abstract String getCookieName();
+
+  protected abstract String getOriginalUrlQueryParam();
+
+  protected abstract List<String> getAudiences();
+
+  protected abstract Collection<? extends GrantedAuthority> getAuthorities();
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/model/JWTAuthenticationToken.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/model/JWTAuthenticationToken.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/model/JWTAuthenticationToken.java
new file mode 100644
index 0000000..5fb9f05
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/model/JWTAuthenticationToken.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.logsearch.auth.model;
+
+import org.springframework.security.authentication.AbstractAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+
+import java.util.Collection;
+
+public class JWTAuthenticationToken extends AbstractAuthenticationToken {
+
+  private String credential;
+
+  private String principal;
+
+  public JWTAuthenticationToken(String principal, String credential, Collection<? extends GrantedAuthority> authorities) {
+    super(authorities);
+    this.principal = principal;
+    this.credential = credential;
+  }
+
+  @Override
+  public Object getCredentials() {
+    return credential;
+  }
+
+  @Override
+  public Object getPrincipal() {
+    return principal;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
index 038ba5c..5ba0ac0 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
@@ -6,9 +6,9 @@
  * 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
@@ -102,9 +102,6 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
         .antMatchers("/**").authenticated()
       .and()
       .authenticationProvider(logsearchAuthenticationProvider())
-        .formLogin()
-        .loginPage("/login.html")
-      .and()
       .httpBasic()
         .authenticationEntryPoint(logsearchAuthenticationEntryPoint())
       .and()
@@ -118,7 +115,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
       .addFilterBefore(logsearchCorsFilter(), LogsearchSecurityContextFormationFilter.class)
       .addFilterBefore(logsearchJwtFilter(), LogsearchSecurityContextFormationFilter.class)
       .logout()
-        .logoutUrl("/logout.html")
+        .logoutUrl("/logout")
         .deleteCookies(LOGSEARCH_SESSION_ID)
         .logoutSuccessHandler(new LogsearchLogoutSuccessHandler());
   }
@@ -154,7 +151,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
   @Bean
   public LogsearchAuthenticationEntryPoint logsearchAuthenticationEntryPoint() {
-    LogsearchAuthenticationEntryPoint entryPoint = new LogsearchAuthenticationEntryPoint("/login.html");
+    LogsearchAuthenticationEntryPoint entryPoint = new LogsearchAuthenticationEntryPoint("/login");
     entryPoint.setForceHttps(false);
     return entryPoint;
   }
@@ -182,7 +179,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
   public LogsearchEventHistoryStateFilter logsearchEventHistoryFilter() {
     return new LogsearchEventHistoryStateFilter(eventHistoryRequestMatcher(), solrEventHistoryState, solrEventHistoryPropsConfig);
   }
-  
+
+  @Bean
   public LogSearchConfigStateFilter logSearchConfigStateFilter() {
     return new LogSearchConfigStateFilter(logsearchConfigRequestMatcher(), logSearchConfigState);
   }
@@ -193,15 +191,23 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
     matchers.add(new AntPathRequestMatcher("/docs/**"));
     matchers.add(new AntPathRequestMatcher("/swagger-ui/**"));
     matchers.add(new AntPathRequestMatcher("/swagger.html"));
-    matchers.add(new AntPathRequestMatcher("/login.html"));
-    matchers.add(new AntPathRequestMatcher("/logout.html"));
-    matchers.add(new AntPathRequestMatcher("/styles/**"));
-    matchers.add(new AntPathRequestMatcher("/fonts/**"));
-    matchers.add(new AntPathRequestMatcher("/scripts/**"));
-    matchers.add(new AntPathRequestMatcher("/libs/**"));
-    matchers.add(new AntPathRequestMatcher("/templates/**"));
-    matchers.add(new AntPathRequestMatcher("/images/**"));
+    matchers.add(new AntPathRequestMatcher("/"));
+    matchers.add(new AntPathRequestMatcher("/login"));
+    matchers.add(new AntPathRequestMatcher("/logout"));
+    matchers.add(new AntPathRequestMatcher("/resources/**"));
+    matchers.add(new AntPathRequestMatcher("/index.html"));
     matchers.add(new AntPathRequestMatcher("/favicon.ico"));
+    matchers.add(new AntPathRequestMatcher("/styles*"));
+    matchers.add(new AntPathRequestMatcher("/scripts*"));
+    matchers.add(new AntPathRequestMatcher("/assets/**"));
+    matchers.add(new AntPathRequestMatcher("/vendor*"));
+    matchers.add(new AntPathRequestMatcher("/main*"));
+    matchers.add(new AntPathRequestMatcher("/inline*"));
+    matchers.add(new AntPathRequestMatcher("/polyfills*"));
+    matchers.add(new AntPathRequestMatcher("/glyphicons*"));
+    matchers.add(new AntPathRequestMatcher("/fontawsome*"));
+    matchers.add(new AntPathRequestMatcher("/Roboto*"));
+    matchers.add(new AntPathRequestMatcher("/templates/**"));
     matchers.add(new AntPathRequestMatcher("/api/v1/info/**"));
     matchers.add(new AntPathRequestMatcher("/api/v1/public/**"));
     matchers.add(new AntPathRequestMatcher("/api/v1/swagger.json"));

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
index c20e383..2439828 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
@@ -36,6 +36,5 @@ public class LogsearchLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler
     public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
       throws IOException, ServletException {
       logger.debug("LogsearchLogoutSuccessHandler ::: onLogoutSuccess");
-      response.sendRedirect("/index.html");
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchJWTFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchJWTFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchJWTFilter.java
index 1bc7231..164f646 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchJWTFilter.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchJWTFilter.java
@@ -18,46 +18,16 @@
  */
 package org.apache.ambari.logsearch.web.filters;
 
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.ExpiredJwtException;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.MalformedJwtException;
-import io.jsonwebtoken.SignatureException;
+import org.apache.ambari.logsearch.auth.filter.AbstractJWTFilter;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.apache.ambari.logsearch.web.model.JWTAuthenticationToken;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.authentication.AnonymousAuthenticationToken;
-import org.springframework.security.authentication.BadCredentialsException;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
+import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
 import org.springframework.security.web.util.matcher.RequestMatcher;
 
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.security.interfaces.RSAPublicKey;
+import java.util.Collection;
+import java.util.List;
 
-public class LogsearchJWTFilter extends AbstractAuthenticationProcessingFilter {
-
-  private static final Logger LOG = LoggerFactory.getLogger(LogsearchJWTFilter.class);
-
-  private static final String PEM_HEADER = "-----BEGIN CERTIFICATE-----\n";
-  private static final String PEM_FOOTER = "\n-----END CERTIFICATE-----";
+public class LogsearchJWTFilter extends AbstractJWTFilter {
 
   private AuthPropsConfig authPropsConfig;
 
@@ -67,115 +37,39 @@ public class LogsearchJWTFilter extends AbstractAuthenticationProcessingFilter {
   }
 
   @Override
-  public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException {
-    if (StringUtils.isEmpty(authPropsConfig.getProvidedUrl())) {
-      throw new BadCredentialsException("Authentication provider URL must not be null or empty.");
-    }
-    if (StringUtils.isEmpty(authPropsConfig.getPublicKey())) {
-      throw new BadCredentialsException("Public key for signature validation must be provisioned.");
-    }
-
-    try {
-      Claims claims = Jwts
-        .parser()
-        .setSigningKey(parseRSAPublicKey(authPropsConfig.getPublicKey()))
-        .parseClaimsJws(getJWTFromCookie(request))
-        .getBody();
-
-      String userName  = claims.getSubject();
-      LOG.info("USERNAME: " + userName);
-      LOG.info("URL = " + request.getRequestURL());
-      if (StringUtils.isNotEmpty(claims.getAudience()) && !authPropsConfig.getAudiences().contains(claims.getAudience())) {
-        throw new IllegalArgumentException(String.format("Audience validation failed. (Not found: %s)", claims.getAudience()));
-      }
-      Authentication authentication = new JWTAuthenticationToken(userName, authPropsConfig.getPublicKey());
-      authentication.setAuthenticated(true);
-      SecurityContextHolder.getContext().setAuthentication(authentication);
-      return authentication;
-    } catch (ExpiredJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
-      LOG.info("URL = " + request.getRequestURL());
-      LOG.warn("Error during JWT authentication: ", e.getMessage());
-      throw new BadCredentialsException(e.getMessage(), e);
-    }
+  protected String getPublicKey() {
+    return authPropsConfig.getPublicKey();
   }
 
   @Override
-  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
-    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-    if (!authPropsConfig.isAuthJwtEnabled() || isAuthenticated(authentication)) {
-      chain.doFilter(req, res);
-      return;
-    }
-    super.doFilter(req, res, chain);
+  protected String getProvidedUrl() {
+    return authPropsConfig.getProvidedUrl();
   }
 
   @Override
-  protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException {
-    super.successfulAuthentication(request, response, chain, authResult);
-    response.sendRedirect(request.getRequestURL().toString() + getOriginalQueryString(request));
+  protected boolean isAuthJwtEnabled() {
+    return authPropsConfig.isAuthJwtEnabled();
   }
 
   @Override
-  protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException, ServletException {
-    super.unsuccessfulAuthentication(request, response, failed);
-    String loginUrl = constructLoginURL(request);
-    response.sendRedirect(loginUrl);
-  }
-
-  private String getJWTFromCookie(HttpServletRequest req) {
-    String serializedJWT = null;
-    Cookie[] cookies = req.getCookies();
-    if (cookies != null) {
-      for (Cookie cookie : cookies) {
-        if (authPropsConfig.getCookieName().equals(cookie.getName())) {
-          LOG.info(authPropsConfig.getCookieName() + " cookie has been found and is being processed");
-          serializedJWT = cookie.getValue();
-          break;
-        }
-      }
-    }
-    return serializedJWT;
+  protected String getCookieName() {
+    return authPropsConfig.getCookieName();
   }
 
-  private RSAPublicKey parseRSAPublicKey(String pem) throws ServletException {
-    String fullPem = PEM_HEADER + pem + PEM_FOOTER;
-    try {
-      CertificateFactory fact = CertificateFactory.getInstance("X.509");
-      ByteArrayInputStream is = new ByteArrayInputStream(fullPem.getBytes("UTF8"));
-
-      X509Certificate cer = (X509Certificate) fact.generateCertificate(is);
-      return (RSAPublicKey) cer.getPublicKey();
-    } catch (CertificateException ce) {
-      String message;
-      if (pem.startsWith(PEM_HEADER)) {
-        message = "CertificateException - be sure not to include PEM header "
-          + "and footer in the PEM configuration element.";
-      } else {
-        message = "CertificateException - PEM may be corrupt";
-      }
-      throw new ServletException(message, ce);
-    } catch (UnsupportedEncodingException uee) {
-      throw new ServletException(uee);
-    }
+  @Override
+  protected String getOriginalUrlQueryParam() {
+    return authPropsConfig.getOriginalUrlQueryParam();
   }
 
-  private String constructLoginURL(HttpServletRequest request) {
-    String delimiter = "?";
-    if (authPropsConfig.getProvidedUrl().contains("?")) {
-      delimiter = "&";
-    }
-    return authPropsConfig.getProvidedUrl() + delimiter
-      + authPropsConfig.getOriginalUrlQueryParam() + "="
-      + request.getRequestURL().toString() + getOriginalQueryString(request);
+  @Override
+  protected List<String> getAudiences() {
+    return authPropsConfig.getAudiences();
   }
 
-  private String getOriginalQueryString(HttpServletRequest request) {
-    String originalQueryString = request.getQueryString();
-    return (originalQueryString == null) ? "" : "?" + originalQueryString;
+  @Override
+  protected Collection<? extends GrantedAuthority> getAuthorities() {
+    return null; // TODO
   }
 
-  private boolean isAuthenticated(Authentication authentication) {
-    return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();
-  }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/model/JWTAuthenticationToken.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/model/JWTAuthenticationToken.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/model/JWTAuthenticationToken.java
deleted file mode 100644
index dfac191..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/model/JWTAuthenticationToken.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-package org.apache.ambari.logsearch.web.model;
-
-import org.springframework.security.authentication.AbstractAuthenticationToken;
-import org.springframework.security.core.GrantedAuthority;
-
-import java.util.Collection;
-
-public class JWTAuthenticationToken extends AbstractAuthenticationToken {
-
-  private String credential;
-
-  private String principal;
-
-  public JWTAuthenticationToken(String principal, String credential) {
-    super((Collection<? extends GrantedAuthority>)null);
-    this.principal = principal;
-    this.credential = credential;
-  }
-
-  public JWTAuthenticationToken(String principal, String credential, Collection<? extends GrantedAuthority> authorities) {
-    super(authorities);
-    this.principal = principal;
-    this.credential = credential;
-  }
-
-  @Override
-  public Object getCredentials() {
-    return credential;
-  }
-
-  @Override
-  public Object getPrincipal() {
-    return principal;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/.angular-cli.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/.angular-cli.json b/ambari-logsearch/ambari-logsearch-web-new/.angular-cli.json
deleted file mode 100644
index cc74739..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/.angular-cli.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
-  "project": {
-    "name": "ambari-logsearch-web-new"
-  },
-  "apps": [
-    {
-      "root": "src",
-      "outDir": "dist",
-      "assets": [
-        "assets",
-        "favicon.ico"
-      ],
-      "index": "index.html",
-      "main": "main.ts",
-      "polyfills": "polyfills.ts",
-      "test": "test.ts",
-      "tsconfig": "tsconfig.app.json",
-      "testTsconfig": "tsconfig.spec.json",
-      "prefix": "app",
-      "styles": [
-        "styles.less",
-        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
-        "../node_modules/font-awesome/css/font-awesome.min.css",
-        "../src/vendor/css/bootstrap-logsearch.min.css"
-      ],
-      "scripts": [
-        "../node_modules/jquery/dist/jquery.min.js",
-        "../node_modules/bootstrap/dist/js/bootstrap.min.js",
-        "../src/vendor/js/bootstrap-logsearch.min.js"
-      ],
-      "environmentSource": "environments/environment.ts",
-      "environments": {
-        "dev": "environments/environment.ts",
-        "prod": "environments/environment.prod.ts"
-      }
-    }
-  ],
-  "e2e": {
-    "protractor": {
-      "config": "./protractor.conf.js"
-    }
-  },
-  "lint": [
-    {
-      "project": "src/tsconfig.app.json"
-    },
-    {
-      "project": "src/tsconfig.spec.json"
-    },
-    {
-      "project": "e2e/tsconfig.e2e.json"
-    }
-  ],
-  "test": {
-    "karma": {
-      "config": "./karma.conf.js"
-    }
-  },
-  "defaults": {
-    "styleExt": "less",
-    "component": {}
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/.editorconfig
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/.editorconfig b/ambari-logsearch/ambari-logsearch-web-new/.editorconfig
deleted file mode 100644
index 6e87a00..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/.editorconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-# Editor configuration, see http://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-max_line_length = off
-trim_trailing_whitespace = false

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/.gitignore
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/.gitignore b/ambari-logsearch/ambari-logsearch-web-new/.gitignore
deleted file mode 100644
index 54bfd20..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/.gitignore
+++ /dev/null
@@ -1,42 +0,0 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-
-# compiled output
-/dist
-/tmp
-/out-tsc
-
-# dependencies
-/node_modules
-
-# IDEs and editors
-/.idea
-.project
-.classpath
-.c9/
-*.launch
-.settings/
-*.sublime-workspace
-
-# IDE - VSCode
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-
-# misc
-/.sass-cache
-/connect.lock
-/coverage
-/libpeerconnection.log
-npm-debug.log
-testem.log
-/typings
-
-# e2e
-/e2e/*.js
-/e2e/*.map
-
-# System Files
-.DS_Store
-Thumbs.db

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/README.md
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/README.md b/ambari-logsearch/ambari-logsearch-web-new/README.md
deleted file mode 100644
index 2fb07fb..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# AmbariLogsearchWebNew
-
-This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 1.0.0.
-
-## Development server
-
-Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
-
-## Code scaffolding
-
-Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class/module`.
-
-## Build
-
-Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `-prod` flag for a production build.
-
-## Running unit tests
-
-Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
-
-## Running end-to-end tests
-
-Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
-Before running the tests make sure you are serving the app via `ng serve`.
-
-## Further help
-
-To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/e2e/app.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/e2e/app.e2e-spec.ts b/ambari-logsearch/ambari-logsearch-web-new/e2e/app.e2e-spec.ts
deleted file mode 100644
index ebfdcb9..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/e2e/app.e2e-spec.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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.
- */
-
-import {AmbariLogsearchWebNewPage} from './app.po';
-
-describe('ambari-logsearch-web-new App', () => {
-  let page: AmbariLogsearchWebNewPage;
-
-  beforeEach(() => {
-    page = new AmbariLogsearchWebNewPage();
-  });
-
-  it('should display title', () => {
-    page.navigateTo();
-    expect(page.getParagraphText()).toEqual('Ambari Log Search');
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/e2e/app.po.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/e2e/app.po.ts b/ambari-logsearch/ambari-logsearch-web-new/e2e/app.po.ts
deleted file mode 100644
index c446bfb..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/e2e/app.po.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-import { browser, element, by } from 'protractor';
-
-export class AmbariLogsearchWebNewPage {
-  navigateTo() {
-    return browser.get('/');
-  }
-
-  getParagraphText() {
-    return element(by.css('app-root h1')).getText();
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/e2e/tsconfig.e2e.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/e2e/tsconfig.e2e.json b/ambari-logsearch/ambari-logsearch-web-new/e2e/tsconfig.e2e.json
deleted file mode 100644
index ac7a373..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/e2e/tsconfig.e2e.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "extends": "../tsconfig.json",
-  "compilerOptions": {
-    "outDir": "../out-tsc/e2e",
-    "module": "commonjs",
-    "target": "es5",
-    "types":[
-      "jasmine",
-      "node"
-    ]
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/karma.conf.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/karma.conf.js b/ambari-logsearch/ambari-logsearch-web-new/karma.conf.js
deleted file mode 100644
index 0512808..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/karma.conf.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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.
- */
-
-// Karma configuration file, see link for more information
-// https://karma-runner.github.io/0.13/config/configuration-file.html
-
-module.exports = function (config) {
-  config.set({
-    basePath: '',
-    frameworks: ['jasmine', '@angular/cli'],
-    plugins: [
-      require('karma-jasmine'),
-      require('karma-chrome-launcher'),
-      require('karma-jasmine-html-reporter'),
-      require('karma-coverage-istanbul-reporter'),
-      require('@angular/cli/plugins/karma')
-    ],
-    client:{
-      clearContext: false // leave Jasmine Spec Runner output visible in browser
-    },
-    files: [
-      { pattern: './src/test.ts', watched: false }
-    ],
-    preprocessors: {
-      './src/test.ts': ['@angular/cli']
-    },
-    mime: {
-      'text/x-typescript': ['ts','tsx']
-    },
-    coverageIstanbulReporter: {
-      reports: [ 'html', 'lcovonly' ],
-      fixWebpackSourcePaths: true
-    },
-    angularCli: {
-      environment: 'dev'
-    },
-    reporters: config.angularCli && config.angularCli.codeCoverage
-              ? ['progress', 'coverage-istanbul']
-              : ['progress', 'kjhtml'],
-    port: 9876,
-    colors: true,
-    logLevel: config.LOG_INFO,
-    autoWatch: true,
-    browsers: ['Chrome'],
-    singleRun: false
-  });
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/package.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/package.json b/ambari-logsearch/ambari-logsearch-web-new/package.json
deleted file mode 100644
index 96733eb..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-  "name": "ambari-logsearch-web",
-  "version": "3.0.0",
-  "license": "Apache 2.0",
-  "scripts": {
-    "ng": "ng",
-    "start": "ng serve",
-    "build": "ng build",
-    "build-prod": "ng build -prod",
-    "test": "ng test",
-    "lint": "ng lint",
-    "e2e": "ng e2e"
-  },
-  "dependencies": {
-    "@angular/common": "^4.0.0",
-    "@angular/compiler": "^4.0.0",
-    "@angular/core": "^4.0.0",
-    "@angular/forms": "^4.0.0",
-    "@angular/http": "^4.0.0",
-    "@angular/platform-browser": "^4.0.0",
-    "@angular/platform-browser-dynamic": "^4.0.0",
-    "@angular/router": "^4.0.0",
-    "@ngrx/core": "^1.2.0",
-    "@ngrx/store": "^2.2.2",
-    "@ngx-translate/core": "^6.0.1",
-    "@ngx-translate/http-loader": "^0.0.3",
-    "angular-moment-timezone": "^0.2.1",
-    "angular2-moment": "^1.4.0",
-    "bootstrap": "^3.3.7",
-    "core-js": "^2.4.1",
-    "d3": "^4.10.0",
-    "font-awesome": "^4.7.0",
-    "jquery": "^1.12.4",
-    "moment": "^2.18.1",
-    "moment-timezone": "^0.5.13",
-    "ngx-bootstrap": "^1.6.6",
-    "rxjs": "^5.1.0",
-    "zone.js": "^0.8.4"
-  },
-  "devDependencies": {
-    "@angular/cli": "1.0.0",
-    "@angular/compiler-cli": "^4.0.0",
-    "@types/d3": "^4.10.0",
-    "@types/jasmine": "2.5.38",
-    "@types/jquery": "^1.10.33",
-    "@types/moment": "^2.13.0",
-    "@types/moment-timezone": "^0.2.34",
-    "@types/node": "~6.0.60",
-    "angular-in-memory-web-api": "^0.3.1",
-    "codelyzer": "~2.0.0",
-    "jasmine-core": "~2.5.2",
-    "jasmine-spec-reporter": "~3.2.0",
-    "karma": "~1.4.1",
-    "karma-chrome-launcher": "~2.0.0",
-    "karma-cli": "~1.0.1",
-    "karma-coverage-istanbul-reporter": "^0.2.0",
-    "karma-jasmine": "~1.1.0",
-    "karma-jasmine-html-reporter": "^0.2.2",
-    "protractor": "~5.1.0",
-    "ts-node": "~2.0.0",
-    "tslint": "~4.5.0",
-    "typescript": "~2.2.0"
-  }
-}


[04/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
deleted file mode 100644
index 8b90b33..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/troubleshoot/TroubleShootLayoutView.js
+++ /dev/null
@@ -1,553 +0,0 @@
-/**
- * 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',
-    'utils/Utils',
-    'utils/ViewUtils',
-    'utils/Globals',
-    'hbs!tmpl/troubleshoot/TroubleShootLayoutView_tmpl',
-    'collections/VLogList',
-    'collections/VNameValueList',
-    'nv'
-], function(Backbone, Utils, ViewUtils, Globals, TroubleShootLayoutView_Tmpl, VLogList, VNameValueList, nv) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends TroubleShootLayoutView */
-        {
-            _viewName: 'TroubleShootLayoutView',
-
-            template: TroubleShootLayoutView_Tmpl,
-            
-            className : "clearfix",
-
-            /** ui selector cache */
-            ui: {
-                serviceContainer : ".services",
-                componentsContainer : "[data-id='components']",
-                logLevelTable : "[data-id='logLevelTable']",
-                components : "[data-id='componentsSelection']",
-                dependencyCont : ".dependContainer",
-                loader : '[data-id="loader"]'
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['click .services button'] = 'onServicesChange';
-                events['click [data-id="searchServiceLogs"]'] = 'onSearchServiceLogsClick';
-                events['click [data-id="searchAuditLogs"]'] = 'onSearchAuditLogsClick';
-                events['click .depLinks'] = 'onDependentServiceClick';
-                events['click .expand-collapse'] = 'onExpandCollapseSections';
-                return events;
-            },
-            regions: {
-                RDateRangePicker : "[data-id='dateRange']",
-                RServiceGraph : "[data-id='serviceGraph']"
-            },
-
-            /**
-             * intialize a new TroubleShootLayoutView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params'));
-                this.vent = new Backbone.Wreqr.EventAggregator();
-                //this.servicesData = {services:{ranger:{label:"Ranger",components:[{name:"ranger_admin"}],dealsWithServices:[{name:"hdfs"},{name:"kms"}],dealsWithComponents:[{name:"security_admin"},{name:"portal"}],},ambari:{label:"Ambari",dealsWithServices:[{name:"ranger"},{name:"hive"}]},hdfs:{label:"Hdfs",components:[{name:"hdfs_namenode"},{name:"hdfs_datanode"}],dealsWithServices:[],dealsWithComponents:[],}}};
-                var todayRange = Utils.dateUtil.getTodayRange();
-                this.params = _.pick(ViewUtils.getDefaultParamsForHierarchy(),"dateRangeLabel","from","to","bundle_id","host_name","component_name","file_name");
-                this.initializeCollection();
-                this.bindEvents();
-            },
-            initializeCollection : function(){
-                this.serviceLogsCollection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 999999999,
-
-                    }
-                });
-                this.serviceLogsCollection.url = Globals.baseURL + "service/logs/count/anygraph";
-                this.serviceLogsCollection.modelAttrName = "graphData";
-                
-                this.topUsers = new VNameValueList([],{
-                    state: {
-                        firstPage: 0,
-                        pageSize: 9999
-                    }
-                });
-                this.topUsers.url = Globals.baseURL + "audit/logs/resources/10";
-                this.topUsers.modelAttrName = "graphData";
-                
-                this.serviceLoadCollection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 999999999,
-
-                    }
-                });
-                this.serviceLoadCollection.url = Globals.baseURL + "audit/logs/serviceload";
-                this.serviceLoadCollection.modelAttrName = "graphData";
-            },
-            bindEvents : function(){
-                this.listenTo(this.serviceLogsCollection,"reset",function(){
-                    this.renderBarGraph();
-                    this.renderLogLevelTable();
-                },this);
-                this.listenTo(this.serviceLogsCollection, 'request', function() {
-                    this.ui.loader.addClass("loading");
-                }, this);
-                this.listenTo(this.serviceLogsCollection, 'sync error', function() {
-                    this.ui.loader.removeClass("loading");
-                }, this);
-                this.listenTo(this.topUsers,"reset",function(){
-                    this.renderTopTenUsers();
-                },this);
-                this.listenTo(this.serviceLoadCollection,"reset",function(){
-                    this.renderServiceLoadGraph();
-                },this);
-                
-                //datepicker fires logtime filter when date selection is made
-                this.listenTo(this.vent,"logtime:filter",function(params){
-                    //this.fetchServiceLogsData(params);
-                    //this.vent.trigger("graph:data:update",params,this.graphPropModel.attributes);
-                    //this.renderGraph(params);
-                    this.fetchLevelCollection(params);
-                    this.fetchTopUsers(params);
-                },this);
-            },
-            onRender : function(){
-                var that = this;
-                this.fetchTopUsers(_.extend({field : "reqUser"},this.params));
-                this.serviceLogsCollection.getServicesInfo({
-                    success : function(resp){
-                        Globals.servicesInfo = resp;
-                        that.servicesData = $.extend(true,resp);
-                        that.renderServices(that.servicesData);
-                    }
-                });
-                this.renderDateRange();
-                //this.renderGraph(this.params);
-                this.fetchLevelCollection(this.params);
-            },
-            fetchTopUsers : function(params){
-                var that = this;
-                $.extend(this.topUsers.queryParams, params);
-                this.topUsers.fetch({
-                    reset:true,
-                    beforeSend : function(){
-                        that.$("[data-id='usersLoader']").removeClass("hidden");
-                    },
-                    complete : function(){
-                        that.$("[data-id='usersLoader']").addClass("hidden");
-                    }
-                });
-                
-                $.extend(this.serviceLoadCollection.queryParams, params);
-                this.serviceLoadCollection.fetch({
-                    reset:true,
-                    beforeSend : function(){
-                        that.$("[data-id='serviceLoadLoader']").removeClass("hidden");
-                    },
-                    complete : function(){
-                        that.$("[data-id='serviceLoadLoader']").addClass("hidden");
-                    }
-                });
-                
-            },
-            fetchServiceLogsData : function(params){
-                $.extend(this.serviceLogsCollection.queryParams,params);
-                this.serviceLogsCollection.fetch({reset:true});
-            },
-            onServicesChange : function(e){
-                var that=this,selectedComponents=[],$el = $(e.currentTarget);
-              if ($el.text() == "All") {
-                $el.siblings().removeClass("active");
-              } else {
-                $el.toggleClass("active");
-              }
-                this.ui.dependencyCont.empty();
-                this.ui.componentsContainer.empty();
-                _.each(this.ui.serviceContainer.find(".active"),function(el){
-                    var $el = $(el);
-                    if($el.data("name")){
-                        var service = that.servicesData.service[$el.data("name")];
-                        if(service){
-                            if(_.isArray(service.components)){
-//                                _.each(service.components,function(obj,key){
-//                                    that.ui.componentsContainer.append("<option selected>"+obj.name+"</option>");
-//                                });
-                                Array.prototype.push.apply(selectedComponents,_.pluck(service.components,"name"));
-                            }
-                        }
-                    }
-                });
-                if($el.hasClass("active")){
-                    var service = $el.data("name"),optionalComponents=[];
-                    if(service){
-                        _.each(that.servicesData.service[service].dependencies, function(d){
-                            if(! d.required){
-                                for(var z=0; z<d.components.length; z++){
-                                    selectedComponents.push(d.components[z]);
-                                }
-                            }else{
-                                optionalComponents.push({label:that.servicesData.service[d.service].label,value : d.service});
-                            }
-                        });
-                    }
-                    if(optionalComponents.length){
-                        for(var i=0; i<optionalComponents.length; i++){
-                            this.ui.dependencyCont.append('<button data-service="'+optionalComponents[i].value+'" class="btn depLinks">'+optionalComponents[i].label+'</button>');
-                        }
-                        if(this.$(".dependencies").is(":hidden")){
-                            this.$(".dependencies").slideDown();
-                        }
-                    }else{
-                        this.$(".dependencies").slideUp();
-                    }
-                }
-                this.ui.components.select2("val",selectedComponents);
-                var params = this.getParams();
-                //this.renderGraph(params);
-                //this.fetchServiceLogsData(params);
-                //this.fetchTopUsers(params);
-                this.fetchLevelCollection(params);
-            },
-            renderServices : function(data){
-                var that = this;
-                //that.ui.serviceContainer.append('<label class="btn btn-primary"> <input data-name="All" type="checkbox" name="services" id="option1">All</label>');
-                that.ui.serviceContainer.append('<button class="btn btn-trbl" href="javascript:void(0);">All</button>');
-                _.each(data.service,function(obj,key){
-                    /*var html = '<label class="btn btn-primary"> <input data-name="'+key+'" type="checkbox" name="services" '+
-                    ' id="option1" />'+obj.label+'</label>';*/
-                    var html = '<button class="btn btn-trbl" data-name="'+key+'" href="javascript:void(0);">'+obj.label+'</button>';
-                    that.ui.serviceContainer.append(html);
-                });
-                var compos = _.pluck(data.service,"components");
-                var mainArr = [];
-                _.each(compos,function(v){
-                    for(var z=0; z<v.length; z++){
-                        if(_.isEmpty(_.findWhere(mainArr,{name:v[z].name}))){
-                            mainArr.push({name:v[z].name, id:v[z].name});
-                        }
-                    }
-                });
-                this.ui.components.select2({
-                    placeholder: 'Components',
-                    tags:true,
-                    allowClear : true,
-                    width: '100%',
-                    data: { results: mainArr, text: "name"},
-                    formatSelection: function(item){
-                        return item["name"];
-                    },
-                    formatResult: function(item){
-                        return item["name"];
-                    }
-                }).on("change",function(e){
-                    var params = that.getParams();
-                    //that.renderGraph(params);
-                    //that.fetchServiceLogsData(params);
-                    //that.fetchTopUsers(params);
-                    that.fetchLevelCollection(params);
-                });
-            },
-            renderDateRange : function(){
-                var that=this;
-                require(['views/common/DatePickerLayout'],function(DatePickerLayout){
-                    that.RDateRangePicker.show(new DatePickerLayout({
-                        vent : that.vent,
-                        globalVent:that.globalVent,
-                        params : that.params,
-                        rangeLabel: true,
-                        hideFireButton : false,
-                        buttonLabel : "Apply",
-                        parentEl: that.$el.find(".row").first(),
-                        datePickerPosition : "left"
-                    }));
-                });
-            },
-            onSearchServiceLogsClick : function(e){
-                this.globalVent.trigger("reinitialize:serviceLogs",_.extend({
-                    mustNot: null,
-                    mustBe: null,
-                    iMessage: null,
-                    eMessage: null,
-                    query: null,
-                    includeQuery: null,
-                    excludeQuery: null
-                },this.getParams()));
-                this.globalVent.trigger("show:tab","hierarchy");
-            },
-            onSearchAuditLogsClick : function(){
-                this.globalVent.trigger("reinitialize:auditLogs",this.getParams());
-                this.globalVent.trigger("show:tab","audit");
-            },
-            getParams : function(){
-                var all = this.$("button[data-name='all']").hasClass("active"),that = this,params={},dates={};;
-                this.vent.trigger("date:getValues",dates);
-                if(_.isArray(dates.dates)){
-                    params.from = dates.dates[0].toJSON();
-                    params.to = dates.dates[1].toJSON();
-                    params.dateRangeLabel = dates.dateRangeLabel;
-                    params.unit = dates.unit;
-                }
-                //components
-                if(!all){
-//                    _.each(this.ui.serviceContainer.find(".active"),function(el){
-//                        var serviceName = $(el).data("name");
-//                        var service = that.servicesData.service[serviceName];
-//                        if(service && _.isArray(service.components)){
-//                            for(var z=0; z<service.components.length; z++){
-//                                (! _.contains(params.mustBe,service.components[z].name)) ? params.mustBe.push(service.components[z].name) : "";
-//                            }
-//                        }
-//                    });
-                    params.mustBe = this.ui.components.select2("val").toString();
-                }
-                return params;
-            },
-            fetchLevelCollection : function(params){
-                _.extend(this.serviceLogsCollection.queryParams, params,{"yAxis":"count",
-                    "xAxis":"level"});
-                this.serviceLogsCollection.fetch({
-                    reset: true
-                });
-            },
-            renderGraph : function(params){
-                //var that=this,model = new Backbone.Model({"id":"grid_histo0","title":"test","showX":"showX","xAxis":"access","xTimeFormat":"","xNormalFormat":"","showY":"showY","yAxis":"count","yAxisFormat":"","showLegend":"showLegend","stackOrGroup":"Normal","params":{"from":"2016-03-08T18:30:01.000Z","to":"2016-03-09T18:29:59.999Z","unit":"+1HOUR","yAxis":"count","xAxis":"access"},"myData":{"type":2,"dataId":"grid_histo0"},"col":1,"row":1,"size_x":3,"size_y":2});
-                var that=this,model = new Backbone.Model({
-                    params: _.extend({
-                        "yAxis":"count",
-                        "xAxis":"level",
-                        "stackBy":"level"},params),
-                    xAxis : "level",
-                    yaxis : "count",
-                    //stackOrGroup : "Stack",
-                    showX:"showX",
-                    //rotateXaxis:"-20",
-                    showLegend : false
-                });
-                require(['views/graphs/GridGraphLayoutView'],function(GridGraphLayoutView){
-                    that.RServiceGraph.show(new GridGraphLayoutView({
-                        collection : that.serviceLogsCollection,
-                        vent : that.vent,
-                        globalVent:that.globalVent,
-                        params : that.params,
-                        model : model,
-                        viewType :Globals.graphType.HISTOGRAM.value,
-                        showHeader : false
-                    }));
-                });
-            },
-            renderBarGraph : function(){
-                var data=[],that=this;
-                this.serviceLogsCollection.each(function(model){
-                    var d = {
-                            key : "Levels",
-                            values : []
-                    }
-                    for(var z=0; z<model.get("dataCount").length; z++){
-                        var name = model.get("dataCount")[z].name;
-                        d.values.push({
-                            label : (""+name).toUpperCase(),
-                            value : parseInt(model.get("dataCount")[z].value,10),
-                            color : (((""+name).toUpperCase() === 'ERROR') ? ("#E81D1D") :
-                                ( (""+name).toUpperCase() === 'INFO') ? ("#2577B5") :
-                                ( (""+name).toUpperCase() === 'WARN') ? ("#FF8916") :
-                                ( (""+name).toUpperCase() === 'FATAL') ? ("#830A0A") :
-                                ( (""+name).toUpperCase() === 'DEBUG') ? ("#65E8FF") :
-                                ( (""+name).toUpperCase() === 'TRACE') ? ("#888888") :
-                                ( (""+name).toUpperCase() === 'UNKNOWN') ? ("#bdbdbd") : "")
-                        });
-                        
-                    }
-                    data.push(d);
-                });
-                nv.addGraph(function() {
-                    var chart = nv.models.discreteBarChart()
-                        .x(function(d) {
-                            return d.label })
-                        .y(function(d) {
-                            return d.value })
-                        .staggerLabels(false)
-                        .width(700)
-                        .showValues(true)
-                    chart.tooltip.enabled(false);
-                    chart.yAxis
-                        .tickFormat(d3.format('d'));
-                    chart.valueFormat(d3.format('d'));
-
-                    chart.margin({
-                        right: 100,
-                        left: 120,
-                    });
-                    d3.select(that.$("[data-id='serviceGraph'] svg")[0])
-                        .datum(data)
-                        .transition().duration(500)
-                        .call(chart);
-                    return chart;
-                });
-            },
-            renderLogLevelTable : function(){
-                var that = this;
-                this.ui.logLevelTable.empty();
-                this.serviceLogsCollection.each(function(m){
-                    var dataCount = m.get("dataCount");
-                    for(var z=0; z<dataCount.length; z++){
-                        if(that.ui.logLevelTable.find("."+Utils.toUpperCase(dataCount[z].name)).length){
-                            var $el = that.ui.logLevelTable.find("[data-level="+dataCount[z].name+"]");
-                            var val = $el.text();
-                            $el.html("<b>"+(parseInt(val,10) + parseInt(dataCount[z].value,10))+"</b>");
-                        }else{
-                            that.ui.logLevelTable.append("<tr><td align='center' class='"+Utils.toUpperCase(dataCount[z].name)+"'>"+Utils.toUpperCase(dataCount[z].name)+"</td><td align='right' data-level='"+dataCount[z].name+"'><b>"+dataCount[z].value+"</b></td></tr>");
-                        }
-                    }
-                });
-            },
-            renderTopTenUsers : function(){
-                var obj = ViewUtils.formatAuditGraphData(this.topUsers);
-                this.renderHorizontalBar(this.$('[data-id="topUsersGraph"] svg')[0],obj.arr, {top: 5,right:10, bottom: 20,left:(obj.max * 7)+25});
-            },
-            renderServiceLoadGraph : function(){
-                var obj = ViewUtils.formatAuditGraphData(this.serviceLoadCollection);
-                this.renderHorizontalBar(this.$('[data-id="serviceLoadGraph"] svg')[0],obj.arr, {top: 5,right:10, bottom: 20,left:(obj.max * 7)+25});
-            },
-            renderHorizontalBar : function(el,data,margin,columnKey){
-                var that = this;
-                
-                nv.addGraph({generate : function() {
-                      var chart = nv.models.multiBarHorizontalChart()
-                          .x(function(d) { return d.label })
-                          .y(function(d) { return d.value })
-                          .margin(margin)
-                          .showValues(true)
-                          .valueFormat(d3.format('.0f'))
-                          .showControls(false);
-                      //setting height to minimun when data is less to avoid bar height to be big
-                      if(data.length > 0){
-                          var min = _.min(data,function(v){return v.values.length}).values.length;
-                          var max = _.max(data,function(v){return v.values.length}).values.length;
-                          var setMinHeight = false;
-                          if(max == min && min < 3){
-                              setMinHeight = true
-                          }else if(max < 3){
-                              setMinHeight = true
-                          }
-                          if(setMinHeight){
-                              chart.height("200");
-                          }
-                      }
-                      chart.tooltip.enabled();
-                      chart.yAxis
-                          .tickFormat(d3.format('d'));
-//                      chart.multibar.dispatch.on("elementClick", function(e) {
-//                          that.vent.trigger("toggle:facet",{viewName : "includeColumns",key :columnKey,value :e.data.label});
-//                      });
-                      d3.select(el)
-                      .datum(data)
-                        .transition().duration(500)
-                          .call(chart);
-                      return chart;
-                },
-                callback : function(graph){
-                    d3.select(el)
-                        .selectAll("rect")
-                        .style("cursor","pointer");
-                    that.$el.resize(function(){
-                        d3.select(el)
-//                            .attr('width', width)
-//                            .attr('height', height)
-                            .transition().duration(0)
-                            .call(graph);
-                    });
-                }
-                });
-            },
-            onDependentServiceClick : function(e){
-                var $el = $(e.currentTarget),that=this,service = $el.data("service"),serviceSelected = this.ui.serviceContainer.find(".active");
-                var getDependentServices = function(forServiceName,Service){
-                    var serviceObj = that.servicesData.service[forServiceName];
-                    if(serviceObj){
-                        return _.findWhere(serviceObj.dependencies,{service:Service});
-                    }
-                }
-                var prev = this.ui.dependencyCont.find(".active");
-                if(prev.length && serviceSelected.length){
-                    var $prev = prev.first();
-                    var found = getDependentServices(serviceSelected.data("name"),$prev.data("service"));
-                    if(found && found.components){
-                        for(var i=0; i<found.components.length; i++){
-                            this.removeComponentFromSelect2(found.components[i]);
-                        }
-                    }
-                }
-                
-                if ($el.text() == "All") {
-                  $el.siblings().removeClass("active");
-                } else {
-                  $el.toggleClass("active");
-                }
-                
-                if(serviceSelected.length){
-//                    var serviceObj = this.servicesData.service[serviceSelected.data("name")];
-//                    if(serviceObj){
-                        var found = getDependentServices(serviceSelected.data("name"),service);
-                        if(found && found.components){
-                            for(var i=0; i<found.components.length; i++){
-                                if($el.hasClass("active")){
-                                    this.addComponentToSelect2(found.components[i]);
-                                }else
-                                    this.removeComponentFromSelect2(found.components[i]);
-                            }
-                            
-                        }
-//                    }
-                }
-            },
-            addComponentToSelect2 : function(ele){
-                var arr = this.ui.components.select2("data");
-                arr.push({
-                    id : ele,
-                    name : ele
-                });
-                this.ui.components.select2("val",_.pluck(arr,"id"),true);
-            },
-            removeComponentFromSelect2 : function(id){
-                var arr = this.ui.components.select2("data");
-                for(var i=0; i<arr.length; i++){
-                    if(arr[i].id === id){
-                        delete arr[i];
-                    }
-                }
-                this.ui.components.select2("val",_.pluck(arr,"id"),true);
-            },
-            onExpandCollapseSections : function(){
-                var sideRight = this.$(".sideRight"),sideLeft = this.$(".sideLeft"),rotate = this.$(".rotateIcon")
-                if( sideRight.hasClass('sideRightclose')){
-                    sideLeft.removeClass('sideLeftOpen');
-                    sideRight.removeClass('sideRightclose');
-                    rotate.removeClass('toRight');
-                }else{
-                    sideLeft.addClass('sideLeftOpen');
-                    sideRight.addClass('sideRightclose');
-                    rotate.addClass('toRight');
-                }
-            }
-        });
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/static/schema_fields.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/static/schema_fields.json b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/static/schema_fields.json
deleted file mode 100644
index d145141..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/static/schema_fields.json
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "serviceLogMappings": {
-    "log_message": "Message",
-    "bundle_id": "Bundle Id",
-    "case_id": "Case Id",
-    "cluster": "Cluster",
-    "event_count": "Event Count",
-    "file": "File",
-    "host": "Host",
-    "id": "Id",
-    "ip": "Ip",
-    "level": "Level",
-    "line_number": "Line Number",
-    "logtype": "Log Type",
-    "logfile_line_number": "Logfile Line Number",
-    "logger_name": "Logger Name",
-    "logtime": "logtime",
-    "method": "Method",
-    "path": "Path",
-    "rowtype": "Row Type",
-    "thread_name": "Thread",
-    "type": "Type"
-  },
-  "serviceLogExcludes": ["tags", "text", "message", "seq_num"],
-  "auditLogMappings": {
-    "enforcer": "Access Enforcer",
-    "access": "Access Type",
-    "action": "Action",
-    "agent": "Agent",
-    "agentHost": "Agent Host",
-    "authType": "Auth Type",
-    "bundle_id": "Bundle Id",
-    "case_id": "Case Id",
-    "cliIP": "Client Ip",
-    "cliType": "Client Type",
-    "cluster": "Cluster",
-    "dst": "DST",
-    "event_count": "Event Count",
-    "evtTime": "Event Time",
-    "file": "File",
-    "host": "Host",
-    "id": "Id",
-    "ip": "IP",
-    "level": "Level",
-    "log_message": "Log Message",
-    "logType": "Log Type",
-    "logfile_line_number": "Logfile Line Number",
-    "logger_name": "Logger Name",
-    "logtime": "Log Time",
-    "path": "Path",
-    "perm": "Perm",
-    "policy": "Policy",
-    "proxyUsers": "Proxy Users",
-    "reason": "Reason",
-    "repo": "Repo",
-    "repoType": "Repo Type",
-    "req_caller_id": "Req Caller Id",
-    "reqContext": "Req Context",
-    "reqData": "Req Data",
-    "req_self_id": "Req Self Id",
-    "resType": "Res Type",
-    "resource": "Resource",
-    "result": "Result",
-    "sess": "Session",
-    "text": "Text",
-    "type": "Type",
-    "ugi": "UGI",
-    "reqUser": "User",
-    
-    "ws_base_url": "Base URL",
-    "ws_command": "Command",
-    "ws_component": "Component",
-    "ws_details": "Details",
-    "ws_display_name": "Display Name",
-    "ws_os": "OS",
-    "ws_repo_id": "Repo Id",
-    "ws_repo_version": "Repo Version",
-    "ws_repositories": "Repositories",
-    "ws_request_id": "Request Id",
-    "ws_result_status": "Result Status",
-    "ws_roles": "Roles",
-    "ws_stack_version": "Stack Version",
-    "ws_stack": "Stack",
-    "ws_status": "Status",
-    "ws_task_id": "Task Id",
-    "ws_version_note": "Version Note",
-    "ws_version_number": "Version Number"
-  },
-  "auditLogExcludes": ["tags","tags_str", "seq_num"]
-}
\ No newline at end of file


[37/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
new file mode 100644
index 0000000..3e2a6c7
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.ts
@@ -0,0 +1,105 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit, Input} from '@angular/core';
+import {FormGroup} from '@angular/forms';
+import {Observable} from 'rxjs/Observable';
+import 'rxjs/add/operator/map';
+import {FilteringService} from '@app/services/filtering.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
+import {AuditLog} from '@app/models/audit-log.model';
+import {ServiceLog} from '@app/models/service-log.model';
+import {LogField} from '@app/models/log-field.model';
+
+@Component({
+  selector: 'logs-container',
+  templateUrl: './logs-container.component.html',
+  styleUrls: ['./logs-container.component.less']
+})
+export class LogsContainerComponent implements OnInit {
+
+  constructor(private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private appState: AppStateService, private filtering: FilteringService, private logsContainer: LogsContainerService) {
+    serviceLogsHistogramStorage.getAll().subscribe(data => this.histogramData = this.logsContainer.getHistogramData(data));
+  }
+
+  ngOnInit() {
+    const fieldsModel = this.logsTypeMapObject.fieldsModel,
+      logsModel = this.logsTypeMapObject.logsModel;
+    this.appState.getParameter(this.logsTypeMapObject.isSetFlag).subscribe(value => this.isLogsSet = value);
+    this.availableColumns = fieldsModel.getAll().map(fields => {
+      return fields.filter(field => field.isAvailable).map(field => {
+        return {
+          value: field.name,
+          label: field.displayName || field.name,
+          isChecked: field.isDisplayed
+        };
+      });
+    });
+    fieldsModel.getAll().subscribe(columns => {
+      const availableFields = columns.filter(field => field.isAvailable),
+        availableNames = availableFields.map(field => field.name);
+      if (availableNames.length && !this.isLogsSet) {
+        this.logs = logsModel.getAll().map(logs => logs.map(log => {
+          let logObject = availableNames.reduce((obj, key) => Object.assign(obj, {
+            [key]: log[key]
+          }), {});
+          if (logObject.level) {
+            logObject.className = logObject.level.toLowerCase();
+          }
+          return logObject;
+        }));
+        this.appState.setParameter(this.logsTypeMapObject.isSetFlag, true);
+      }
+      this.displayedColumns = columns.filter(column => column.isAvailable && column.isDisplayed);
+    });
+    this.logsContainer.loadLogs(this.logsType);
+    this.filtersForm.valueChanges.subscribe(() => this.logsContainer.loadLogs(this.logsType));
+  }
+
+  @Input()
+  logsType: string;
+
+  private isLogsSet: boolean = false;
+
+  get logsTypeMapObject(): any {
+    return this.logsContainer.logsTypeMap[this.logsType];
+  }
+
+  get totalCount(): number {
+    return this.logsContainer.totalCount;
+  }
+
+  logs: Observable<AuditLog[] | ServiceLog[]>;
+
+  availableColumns: Observable<LogField[]>;
+
+  displayedColumns: any[] = [];
+
+  histogramData: any;
+
+  readonly histogramOptions = {
+    keysWithColors: this.logsContainer.colors
+  };
+
+  private get filtersForm(): FormGroup {
+    return this.filtering.filtersForm;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
new file mode 100644
index 0000000..888c524
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.html
@@ -0,0 +1,54 @@
+<!--
+  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.
+-->
+
+<form *ngIf="logs && logs.length" [formGroup]="filtersForm" class="pull-right">
+  <filter-dropdown [label]="filters.sorting.label" formControlName="sorting" [options]="filters.sorting.options"
+                   [defaultLabel]="filters.sorting.defaultLabel" [isRightAlign]="true"></filter-dropdown>
+</form>
+<div class="col-md-12 text-center" *ngIf="logs && logs.length">
+  <div class="logs-header">
+    <div class="col-md-1">{{'logs.status' | translate}}</div>
+    <div class="col-md-11">{{'logs.details' | translate}}</div>
+  </div>
+</div>
+<accordion-panel *ngFor="let log of logs; let i = index" [toggleId]="'details-' + i" class="col-md-12">
+  <ng-template>
+    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'hexagon ' + log.className"></div>
+    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'col-md-1 log-status ' + log.className">{{log.level}}</div>
+    <div *ngIf="isColumnDisplayed('type') || isColumnDisplayed('logtime')" class="col-md-3">
+      <div *ngIf="isColumnDisplayed('type')" class="log-type">{{log.type}}</div>
+      <time *ngIf="isColumnDisplayed('logtime')" class="log-time">
+        {{log.logtime | amTz: timeZone | amDateFormat: timeFormat}}
+      </time>
+    </div>
+    <div class="col-md-6 log-content-wrapper">
+      <div class="collapse log-actions" attr.id="details-{{i}}">
+        <span class="action-icon fa fa-search"></span>
+        <span class="action-icon fa fa-external-link"></span>
+        <span class="action-icon fa fa-bullseye"></span>
+      </div>
+      <div class="log-content-inner-wrapper">
+        <div class="log-content" *ngIf="isColumnDisplayed('log_message')">{{log.log_message}}</div>
+      </div>
+    </div>
+    <div *ngFor="let column of displayedColumns">
+      <div *ngIf="customStyledColumns.indexOf(column.name) === -1" [innerHTML]="log[column.name]" class="col-md-1"></div>
+    </div>
+  </ng-template>
+</accordion-panel>
+<pagination class="col-md-12" *ngIf="logs && logs.length" [totalCount]="totalCount" [filtersForm]="filtersForm"
+            [filterInstance]="filters.pageSize" [currentCount]="logs.length"></pagination>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
new file mode 100644
index 0000000..91d796f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.less
@@ -0,0 +1,138 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+.logs-header {
+  // TODO get rid of magic numbers, base on actual design
+  margin: 10px 0;
+  padding: 5px 0;
+  background-color: @list-header-background-color; // TODO implement actual color
+  overflow: hidden;
+  text-transform: uppercase;
+}
+
+/deep/ filter-dropdown {
+  justify-content: flex-end;
+}
+
+.hexagon {
+  // TODO get rid of magic numbers, base on actual design
+  left: -7.5px;
+
+  &.fatal {
+    .common-hexagon(15px, @fatal-color);
+  }
+
+  &.error {
+    .common-hexagon(15px, @error-color);
+  }
+
+  &.warn {
+    .common-hexagon(15px, @warning-color);
+  }
+
+  &.info {
+    .common-hexagon(15px, @info-color);
+  }
+
+  &.debug {
+    .common-hexagon(15px, @debug-color);
+  }
+
+  &.trace {
+    .common-hexagon(15px, @trace-color);
+  }
+
+  &.unknown {
+    .common-hexagon(15px, @unknown-color);
+  }
+}
+
+.log-status {
+  text-transform: uppercase;
+
+  &.fatal {
+    color: @fatal-color;
+  }
+
+  &.error {
+    color: @error-color;
+  }
+
+  &.warn {
+    color: @warning-color;
+  }
+
+  &.info {
+    color: @info-color;
+  }
+
+  &.debug {
+    color: @debug-color;
+  }
+
+  &.trace {
+    color: @trace-color;
+  }
+
+  &.unknown {
+    color: @unknown-color;
+  }
+}
+
+.log-type {
+  color: @link-color;
+}
+
+.log-time {
+  color: @grey-color;
+}
+
+.log-content-wrapper {
+  position: relative;
+
+  // TODO get rid of magic numbers, base on actual design
+  .log-content-inner-wrapper {
+    overflow: hidden;
+    max-height: @default-line-height * 2em;
+    padding-right: 65px;
+
+    .log-content {
+      white-space: pre-wrap;
+    }
+  }
+
+  .log-actions {
+    position: absolute;
+    right: 40px;
+    top: 0;
+    border: @input-border;
+
+    &.collapsing + .log-content-inner-wrapper, &.collapse.in + .log-content-inner-wrapper {
+      min-height: 6em;
+      max-height: none;
+      overflow-x: auto;
+    }
+
+    .action-icon {
+      .clickable-item;
+      display: block;
+      padding: 5px;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.spec.ts
new file mode 100644
index 0000000..02c3b23
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.spec.ts
@@ -0,0 +1,102 @@
+/**
+ * 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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {MomentModule} from 'angular2-moment';
+import {MomentTimezoneModule} from 'angular-moment-timezone';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+
+import {LogsListComponent} from './logs-list.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('LogsListComponent', () => {
+  let component: LogsListComponent;
+  let fixture: ComponentFixture<LogsListComponent>;
+  const httpClient = {
+    get: () => {
+      return {
+        subscribe: () => {
+        }
+      };
+    }
+  };
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [LogsListComponent],
+      imports: [
+        StoreModule.provideStore({
+          auditLogs,
+          serviceLogs,
+          appSettings,
+          clusters,
+          components,
+          hosts
+        }),
+        MomentModule,
+        MomentTimezoneModule,
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        AuditLogsService,
+        ServiceLogsService,
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        FilteringService,
+        UtilsService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(LogsListComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
new file mode 100644
index 0000000..6d73dcb
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-list/logs-list.component.ts
@@ -0,0 +1,62 @@
+/**
+ * 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.
+ */
+
+import {Component, Input} from '@angular/core';
+import {FormGroup} from '@angular/forms';
+import 'rxjs/add/operator/map';
+import {FilteringService} from '@app/services/filtering.service';
+
+@Component({
+  selector: 'logs-list',
+  templateUrl: './logs-list.component.html',
+  styleUrls: ['./logs-list.component.less']
+})
+export class LogsListComponent {
+
+  constructor(private filtering: FilteringService) {
+  }
+
+  @Input()
+  logs: any[] = [];
+
+  @Input()
+  totalCount: number = 0;
+
+  @Input()
+  displayedColumns: any[] = [];
+
+  readonly customStyledColumns = ['level', 'type', 'logtime', 'log_message'];
+
+  timeFormat: string = 'DD/MM/YYYY HH:mm:ss';
+
+  get timeZone(): string {
+    return this.filtering.timeZone;
+  }
+
+  get filters(): any {
+    return this.filtering.filters;
+  }
+  
+  get filtersForm(): FormGroup {
+    return this.filtering.filtersForm;
+  }
+
+  isColumnDisplayed(key: string): boolean {
+    return this.displayedColumns.some(column => column.name === key);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.html
new file mode 100644
index 0000000..69b3887
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.html
@@ -0,0 +1,24 @@
+<!--
+  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.
+-->
+
+<ng-template [ngTemplateOutlet]="template"></ng-template>
+<div *ngIf="isInitialLoading" class="text-center">
+  <span class="fa fa-spinner fa-spin"></span>
+</div>
+<login-form *ngIf="!isInitialLoading && !isAuthorized"></login-form>
+<filters-panel *ngIf="isAuthorized" class="row"></filters-panel>
+<logs-container *ngIf="isAuthorized" logsType="serviceLogs"></logs-container>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.less
new file mode 100644
index 0000000..9736628
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.less
@@ -0,0 +1,24 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  .full-size;
+  overflow-x: hidden;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.spec.ts
new file mode 100644
index 0000000..42fba68
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.spec.ts
@@ -0,0 +1,65 @@
+/**
+ * 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.
+ */
+
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {HttpModule} from '@angular/http';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+import {MainContainerComponent} from './main-container.component';
+
+describe('MainContainerComponent', () => {
+  let component: MainContainerComponent;
+  let fixture: ComponentFixture<MainContainerComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [MainContainerComponent],
+      imports: [
+        HttpModule,
+        StoreModule.provideStore({
+          appState,
+          auditLogsFields,
+          serviceLogsFields
+        })
+      ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+      providers: [
+        AppStateService,
+        AuditLogsFieldsService,
+        ServiceLogsFieldsService,
+        HttpClientService
+      ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(MainContainerComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
new file mode 100644
index 0000000..53d58cf
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/main-container/main-container.component.ts
@@ -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.
+ */
+
+import {Component, ContentChild, TemplateRef} from '@angular/core';
+import {HttpClientService} from '@app/services/http-client.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
+import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
+import {AuditLogField} from '@app/models/audit-log-field.model';
+import {ServiceLogField} from '@app/models/service-log-field.model';
+
+@Component({
+  selector: 'main-container',
+  templateUrl: './main-container.component.html',
+  styleUrls: ['./main-container.component.less']
+})
+export class MainContainerComponent {
+
+  constructor(private httpClient: HttpClientService, private appState: AppStateService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService) {
+    this.loadColumnsNames();
+    appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
+    appState.getParameter('isInitialLoading').subscribe(value => this.isInitialLoading = value);
+  }
+
+  @ContentChild(TemplateRef)
+  template;
+
+  isAuthorized: boolean = false;
+
+  isInitialLoading: boolean = false;
+
+  private loadColumnsNames(): void {
+    this.httpClient.get('serviceLogsFields').subscribe(response => {
+      const jsonResponse = response.json();
+      if (jsonResponse) {
+        this.serviceLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, ServiceLogField));
+      }
+    });
+    this.httpClient.get('auditLogsFields').subscribe(response => {
+      const jsonResponse = response.json();
+      if (jsonResponse) {
+        this.auditLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, AuditLogField));
+      }
+    });
+  }
+
+  private getColumnsArray(keysObject: any, fieldClass: any): any[] {
+    return Object.keys(keysObject).map(key => new fieldClass(key));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
new file mode 100644
index 0000000..2f05656
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.html
@@ -0,0 +1,28 @@
+<!--
+  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.
+-->
+
+<div #dropdown [ngClass]="{'dropdown': hasSubItems, 'text-center': true}">
+  <a [ngClass]="iconClass + ' icon'" (mousedown)="onMouseDown($event)" (mouseup)="onMouseUp($event)"
+     (click)="$event.stopPropagation()"></a>
+  <a #dropdownToggle class="dropdown-toggle caret" data-toggle="dropdown" *ngIf="hasCaret"></a>
+  <br>
+  <a *ngIf="label" (mousedown)="onMouseDown($event)" [ngClass]="labelClass" (mouseup)="onMouseUp($event)"
+     (click)="$event.stopPropagation()">{{label | translate}}</a>
+  <ul data-component="dropdown-list" *ngIf="hasSubItems" [items]="subItems" (selectedItemChange)="updateValue($event)"
+      [isMultipleChoice]="isMultipleChoice" [additionalLabelComponentSetter]="additionalLabelComponentSetter"
+      [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"></ul>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.less
new file mode 100644
index 0000000..6a3a43d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.less
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+:host {
+  display: inline-block;
+  cursor: pointer;
+
+  a:hover, a:focus {
+    text-decoration: none;
+  }
+
+  .icon {
+    padding: 5px;
+  }
+
+  .unstyled-link {
+    color: inherit;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
new file mode 100644
index 0000000..6c9e021
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.spec.ts
@@ -0,0 +1,133 @@
+/**
+ * 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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {FilteringService} from '@app/services/filtering.service';
+
+import {MenuButtonComponent} from './menu-button.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('MenuButtonComponent', () => {
+  let component: MenuButtonComponent;
+  let fixture: ComponentFixture<MenuButtonComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [MenuButtonComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        ComponentActionsService,
+        FilteringService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(MenuButtonComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('#hasSubItems', () => {
+    const cases = [
+      {
+        subItems: null,
+        hasSubItems: false,
+        title: 'no sub-items'
+      },
+      {
+        subItems: [],
+        hasSubItems: false,
+        title: 'empty sub-items array'
+      },
+      {
+        subItems: [{}],
+        hasSubItems: true,
+        title: 'sub-items present'
+      }
+    ];
+
+    cases.forEach((test) => {
+      it(test.title, () => {
+        component.subItems = test.subItems;
+        expect(component.hasSubItems).toEqual(test.hasSubItems);
+      });
+    });
+  });
+
+  describe('#hasCaret', () => {
+    const cases = [
+      {
+        subItems: null,
+        hasCaret: false,
+        title: 'no sub-items'
+      },
+      {
+        subItems: [],
+        hasCaret: false,
+        title: 'empty sub-items array'
+      },
+      {
+        subItems: [{}],
+        hideCaret: false,
+        hasCaret: true,
+        title: 'sub-items present, caret not hidden'
+      },
+      {
+        subItems: [{}],
+        hideCaret: true,
+        hasCaret: true,
+        title: 'sub-items present, caret hidden'
+      }
+    ];
+
+    cases.forEach((test) => {
+      it(test.title, () => {
+        component.subItems = test.subItems;
+        component.hideCaret = Boolean(test.hideCaret);
+        expect(component.hasSubItems).toEqual(test.hasCaret);
+      });
+    });
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
new file mode 100644
index 0000000..b674ec6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/menu-button/menu-button.component.ts
@@ -0,0 +1,97 @@
+/**
+ * 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.
+ */
+
+import {Component, Input, ViewChild, ElementRef} from '@angular/core';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import * as $ from 'jquery';
+
+@Component({
+  selector: 'menu-button',
+  templateUrl: './menu-button.component.html',
+  styleUrls: ['./menu-button.component.less']
+})
+export class MenuButtonComponent {
+
+  constructor(protected actions: ComponentActionsService) {
+  }
+
+  @ViewChild('dropdown')
+  dropdown: ElementRef;
+
+  @Input()
+  label?: string;
+
+  @Input()
+  action: string;
+
+  @Input()
+  iconClass: string;
+
+  @Input()
+  labelClass?: string;
+
+  @Input()
+  subItems?: any[];
+
+  @Input()
+  isMultipleChoice: boolean = false;
+
+  @Input()
+  hideCaret: boolean = false;
+
+  @Input()
+  isRightAlign: boolean = false;
+
+  @Input()
+  additionalLabelComponentSetter?: string;
+
+  get hasSubItems(): boolean {
+    return Boolean(this.subItems && this.subItems.length);
+  }
+
+  get hasCaret(): boolean {
+    return this.hasSubItems && !this.hideCaret;
+  }
+
+  private clickStartTime: number;
+
+  private readonly longClickInterval = 1000;
+
+  onMouseDown(event: MouseEvent): void {
+    if (this.action && event.button === 0) {
+      this.clickStartTime = (new Date()).getTime();
+    }
+  }
+
+  onMouseUp(event: MouseEvent): void {
+    if (event.button === 0) {
+      const clickEndTime = (new Date()).getTime();
+      if (this.hasSubItems && (!this.action || clickEndTime - this.clickStartTime >= this.longClickInterval)) {
+        $(this.dropdown.nativeElement).toggleClass('open');
+      } else if (this.action) {
+        this.actions[this.action]();
+      }
+      event.stopPropagation();
+    }
+  }
+  
+  updateValue(options: any) {
+    // TODO implement value change behaviour
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
new file mode 100644
index 0000000..abd7bc8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.html
@@ -0,0 +1,40 @@
+<!--
+  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.
+-->
+
+<div class="modal-backdrop in"></div>
+<div class="modal in">
+  <div [ngClass]="{'modal-dialog': true, 'modal-sm': isSmallModal, 'modal-lg': isLargeModal}">
+    <div class="modal-content">
+      <div *ngIf="showHeader" class="modal-header">
+        <button *ngIf="showCloseButton" type="button" class="close" data-dismiss="modal" (click)="onClose()">
+          <span>&times;</span>
+        </button>
+        <h4 *ngIf="title">{{title}}</h4>
+      </div>
+      <div class="modal-body">
+        <div *ngIf="bodyText">{{bodyText}}</div>
+        <ng-template *ngIf="bodyTemplate" [ngTemplateOutlet]="bodyTemplate"></ng-template>
+      </div>
+      <div *ngIf="showFooter" class="modal-footer">
+        <button *ngIf="showCancelButton" class="btn {{cancelButtonClassName}}"
+                (click)="onCancel()">{{cancelButtonLabel | translate}}</button>
+        <button *ngIf="showSubmitButton" class="btn {{submitButtonClassName}}"
+                (click)="onSubmit()">{{submitButtonLabel | translate}}</button>
+      </div>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.spec.ts
new file mode 100644
index 0000000..802bd13
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.spec.ts
@@ -0,0 +1,57 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+
+import {ModalComponent} from './modal.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('ModalComponent', () => {
+  let component: ModalComponent;
+  let fixture: ComponentFixture<ModalComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ModalComponent],
+      imports: [
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(ModalComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.ts
new file mode 100644
index 0000000..32f59f6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/modal/modal.component.ts
@@ -0,0 +1,122 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit, AfterViewInit, ElementRef, Input, Output, ContentChild, TemplateRef, EventEmitter} from '@angular/core';
+import * as $ from 'jquery';
+
+@Component({
+  selector: 'modal',
+  templateUrl: './modal.component.html'
+})
+export class ModalComponent implements OnInit, AfterViewInit {
+
+  constructor(private element: ElementRef) {
+    this.rootElement = $(this.element.nativeElement);
+  }
+
+  ngOnInit() {
+    this.modalElements = this.rootElement.find('.in');
+    this.show();
+  }
+
+  ngAfterViewInit() {
+    this.init.emit();
+  }
+
+  private rootElement: JQuery;
+
+  private modalElements: JQuery;
+
+  @Input()
+  showHeader: boolean = true;
+
+  @Input()
+  title: string = '';
+
+  @Input()
+  showCloseButton: boolean = true;
+
+  @Input()
+  bodyText: string = '';
+
+  @Input()
+  showFooter: boolean = true;
+
+  @Input()
+  showSubmitButton: boolean = true;
+
+  @Input()
+  submitButtonLabel: string = 'modal.submit';
+
+  @Input()
+  submitButtonClassName: string = 'btn-success';
+
+  @Input()
+  showCancelButton: boolean = true;
+
+  @Input()
+  cancelButtonLabel: string = 'modal.cancel';
+
+  @Input()
+  cancelButtonClassName: string = 'btn-default';
+
+  @Input()
+  isSmallModal: boolean = false;
+
+  @Input()
+  isLargeModal: boolean = false;
+
+  @ContentChild(TemplateRef)
+  bodyTemplate;
+
+  @Output()
+  init: EventEmitter<any> = new EventEmitter();
+
+  @Output()
+  submit: EventEmitter<any> = new EventEmitter();
+
+  @Output()
+  cancel: EventEmitter<any> = new EventEmitter();
+
+  @Output()
+  close: EventEmitter<any> = new EventEmitter();
+
+  show(): void {
+    this.modalElements.show();
+  }
+
+  hide(): void {
+    this.modalElements.hide();
+  }
+
+  onSubmit(): void {
+    this.hide();
+    this.submit.emit();
+  }
+
+  onCancel(): void {
+    this.hide();
+    this.cancel.emit();
+  }
+
+  onClose(): void {
+    this.hide();
+    this.close.emit();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.html
new file mode 100644
index 0000000..96c8619
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.html
@@ -0,0 +1,19 @@
+<!--
+  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.
+-->
+
+<div *ngFor="let item of data" class="bar-sector"
+     [ngStyle]="{'background-color': item.color, 'width': (item.value / totalCount * 100) + '%'}"></div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.less
new file mode 100644
index 0000000..b78b847
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.less
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+
+@bar-height: 8px;
+
+:host {
+  display: block;
+  width: 100%;
+
+  .bar-sector {
+    display: inline-block;
+    height: @bar-height;
+
+    &:first-child {
+      border-top-left-radius: @bar-height / 2;
+      border-bottom-left-radius: @bar-height / 2;
+    }
+
+    &:last-child {
+      border-top-right-radius: @bar-height / 2;
+      border-bottom-right-radius: @bar-height / 2;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.spec.ts
new file mode 100644
index 0000000..d47436e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.spec.ts
@@ -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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {NodeBarComponent} from './node-bar.component';
+
+describe('NodeBarComponent', () => {
+  let component: NodeBarComponent;
+  let fixture: ComponentFixture<NodeBarComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [NodeBarComponent]
+    })
+      .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(NodeBarComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.ts
new file mode 100644
index 0000000..c7b3ead
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/node-bar/node-bar.component.ts
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+import {Component, Input} from '@angular/core';
+
+@Component({
+  selector: 'node-bar',
+  templateUrl: './node-bar.component.html',
+  styleUrls: ['./node-bar.component.less']
+})
+export class NodeBarComponent {
+
+  @Input()
+  data: any[] = [];
+
+  get totalCount(): number {
+    return this.data.reduce((currentValue, currentItem) => currentValue + Number(currentItem.value), 0);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.html
new file mode 100644
index 0000000..c227a2b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.html
@@ -0,0 +1,23 @@
+<!--
+  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.
+-->
+
+<button class="btn btn-link" [disabled]="currentPage === 0" (click)="updateValue(true)">
+  <span class="pagination-control fa fa-chevron-left"></span>
+</button>
+<button class="btn btn-link" [disabled]="currentPage === pagesCount - 1" (click)="updateValue()">
+  <span class="pagination-control fa fa-chevron-right"></span>
+</button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.less
new file mode 100644
index 0000000..8238eaf
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.less
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+.pagination-control {
+  .clickable-item;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.spec.ts
new file mode 100644
index 0000000..489f79c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.spec.ts
@@ -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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {PaginationControlsComponent} from './pagination-controls.component';
+
+describe('PaginationControlsComponent', () => {
+  let component: PaginationControlsComponent;
+  let fixture: ComponentFixture<PaginationControlsComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [PaginationControlsComponent]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(PaginationControlsComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.ts
new file mode 100644
index 0000000..c71844c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination-controls/pagination-controls.component.ts
@@ -0,0 +1,73 @@
+/**
+ * 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.
+ */
+
+import {Component, forwardRef, Input, Output, EventEmitter} from '@angular/core';
+import {ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
+
+@Component({
+  selector: 'pagination-controls',
+  templateUrl: './pagination-controls.component.html',
+  styleUrls: ['./pagination-controls.component.less'],
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => PaginationControlsComponent),
+      multi: true
+    }
+  ]
+})
+export class PaginationControlsComponent implements ControlValueAccessor {
+
+  private onChange: (fn: any) => void;
+
+  currentPage: number = 0;
+
+  @Input()
+  totalCount: number;
+
+  @Input()
+  pagesCount: number;
+
+  @Output()
+  currentPageChange: EventEmitter<number> = new EventEmitter();
+
+  get value(): number {
+    return this.currentPage;
+  }
+
+  set value(newValue: number) {
+    this.currentPage = newValue;
+    this.currentPageChange.emit(newValue);
+    this.onChange(newValue);
+  }
+
+  updateValue(isDecrement?: boolean) {
+    isDecrement? this.value-- : this.value++;
+  }
+
+  writeValue() {
+  }
+
+  registerOnChange(callback: any): void {
+    this.onChange = callback;
+  }
+
+  registerOnTouched() {
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.html
new file mode 100644
index 0000000..be6591b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.html
@@ -0,0 +1,24 @@
+<!--
+  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.
+-->
+
+<form class="pagination-form col-md-12" [formGroup]="filtersForm">
+  <filter-dropdown [label]="filterInstance.label" formControlName="pageSize" [options]="filterInstance.options"
+                   [defaultLabel]="filterInstance.defaultLabel" [isRightAlign]="true" isDropup="true"></filter-dropdown>
+  <span>{{'pagination.numbers' | translate: numbersTranslateParams}}</span>
+  <pagination-controls formControlName="page" [totalCount]="totalCount" [pagesCount]="pagesCount"
+                       (currentPageChange)="setCurrentPage($event)"></pagination-controls>
+</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.less
new file mode 100644
index 0000000..df8ad2d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.less
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  display: flex;
+
+  .pagination-form {
+    .flex-vertical-align;
+    justify-content: flex-end;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.spec.ts
new file mode 100644
index 0000000..7a15bbc
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.spec.ts
@@ -0,0 +1,69 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+
+import {PaginationComponent} from './pagination.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('PaginationComponent', () => {
+  let component: PaginationComponent;
+  let fixture: ComponentFixture<PaginationComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      declarations: [PaginationComponent],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(PaginationComponent);
+    component = fixture.componentInstance;
+    component.filterInstance = {};
+    component.filtersForm = {
+      controls: {
+        pageSize: {
+          valueChanges: {
+            subscribe: () => {}
+          }
+        }
+      }
+    };
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.ts
new file mode 100644
index 0000000..d38d0d8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/pagination/pagination.component.ts
@@ -0,0 +1,72 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit, Input} from '@angular/core';
+import {FormGroup} from '@angular/forms';
+
+@Component({
+  selector: 'pagination',
+  templateUrl: './pagination.component.html',
+  styleUrls: ['./pagination.component.less']
+})
+export class PaginationComponent implements OnInit {
+
+  ngOnInit() {
+    this.setPageSizeFromString(this.filterInstance.defaultValue);
+    this.filtersForm.controls.pageSize.valueChanges.subscribe(value => this.setPageSizeFromString(value));
+  }
+
+  @Input()
+  filtersForm: FormGroup;
+
+  @Input()
+  filterInstance: any;
+
+  @Input()
+  currentCount?: number;
+
+  @Input()
+  totalCount: number;
+
+  private pageSize: number = 0;
+
+  setPageSizeFromString(value: string) {
+    this.pageSize = parseInt(value);
+  }
+
+  private currentPage: number = 0;
+
+  get numbersTranslateParams(): any {
+    const pageSize = this.pageSize,
+      startIndex = (this.currentPage * pageSize) + 1;
+    return {
+      startIndex,
+      endIndex: startIndex + Math.min(pageSize, this.currentCount) - 1,
+      totalCount: this.totalCount
+    }
+  }
+
+  get pagesCount(): number {
+    return Math.ceil(this.totalCount / this.pageSize);
+  }
+
+  setCurrentPage(pageNumber: number) {
+    this.currentPage = pageNumber;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.html
new file mode 100644
index 0000000..299e46e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.html
@@ -0,0 +1,18 @@
+<!--
+  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.
+-->
+
+<div #container></div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.less
new file mode 100644
index 0000000..d891862
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.less
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+/deep/ .axis {
+  .domain {
+    display: none;
+  }
+
+  .tick {
+    line {
+      display: none;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.spec.ts
new file mode 100644
index 0000000..9e056be
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.spec.ts
@@ -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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+
+import {TimeHistogramComponent} from './time-histogram.component';
+
+describe('TimeHistogramComponent', () => {
+  let component: TimeHistogramComponent;
+  let fixture: ComponentFixture<TimeHistogramComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [TimeHistogramComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings
+        })
+      ],
+      providers: [
+        AppSettingsService
+      ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TimeHistogramComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.ts
new file mode 100644
index 0000000..7856ecc
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/time-histogram/time-histogram.component.ts
@@ -0,0 +1,161 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit, AfterViewInit, OnChanges, Input, ViewChild, ElementRef} from '@angular/core';
+import * as d3 from 'd3';
+import * as moment from 'moment-timezone';
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
+
+@Component({
+  selector: 'time-histogram',
+  templateUrl: './time-histogram.component.html',
+  styleUrls: ['./time-histogram.component.less']
+})
+export class TimeHistogramComponent implements OnInit, AfterViewInit, OnChanges {
+
+  constructor(private appSettings: AppSettingsService) {
+    appSettings.getParameter('timeZone').subscribe(value => {
+      this.timeZone = value;
+      this.createHistogram();
+    });
+  }
+
+  ngOnInit() {
+    Object.assign(this.options, this.defaultOptions, this.customOptions);
+  }
+
+  ngAfterViewInit() {
+    this.htmlElement = this.element.nativeElement;
+    this.host = d3.select(this.htmlElement);
+  }
+
+  ngOnChanges() {
+    this.createHistogram();
+  }
+
+  @ViewChild('container')
+  element: ElementRef;
+
+  @Input()
+  customOptions: any;
+
+  @Input()
+  data: any;
+
+  private readonly defaultOptions = {
+    margin: {
+      top: 20,
+      right: 20,
+      bottom: 40,
+      left: 50
+    },
+    height: 200,
+    tickPadding: 10,
+    columnWidth: 20
+  };
+
+  private options: any = {};
+
+  private timeZone: string;
+
+  private host;
+
+  private svg;
+
+  private width;
+
+  private xScale;
+
+  private yScale;
+
+  private colorScale;
+
+  private xAxis;
+
+  private yAxis;
+
+  private htmlElement: HTMLElement;
+
+  histogram: any;
+
+  private createHistogram(): void {
+    if (this.host) {
+      this.setup();
+      this.buildSVG();
+      this.populate();
+    }
+  }
+
+  private setup(): void {
+    const margin = this.options.margin,
+      keysWithColors = this.options.keysWithColors,
+      keys = Object.keys(keysWithColors),
+      colors = keys.reduce((array, key) => [...array, keysWithColors[key]], []);
+    this.width = this.htmlElement.clientWidth - margin.left - margin.right;
+    this.xScale = d3.scaleTime().range([0, this.width]);
+    this.yScale = d3.scaleLinear().range([this.options.height, 0]);
+    this.colorScale = d3.scaleOrdinal(colors);
+  }
+
+  private buildSVG(): void {
+    const margin = this.options.margin;
+    this.host.html('');
+    this.svg = this.host.append('svg').attr('width', this.width + margin.left + margin.right)
+      .attr('height', this.options.height + margin.top + margin.bottom).append('g')
+      .attr('transform', `translate(${margin.left},${margin.top})`);
+  }
+
+  private drawXAxis(): void {
+    this.xAxis = d3.axisBottom(this.xScale)
+      .tickFormat(tick => moment(tick).tz(this.timeZone).format('MM/DD HH:mm'))
+      .tickPadding(this.options.tickPadding);
+    this.svg.append('g').attr('class', 'axis').attr('transform', `translate(0,${this.options.height})`).call(this.xAxis);
+  }
+
+  private drawYAxis(): void {
+    this.yAxis = d3.axisLeft(this.yScale).tickFormat((tick: number) => {
+      if (Number.isInteger(tick)) {
+        return tick.toFixed(0);
+      } else {
+        return;
+      }
+    }).tickPadding(this.options.tickPadding);
+    this.svg.append('g').attr('class', 'axis').call(this.yAxis).append('text');
+  }
+
+  private populate(): void {
+    const keys = Object.keys(this.options.keysWithColors),
+      data = this.data,
+      timeStamps = Object.keys(data),
+      formattedData = timeStamps.map(timeStamp => Object.assign({
+        timeStamp: timeStamp
+      }, data[timeStamp])),
+      layers = (d3.stack().keys(keys)(formattedData)),
+      columnWidth = this.options.columnWidth;
+    this.xScale.domain(d3.extent(formattedData, item => item.timeStamp));
+    this.yScale.domain([0, d3.max(formattedData, item => keys.reduce((sum, key) => sum + item[key], 0))]);
+    this.drawXAxis();
+    this.drawYAxis();
+    const layer = this.svg.selectAll().data(d3.transpose<any>(layers)).enter().append('g');
+    layer.selectAll().data(item => item).enter().append('rect')
+      .attr('x', item => this.xScale(item.data.timeStamp) - columnWidth / 2).attr('y', item => this.yScale(item[1]))
+      .attr('height', item => this.yScale(item[0]) - this.yScale(item[1])).attr('width', columnWidth.toString())
+      .style('fill', (item, index) => this.colorScale(index));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.html
new file mode 100644
index 0000000..3cb196e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.html
@@ -0,0 +1,26 @@
+<!--
+  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.
+-->
+
+<button class="btn btn-link" (click)="setTimeZonePickerDisplay(true)">
+  {{timeZone | timeZoneAbbr}} <span class="caret"></span>
+</button>
+<modal *ngIf="isTimeZonePickerDisplayed" [showCloseButton]="false" [isLargeModal]="true"
+       (init)="initMap()" (cancel)="setTimeZonePickerDisplay(false)" (submit)="setTimeZone()">
+  <ng-template>
+    <div attr.id="{{mapElementId}}"></div>
+  </ng-template>
+</modal>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.less
new file mode 100644
index 0000000..4fa043d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.less
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+.btn-link {
+  // TODO implement actual colors
+  color: @submit-color;
+
+  &:hover {
+    color: @submit-hover-color;
+  }
+}
+
+/deep/ #timezone-map {
+  .Cbox {
+    .quickLink {
+      padding-top: 4px;
+    }
+  }
+
+  .hoverZone {
+    display: inline-block;
+
+    &:after {
+      content: '\007C\00a0\00a0';
+      visibility: hidden;
+    }
+  }
+}


[32/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.ttf
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.ttf b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.ttf
deleted file mode 100644
index d365924..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.ttf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.woff
deleted file mode 100644
index b9bd17e..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontawesome/fontawesome-webfont.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300.woff
deleted file mode 100644
index 99f3353..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300i.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300i.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300i.woff
deleted file mode 100644
index dd0a0ea..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-300i.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400.woff
deleted file mode 100644
index 55b25f8..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400i.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400i.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400i.woff
deleted file mode 100644
index cedefb8..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-400i.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600.woff
deleted file mode 100644
index e83bb33..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600i.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600i.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600i.woff
deleted file mode 100644
index 983bb33..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-600i.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700.woff
deleted file mode 100644
index 27619e7..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700i.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700i.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700i.woff
deleted file mode 100644
index e12c3a9..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/fonts/fontopensans/open-sans-700i.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/System-Settings-icon.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/System-Settings-icon.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/System-Settings-icon.png
deleted file mode 100644
index 2f34e5d..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/System-Settings-icon.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/avatar.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/avatar.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/avatar.png
deleted file mode 100644
index 74a8031..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/avatar.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blank.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blank.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blank.gif
deleted file mode 100644
index 35d42e8..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blank.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blockLoading.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blockLoading.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blockLoading.gif
deleted file mode 100644
index 86a52b8..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/blockLoading.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/body-bg.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/body-bg.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/body-bg.png
deleted file mode 100644
index 5fcb51d..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/body-bg.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/cancel_search.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/cancel_search.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/cancel_search.png
deleted file mode 100644
index 967bf53..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/cancel_search.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/clear.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/clear.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/clear.png
deleted file mode 100644
index 580b52a..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/clear.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/comp.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/comp.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/comp.png
deleted file mode 100644
index deccae4..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/comp.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/data-grey.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/data-grey.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/data-grey.png
deleted file mode 100644
index dabec13..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/data-grey.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/database_table_32.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/database_table_32.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/database_table_32.png
deleted file mode 100644
index 14bb068..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/database_table_32.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-404-icon.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-404-icon.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-404-icon.png
deleted file mode 100644
index 9b8f81d..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-404-icon.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-500-icon.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-500-icon.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-500-icon.png
deleted file mode 100644
index 017cc53..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/error-500-icon.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder-grey.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder-grey.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder-grey.png
deleted file mode 100644
index 0149cf2..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder-grey.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder.png
deleted file mode 100644
index 0613c6b..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder2.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder2.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder2.png
deleted file mode 100644
index 85da97f..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/folder2.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/form.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/form.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/form.png
deleted file mode 100644
index 3ea179c..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/form.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hbase.jpg
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hbase.jpg b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hbase.jpg
deleted file mode 100644
index 27c177a..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hbase.jpg and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hdfs.jpg
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hdfs.jpg b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hdfs.jpg
deleted file mode 100644
index 2f6dad2..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hdfs.jpg and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hive.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hive.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hive.png
deleted file mode 100644
index b7939b1..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hive.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hline.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hline.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hline.png
deleted file mode 100644
index b488b95..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/hline.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-collapse.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-collapse.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-collapse.png
deleted file mode 100644
index ef00a8c..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-collapse.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-expand.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-expand.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-expand.png
deleted file mode 100644
index c7c2480..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/icon-expand.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox.gif
deleted file mode 100644
index 3edc8fd..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox1.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox1.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox1.png
deleted file mode 100644
index 56265c7..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/knox1.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading.gif
deleted file mode 100644
index 5b33f7e..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading_game.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading_game.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading_game.gif
deleted file mode 100644
index 5cb5074..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/loading_game.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo-white.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo-white.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo-white.png
deleted file mode 100644
index a562ba7..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo-white.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo.png
deleted file mode 100644
index ddd816d..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/logo.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/router-grey.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/router-grey.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/router-grey.png
deleted file mode 100644
index 5424139..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/router-grey.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/search_glyph.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/search_glyph.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/search_glyph.png
deleted file mode 100644
index 017a6d0..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/search_glyph.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingCollapse.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingCollapse.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingCollapse.png
deleted file mode 100644
index beb6f58..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingCollapse.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingExpand.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingExpand.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingExpand.png
deleted file mode 100644
index d10c11b..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/sortingExpand.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm.png
deleted file mode 100644
index 510cc92..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm1.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm1.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm1.png
deleted file mode 100644
index a5b36c7..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/storm1.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/task-grey.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/task-grey.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/task-grey.png
deleted file mode 100644
index 6c76084..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/task-grey.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/timezone.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/timezone.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/timezone.png
deleted file mode 100644
index 963794b..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/images/timezone.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/index.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/index.html b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/index.html
deleted file mode 100644
index 79d60b2..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/index.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!--
-  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>
-<html lang="en">
-    <head>
-        <meta charset="utf-8">
-        <title>LogSearch</title>
-        <meta name="viewport" content="width=device-width, initial-scale=1">
-        <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
-        
-        <link href="libs/bower/bootstrap/bootstrap.min.css" rel="stylesheet">
-        <link href="libs/bower/font-awesome/css/font-awesome.css" rel="stylesheet">
-        <link rel="stylesheet" type="text/css" href="libs/bower/jquery-ui/css/jquery-ui-bootstrap.css">
-        <link rel="stylesheet" type="text/css" href="styles/custom/visualsearch.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/backgrid/backgrid.min.css">
-        <link rel="stylesheet" type="text/css" href="libs/custom/backgrid-columnmanager/Backgrid.ColumnManager.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/backgrid-paginator/backgrid-paginator.min.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/backgrid-sizeable-columns/backgrid-sizeable-columns.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/backgrid-orderable-columns/backgrid-orderable-columns.css">
-        <link rel="stylesheet" type="text/css" href="libs/custom/daterangepicker/css/daterangepicker.css">
-        <link rel="stylesheet" type="text/css" href="styles/animate.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/select2/select2.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/nvd3/nv.d3.min.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/gridster/jquery.gridster.min.css">
-        <link rel="stylesheet" type="text/css" href="libs/bower/bootstrap-tour/bootstrap-tour.min.css">
-        <link href="styles/style_v2.css" rel="stylesheet">
-        <link href="styles/style.css" rel="stylesheet">
-        
-        
-        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
-        <!--[if lt IE 9]>
-                <script src="http://getbootstrap.com/docs-assets/js/html5shiv.js"></script>
-                <script src="http://getbootstrap.com/docs-assets/js/respond.min.js"></script>
-        <![endif]-->
-    </head>
-    <body>
-        <!--Start Header-->
-        <header class="navbar">
-            <div class="container-fluid expanded-panel">
-                <div class="row top-panel-right">
-                    <div id="logo" class="col-xs-12 col-sm-3">
-                        <div class="row">
-                            <div class="col-sm-2"><img title="Apache Ambari" alt="Apache Ambari" src="images/logo-white.png" height="32px"></div>
-                            <div class="col-sm-10"><a href="javascript:void(0);">Log Search</a></div>
-                        </div>
-                    </div>
-                    <div id="r_header"></div>
-                </div>
-            </div>
-        </header>
-        <!--End Header-->
-        <!--Start Container-->
-        <div id="main" class="container-fluid">
-            <div class="row">
-                <!--Start Content-->
-                <div id="content" class="col-xs-12 col-sm-12">
-                    <div id="r_content" >
-                        <i class="icon-spinner"></i>
-                    </div>
-                </div>
-                <!--End Content-->
-            </div>
-        </div>
-        <!--End Container-->
-        <script data-main="scripts/Init.js" src="libs/bower/requirejs/require.js"></script>
-        <!-- endbuild -->
-        <script type="text/javascript">
-            require.config({
-                waitSeconds : 0
-            });
-            if (!window.console) window.console = {};
-            if (!window.console.log) window.console.log = function () { };
-
-        </script>
-        <div class="btn-group contextMenuBody dropup" style="display:none;position:absolute;z-index:9999;">
-            <button type="button" class="btn btn-info btn-circle btn-app-sm btn-context dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                <i class="fa fa-info"></i>
-            </button>
-            <ul class="dropdown-menu">
-                <li><a data-id="I" href="javascript:void(0);">Include</a></li>
-                <li><a data-id="E" href="javascript:void(0);">Exclude</a></li> 
-                <li><a data-id="IA" href="javascript:void(0);">*Include*</a></li>
-                <li><a data-id="EA" href="javascript:void(0);">*Exclude*</a></li>
-                <li role="separator" class="divider"></li>
-                <li><a data-id="F" href="javascript:void(0);">Find</a></li>
-            </ul>
-        </div>
-        <div class="arrowDiv">
-            <div class="bottomToTop" title="Scroll To Top"><i class="fa fa-arrow-circle-up"></i></div>
-            <div class="topToBottom" title="Scroll To bottom"><i class="fa fa-arrow-circle-down"></i></div>
-        </div>
-
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone-pageable/backbone-pageable.min.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone-pageable/backbone-pageable.min.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone-pageable/backbone-pageable.min.js
deleted file mode 100644
index 78f32fd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone-pageable/backbone-pageable.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
-  backbone-pageable 1.3.2
-  http://github.com/wyuenho/backbone-pageable
-
-  Copyright (c) 2013 Jimmy Yuen Ho Wong
-  Licensed under the MIT @license.
-*/
-!function(a){if("object"==typeof exports)module.exports=a(require("underscore"),require("backbone"));else if("function"==typeof define&&define.amd)define(["underscore","backbone"],a);else if("undefined"!=typeof _&&"undefined"!=typeof Backbone){var b=Backbone.PageableCollection,c=a(_,Backbone);Backbone.PageableCollection.noConflict=function(){return Backbone.PageableCollection=b,c}}}(function(a,b){"use strict";function c(b,c){if(!a.isNumber(b)||a.isNaN(b)||!a.isFinite(b)||~~b!==b)throw new TypeError("`"+c+"` must be a finite integer");return b}function d(a){for(var b,c,d,e,f={},g=decodeURIComponent,h=a.split("&"),i=0,j=h.length;j>i;i++){var k=h[i];b=k.split("="),c=b[0],d=b[1]||!0,c=g(c),e=f[c],n(e)?e.push(d):f[c]=e?[e,d]:d}return f}var e=a.extend,f=a.omit,g=a.clone,h=a.each,i=a.pick,j=a.contains,k=a.isEmpty,l=a.pairs,m=a.invert,n=a.isArray,o=a.isFunction,p=a.isObject,q=a.keys,r=a.isUndefined,s=a.result,t=Math.ceil,u=Math.floor,v=Math.max,w=b.Collection.prototype,x=/[\s'"]/g,y=/[<>\s'
 "]/g,z=b.PageableCollection=b.Collection.extend({state:{firstPage:1,lastPage:null,currentPage:null,pageSize:25,totalPages:null,totalRecords:null,sortKey:null,order:-1},mode:"server",queryParams:{currentPage:"page",pageSize:"per_page",totalPages:"total_pages",totalRecords:"total_entries",sortKey:"sort_by",order:"order",directions:{"-1":"asc",1:"desc"}},constructor:function(a,c){b.Collection.apply(this,arguments),c=c||{};var d=this.mode=c.mode||this.mode||A.mode,f=e({},A.queryParams,this.queryParams,c.queryParams||{});f.directions=e({},A.queryParams.directions,this.queryParams.directions,f.directions||{}),this.queryParams=f;var h=this.state=e({},A.state,this.state,c.state||{});h.currentPage=null==h.currentPage?h.firstPage:h.currentPage,n(a)||(a=a?[a]:[]),"server"==d||null!=h.totalRecords||k(a)||(h.totalRecords=a.length),this.switchMode(d,e({fetch:!1,resetState:!1,models:a},c));var i=c.comparator;if(h.sortKey&&!i&&this.setSorting(h.sortKey,h.order,c),"server"!=d){var j=this.fullCollect
 ion;i&&c.full&&(delete this.comparator,j.comparator=i),c.full&&j.sort(),a&&!k(a)&&(this.getPage(h.currentPage),a.splice.apply(a,[0,a.length].concat(this.models)))}this._initState=g(this.state)},_makeFullCollection:function(a,c){var d,e,f,g=["url","model","sync","comparator"],h=this.constructor.prototype,i={};for(d=0,e=g.length;e>d;d++)f=g[d],r(h[f])||(i[f]=h[f]);var j=new(b.Collection.extend(i))(a,c);for(d=0,e=g.length;e>d;d++)f=g[d],this[f]!==h[f]&&(j[f]=this[f]);return j},_makeCollectionEventHandler:function(a,b){return function(c,d,f,i){var j=a._handlers;h(q(j),function(c){var d=j[c];a.off(c,d),b.off(c,d)});var k=g(a.state),l=k.firstPage,m=0===l?k.currentPage:k.currentPage-1,n=k.pageSize,o=m*n,p=o+n;if("add"==c){var s,u,v,w,i=i||{};if(f==b)u=b.indexOf(d),u>=o&&p>u&&(w=a,s=v=u-o);else{s=a.indexOf(d),u=o+s,w=b;var v=r(i.at)?u:i.at+o}if(++k.totalRecords,a.state=a._checkState(k),w){w.add(d,e({},i||{},{at:v}));var x=s>=n?d:!r(i.at)&&p>v&&a.length>n?a.at(n):null;if(x){var y=f._events.a
 dd||[],z={onAdd:!0};if(y.length){var A=y[y.length-1],B=A.callback;A.callback=function(){try{B.apply(this,arguments),a.remove(x,z)}finally{A.callback=B}}}else a.remove(x,z)}}}if("remove"==c)if(i.onAdd)delete i.onAdd;else{if(--k.totalRecords){var C=k.totalPages=t(k.totalRecords/n);k.lastPage=0===l?C-1:C,k.currentPage>C&&(k.currentPage=k.lastPage)}else k.totalRecords=null,k.totalPages=null;a.state=a._checkState(k);var D,E=i.index;f==a?((D=b.at(p))&&a.push(D),b.remove(d)):E>=o&&p>E&&(a.remove(d),D=b.at(m*(n+E)),D&&a.push(D))}if("reset"==c)if(i=f,f=d,f===a&&null==i.from&&null==i.to){var F=b.models.slice(0,o),G=b.models.slice(o+a.models.length);b.reset(F.concat(a.models).concat(G),i)}else f===b&&((k.totalRecords=b.models.length)||(k.totalRecords=null,k.totalPages=null),"client"==a.mode&&(k.lastPage=k.currentPage=k.firstPage),a.state=a._checkState(k),a.reset(b.models.slice(o,p),e({},i,{parse:!1})));"sort"==c&&(i=f,f=d,f===b&&a.reset(b.models.slice(o,p),e({},i,{parse:!1}))),h(q(j),function(
 c){var d=j[c];h([a,b],function(a){a.on(c,d);var b=a._events[c]||[];b.unshift(b.pop())})})}},_checkState:function(a){var b=this.mode,d=this.links,e=a.totalRecords,f=a.pageSize,g=a.currentPage,h=a.firstPage,i=a.totalPages;if(null!=e&&null!=f&&null!=g&&null!=h&&("infinite"==b?d:!0)){if(e=c(e,"totalRecords"),f=c(f,"pageSize"),g=c(g,"currentPage"),h=c(h,"firstPage"),1>f)throw new RangeError("`pageSize` must be >= 1");if(i=a.totalPages=t(e/f),0>h||h>1)throw new RangeError("`firstPage must be 0 or 1`");if(a.lastPage=0===h?v(0,i-1):i,"infinite"==b){if(!d[g+""])throw new RangeError("No link found for page "+g)}else if(h>g||i>0&&(h?g>i:g>=i))throw new RangeError("`currentPage` must be firstPage <= currentPage "+(h?">":">=")+" totalPages if "+h+"-based. Got "+g+".")}return a},setPageSize:function(a,b){a=c(a,"pageSize"),b=b||{first:!1};var d=this.state,g=t(d.totalRecords/a),h=g?v(d.firstPage,u(g*(d.firstPage?d.currentPage:d.currentPage+1)/d.totalPages)):d.firstPage;return d=this.state=this._che
 ckState(e({},d,{pageSize:a,currentPage:b.first?d.firstPage:h,totalPages:g})),this.getPage(d.currentPage,f(b,["first"]))},switchMode:function(b,c){if(!j(["server","client","infinite"],b))throw new TypeError('`mode` must be one of "server", "client" or "infinite"');c=c||{fetch:!0,resetState:!0};var d=this.state=c.resetState?g(this._initState):this._checkState(e({},this.state));this.mode=b;var i,k=this,l=this.fullCollection,m=this._handlers=this._handlers||{};if("server"==b||l)"server"==b&&l&&(h(q(m),function(a){i=m[a],k.off(a,i),l.off(a,i)}),delete this._handlers,this._fullComparator=l.comparator,delete this.fullCollection);else{l=this._makeFullCollection(c.models||[]),l.pageableCollection=this,this.fullCollection=l;var n=this._makeCollectionEventHandler(this,l);h(["add","remove","reset","sort"],function(b){m[b]=i=a.bind(n,{},b),k.on(b,i),l.on(b,i)}),l.comparator=this._fullComparator}if("infinite"==b)for(var o=this.links={},p=d.firstPage,r=t(d.totalRecords/d.pageSize),s=0===p?v(0,r-1)
 :r||p,u=d.firstPage;s>=u;u++)o[u]=this.url;else this.links&&delete this.links;return c.fetch?this.fetch(f(c,"fetch","resetState")):this},hasPrevious:function(){var a=this.state,b=a.currentPage;return"infinite"!=this.mode?b>a.firstPage:!!this.links[b-1]},hasNext:function(){var a=this.state,b=this.state.currentPage;return"infinite"!=this.mode?b<a.lastPage:!!this.links[b+1]},getFirstPage:function(a){return this.getPage("first",a)},getPreviousPage:function(a){return this.getPage("prev",a)},getNextPage:function(a){return this.getPage("next",a)},getLastPage:function(a){return this.getPage("last",a)},getPage:function(a,b){var d=this.mode,g=this.fullCollection;b=b||{fetch:!1};var h=this.state,i=h.firstPage,j=h.currentPage,l=h.lastPage,m=h.pageSize,n=a;switch(a){case"first":n=i;break;case"prev":n=j-1;break;case"next":n=j+1;break;case"last":n=l;break;default:n=c(a,"index")}this.state=this._checkState(e({},h,{currentPage:n})),b.from=j,b.to=n;var o=(0===i?n:n-1)*m,p=g&&g.length?g.models.slice(o
 ,o+m):[];return"client"!=d&&("infinite"!=d||k(p))||b.fetch?("infinite"==d&&(b.url=this.links[n]),this.fetch(f(b,"fetch"))):this.reset(p,f(b,"fetch"))},getPageByOffset:function(a,b){if(0>a)throw new RangeError("`offset must be > 0`");a=c(a);var d=u(a/this.state.pageSize);return 0!==this.state.firstPage&&d++,d>this.state.lastPage&&(d=this.state.lastPage),this.getPage(d,b)},sync:function(a,c,d){var f=this;if("infinite"==f.mode){var g=d.success,h=f.state.currentPage;d.success=function(a,b,c){var i=f.links,j=f.parseLinks(a,e({xhr:c},d));j.first&&(i[f.state.firstPage]=j.first),j.prev&&(i[h-1]=j.prev),j.next&&(i[h+1]=j.next),g&&g(a,b,c)}}return(w.sync||b.sync).call(f,a,c,d)},parseLinks:function(a,b){var c={},e=b.xhr.getResponseHeader("Link");if(e){var f=["first","prev","previous","next","last"];h(e.split(","),function(a){var b=a.split(";"),d=b[0].replace(y,""),e=b.slice(1);h(e,function(a){var b=a.split("="),e=b[0].replace(x,""),g=b[1].replace(x,"");"rel"==e&&j(f,g)&&("previous"==g?c.prev=d
 :c[g]=d)})});var i,k,l=c.last||"";if(k=(i=l.indexOf("?"))?l.slice(i+1):""){var m=d(k),n=g(this.state),o=this.queryParams,p=n.pageSize,q=1*m[o.totalRecords],r=1*m[o.currentPage],s=m[o.totalPages];q||(r?q=(0===n.firstPage?r+1:r)*p:s&&(q=s*p)),q&&(n.totalRecords=q),this.state=this._checkState(n)}}return delete c.last,c},parse:function(a,b){var c=this.parseState(a,g(this.queryParams),g(this.state),b);return c&&(this.state=this._checkState(e({},this.state,c))),this.parseRecords(a,b)},parseState:function(b,c,d){if(b&&2===b.length&&p(b[0])&&n(b[1])){var e=g(d),i=b[0];return h(l(f(c,"directions")),function(b){var c=b[0],d=b[1],f=i[d];r(f)||a.isNull(f)||(e[c]=i[d])}),i.order&&(e.order=1*m(c.directions)[i.order]),e}},parseRecords:function(a){return a&&2===a.length&&p(a[0])&&n(a[1])?a[1]:a},fetch:function(a){a=a||{};var b=this._checkState(this.state),c=this.mode;"infinite"!=c||a.url||(a.url=this.links[b.currentPage]);var h=a.data||{},j=s(a,"url")||s(this,"url")||"",k=j.indexOf("?");-1!=k&&(e(h
 ,d(j.slice(k+1))),j=j.slice(0,k)),a.url=j,a.data=h;var m,n,p,t,u="client"==this.mode?i(this.queryParams,"sortKey","order"):f(i(this.queryParams,q(A.queryParams)),"directions"),v=l(u),x=g(this);for(m=0;m<v.length;m++)n=v[m],p=n[0],t=n[1],t=o(t)?t.call(x):t,null!=b[p]&&null!=t&&(h[t]=b[p]);b.sortKey&&b.order?h[u.order]=this.queryParams.directions[b.order+""]:b.sortKey||delete h[u.order];var y=l(f(this.queryParams,q(A.queryParams)));for(m=0;m<y.length;m++)n=y[m],t=n[1],t=o(t)?t.call(x):t,null!=t&&(h[n[0]]=t);if("server"!=c){var z=this,B=this.fullCollection,C=a.success;return a.success=function(b,d,f){f=f||{},r(a.silent)?delete f.silent:f.silent=a.silent;var g=b.models;"client"==c?B.reset(g,f):B.add(g,e({at:B.length},f)),C&&C(b,d,f)},w.fetch.call(z,e({},a,{silent:!0}))}return w.fetch.call(this,a)},_makeComparator:function(a,b,c){var d=this.state;return a=a||d.sortKey,b=b||d.order,a&&b?(c||(c=function(a,b){return a.get(b)}),function(d,e){var f,g=c(d,a),h=c(e,a);return 1===b&&(f=g,g=h,h=f
 ),g===h?0:h>g?-1:1}):void 0},setSorting:function(a,b,c){var d=this.state;d.sortKey=a,d.order=b=b||d.order;var f=this.fullCollection,g=!1,h=!1;a||(g=h=!0);var i=this.mode;c=e({side:"client"==i?i:"server",full:!0},c);var j=this._makeComparator(a,b,c.sortValue),k=c.full,l=c.side;return"client"==l?k?(f&&(f.comparator=j),g=!0):(this.comparator=j,h=!0):"server"!=l||k||(this.comparator=j),g&&delete this.comparator,h&&f&&delete f.comparator,this}}),A=z.prototype;return z});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone.fetch-cache.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone.fetch-cache.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone.fetch-cache.js
deleted file mode 100644
index 1a449cb..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/backbone.fetch-cache.js
+++ /dev/null
@@ -1,326 +0,0 @@
-/*!
-  backbone.fetch-cache v1.4.0
-  by Andy Appleton - https://github.com/mrappleton/backbone-fetch-cache.git
- */
-
-// AMD wrapper from https://github.com/umdjs/umd/blob/master/amdWebGlobal.js
-
-(function (root, factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module and set browser global
-    define(['underscore', 'backbone', 'jquery'], function (_, Backbone, $) {
-      return (root.Backbone = factory(_, Backbone, $));
-    });
-  } else {
-    // Browser globals
-    root.Backbone = factory(root._, root.Backbone, root.jQuery);
-  }
-}(this, function (_, Backbone, $) {
-
-  // Setup
-  var superMethods = {
-    modelFetch: Backbone.Model.prototype.fetch,
-    modelSync: Backbone.Model.prototype.sync,
-    collectionFetch: Backbone.Collection.prototype.fetch
-  },
-  supportLocalStorage = (function() {
-    var supported = typeof window.localStorage !== 'undefined';
-    if (supported) {
-      try {
-        // impossible to write on some platforms when private browsing is on and
-        // throws an exception = local storage not supported.
-        localStorage.setItem("test_support", "test_support");
-        localStorage.removeItem("test_support");
-      } catch (e) {
-        supported = false;
-      }
-    }
-    return supported;
-  })();
-
-  Backbone.fetchCache = (Backbone.fetchCache || {});
-  Backbone.fetchCache._cache = (Backbone.fetchCache._cache || {});
-
-  Backbone.fetchCache.priorityFn = function(a, b) {
-    if (!a || !a.expires || !b || !b.expires) {
-      return a;
-    }
-
-    return a.expires - b.expires;
-  };
-
-  Backbone.fetchCache._prioritize = function() {
-    var sorted = _.values(this._cache).sort(this.priorityFn);
-    var index = _.indexOf(_.values(this._cache), sorted[0]);
-    return _.keys(this._cache)[index];
-  };
-
-  Backbone.fetchCache._deleteCacheWithPriority = function() {
-    Backbone.fetchCache._cache[this._prioritize()] = null;
-    delete Backbone.fetchCache._cache[this._prioritize()];
-    Backbone.fetchCache.setLocalStorage();
-  };
-
-  Backbone.fetchCache.getLocalStorageKey = function() {
-    return 'backboneCache';
-  };
-
-  if (typeof Backbone.fetchCache.localStorage === 'undefined') {
-    Backbone.fetchCache.localStorage = true;
-  }
-
-  // Shared methods
-  function getCacheKey(instance, opts) {
-    var url;
-
-    if(opts && opts.url) {
-      url = opts.url;
-    } else {
-      url = _.isFunction(instance.url) ? instance.url() : instance.url;
-    }
-
-    // Need url to use as cache key so return if we can't get it
-    if(!url) { return; }
-
-    if(opts && opts.data) {
-      return url + "?" + $.param(opts.data);
-    }
-    return url;
-  }
-
-  function setCache(instance, opts, attrs) {
-    opts = (opts || {});
-    var key = Backbone.fetchCache.getCacheKey(instance, opts),
-        expires = false;
-
-    // Need url to use as cache key so return if we can't get it
-    if (!key) { return; }
-
-    // Never set the cache if user has explicitly said not to
-    if (opts.cache === false) { return; }
-
-    // Don't set the cache unless cache: true or prefill: true option is passed
-    if (!(opts.cache || opts.prefill)) { return; }
-
-    if (opts.expires !== false) {
-      expires = (new Date()).getTime() + ((opts.expires || 5 * 60) * 1000);
-    }
-
-    Backbone.fetchCache._cache[key] = {
-      expires: expires,
-      value: attrs
-    };
-
-    Backbone.fetchCache.setLocalStorage();
-  }
-
-  function clearItem(key) {
-    if (_.isFunction(key)) { key = key(); }
-    delete Backbone.fetchCache._cache[key];
-    Backbone.fetchCache.setLocalStorage();
-  }
-
-  function setLocalStorage() {
-    if (!supportLocalStorage || !Backbone.fetchCache.localStorage) { return; }
-    try {
-      localStorage.setItem(Backbone.fetchCache.getLocalStorageKey(), JSON.stringify(Backbone.fetchCache._cache));
-    } catch (err) {
-      var code = err.code || err.number || err.message;
-      if (code === 22) {
-        this._deleteCacheWithPriority();
-      } else {
-        throw(err);
-      }
-    }
-  }
-
-  function getLocalStorage() {
-    if (!supportLocalStorage || !Backbone.fetchCache.localStorage) { return; }
-    var json = localStorage.getItem(Backbone.fetchCache.getLocalStorageKey()) || '{}';
-    Backbone.fetchCache._cache = JSON.parse(json);
-  }
-
-  function nextTick(fn) {
-    return window.setTimeout(fn, 0);
-  }
-
-  // Instance methods
-  Backbone.Model.prototype.fetch = function(opts) {
-    opts = _.defaults(opts || {}, { parse: true });
-    var key = Backbone.fetchCache.getCacheKey(this, opts),
-        data = Backbone.fetchCache._cache[key],
-        expired = false,
-        attributes = false,
-        deferred = new $.Deferred(),
-        self = this;
-
-    function setData() {
-      if (opts.parse) {
-        attributes = self.parse(attributes, opts);
-      }
-
-      self.set(attributes, opts);
-      if (_.isFunction(opts.prefillSuccess)) { opts.prefillSuccess(self, attributes, opts); }
-
-      // Trigger sync events
-      self.trigger('cachesync', self, attributes, opts);
-      self.trigger('sync', self, attributes, opts);
-
-      // Notify progress if we're still waiting for an AJAX call to happen...
-      if (opts.prefill) { deferred.notify(self); }
-      // ...finish and return if we're not
-      else {
-        if (_.isFunction(opts.success)) { opts.success(self, attributes, opts); }
-        deferred.resolve(self);
-      }
-    }
-
-    if (data) {
-      expired = data.expires;
-      expired = expired && data.expires < (new Date()).getTime();
-      attributes = data.value;
-    }
-
-    if (!expired && (opts.cache || opts.prefill) && attributes) {
-      // Ensure that cache resolution adhers to async option, defaults to true.
-      if (opts.async == null) { opts.async = true; }
-
-      if (opts.async) {
-        nextTick(setData);
-      } else {
-        setData();
-      }
-
-      if (!opts.prefill) {
-        return deferred;
-      }
-    }
-
-    // Delegate to the actual fetch method and store the attributes in the cache
-    // to set cache : false whenever it calls ajax (addded due to Test server caching issue)
-    var arg = $.extend(true,[],arguments);
-    if((arg.length > 0) && !_.isUndefined(arg[0].cache))
-    	arg[0].cache = false ;
-    superMethods.modelFetch.apply(this, arg)
-      // resolve the returned promise when the AJAX call completes
-      .done( _.bind(deferred.resolve, this, this) )
-      // Set the new data in the cache
-      .done( _.bind(Backbone.fetchCache.setCache, null, this, opts) )
-      // Reject the promise on fail
-      .fail( _.bind(deferred.reject, this, this) );
-
-    // return a promise which provides the same methods as a jqXHR object
-    return deferred;
-  };
-
-  // Override Model.prototype.sync and try to clear cache items if it looks
-  // like they are being updated.
-  Backbone.Model.prototype.sync = function(method, model, options) {
-    // Only empty the cache if we're doing a create, update, patch or delete.
-    if (method === 'read') {
-      return superMethods.modelSync.apply(this, arguments);
-    }
-
-    var collection = model.collection,
-        keys = [],
-        i, len;
-
-    // Build up a list of keys to delete from the cache, starting with this
-    keys.push(Backbone.fetchCache.getCacheKey(model, options));
-
-    // If this model has a collection, also try to delete the cache for that
-    if (!!collection) {
-      keys.push(Backbone.fetchCache.getCacheKey(collection));
-      
-      // it will delete full collection cache (pagination)
-      _.each(Backbone.fetchCache._cache, function(url, val){
-			var urlStr= keys[1]+"?";
-			if(val.indexOf(urlStr) != -1) 
-				keys.push(val);
-		});
-    }
-
-    // Empty cache for all found keys
-    for (i = 0, len = keys.length; i < len; i++) { clearItem(keys[i]); }
-
-    return superMethods.modelSync.apply(this, arguments);
-  };
-
-  Backbone.Collection.prototype.fetch = function(opts) {
-    opts = _.defaults(opts || {}, { parse: true });
-    var key = Backbone.fetchCache.getCacheKey(this, opts),
-        data = Backbone.fetchCache._cache[key],
-        expired = false,
-        attributes = false,
-        deferred = new $.Deferred(),
-        self = this;
-
-    function setData() {
-      self[opts.reset ? 'reset' : 'set'](attributes, opts);
-      if (_.isFunction(opts.prefillSuccess)) { opts.prefillSuccess(self); }
-
-      // Trigger sync events
-      self.trigger('cachesync', self, attributes, opts);
-      self.trigger('sync', self, attributes, opts);
-
-      // Notify progress if we're still waiting for an AJAX call to happen...
-      if (opts.prefill) { deferred.notify(self); }
-      // ...finish and return if we're not
-      else {
-        if (_.isFunction(opts.success)) { opts.success(self, attributes, opts); }
-        deferred.resolve(self);
-      }
-    }
-
-    if (data) {
-      expired = data.expires;
-      expired = expired && data.expires < (new Date()).getTime();
-      attributes = data.value;
-    }
-
-    if (!expired && (opts.cache || opts.prefill) && attributes) {
-      // Ensure that cache resolution adhers to async option, defaults to true.
-      if (opts.async == null) { opts.async = true; }
-
-      if (opts.async) {
-        nextTick(setData);
-      } else {
-        setData();
-      }
-
-      if (!opts.prefill) {
-        return deferred;
-      }
-    }
-
-    // Delegate to the actual fetch method and store the attributes in the cache
-    // to set cache : false whenever it calls ajax (addded due to Test server caching issue)
-    var arg = $.extend(true,[],arguments);
-    if((arg.length > 0) && !_.isUndefined(arg[0].cache))
-    	arg[0].cache = false ;
-    superMethods.collectionFetch.apply(this, arg)
-      // resolve the returned promise when the AJAX call completes
-      .done( _.bind(deferred.resolve, this, this) )
-      // Set the new data in the cache
-      .done( _.bind(Backbone.fetchCache.setCache, null, this, opts) )
-      // Reject the promise on fail
-      .fail( _.bind(deferred.reject, this, this) );
-
-    // return a promise which provides the same methods as a jqXHR object
-    return deferred;
-  };
-
-  // Prime the cache from localStorage on initialization
-  getLocalStorage();
-
-  // Exports
-
-  Backbone.fetchCache._superMethods = superMethods;
-  Backbone.fetchCache.setCache = setCache;
-  Backbone.fetchCache.getCacheKey = getCacheKey;
-  Backbone.fetchCache.clearItem = clearItem;
-  Backbone.fetchCache.setLocalStorage = setLocalStorage;
-  Backbone.fetchCache.getLocalStorage = getLocalStorage;
-
-  return Backbone;
-}));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/d3/d3.tip.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/d3/d3.tip.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/d3/d3.tip.js
deleted file mode 100644
index 1310f35..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/d3/d3.tip.js
+++ /dev/null
@@ -1,293 +0,0 @@
-// d3.tip
-// Copyright (c) 2013 Justin Palmer
-//
-// Tooltips for d3.js SVG visualizations
-
-(function (root, factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module with d3 as a dependency.
-    define(['d3'], factory)
-  } else {
-    // Browser global.
-    root.d3.tip = factory(root.d3)
-  }
-}(this, function (d3) {
-
-  // Public - contructs a new tooltip
-  //
-  // Returns a tip
-  return function() {
-    var direction = d3_tip_direction,
-        offset    = d3_tip_offset,
-        html      = d3_tip_html,
-        node      = initNode(),
-        svg       = null,
-        point     = null,
-        target    = null
-
-    function tip(vis) {
-      svg = getSVGNode(vis)
-      point = svg.createSVGPoint()
-      document.body.appendChild(node)
-    }
-
-    // Public - show the tooltip on the screen
-    //
-    // Returns a tip
-    tip.show = function() {
-      var args = Array.prototype.slice.call(arguments)
-      if(args[args.length - 1] instanceof SVGElement) target = args.pop()
-
-      var content = html.apply(this, args),
-          poffset = offset.apply(this, args),
-          dir     = direction.apply(this, args),
-          nodel   = d3.select(node),
-          i       = directions.length,
-          coords,
-          scrollTop  = document.documentElement.scrollTop || document.body.scrollTop,
-          scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft
-
-      nodel.html(content)
-        .style({ opacity: 1, 'pointer-events': 'all' })
-
-      while(i--) nodel.classed(directions[i], false)
-      coords = direction_callbacks.get(dir).apply(this)
-      nodel.classed(dir, true).style({
-        top: (coords.top +  poffset[0]) + scrollTop + 'px',
-        left: (coords.left + poffset[1]) + scrollLeft + 'px'
-      })
-
-      return tip
-    }
-
-    // Public - hide the tooltip
-    //
-    // Returns a tip
-    tip.hide = function() {
-      var nodel = d3.select(node)
-      nodel.style({ opacity: 0, 'pointer-events': 'none' })
-      return tip
-    }
-
-    // Public: Proxy attr calls to the d3 tip container.  Sets or gets attribute value.
-    //
-    // n - name of the attribute
-    // v - value of the attribute
-    //
-    // Returns tip or attribute value
-    tip.attr = function(n, v) {
-      if (arguments.length < 2 && typeof n === 'string') {
-        return d3.select(node).attr(n)
-      } else {
-        var args =  Array.prototype.slice.call(arguments)
-        d3.selection.prototype.attr.apply(d3.select(node), args)
-      }
-
-      return tip
-    }
-
-    // Public: Proxy style calls to the d3 tip container.  Sets or gets a style value.
-    //
-    // n - name of the property
-    // v - value of the property
-    //
-    // Returns tip or style property value
-    tip.style = function(n, v) {
-      if (arguments.length < 2 && typeof n === 'string') {
-        return d3.select(node).style(n)
-      } else {
-        var args =  Array.prototype.slice.call(arguments)
-        d3.selection.prototype.style.apply(d3.select(node), args)
-      }
-
-      return tip
-    }
-
-    // Public: Set or get the direction of the tooltip
-    //
-    // v - One of n(north), s(south), e(east), or w(west), nw(northwest),
-    //     sw(southwest), ne(northeast) or se(southeast)
-    //
-    // Returns tip or direction
-    tip.direction = function(v) {
-      if (!arguments.length) return direction
-      direction = v == null ? v : d3.functor(v)
-
-      return tip
-    }
-
-    // Public: Sets or gets the offset of the tip
-    //
-    // v - Array of [x, y] offset
-    //
-    // Returns offset or
-    tip.offset = function(v) {
-      if (!arguments.length) return offset
-      offset = v == null ? v : d3.functor(v)
-
-      return tip
-    }
-
-    // Public: sets or gets the html value of the tooltip
-    //
-    // v - String value of the tip
-    //
-    // Returns html value or tip
-    tip.html = function(v) {
-      if (!arguments.length) return html
-      html = v == null ? v : d3.functor(v)
-
-      return tip
-    }
-
-    function d3_tip_direction() { return 'n' }
-    function d3_tip_offset() { return [0, 0] }
-    function d3_tip_html() { return ' ' }
-
-    var direction_callbacks = d3.map({
-      n:  direction_n,
-      s:  direction_s,
-      e:  direction_e,
-      w:  direction_w,
-      nw: direction_nw,
-      ne: direction_ne,
-      sw: direction_sw,
-      se: direction_se
-    }),
-
-    directions = direction_callbacks.keys()
-
-    function direction_n() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.n.y - node.offsetHeight,
-        left: bbox.n.x - node.offsetWidth / 2
-      }
-    }
-
-    function direction_s() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.s.y,
-        left: bbox.s.x - node.offsetWidth / 2
-      }
-    }
-
-    function direction_e() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.e.y - node.offsetHeight / 2,
-        left: bbox.e.x
-      }
-    }
-
-    function direction_w() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.w.y - node.offsetHeight / 2,
-        left: bbox.w.x - node.offsetWidth
-      }
-    }
-
-    function direction_nw() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.nw.y - node.offsetHeight,
-        left: bbox.nw.x - node.offsetWidth
-      }
-    }
-
-    function direction_ne() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.ne.y - node.offsetHeight,
-        left: bbox.ne.x
-      }
-    }
-
-    function direction_sw() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.sw.y,
-        left: bbox.sw.x - node.offsetWidth
-      }
-    }
-
-    function direction_se() {
-      var bbox = getScreenBBox()
-      return {
-        top:  bbox.se.y,
-        left: bbox.e.x
-      }
-    }
-
-    function initNode() {
-      var node = d3.select(document.createElement('div'))
-      node.style({
-        position: 'absolute',
-        top: 0,
-        opacity: 0,
-        'pointer-events': 'none',
-        'box-sizing': 'border-box'
-      })
-
-      return node.node()
-    }
-
-    function getSVGNode(el) {
-      el = el.node()
-      if(el.tagName.toLowerCase() === 'svg')
-        return el
-
-      return el.ownerSVGElement
-    }
-
-    // Private - gets the screen coordinates of a shape
-    //
-    // Given a shape on the screen, will return an SVGPoint for the directions
-    // n(north), s(south), e(east), w(west), ne(northeast), se(southeast), nw(northwest),
-    // sw(southwest).
-    //
-    //    +-+-+
-    //    |   |
-    //    +   +
-    //    |   |
-    //    +-+-+
-    //
-    // Returns an Object {n, s, e, w, nw, sw, ne, se}
-    function getScreenBBox() {
-      var targetel   = target || d3.event.target,
-          bbox       = {},
-          matrix     = targetel.getScreenCTM(),
-          tbbox      = targetel.getBBox(),
-          width      = tbbox.width,
-          height     = tbbox.height,
-          x          = tbbox.x,
-          y          = tbbox.y
-
-      point.x = x
-      point.y = y
-      bbox.nw = point.matrixTransform(matrix)
-      point.x += width
-      bbox.ne = point.matrixTransform(matrix)
-      point.y += height
-      bbox.se = point.matrixTransform(matrix)
-      point.x -= width
-      bbox.sw = point.matrixTransform(matrix)
-      point.y -= height / 2
-      bbox.w  = point.matrixTransform(matrix)
-      point.x += width
-      bbox.e = point.matrixTransform(matrix)
-      point.x -= width / 2
-      point.y -= height / 2
-      bbox.n = point.matrixTransform(matrix)
-      point.y += height
-      bbox.s = point.matrixTransform(matrix)
-
-      return bbox
-    }
-
-    return tip
-  };
-
-}));

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/dashboard/dashboard.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/dashboard/dashboard.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/dashboard/dashboard.js
deleted file mode 100644
index c88aaf1..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/dashboard/dashboard.js
+++ /dev/null
@@ -1,393 +0,0 @@
-/**
-* 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.
-*/
-'use strict';
-(function(root, factory) {
-
-    if (typeof define === 'function' && define.amd) {
-        define(['jquery', 'gridster'], function($, gridster) {
-            factory($, gridster);
-        });
-    } else {
-        if ((root.jQuery != "undefined" || root.Zepto != "undefined" || root.ender != "undefined" || root.$ != "undefined")) {
-            /*if (root.gridster != "undefined" || gridster != "undefined") {
-                console.log("dsdsds")
-                factory(root.gridster || gridster, (root.jQuery || root.Zepto || root.ender || root.$));
-            } else {
-                throw new Error('gridster dependnecy not found');
-            }*/
-            factory((root.jQuery || root.Zepto || root.ender || root.$));
-        } else {
-            throw new Error('jQuery dependnecy not found');
-        }
-
-    }
-
-}(this, function($, gridster) {
-
-    var dashboard = function(element, options) {
-        this.$el = element;
-        this.options = options;
-        this.generateDashboard();
-    }
-
-    var gridsterPrototypeFn = {};
-
-    dashboard.VERSION = '1.0.0';
-
-    dashboard.DEFAULTS = {
-
-    };
-
-    dashboard.prototype = {
-
-        constructor: dashboard,
-
-
-        importData: function(data) {
-            for (var i = 0; i < data.length; i++) {
-                this.addWidget('<li class="new"></li>', data[i].size_x, data[i].size_y, data[i].col, data[i].row,data[i]);
-            }
-        },
-
-        exportData: function(el) {
-
-            this.data = gridsterPrototypeFn.serialize((el) ? (el) : (undefined));
-            return this.data
-        },
-        addWidget: function(html, size_x, size_y, col, row,data) {
-            if (this.options.onAdded) {
-                var el = gridsterPrototypeFn.add_widget(html, size_x, size_y, col, row);
-                this.options.onAdded(el,data);
-            } else {
-                var el = gridsterPrototypeFn.add_widget(html, size_x, size_y, col, row);
-
-            }
-        },
-        deleteWidget: function(el, callback) {
-            var el = gridsterPrototypeFn.remove_widget(el, function() {
-                this.options.onDeleted(el);
-            });
-        },
-        deleteAll: function(callback) {
-            var data = this.$el.children();
-            for (var i = 0; i < data.length; i++) {
-                if ((data.length - 1) == i) {
-                    var el = gridsterPrototypeFn.remove_widget(data[i], function() {
-                        this.options.onAllDeleted(el);
-                    });
-                } else {
-                    gridsterPrototypeFn.remove_widget(data[i]);
-                    //this.options.onDeleted(el);
-                }
-
-            }
-        },
-        /**
-         * [generateMap create element dynamically]
-         * @param  {[type]} options [depanding on option it will create e]
-         * @return {[type]}         [description]
-         */
-        generateDashboard: function() {
-            var dockLi = [];
-            if (this.options.dock && this.options.dock.dockIcon && this.options.dock.dockIcon.length > 0) {
-                var dockList = this.options.dock.dockIcon
-                for (var index in dockList) {
-                    var dockIcon = (this.genrateElement('i', {
-                        'class': (dockList[index].iClass) ? (dockList[index].iClass) : ("")
-                    }));
-                    var attr = {};
-                    if (dockList[index].parentAttr) {
-                        attr = dockList[index].parentAttr
-                        if (attr.class && attr.class != "iconG") {
-                            attr.class += " iconG"
-                        }
-                    } else {
-                        attr.class = 'iconG'
-
-                    }
-
-                    var li = this.genrateElement('li',
-                        attr, dockIcon);
-                    dockLi.push(li);
-                }
-            }
-
-            var dockUl = this.genrateElement('ul', {}, dockLi);
-
-
-
-            var dock = this.genrateElement('div', {
-                'class': 'slideMenu dragArea'
-            }, dockUl);
-
-            var gridBoxUl = this.genrateElement('ul', {});
-
-            var gridBox = this.genrateElement('div', {
-                'class': 'grid-container',
-            }, gridBoxUl);
-
-
-            if (this.options.dock && this.options.dock.position) {
-                if (this.options.dock.position == "right") {
-                    this.$el.append(gridBox);
-                    this.$el.append(dock);
-                    this.$el.addClass("right");
-                } else {
-                    this.$el.append(dock);
-                    this.$el.append(gridBox);
-                    this.$el.addClass("left");
-                }
-
-            } else {
-                this.$el.append(dock);
-                this.$el.append(gridBox);
-            }
-            this.$el.addClass("dashbord")
-
-            this.bindEvent();
-            this.createCss();
-
-        },
-        /**
-         * [bindEvent bind all event i.e click,mouseenter,mouseleave,change(select)]
-         * @return {[type]} [description]
-         */
-        bindEvent: function() {
-            var that = this;
-            var dockObject = this.options.dock;
-
-            if (dockObject && dockObject.draggable) {
-                if (dockObject.draggable.el) {
-                    if (dockObject.draggable.el instanceof jQuery) {
-                        dockObject.draggable.el.draggable(dockObject.draggable);
-                    } else if (typeof c == "string") {
-                        $(dockObject.draggable.el).draggable(dockObject.draggable);
-                    }
-                } else {
-                    this.$el.find('.slideMenu li.iconG').draggable(dockObject.draggable);
-                }
-            }
-            if (dockObject && dockObject.droppable) {
-                //dockObject.droppable.appendTo:
-                dockObject.droppable['drop'] = function(event, ui) {
-
-                    that.createGrid(ui.draggable);
-                }
-                if (dockObject.droppable.el) {
-                    if (dockObject.droppable.el instanceof jQuery) {
-                        dockObject.droppable.el.droppable(dockObject.droppable);
-                    } else if (typeof c == "string") {
-                        $(dockObject.droppable.el).droppable(dockObject.droppable);
-                    }
-
-                } else {
-                    this.$el.find('.grid-container').droppable(dockObject.droppable);
-                }
-            }
-            if (dockObject && dockObject.dockClick) {
-                if (dockObject.draggable && dockObject.draggable.el) {
-                    if (dockObject.droppable.el instanceof jQuery) {
-                        dockObject.droppable.el.click(function() {
-                            that.createGrid($(this));
-                        });
-                    } else if (typeof c == "string") {
-                        $(dockObject.droppable.el).click(function() {
-                            that.createGrid($(this));
-                        });
-                    }
-
-                } else {
-                    this.$el.find('.slideMenu li.iconG').click(function() {
-                        that.createGrid($(this));
-                    })
-                }
-            }
-            this.initializeGridster();
-        },
-        createGrid: function(el) {
-            var that = this;
-            if (el && el.data()) {
-                var attr = {};
-                attr = $.extend({}, el.data());
-                if (attr.uiDraggable) {
-                    delete attr.uiDraggable
-                }
-                for (var index in attr) {
-                    attr["data-" + index] = attr[index]
-                    delete attr[index]
-                }
-
-                var li = that.genrateElement('li',
-                    attr);
-                that.addWidget(li, 3, 2);
-            } else {
-                that.addWidget('<li/>', 3, 2);
-            }
-
-        },
-        initializeGridster: function() {
-            gridsterPrototypeFn = this.$el.find('.grid-container ul').gridster(this.options).data('gridster');
-            $.extend(dashboard.prototype, gridsterPrototypeFn);
-            if (this.options.onLoaded) {
-                this.options.onLoaded();
-            } else {
-                this.el.trigger("dashboard:loaded");
-            }
-        },
-        /**
-         * [genrateElement description]
-         * @param  {[Jquery Object]}  element     [selector]
-         * @param  {[type]}  elementAttr [description]
-         * @param  {[javascript Object or text]}  chilled      [If we pass javascript object or  array it will append all chilled and if you pass string it will add string(value) inside element ]
-         * @param  {Boolean} isSvg       [If it is svg then it will create svg element]
-         * @return {[type]}              [description]
-         */
-        genrateElement: function(element, elementAttr, chilled, isSvg) {
-
-
-            if (isSvg) {
-                var elementObject = document.createElementNS('http://www.w3.org/2000/svg', element);
-            } else {
-                var elementObject = document.createElement(element);
-            }
-            if (elementAttr) {
-                for (var key in elementAttr) {
-                    elementObject.setAttribute(key, elementAttr[key]);
-                }
-            }
-            if (chilled) {
-                if (chilled instanceof Array) {
-                    for (var chilleds in chilled) {
-                        elementObject.appendChild(chilled[chilleds]);
-                    }
-                } else if (typeof chilled == 'string') {
-                    elementObject.innerHTML = chilled;
-                } else {
-                    elementObject.appendChild(chilled);
-                }
-
-            }
-
-            return elementObject;
-
-        },
-        /**
-         * [createCss function will create css dynamically it is insert style attribute in  in head ]
-         * @param  {[type]} options [options has mapColor,selectedColor,hoverColor ]
-         * @return {[type]}         [description]
-         */
-        createCss: function(options) {
-            var style = document.createElement('style');
-            style.type = 'text/css';
-            var strVar = "";
-            strVar += ".grid-container {";
-            strVar += "    position: relative;";
-            strVar += "    list-style: none;";
-            strVar += "    min-height: 250px !important;";
-            strVar += "    width: 92%;";
-            strVar += "    float: left;";
-            strVar += "    border: 2px #ddd dotted;";
-            strVar += "    margin-left: 1%;";
-            strVar += "}";
-            strVar += ".slideMenu{";
-            strVar += "    width: 7%;";
-            strVar += "    float: left;";
-            strVar += "    min-height: 250px;";
-            strVar += "}";
-            strVar += ".slideMenu .iconG i {";
-            strVar += "    font-size: 33px;";
-            strVar += "    text-shadow: 4px 4px 1px #DADADA;";
-            strVar += "}";
-            strVar += ".dashbord .gs-w {";
-            strVar += "    background: #FFF;";
-            strVar += "    cursor: pointer;";
-            strVar += "    -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);";
-            strVar += "    box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);";
-            strVar += "}";
-            strVar += "";
-            strVar += ".dashbord {";
-            strVar += "    padding: 3px;";
-            strVar += "}";
-            strVar += "";
-            strVar += ".dashbord ul,";
-            strVar += "ol {";
-            strVar += "    list-style: none;";
-            strVar += "}";
-            strVar += ".dashbord > * {";
-            strVar += "    margin: 0;";
-            strVar += "}";
-            strVar += ".dashbord .preview-holder {";
-            strVar += "    background-color: #999;";
-            strVar += "}";
-            strVar += "";
-            strVar += ".slideMenu ul{";
-            strVar += "    list-style: none;";
-            strVar += "    margin: 0;";
-            strVar += "    padding: 0px;";
-            strVar += "}";
-            strVar += ".slideMenu li i {";
-            strVar += "  height: 64px;";
-            strVar += "  -webkit-transition: all 0.3s;";
-            strVar += "  -webkit-transform-origin: 50% 100%;";
-            strVar += "}";
-            strVar += ".dashbord.left .slideMenu li:hover i {";
-            strVar += "     cursor: pointer;";
-            strVar += "    -webkit-transform: scale(2);";
-            strVar += "    margin-top: 59px;";
-            strVar += "    margin-left: 34px;";
-            strVar += "    margin-bottom: -47px;";
-            strVar += "}";
-            strVar += ".dashbord.right .slideMenu li:hover i {";
-            strVar += "     cursor: pointer;";
-            strVar += "    -webkit-transform: scale(2);";
-            strVar += "    margin-top: 59px;";
-            strVar += "    margin-right: 34px;";
-            strVar += "    margin-bottom: -47px;";
-            strVar += "}";
-            strVar += ".dashbord.right .slideMenu li{";
-            strVar += "     text-align: right;";
-            strVar += "}";
-            strVar += ".dashbord.left .slideMenu li{";
-            strVar += "     text-align: left;";
-            strVar += "}";
-            style.innerHTML = strVar;
-            document.getElementsByTagName('head')[0].appendChild(style);
-
-        }
-    };
-    /**
-     * [Plugin Staring point for plugin]
-     * @param {[type]} option [user options which can be override the default options]
-     */
-    var that = this
-
-    function Plugin(option) {
-        return this.each(function() {
-            var $el = $(this)
-            var options = $.extend({}, dashboard.DEFAULTS, $el.data(), typeof option == 'object' && option);
-            $el.data('dashboard', new dashboard($el, options));
-
-
-
-        });
-    };
-
-    $.fn.dashboard = Plugin;
-
-
-}));


[28/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_icons.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_icons.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_icons.scss
deleted file mode 100644
index fbcfe81..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_icons.scss
+++ /dev/null
@@ -1,596 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
-.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
-.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
-.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
-.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
-.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
-.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
-.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
-.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
-.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
-.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
-.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
-.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
-.#{$fa-css-prefix}-remove:before,
-.#{$fa-css-prefix}-close:before,
-.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
-.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
-.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
-.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
-.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
-.#{$fa-css-prefix}-gear:before,
-.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
-.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
-.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
-.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
-.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
-.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
-.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
-.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
-.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
-.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
-.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
-.#{$fa-css-prefix}-rotate-right:before,
-.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
-.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
-.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
-.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
-.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
-.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
-.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
-.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
-.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
-.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
-.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
-.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
-.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
-.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
-.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
-.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
-.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
-.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
-.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
-.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
-.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
-.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
-.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
-.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
-.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
-.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
-.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
-.#{$fa-css-prefix}-dedent:before,
-.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
-.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
-.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
-.#{$fa-css-prefix}-photo:before,
-.#{$fa-css-prefix}-image:before,
-.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
-.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
-.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
-.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
-.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
-.#{$fa-css-prefix}-edit:before,
-.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
-.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
-.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
-.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
-.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
-.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
-.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
-.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
-.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
-.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
-.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
-.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
-.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
-.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
-.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
-.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
-.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
-.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
-.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
-.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
-.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
-.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
-.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
-.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
-.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
-.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
-.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
-.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
-.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
-.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
-.#{$fa-css-prefix}-mail-forward:before,
-.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
-.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
-.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
-.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
-.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
-.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
-.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
-.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
-.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
-.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
-.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
-.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
-.#{$fa-css-prefix}-warning:before,
-.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
-.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
-.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
-.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
-.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
-.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
-.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
-.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
-.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
-.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
-.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
-.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
-.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
-.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
-.#{$fa-css-prefix}-bar-chart-o:before,
-.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
-.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
-.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
-.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
-.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
-.#{$fa-css-prefix}-gears:before,
-.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
-.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
-.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
-.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
-.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
-.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
-.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
-.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
-.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
-.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
-.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
-.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
-.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
-.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
-.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
-.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
-.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
-.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
-.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
-.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
-.#{$fa-css-prefix}-facebook-f:before,
-.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
-.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
-.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
-.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
-.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
-.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
-.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
-.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
-.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
-.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
-.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
-.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
-.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
-.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
-.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
-.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
-.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
-.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
-.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
-.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
-.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
-.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
-.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
-.#{$fa-css-prefix}-group:before,
-.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
-.#{$fa-css-prefix}-chain:before,
-.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
-.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
-.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
-.#{$fa-css-prefix}-cut:before,
-.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
-.#{$fa-css-prefix}-copy:before,
-.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
-.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
-.#{$fa-css-prefix}-save:before,
-.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
-.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
-.#{$fa-css-prefix}-navicon:before,
-.#{$fa-css-prefix}-reorder:before,
-.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
-.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
-.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
-.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
-.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
-.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
-.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
-.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
-.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
-.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
-.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
-.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
-.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
-.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
-.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
-.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
-.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
-.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
-.#{$fa-css-prefix}-unsorted:before,
-.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
-.#{$fa-css-prefix}-sort-down:before,
-.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
-.#{$fa-css-prefix}-sort-up:before,
-.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
-.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
-.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
-.#{$fa-css-prefix}-rotate-left:before,
-.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
-.#{$fa-css-prefix}-legal:before,
-.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
-.#{$fa-css-prefix}-dashboard:before,
-.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
-.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
-.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
-.#{$fa-css-prefix}-flash:before,
-.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
-.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
-.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
-.#{$fa-css-prefix}-paste:before,
-.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
-.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
-.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
-.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
-.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
-.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
-.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
-.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
-.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
-.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
-.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
-.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
-.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
-.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
-.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
-.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
-.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
-.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
-.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
-.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
-.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
-.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
-.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
-.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
-.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
-.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
-.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
-.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
-.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
-.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
-.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
-.#{$fa-css-prefix}-mobile-phone:before,
-.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
-.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
-.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
-.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
-.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
-.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
-.#{$fa-css-prefix}-mail-reply:before,
-.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
-.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
-.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
-.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
-.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
-.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
-.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
-.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
-.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
-.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
-.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
-.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
-.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
-.#{$fa-css-prefix}-mail-reply-all:before,
-.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
-.#{$fa-css-prefix}-star-half-empty:before,
-.#{$fa-css-prefix}-star-half-full:before,
-.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
-.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
-.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
-.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
-.#{$fa-css-prefix}-unlink:before,
-.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
-.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
-.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
-.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
-.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
-.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
-.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
-.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
-.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
-.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
-.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
-.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
-.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
-.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
-.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
-.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
-.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
-.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
-.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
-.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
-.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
-.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
-.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
-.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
-.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
-.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
-.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
-.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
-.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
-.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
-.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
-.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
-.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
-.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
-.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
-.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
-.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
-.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
-.#{$fa-css-prefix}-toggle-down:before,
-.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
-.#{$fa-css-prefix}-toggle-up:before,
-.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
-.#{$fa-css-prefix}-toggle-right:before,
-.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
-.#{$fa-css-prefix}-euro:before,
-.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
-.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
-.#{$fa-css-prefix}-dollar:before,
-.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
-.#{$fa-css-prefix}-rupee:before,
-.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
-.#{$fa-css-prefix}-cny:before,
-.#{$fa-css-prefix}-rmb:before,
-.#{$fa-css-prefix}-yen:before,
-.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
-.#{$fa-css-prefix}-ruble:before,
-.#{$fa-css-prefix}-rouble:before,
-.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
-.#{$fa-css-prefix}-won:before,
-.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
-.#{$fa-css-prefix}-bitcoin:before,
-.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
-.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
-.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
-.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
-.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
-.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
-.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
-.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
-.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
-.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
-.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
-.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
-.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
-.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
-.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
-.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
-.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
-.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
-.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
-.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
-.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
-.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
-.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
-.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
-.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
-.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
-.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
-.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
-.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
-.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
-.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
-.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
-.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
-.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
-.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
-.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
-.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
-.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
-.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
-.#{$fa-css-prefix}-gittip:before,
-.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
-.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
-.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
-.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
-.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
-.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
-.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
-.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
-.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
-.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
-.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
-.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
-.#{$fa-css-prefix}-toggle-left:before,
-.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
-.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
-.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
-.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
-.#{$fa-css-prefix}-turkish-lira:before,
-.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
-.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
-.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
-.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
-.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
-.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
-.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
-.#{$fa-css-prefix}-institution:before,
-.#{$fa-css-prefix}-bank:before,
-.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
-.#{$fa-css-prefix}-mortar-board:before,
-.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
-.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
-.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
-.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
-.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
-.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
-.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
-.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
-.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
-.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
-.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
-.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
-.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
-.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
-.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
-.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
-.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
-.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
-.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
-.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
-.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
-.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
-.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
-.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
-.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
-.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
-.#{$fa-css-prefix}-automobile:before,
-.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
-.#{$fa-css-prefix}-cab:before,
-.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
-.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
-.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
-.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
-.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
-.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
-.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
-.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
-.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
-.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
-.#{$fa-css-prefix}-file-photo-o:before,
-.#{$fa-css-prefix}-file-picture-o:before,
-.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
-.#{$fa-css-prefix}-file-zip-o:before,
-.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
-.#{$fa-css-prefix}-file-sound-o:before,
-.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
-.#{$fa-css-prefix}-file-movie-o:before,
-.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
-.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
-.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
-.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
-.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
-.#{$fa-css-prefix}-life-bouy:before,
-.#{$fa-css-prefix}-life-buoy:before,
-.#{$fa-css-prefix}-life-saver:before,
-.#{$fa-css-prefix}-support:before,
-.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
-.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
-.#{$fa-css-prefix}-ra:before,
-.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
-.#{$fa-css-prefix}-ge:before,
-.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
-.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
-.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
-.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
-.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
-.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
-.#{$fa-css-prefix}-wechat:before,
-.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
-.#{$fa-css-prefix}-send:before,
-.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
-.#{$fa-css-prefix}-send-o:before,
-.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
-.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
-.#{$fa-css-prefix}-genderless:before,
-.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
-.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
-.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
-.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
-.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
-.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
-.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
-.#{$fa-css-prefix}-soccer-ball-o:before,
-.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
-.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
-.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
-.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
-.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
-.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
-.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
-.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
-.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
-.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
-.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
-.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
-.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
-.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
-.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
-.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
-.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
-.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
-.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
-.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
-.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
-.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
-.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
-.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
-.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
-.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
-.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
-.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
-.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
-.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
-.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
-.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
-.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
-.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
-.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
-.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
-.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
-.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
-.#{$fa-css-prefix}-shekel:before,
-.#{$fa-css-prefix}-sheqel:before,
-.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
-.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
-.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
-.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
-.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
-.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
-.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
-.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
-.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
-.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
-.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
-.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
-.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
-.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
-.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
-.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
-.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
-.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
-.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
-.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
-.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
-.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
-.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
-.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
-.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
-.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
-.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
-.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
-.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
-.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
-.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
-.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
-.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
-.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
-.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
-.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
-.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
-.#{$fa-css-prefix}-hotel:before,
-.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
-.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
-.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
-.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
-.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_larger.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_larger.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_larger.scss
deleted file mode 100644
index 41e9a81..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_larger.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.#{$fa-css-prefix}-lg {
-  font-size: (4em / 3);
-  line-height: (3em / 4);
-  vertical-align: -15%;
-}
-.#{$fa-css-prefix}-2x { font-size: 2em; }
-.#{$fa-css-prefix}-3x { font-size: 3em; }
-.#{$fa-css-prefix}-4x { font-size: 4em; }
-.#{$fa-css-prefix}-5x { font-size: 5em; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_list.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_list.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_list.scss
deleted file mode 100644
index 7d1e4d5..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_list.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.#{$fa-css-prefix}-ul {
-  padding-left: 0;
-  margin-left: $fa-li-width;
-  list-style-type: none;
-  > li { position: relative; }
-}
-.#{$fa-css-prefix}-li {
-  position: absolute;
-  left: -$fa-li-width;
-  width: $fa-li-width;
-  top: (2em / 14);
-  text-align: center;
-  &.#{$fa-css-prefix}-lg {
-    left: -$fa-li-width + (4em / 14);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_mixins.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_mixins.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_mixins.scss
deleted file mode 100644
index 6b7f160..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_mixins.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-// Mixins
-// --------------------------
-
-@mixin fa-icon() {
-  display: inline-block;
-  font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  transform: translate(0, 0); // ensures no half-pixel rendering in firefox
-
-}
-
-@mixin fa-icon-rotate($degrees, $rotation) {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
-  -webkit-transform: rotate($degrees);
-      -ms-transform: rotate($degrees);
-          transform: rotate($degrees);
-}
-
-@mixin fa-icon-flip($horiz, $vert, $rotation) {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
-  -webkit-transform: scale($horiz, $vert);
-      -ms-transform: scale($horiz, $vert);
-          transform: scale($horiz, $vert);
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_path.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_path.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_path.scss
deleted file mode 100644
index bb457c2..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_path.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
-  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
-    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
-    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
-    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
-    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
-//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_rotated-flipped.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_rotated-flipped.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_rotated-flipped.scss
deleted file mode 100644
index a3558fd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_rotated-flipped.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }
-.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
-.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
-
-.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
-.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .#{$fa-css-prefix}-rotate-90,
-:root .#{$fa-css-prefix}-rotate-180,
-:root .#{$fa-css-prefix}-rotate-270,
-:root .#{$fa-css-prefix}-flip-horizontal,
-:root .#{$fa-css-prefix}-flip-vertical {
-  filter: none;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_stacked.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_stacked.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_stacked.scss
deleted file mode 100644
index aef7403..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_stacked.scss
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.#{$fa-css-prefix}-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
-.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
-.#{$fa-css-prefix}-inverse { color: $fa-inverse; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_variables.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_variables.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_variables.scss
deleted file mode 100644
index 9b7210e..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_variables.scss
+++ /dev/null
@@ -1,606 +0,0 @@
-// Variables
-// --------------------------
-
-$fa-font-path:        "../fonts" !default;
-$fa-font-size-base:   14px !default;
-//$fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts" !default; // for referencing Bootstrap CDN font files directly
-$fa-css-prefix:       fa !default;
-$fa-version:          "4.3.0" !default;
-$fa-border-color:     #eee !default;
-$fa-inverse:          #fff !default;
-$fa-li-width:         (30em / 14) !default;
-
-$fa-var-adjust: "\f042";
-$fa-var-adn: "\f170";
-$fa-var-align-center: "\f037";
-$fa-var-align-justify: "\f039";
-$fa-var-align-left: "\f036";
-$fa-var-align-right: "\f038";
-$fa-var-ambulance: "\f0f9";
-$fa-var-anchor: "\f13d";
-$fa-var-android: "\f17b";
-$fa-var-angellist: "\f209";
-$fa-var-angle-double-down: "\f103";
-$fa-var-angle-double-left: "\f100";
-$fa-var-angle-double-right: "\f101";
-$fa-var-angle-double-up: "\f102";
-$fa-var-angle-down: "\f107";
-$fa-var-angle-left: "\f104";
-$fa-var-angle-right: "\f105";
-$fa-var-angle-up: "\f106";
-$fa-var-apple: "\f179";
-$fa-var-archive: "\f187";
-$fa-var-area-chart: "\f1fe";
-$fa-var-arrow-circle-down: "\f0ab";
-$fa-var-arrow-circle-left: "\f0a8";
-$fa-var-arrow-circle-o-down: "\f01a";
-$fa-var-arrow-circle-o-left: "\f190";
-$fa-var-arrow-circle-o-right: "\f18e";
-$fa-var-arrow-circle-o-up: "\f01b";
-$fa-var-arrow-circle-right: "\f0a9";
-$fa-var-arrow-circle-up: "\f0aa";
-$fa-var-arrow-down: "\f063";
-$fa-var-arrow-left: "\f060";
-$fa-var-arrow-right: "\f061";
-$fa-var-arrow-up: "\f062";
-$fa-var-arrows: "\f047";
-$fa-var-arrows-alt: "\f0b2";
-$fa-var-arrows-h: "\f07e";
-$fa-var-arrows-v: "\f07d";
-$fa-var-asterisk: "\f069";
-$fa-var-at: "\f1fa";
-$fa-var-automobile: "\f1b9";
-$fa-var-backward: "\f04a";
-$fa-var-ban: "\f05e";
-$fa-var-bank: "\f19c";
-$fa-var-bar-chart: "\f080";
-$fa-var-bar-chart-o: "\f080";
-$fa-var-barcode: "\f02a";
-$fa-var-bars: "\f0c9";
-$fa-var-bed: "\f236";
-$fa-var-beer: "\f0fc";
-$fa-var-behance: "\f1b4";
-$fa-var-behance-square: "\f1b5";
-$fa-var-bell: "\f0f3";
-$fa-var-bell-o: "\f0a2";
-$fa-var-bell-slash: "\f1f6";
-$fa-var-bell-slash-o: "\f1f7";
-$fa-var-bicycle: "\f206";
-$fa-var-binoculars: "\f1e5";
-$fa-var-birthday-cake: "\f1fd";
-$fa-var-bitbucket: "\f171";
-$fa-var-bitbucket-square: "\f172";
-$fa-var-bitcoin: "\f15a";
-$fa-var-bold: "\f032";
-$fa-var-bolt: "\f0e7";
-$fa-var-bomb: "\f1e2";
-$fa-var-book: "\f02d";
-$fa-var-bookmark: "\f02e";
-$fa-var-bookmark-o: "\f097";
-$fa-var-briefcase: "\f0b1";
-$fa-var-btc: "\f15a";
-$fa-var-bug: "\f188";
-$fa-var-building: "\f1ad";
-$fa-var-building-o: "\f0f7";
-$fa-var-bullhorn: "\f0a1";
-$fa-var-bullseye: "\f140";
-$fa-var-bus: "\f207";
-$fa-var-buysellads: "\f20d";
-$fa-var-cab: "\f1ba";
-$fa-var-calculator: "\f1ec";
-$fa-var-calendar: "\f073";
-$fa-var-calendar-o: "\f133";
-$fa-var-camera: "\f030";
-$fa-var-camera-retro: "\f083";
-$fa-var-car: "\f1b9";
-$fa-var-caret-down: "\f0d7";
-$fa-var-caret-left: "\f0d9";
-$fa-var-caret-right: "\f0da";
-$fa-var-caret-square-o-down: "\f150";
-$fa-var-caret-square-o-left: "\f191";
-$fa-var-caret-square-o-right: "\f152";
-$fa-var-caret-square-o-up: "\f151";
-$fa-var-caret-up: "\f0d8";
-$fa-var-cart-arrow-down: "\f218";
-$fa-var-cart-plus: "\f217";
-$fa-var-cc: "\f20a";
-$fa-var-cc-amex: "\f1f3";
-$fa-var-cc-discover: "\f1f2";
-$fa-var-cc-mastercard: "\f1f1";
-$fa-var-cc-paypal: "\f1f4";
-$fa-var-cc-stripe: "\f1f5";
-$fa-var-cc-visa: "\f1f0";
-$fa-var-certificate: "\f0a3";
-$fa-var-chain: "\f0c1";
-$fa-var-chain-broken: "\f127";
-$fa-var-check: "\f00c";
-$fa-var-check-circle: "\f058";
-$fa-var-check-circle-o: "\f05d";
-$fa-var-check-square: "\f14a";
-$fa-var-check-square-o: "\f046";
-$fa-var-chevron-circle-down: "\f13a";
-$fa-var-chevron-circle-left: "\f137";
-$fa-var-chevron-circle-right: "\f138";
-$fa-var-chevron-circle-up: "\f139";
-$fa-var-chevron-down: "\f078";
-$fa-var-chevron-left: "\f053";
-$fa-var-chevron-right: "\f054";
-$fa-var-chevron-up: "\f077";
-$fa-var-child: "\f1ae";
-$fa-var-circle: "\f111";
-$fa-var-circle-o: "\f10c";
-$fa-var-circle-o-notch: "\f1ce";
-$fa-var-circle-thin: "\f1db";
-$fa-var-clipboard: "\f0ea";
-$fa-var-clock-o: "\f017";
-$fa-var-close: "\f00d";
-$fa-var-cloud: "\f0c2";
-$fa-var-cloud-download: "\f0ed";
-$fa-var-cloud-upload: "\f0ee";
-$fa-var-cny: "\f157";
-$fa-var-code: "\f121";
-$fa-var-code-fork: "\f126";
-$fa-var-codepen: "\f1cb";
-$fa-var-coffee: "\f0f4";
-$fa-var-cog: "\f013";
-$fa-var-cogs: "\f085";
-$fa-var-columns: "\f0db";
-$fa-var-comment: "\f075";
-$fa-var-comment-o: "\f0e5";
-$fa-var-comments: "\f086";
-$fa-var-comments-o: "\f0e6";
-$fa-var-compass: "\f14e";
-$fa-var-compress: "\f066";
-$fa-var-connectdevelop: "\f20e";
-$fa-var-copy: "\f0c5";
-$fa-var-copyright: "\f1f9";
-$fa-var-credit-card: "\f09d";
-$fa-var-crop: "\f125";
-$fa-var-crosshairs: "\f05b";
-$fa-var-css3: "\f13c";
-$fa-var-cube: "\f1b2";
-$fa-var-cubes: "\f1b3";
-$fa-var-cut: "\f0c4";
-$fa-var-cutlery: "\f0f5";
-$fa-var-dashboard: "\f0e4";
-$fa-var-dashcube: "\f210";
-$fa-var-database: "\f1c0";
-$fa-var-dedent: "\f03b";
-$fa-var-delicious: "\f1a5";
-$fa-var-desktop: "\f108";
-$fa-var-deviantart: "\f1bd";
-$fa-var-diamond: "\f219";
-$fa-var-digg: "\f1a6";
-$fa-var-dollar: "\f155";
-$fa-var-dot-circle-o: "\f192";
-$fa-var-download: "\f019";
-$fa-var-dribbble: "\f17d";
-$fa-var-dropbox: "\f16b";
-$fa-var-drupal: "\f1a9";
-$fa-var-edit: "\f044";
-$fa-var-eject: "\f052";
-$fa-var-ellipsis-h: "\f141";
-$fa-var-ellipsis-v: "\f142";
-$fa-var-empire: "\f1d1";
-$fa-var-envelope: "\f0e0";
-$fa-var-envelope-o: "\f003";
-$fa-var-envelope-square: "\f199";
-$fa-var-eraser: "\f12d";
-$fa-var-eur: "\f153";
-$fa-var-euro: "\f153";
-$fa-var-exchange: "\f0ec";
-$fa-var-exclamation: "\f12a";
-$fa-var-exclamation-circle: "\f06a";
-$fa-var-exclamation-triangle: "\f071";
-$fa-var-expand: "\f065";
-$fa-var-external-link: "\f08e";
-$fa-var-external-link-square: "\f14c";
-$fa-var-eye: "\f06e";
-$fa-var-eye-slash: "\f070";
-$fa-var-eyedropper: "\f1fb";
-$fa-var-facebook: "\f09a";
-$fa-var-facebook-f: "\f09a";
-$fa-var-facebook-official: "\f230";
-$fa-var-facebook-square: "\f082";
-$fa-var-fast-backward: "\f049";
-$fa-var-fast-forward: "\f050";
-$fa-var-fax: "\f1ac";
-$fa-var-female: "\f182";
-$fa-var-fighter-jet: "\f0fb";
-$fa-var-file: "\f15b";
-$fa-var-file-archive-o: "\f1c6";
-$fa-var-file-audio-o: "\f1c7";
-$fa-var-file-code-o: "\f1c9";
-$fa-var-file-excel-o: "\f1c3";
-$fa-var-file-image-o: "\f1c5";
-$fa-var-file-movie-o: "\f1c8";
-$fa-var-file-o: "\f016";
-$fa-var-file-pdf-o: "\f1c1";
-$fa-var-file-photo-o: "\f1c5";
-$fa-var-file-picture-o: "\f1c5";
-$fa-var-file-powerpoint-o: "\f1c4";
-$fa-var-file-sound-o: "\f1c7";
-$fa-var-file-text: "\f15c";
-$fa-var-file-text-o: "\f0f6";
-$fa-var-file-video-o: "\f1c8";
-$fa-var-file-word-o: "\f1c2";
-$fa-var-file-zip-o: "\f1c6";
-$fa-var-files-o: "\f0c5";
-$fa-var-film: "\f008";
-$fa-var-filter: "\f0b0";
-$fa-var-fire: "\f06d";
-$fa-var-fire-extinguisher: "\f134";
-$fa-var-flag: "\f024";
-$fa-var-flag-checkered: "\f11e";
-$fa-var-flag-o: "\f11d";
-$fa-var-flash: "\f0e7";
-$fa-var-flask: "\f0c3";
-$fa-var-flickr: "\f16e";
-$fa-var-floppy-o: "\f0c7";
-$fa-var-folder: "\f07b";
-$fa-var-folder-o: "\f114";
-$fa-var-folder-open: "\f07c";
-$fa-var-folder-open-o: "\f115";
-$fa-var-font: "\f031";
-$fa-var-forumbee: "\f211";
-$fa-var-forward: "\f04e";
-$fa-var-foursquare: "\f180";
-$fa-var-frown-o: "\f119";
-$fa-var-futbol-o: "\f1e3";
-$fa-var-gamepad: "\f11b";
-$fa-var-gavel: "\f0e3";
-$fa-var-gbp: "\f154";
-$fa-var-ge: "\f1d1";
-$fa-var-gear: "\f013";
-$fa-var-gears: "\f085";
-$fa-var-genderless: "\f1db";
-$fa-var-gift: "\f06b";
-$fa-var-git: "\f1d3";
-$fa-var-git-square: "\f1d2";
-$fa-var-github: "\f09b";
-$fa-var-github-alt: "\f113";
-$fa-var-github-square: "\f092";
-$fa-var-gittip: "\f184";
-$fa-var-glass: "\f000";
-$fa-var-globe: "\f0ac";
-$fa-var-google: "\f1a0";
-$fa-var-google-plus: "\f0d5";
-$fa-var-google-plus-square: "\f0d4";
-$fa-var-google-wallet: "\f1ee";
-$fa-var-graduation-cap: "\f19d";
-$fa-var-gratipay: "\f184";
-$fa-var-group: "\f0c0";
-$fa-var-h-square: "\f0fd";
-$fa-var-hacker-news: "\f1d4";
-$fa-var-hand-o-down: "\f0a7";
-$fa-var-hand-o-left: "\f0a5";
-$fa-var-hand-o-right: "\f0a4";
-$fa-var-hand-o-up: "\f0a6";
-$fa-var-hdd-o: "\f0a0";
-$fa-var-header: "\f1dc";
-$fa-var-headphones: "\f025";
-$fa-var-heart: "\f004";
-$fa-var-heart-o: "\f08a";
-$fa-var-heartbeat: "\f21e";
-$fa-var-history: "\f1da";
-$fa-var-home: "\f015";
-$fa-var-hospital-o: "\f0f8";
-$fa-var-hotel: "\f236";
-$fa-var-html5: "\f13b";
-$fa-var-ils: "\f20b";
-$fa-var-image: "\f03e";
-$fa-var-inbox: "\f01c";
-$fa-var-indent: "\f03c";
-$fa-var-info: "\f129";
-$fa-var-info-circle: "\f05a";
-$fa-var-inr: "\f156";
-$fa-var-instagram: "\f16d";
-$fa-var-institution: "\f19c";
-$fa-var-ioxhost: "\f208";
-$fa-var-italic: "\f033";
-$fa-var-joomla: "\f1aa";
-$fa-var-jpy: "\f157";
-$fa-var-jsfiddle: "\f1cc";
-$fa-var-key: "\f084";
-$fa-var-keyboard-o: "\f11c";
-$fa-var-krw: "\f159";
-$fa-var-language: "\f1ab";
-$fa-var-laptop: "\f109";
-$fa-var-lastfm: "\f202";
-$fa-var-lastfm-square: "\f203";
-$fa-var-leaf: "\f06c";
-$fa-var-leanpub: "\f212";
-$fa-var-legal: "\f0e3";
-$fa-var-lemon-o: "\f094";
-$fa-var-level-down: "\f149";
-$fa-var-level-up: "\f148";
-$fa-var-life-bouy: "\f1cd";
-$fa-var-life-buoy: "\f1cd";
-$fa-var-life-ring: "\f1cd";
-$fa-var-life-saver: "\f1cd";
-$fa-var-lightbulb-o: "\f0eb";
-$fa-var-line-chart: "\f201";
-$fa-var-link: "\f0c1";
-$fa-var-linkedin: "\f0e1";
-$fa-var-linkedin-square: "\f08c";
-$fa-var-linux: "\f17c";
-$fa-var-list: "\f03a";
-$fa-var-list-alt: "\f022";
-$fa-var-list-ol: "\f0cb";
-$fa-var-list-ul: "\f0ca";
-$fa-var-location-arrow: "\f124";
-$fa-var-lock: "\f023";
-$fa-var-long-arrow-down: "\f175";
-$fa-var-long-arrow-left: "\f177";
-$fa-var-long-arrow-right: "\f178";
-$fa-var-long-arrow-up: "\f176";
-$fa-var-magic: "\f0d0";
-$fa-var-magnet: "\f076";
-$fa-var-mail-forward: "\f064";
-$fa-var-mail-reply: "\f112";
-$fa-var-mail-reply-all: "\f122";
-$fa-var-male: "\f183";
-$fa-var-map-marker: "\f041";
-$fa-var-mars: "\f222";
-$fa-var-mars-double: "\f227";
-$fa-var-mars-stroke: "\f229";
-$fa-var-mars-stroke-h: "\f22b";
-$fa-var-mars-stroke-v: "\f22a";
-$fa-var-maxcdn: "\f136";
-$fa-var-meanpath: "\f20c";
-$fa-var-medium: "\f23a";
-$fa-var-medkit: "\f0fa";
-$fa-var-meh-o: "\f11a";
-$fa-var-mercury: "\f223";
-$fa-var-microphone: "\f130";
-$fa-var-microphone-slash: "\f131";
-$fa-var-minus: "\f068";
-$fa-var-minus-circle: "\f056";
-$fa-var-minus-square: "\f146";
-$fa-var-minus-square-o: "\f147";
-$fa-var-mobile: "\f10b";
-$fa-var-mobile-phone: "\f10b";
-$fa-var-money: "\f0d6";
-$fa-var-moon-o: "\f186";
-$fa-var-mortar-board: "\f19d";
-$fa-var-motorcycle: "\f21c";
-$fa-var-music: "\f001";
-$fa-var-navicon: "\f0c9";
-$fa-var-neuter: "\f22c";
-$fa-var-newspaper-o: "\f1ea";
-$fa-var-openid: "\f19b";
-$fa-var-outdent: "\f03b";
-$fa-var-pagelines: "\f18c";
-$fa-var-paint-brush: "\f1fc";
-$fa-var-paper-plane: "\f1d8";
-$fa-var-paper-plane-o: "\f1d9";
-$fa-var-paperclip: "\f0c6";
-$fa-var-paragraph: "\f1dd";
-$fa-var-paste: "\f0ea";
-$fa-var-pause: "\f04c";
-$fa-var-paw: "\f1b0";
-$fa-var-paypal: "\f1ed";
-$fa-var-pencil: "\f040";
-$fa-var-pencil-square: "\f14b";
-$fa-var-pencil-square-o: "\f044";
-$fa-var-phone: "\f095";
-$fa-var-phone-square: "\f098";
-$fa-var-photo: "\f03e";
-$fa-var-picture-o: "\f03e";
-$fa-var-pie-chart: "\f200";
-$fa-var-pied-piper: "\f1a7";
-$fa-var-pied-piper-alt: "\f1a8";
-$fa-var-pinterest: "\f0d2";
-$fa-var-pinterest-p: "\f231";
-$fa-var-pinterest-square: "\f0d3";
-$fa-var-plane: "\f072";
-$fa-var-play: "\f04b";
-$fa-var-play-circle: "\f144";
-$fa-var-play-circle-o: "\f01d";
-$fa-var-plug: "\f1e6";
-$fa-var-plus: "\f067";
-$fa-var-plus-circle: "\f055";
-$fa-var-plus-square: "\f0fe";
-$fa-var-plus-square-o: "\f196";
-$fa-var-power-off: "\f011";
-$fa-var-print: "\f02f";
-$fa-var-puzzle-piece: "\f12e";
-$fa-var-qq: "\f1d6";
-$fa-var-qrcode: "\f029";
-$fa-var-question: "\f128";
-$fa-var-question-circle: "\f059";
-$fa-var-quote-left: "\f10d";
-$fa-var-quote-right: "\f10e";
-$fa-var-ra: "\f1d0";
-$fa-var-random: "\f074";
-$fa-var-rebel: "\f1d0";
-$fa-var-recycle: "\f1b8";
-$fa-var-reddit: "\f1a1";
-$fa-var-reddit-square: "\f1a2";
-$fa-var-refresh: "\f021";
-$fa-var-remove: "\f00d";
-$fa-var-renren: "\f18b";
-$fa-var-reorder: "\f0c9";
-$fa-var-repeat: "\f01e";
-$fa-var-reply: "\f112";
-$fa-var-reply-all: "\f122";
-$fa-var-retweet: "\f079";
-$fa-var-rmb: "\f157";
-$fa-var-road: "\f018";
-$fa-var-rocket: "\f135";
-$fa-var-rotate-left: "\f0e2";
-$fa-var-rotate-right: "\f01e";
-$fa-var-rouble: "\f158";
-$fa-var-rss: "\f09e";
-$fa-var-rss-square: "\f143";
-$fa-var-rub: "\f158";
-$fa-var-ruble: "\f158";
-$fa-var-rupee: "\f156";
-$fa-var-save: "\f0c7";
-$fa-var-scissors: "\f0c4";
-$fa-var-search: "\f002";
-$fa-var-search-minus: "\f010";
-$fa-var-search-plus: "\f00e";
-$fa-var-sellsy: "\f213";
-$fa-var-send: "\f1d8";
-$fa-var-send-o: "\f1d9";
-$fa-var-server: "\f233";
-$fa-var-share: "\f064";
-$fa-var-share-alt: "\f1e0";
-$fa-var-share-alt-square: "\f1e1";
-$fa-var-share-square: "\f14d";
-$fa-var-share-square-o: "\f045";
-$fa-var-shekel: "\f20b";
-$fa-var-sheqel: "\f20b";
-$fa-var-shield: "\f132";
-$fa-var-ship: "\f21a";
-$fa-var-shirtsinbulk: "\f214";
-$fa-var-shopping-cart: "\f07a";
-$fa-var-sign-in: "\f090";
-$fa-var-sign-out: "\f08b";
-$fa-var-signal: "\f012";
-$fa-var-simplybuilt: "\f215";
-$fa-var-sitemap: "\f0e8";
-$fa-var-skyatlas: "\f216";
-$fa-var-skype: "\f17e";
-$fa-var-slack: "\f198";
-$fa-var-sliders: "\f1de";
-$fa-var-slideshare: "\f1e7";
-$fa-var-smile-o: "\f118";
-$fa-var-soccer-ball-o: "\f1e3";
-$fa-var-sort: "\f0dc";
-$fa-var-sort-alpha-asc: "\f15d";
-$fa-var-sort-alpha-desc: "\f15e";
-$fa-var-sort-amount-asc: "\f160";
-$fa-var-sort-amount-desc: "\f161";
-$fa-var-sort-asc: "\f0de";
-$fa-var-sort-desc: "\f0dd";
-$fa-var-sort-down: "\f0dd";
-$fa-var-sort-numeric-asc: "\f162";
-$fa-var-sort-numeric-desc: "\f163";
-$fa-var-sort-up: "\f0de";
-$fa-var-soundcloud: "\f1be";
-$fa-var-space-shuttle: "\f197";
-$fa-var-spinner: "\f110";
-$fa-var-spoon: "\f1b1";
-$fa-var-spotify: "\f1bc";
-$fa-var-square: "\f0c8";
-$fa-var-square-o: "\f096";
-$fa-var-stack-exchange: "\f18d";
-$fa-var-stack-overflow: "\f16c";
-$fa-var-star: "\f005";
-$fa-var-star-half: "\f089";
-$fa-var-star-half-empty: "\f123";
-$fa-var-star-half-full: "\f123";
-$fa-var-star-half-o: "\f123";
-$fa-var-star-o: "\f006";
-$fa-var-steam: "\f1b6";
-$fa-var-steam-square: "\f1b7";
-$fa-var-step-backward: "\f048";
-$fa-var-step-forward: "\f051";
-$fa-var-stethoscope: "\f0f1";
-$fa-var-stop: "\f04d";
-$fa-var-street-view: "\f21d";
-$fa-var-strikethrough: "\f0cc";
-$fa-var-stumbleupon: "\f1a4";
-$fa-var-stumbleupon-circle: "\f1a3";
-$fa-var-subscript: "\f12c";
-$fa-var-subway: "\f239";
-$fa-var-suitcase: "\f0f2";
-$fa-var-sun-o: "\f185";
-$fa-var-superscript: "\f12b";
-$fa-var-support: "\f1cd";
-$fa-var-table: "\f0ce";
-$fa-var-tablet: "\f10a";
-$fa-var-tachometer: "\f0e4";
-$fa-var-tag: "\f02b";
-$fa-var-tags: "\f02c";
-$fa-var-tasks: "\f0ae";
-$fa-var-taxi: "\f1ba";
-$fa-var-tencent-weibo: "\f1d5";
-$fa-var-terminal: "\f120";
-$fa-var-text-height: "\f034";
-$fa-var-text-width: "\f035";
-$fa-var-th: "\f00a";
-$fa-var-th-large: "\f009";
-$fa-var-th-list: "\f00b";
-$fa-var-thumb-tack: "\f08d";
-$fa-var-thumbs-down: "\f165";
-$fa-var-thumbs-o-down: "\f088";
-$fa-var-thumbs-o-up: "\f087";
-$fa-var-thumbs-up: "\f164";
-$fa-var-ticket: "\f145";
-$fa-var-times: "\f00d";
-$fa-var-times-circle: "\f057";
-$fa-var-times-circle-o: "\f05c";
-$fa-var-tint: "\f043";
-$fa-var-toggle-down: "\f150";
-$fa-var-toggle-left: "\f191";
-$fa-var-toggle-off: "\f204";
-$fa-var-toggle-on: "\f205";
-$fa-var-toggle-right: "\f152";
-$fa-var-toggle-up: "\f151";
-$fa-var-train: "\f238";
-$fa-var-transgender: "\f224";
-$fa-var-transgender-alt: "\f225";
-$fa-var-trash: "\f1f8";
-$fa-var-trash-o: "\f014";
-$fa-var-tree: "\f1bb";
-$fa-var-trello: "\f181";
-$fa-var-trophy: "\f091";
-$fa-var-truck: "\f0d1";
-$fa-var-try: "\f195";
-$fa-var-tty: "\f1e4";
-$fa-var-tumblr: "\f173";
-$fa-var-tumblr-square: "\f174";
-$fa-var-turkish-lira: "\f195";
-$fa-var-twitch: "\f1e8";
-$fa-var-twitter: "\f099";
-$fa-var-twitter-square: "\f081";
-$fa-var-umbrella: "\f0e9";
-$fa-var-underline: "\f0cd";
-$fa-var-undo: "\f0e2";
-$fa-var-university: "\f19c";
-$fa-var-unlink: "\f127";
-$fa-var-unlock: "\f09c";
-$fa-var-unlock-alt: "\f13e";
-$fa-var-unsorted: "\f0dc";
-$fa-var-upload: "\f093";
-$fa-var-usd: "\f155";
-$fa-var-user: "\f007";
-$fa-var-user-md: "\f0f0";
-$fa-var-user-plus: "\f234";
-$fa-var-user-secret: "\f21b";
-$fa-var-user-times: "\f235";
-$fa-var-users: "\f0c0";
-$fa-var-venus: "\f221";
-$fa-var-venus-double: "\f226";
-$fa-var-venus-mars: "\f228";
-$fa-var-viacoin: "\f237";
-$fa-var-video-camera: "\f03d";
-$fa-var-vimeo-square: "\f194";
-$fa-var-vine: "\f1ca";
-$fa-var-vk: "\f189";
-$fa-var-volume-down: "\f027";
-$fa-var-volume-off: "\f026";
-$fa-var-volume-up: "\f028";
-$fa-var-warning: "\f071";
-$fa-var-wechat: "\f1d7";
-$fa-var-weibo: "\f18a";
-$fa-var-weixin: "\f1d7";
-$fa-var-whatsapp: "\f232";
-$fa-var-wheelchair: "\f193";
-$fa-var-wifi: "\f1eb";
-$fa-var-windows: "\f17a";
-$fa-var-won: "\f159";
-$fa-var-wordpress: "\f19a";
-$fa-var-wrench: "\f0ad";
-$fa-var-xing: "\f168";
-$fa-var-xing-square: "\f169";
-$fa-var-yahoo: "\f19e";
-$fa-var-yelp: "\f1e9";
-$fa-var-yen: "\f157";
-$fa-var-youtube: "\f167";
-$fa-var-youtube-play: "\f16a";
-$fa-var-youtube-square: "\f166";
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/font-awesome.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/font-awesome.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/font-awesome.scss
deleted file mode 100644
index 388ac6b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/font-awesome.scss
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
- *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables";
-@import "mixins";
-@import "path";
-@import "core";
-@import "larger";
-@import "fixed-width";
-@import "list";
-@import "bordered-pulled";
-@import "animated";
-@import "rotated-flipped";
-@import "stacked";
-@import "icons";

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/animated-overlay.gif
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/animated-overlay.gif b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/animated-overlay.gif
deleted file mode 100644
index d441f75..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/animated-overlay.gif and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png
deleted file mode 100644
index c3eebb0..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_20_666666_40x40.png
deleted file mode 100644
index ece3388..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_diagonals-thick_20_666666_40x40.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png
deleted file mode 100644
index 5b5dab2..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_0_aaaaaa_40x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_10_000000_40x100.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_10_000000_40x100.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_10_000000_40x100.png
deleted file mode 100644
index ead449a..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_flat_10_000000_40x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_f6f6f6_1x400.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_f6f6f6_1x400.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_f6f6f6_1x400.png
deleted file mode 100644
index 677cde5..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_f6f6f6_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_fdf5ce_1x400.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_fdf5ce_1x400.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_fdf5ce_1x400.png
deleted file mode 100644
index f11d987..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_100_fdf5ce_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png
deleted file mode 100644
index e1c58d6..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_glass_65_ffffff_1x400.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png
deleted file mode 100644
index 10aae7f..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
deleted file mode 100644
index 778764a..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
deleted file mode 100644
index 9828c80..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_222222_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_222222_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_222222_256x240.png
deleted file mode 100644
index e9c8e16..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_222222_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_228ef1_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_228ef1_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_228ef1_256x240.png
deleted file mode 100644
index 8d68c54..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_228ef1_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_454545_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_454545_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_454545_256x240.png
deleted file mode 100755
index 59bd45b..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_454545_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_888888_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_888888_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_888888_256x240.png
deleted file mode 100755
index 6d02426..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_888888_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ef8c08_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ef8c08_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ef8c08_256x240.png
deleted file mode 100644
index 18bbfe8..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ef8c08_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffd27a_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffd27a_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffd27a_256x240.png
deleted file mode 100644
index 4435b49..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffd27a_256x240.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffffff_256x240.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffffff_256x240.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffffff_256x240.png
deleted file mode 100644
index 4d66f59..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/jquery-ui/css/images/ui-icons_ffffff_256x240.png and /dev/null differ


[21/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/select2/select2x2.png
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/select2/select2x2.png b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/select2/select2x2.png
deleted file mode 100644
index 4bdd5c9..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/select2/select2x2.png and /dev/null differ


[49/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
deleted file mode 100644
index 71039ed..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.spec.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * 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.
- */
-
-import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {FormsModule} from '@angular/forms';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-
-import {FilterTextFieldComponent} from './filter-text-field.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('FilterTextFieldComponent', () => {
-  let component: FilterTextFieldComponent;
-  let fixture: ComponentFixture<FilterTextFieldComponent>;
-  const filtering = {
-    filters: {
-      f: {}
-    }
-  };
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [FilterTextFieldComponent],
-      imports: [
-        FormsModule,
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        }),
-        StoreModule.provideStore({
-          appSettings
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        {
-          provide: FilteringService,
-          useValue: filtering
-        },
-        UtilsService,
-        ComponentActionsService
-      ],
-      schemas: [CUSTOM_ELEMENTS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(FilterTextFieldComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
deleted file mode 100644
index 2b6bfea..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filter-text-field/filter-text-field.component.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input, forwardRef} from '@angular/core';
-import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormGroup} from '@angular/forms';
-import {Subject} from 'rxjs/Subject';
-import 'rxjs/add/operator/debounceTime';
-import {UtilsService} from '@app/services/utils.service';
-
-@Component({
-  selector: 'filter-text-field',
-  templateUrl: './filter-text-field.component.html',
-  styleUrls: ['./filter-text-field.component.less'],
-  providers: [
-    {
-      provide: NG_VALUE_ACCESSOR,
-      useExisting: forwardRef(() => FilterTextFieldComponent),
-      multi: true
-    }
-  ]
-})
-export class FilterTextFieldComponent implements ControlValueAccessor {
-
-  constructor(private utils: UtilsService) {
-    this.valueSubject.debounceTime(this.debounceInterval).subscribe(value => this.updateValue({
-      value
-    }));
-  }
-
-  @Input()
-  label: string;
-
-  private selectedValue: string;
-
-  private onChange: (fn: any) => void;
-
-  private readonly debounceInterval = 1500;
-
-  instantValue: string;
-
-  private valueSubject = new Subject<string>();
-
-  get value(): any {
-    return this.selectedValue;
-  }
-
-  set value(newValue: any) {
-    this.selectedValue = newValue;
-    this.onChange(newValue);
-  }
-
-  updateValue(options: any) {
-    const value = options && options.value;
-    if (this.utils.valueHasChanged(this.selectedValue, value)) {
-      this.value = value;
-    }
-  }
-
-  writeValue() {
-  }
-
-  registerOnChange(callback: any): void {
-    this.onChange = callback;
-  }
-
-  registerOnTouched() {
-  }
-
-  updateInstantValue(value: string): void {
-    this.valueSubject.next(value);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
deleted file mode 100644
index 6df6988..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-  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.
--->
-
-<form class="col-md-12" [formGroup]="filtersForm">
-  <div class="form-inline filter-input-container col-md-8">
-    <filter-dropdown [label]="filters.clusters.label" formControlName="clusters" [options]="filters.clusters.options"
-                     [defaultLabel]="filters.clusters.defaultLabel" [isMultipleChoice]="true"></filter-dropdown>
-    <filter-text-field [label]="filters.text.label"
-                       formControlName="text"></filter-text-field>
-    <filter-dropdown formControlName="timeRange" [options]="filters.timeRange.options"
-                     [defaultLabel]="filters.timeRange.defaultLabel"></filter-dropdown>
-    <timezone-picker></timezone-picker>
-    <!--button class="btn btn-success" type="button">
-      <span class="fa fa-search"></span>
-    </button-->
-  </div>
-  <div class="default-flex col-md-4">
-    <a href="#">
-      <span class="fa fa-search-minus"></span> {{'filter.excluded' | translate}}
-    </a>
-    <filter-button formControlName="hosts" [label]="filters.hosts.label"
-                   [iconClass]="filters.hosts.iconClass" [subItems]="filters.hosts.options"
-                   [isMultipleChoice]="true" [isRightAlign]="true"
-                   additionalLabelComponentSetter="getDataForHostsNodeBar"></filter-button>
-    <filter-button formControlName="components" [label]="filters.components.label"
-                   [iconClass]="filters.components.iconClass" [subItems]="filters.components.options"
-                   [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
-    <filter-button formControlName="levels" [label]="filters.levels.label" [iconClass]="filters.levels.iconClass"
-                   [subItems]="filters.levels.options" [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
-    <menu-button label="filter.capture" iconClass="fa fa-caret-right"></menu-button>
-  </div>
-</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.less
deleted file mode 100644
index 9ab09ef..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.less
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  display: block;
-  padding: @filters-panel-padding;
-  background-color: @filters-panel-background-color;
-
-  .filter-input-container {
-    .flex-vertical-align;
-    justify-content: flex-start;
-
-    .btn-success {
-      border-top-left-radius: 0;
-      border-bottom-left-radius: 0;
-    }
-
-    filter-dropdown, dropdown-button, timezone-picker {
-      border: @input-border;
-
-      &:not(:last-child) {
-        border-right-width: 0;
-      }
-
-      &:first-child {
-        border-radius: @button-border-radius 0 0 @button-border-radius;
-      }
-
-      &:last-child {
-        border-radius: 0 @button-border-radius @button-border-radius 0;
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.spec.ts
deleted file mode 100644
index b1cf990..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.spec.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {UtilsService} from '@app/services/utils.service';
-
-import {FiltersPanelComponent} from './filters-panel.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('FiltersPanelComponent', () => {
-  let component: FiltersPanelComponent;
-  let fixture: ComponentFixture<FiltersPanelComponent>;
-
-  beforeEach(async(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      declarations: [FiltersPanelComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings,
-          clusters,
-          components,
-          hosts
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        HostsService,
-        FilteringService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        UtilsService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(FiltersPanelComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
deleted file mode 100644
index e407021..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/filters-panel/filters-panel.component.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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.
- */
-
-import {Component} from '@angular/core';
-import {FormGroup} from '@angular/forms';
-import {FilteringService} from '@app/services/filtering.service';
-
-@Component({
-  selector: 'filters-panel',
-  templateUrl: './filters-panel.component.html',
-  styleUrls: ['./filters-panel.component.less']
-})
-export class FiltersPanelComponent {
-
-  constructor(private filtering: FilteringService) {
-    this.filtering.loadClusters();
-    this.filtering.loadComponents();
-    this.filtering.loadHosts();
-  }
-
-  get filters(): any {
-    return this.filtering.filters;
-  }
-
-  get filtersForm(): FormGroup {
-    return this.filtering.filtersForm;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
deleted file mode 100644
index a34cfb8..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-  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.
--->
-
-<div class="login-form well col-md-4 col-md-offset-4 col-sm-offset-4">
-  <div class="alert alert-danger" *ngIf="isLoginAlertDisplayed" [innerHTML]="'authorization.error' | translate"></div>
-  <form #loginForm="ngForm" (ngSubmit)="login()">
-    <div class="form-group">
-      <label for="username">{{'authorization.name' | translate}}</label>
-      <input class="form-control" type="text" id="username" name="username" required [(ngModel)]="username">
-    </div>
-    <div class="form-group">
-      <label for="password">{{'authorization.password' | translate}}</label>
-      <input class="form-control" type="password" id="password" name="password" required [(ngModel)]="password">
-    </div>
-    <button class="btn btn-success" [disabled]="!loginForm.form.valid || isLoginInProgress">
-      {{'authorization.signIn' | translate}}
-    </button>
-  </form>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.less
deleted file mode 100644
index f760ee8..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.less
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.login-form {
-  margin-top: @block-margin-top;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
deleted file mode 100644
index fd54fe6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.spec.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {FormsModule} from '@angular/forms';
-import {HttpModule, Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppStateService, appState} from '@app/services/storage/app-state.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-import {LoginFormComponent} from './login-form.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('LoginFormComponent', () => {
-  let component: LoginFormComponent;
-  let fixture: ComponentFixture<LoginFormComponent>;
-
-  let authMock = {
-    isError: false
-  };
-  const httpClient = {
-    isAuthorized: true,
-    postFormData: () => {
-      return {
-        subscribe: (success: () => void, error: () => void) => {
-          authMock.isError ? error() : success();
-        }
-      }
-    }
-  };
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [LoginFormComponent],
-      imports: [
-        HttpModule,
-        FormsModule,
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        }),
-        StoreModule.provideStore({
-          appState
-        })
-      ],
-      providers: [
-        AppStateService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        }
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(LoginFormComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('#login()', () => {
-    const cases = [
-      {
-        isError: true,
-        isLoginAlertDisplayed: true,
-        isAuthorized: false,
-        title: 'login failure'
-      },
-      {
-        isError: false,
-        isLoginAlertDisplayed: false,
-        isAuthorized: true,
-        title: 'login success'
-      }
-    ];
-
-    cases.forEach(test => {
-      describe(test.title, () => {
-        beforeEach(() => {
-          authMock.isError = test.isError;
-          component.login();
-        });
-
-        it('isLoginAlertDisplayed', () => {
-          expect(component.isLoginAlertDisplayed).toEqual(test.isLoginAlertDisplayed);
-        });
-
-        it('isLoginInProgress', () => {
-          expect(component.isLoginInProgress).toEqual(false);
-        });
-      });
-    });
-
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
deleted file mode 100644
index 2bc45404..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/login-form/login-form.component.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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.
- */
-
-import {Component} from '@angular/core';
-import 'rxjs/add/operator/finally';
-import {HttpClientService} from '@app/services/http-client.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-
-@Component({
-  selector: 'login-form',
-  templateUrl: './login-form.component.html',
-  styleUrls: ['./login-form.component.less']
-})
-export class LoginFormComponent {
-
-  constructor(private httpClient: HttpClientService, private appState: AppStateService) {
-    appState.getParameter('isLoginInProgress').subscribe(value => this.isLoginInProgress = value);
-  }
-
-  username: string;
-
-  password: string;
-
-  isLoginAlertDisplayed: boolean;
-
-  isLoginInProgress: boolean;
-
-  private setIsAuthorized(value: boolean): void {
-    this.appState.setParameters({
-      isAuthorized: value,
-      isLoginInProgress: false
-    });
-    this.isLoginAlertDisplayed = !value;
-  }
-
-  login() {
-    this.appState.setParameter('isLoginInProgress', true);
-    this.httpClient.postFormData('login', {
-      username: this.username,
-      password: this.password
-    }).subscribe(() => this.setIsAuthorized(true), () => this.setIsAuthorized(false));
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.html
deleted file mode 100644
index a43f6c0..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  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.
--->
-
-<time-histogram class="col-md-12" [data]="histogramData" [customOptions]="histogramOptions"></time-histogram>
-<dropdown-button class="pull-right" label="logs.columns" [options]="availableColumns | async" [isRightAlign]="true"
-                 isMultipleChoice="true" action="updateSelectedColumns"
-                 [additionalArgs]="logsTypeMapObject.fieldsModel"></dropdown-button>
-<logs-list [logs]="logs | async" [totalCount]="totalCount" [displayedColumns]="displayedColumns"></logs-list>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.less
deleted file mode 100644
index 60082d6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.less
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  display: block;
-  overflow: hidden;
-  padding-top: @block-margin-top;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.spec.ts
deleted file mode 100644
index 30c6a33..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.spec.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {AppStateService, appState} from '@app/services/storage/app-state.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
-import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
-import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-
-import {LogsContainerComponent} from './logs-container.component';
-
-describe('LogsContainerComponent', () => {
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
-  let component: LogsContainerComponent;
-  let fixture: ComponentFixture<LogsContainerComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [LogsContainerComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings,
-          appState,
-          clusters,
-          components,
-          auditLogs,
-          auditLogsFields,
-          serviceLogs,
-          serviceLogsFields,
-          serviceLogsHistogramData,
-          hosts
-        })
-      ],
-      providers: [
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        AppSettingsService,
-        AppStateService,
-        ClustersService,
-        ComponentsService,
-        AuditLogsService,
-        AuditLogsFieldsService,
-        ServiceLogsService,
-        ServiceLogsFieldsService,
-        ServiceLogsHistogramDataService,
-        HostsService,
-        FilteringService,
-        UtilsService,
-        LogsContainerService
-      ],
-      schemas: [CUSTOM_ELEMENTS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(LogsContainerComponent);
-    component = fixture.componentInstance;
-    component.logsType = 'serviceLogs';
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.ts
deleted file mode 100644
index 3e2a6c7..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-container/logs-container.component.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit, Input} from '@angular/core';
-import {FormGroup} from '@angular/forms';
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/map';
-import {FilteringService} from '@app/services/filtering.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {AuditLog} from '@app/models/audit-log.model';
-import {ServiceLog} from '@app/models/service-log.model';
-import {LogField} from '@app/models/log-field.model';
-
-@Component({
-  selector: 'logs-container',
-  templateUrl: './logs-container.component.html',
-  styleUrls: ['./logs-container.component.less']
-})
-export class LogsContainerComponent implements OnInit {
-
-  constructor(private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private appState: AppStateService, private filtering: FilteringService, private logsContainer: LogsContainerService) {
-    serviceLogsHistogramStorage.getAll().subscribe(data => this.histogramData = this.logsContainer.getHistogramData(data));
-  }
-
-  ngOnInit() {
-    const fieldsModel = this.logsTypeMapObject.fieldsModel,
-      logsModel = this.logsTypeMapObject.logsModel;
-    this.appState.getParameter(this.logsTypeMapObject.isSetFlag).subscribe(value => this.isLogsSet = value);
-    this.availableColumns = fieldsModel.getAll().map(fields => {
-      return fields.filter(field => field.isAvailable).map(field => {
-        return {
-          value: field.name,
-          label: field.displayName || field.name,
-          isChecked: field.isDisplayed
-        };
-      });
-    });
-    fieldsModel.getAll().subscribe(columns => {
-      const availableFields = columns.filter(field => field.isAvailable),
-        availableNames = availableFields.map(field => field.name);
-      if (availableNames.length && !this.isLogsSet) {
-        this.logs = logsModel.getAll().map(logs => logs.map(log => {
-          let logObject = availableNames.reduce((obj, key) => Object.assign(obj, {
-            [key]: log[key]
-          }), {});
-          if (logObject.level) {
-            logObject.className = logObject.level.toLowerCase();
-          }
-          return logObject;
-        }));
-        this.appState.setParameter(this.logsTypeMapObject.isSetFlag, true);
-      }
-      this.displayedColumns = columns.filter(column => column.isAvailable && column.isDisplayed);
-    });
-    this.logsContainer.loadLogs(this.logsType);
-    this.filtersForm.valueChanges.subscribe(() => this.logsContainer.loadLogs(this.logsType));
-  }
-
-  @Input()
-  logsType: string;
-
-  private isLogsSet: boolean = false;
-
-  get logsTypeMapObject(): any {
-    return this.logsContainer.logsTypeMap[this.logsType];
-  }
-
-  get totalCount(): number {
-    return this.logsContainer.totalCount;
-  }
-
-  logs: Observable<AuditLog[] | ServiceLog[]>;
-
-  availableColumns: Observable<LogField[]>;
-
-  displayedColumns: any[] = [];
-
-  histogramData: any;
-
-  readonly histogramOptions = {
-    keysWithColors: this.logsContainer.colors
-  };
-
-  private get filtersForm(): FormGroup {
-    return this.filtering.filtersForm;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
deleted file mode 100644
index 888c524..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-  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.
--->
-
-<form *ngIf="logs && logs.length" [formGroup]="filtersForm" class="pull-right">
-  <filter-dropdown [label]="filters.sorting.label" formControlName="sorting" [options]="filters.sorting.options"
-                   [defaultLabel]="filters.sorting.defaultLabel" [isRightAlign]="true"></filter-dropdown>
-</form>
-<div class="col-md-12 text-center" *ngIf="logs && logs.length">
-  <div class="logs-header">
-    <div class="col-md-1">{{'logs.status' | translate}}</div>
-    <div class="col-md-11">{{'logs.details' | translate}}</div>
-  </div>
-</div>
-<accordion-panel *ngFor="let log of logs; let i = index" [toggleId]="'details-' + i" class="col-md-12">
-  <ng-template>
-    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'hexagon ' + log.className"></div>
-    <div *ngIf="isColumnDisplayed('level')" [ngClass]="'col-md-1 log-status ' + log.className">{{log.level}}</div>
-    <div *ngIf="isColumnDisplayed('type') || isColumnDisplayed('logtime')" class="col-md-3">
-      <div *ngIf="isColumnDisplayed('type')" class="log-type">{{log.type}}</div>
-      <time *ngIf="isColumnDisplayed('logtime')" class="log-time">
-        {{log.logtime | amTz: timeZone | amDateFormat: timeFormat}}
-      </time>
-    </div>
-    <div class="col-md-6 log-content-wrapper">
-      <div class="collapse log-actions" attr.id="details-{{i}}">
-        <span class="action-icon fa fa-search"></span>
-        <span class="action-icon fa fa-external-link"></span>
-        <span class="action-icon fa fa-bullseye"></span>
-      </div>
-      <div class="log-content-inner-wrapper">
-        <div class="log-content" *ngIf="isColumnDisplayed('log_message')">{{log.log_message}}</div>
-      </div>
-    </div>
-    <div *ngFor="let column of displayedColumns">
-      <div *ngIf="customStyledColumns.indexOf(column.name) === -1" [innerHTML]="log[column.name]" class="col-md-1"></div>
-    </div>
-  </ng-template>
-</accordion-panel>
-<pagination class="col-md-12" *ngIf="logs && logs.length" [totalCount]="totalCount" [filtersForm]="filtersForm"
-            [filterInstance]="filters.pageSize" [currentCount]="logs.length"></pagination>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.less
deleted file mode 100644
index 91d796f..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.less
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-.logs-header {
-  // TODO get rid of magic numbers, base on actual design
-  margin: 10px 0;
-  padding: 5px 0;
-  background-color: @list-header-background-color; // TODO implement actual color
-  overflow: hidden;
-  text-transform: uppercase;
-}
-
-/deep/ filter-dropdown {
-  justify-content: flex-end;
-}
-
-.hexagon {
-  // TODO get rid of magic numbers, base on actual design
-  left: -7.5px;
-
-  &.fatal {
-    .common-hexagon(15px, @fatal-color);
-  }
-
-  &.error {
-    .common-hexagon(15px, @error-color);
-  }
-
-  &.warn {
-    .common-hexagon(15px, @warning-color);
-  }
-
-  &.info {
-    .common-hexagon(15px, @info-color);
-  }
-
-  &.debug {
-    .common-hexagon(15px, @debug-color);
-  }
-
-  &.trace {
-    .common-hexagon(15px, @trace-color);
-  }
-
-  &.unknown {
-    .common-hexagon(15px, @unknown-color);
-  }
-}
-
-.log-status {
-  text-transform: uppercase;
-
-  &.fatal {
-    color: @fatal-color;
-  }
-
-  &.error {
-    color: @error-color;
-  }
-
-  &.warn {
-    color: @warning-color;
-  }
-
-  &.info {
-    color: @info-color;
-  }
-
-  &.debug {
-    color: @debug-color;
-  }
-
-  &.trace {
-    color: @trace-color;
-  }
-
-  &.unknown {
-    color: @unknown-color;
-  }
-}
-
-.log-type {
-  color: @link-color;
-}
-
-.log-time {
-  color: @grey-color;
-}
-
-.log-content-wrapper {
-  position: relative;
-
-  // TODO get rid of magic numbers, base on actual design
-  .log-content-inner-wrapper {
-    overflow: hidden;
-    max-height: @default-line-height * 2em;
-    padding-right: 65px;
-
-    .log-content {
-      white-space: pre-wrap;
-    }
-  }
-
-  .log-actions {
-    position: absolute;
-    right: 40px;
-    top: 0;
-    border: @input-border;
-
-    &.collapsing + .log-content-inner-wrapper, &.collapse.in + .log-content-inner-wrapper {
-      min-height: 6em;
-      max-height: none;
-      overflow-x: auto;
-    }
-
-    .action-icon {
-      .clickable-item;
-      display: block;
-      padding: 5px;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.spec.ts
deleted file mode 100644
index 02c3b23..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.spec.ts
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {MomentModule} from 'angular2-moment';
-import {MomentTimezoneModule} from 'angular-moment-timezone';
-import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
-import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {UtilsService} from '@app/services/utils.service';
-
-import {LogsListComponent} from './logs-list.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('LogsListComponent', () => {
-  let component: LogsListComponent;
-  let fixture: ComponentFixture<LogsListComponent>;
-  const httpClient = {
-    get: () => {
-      return {
-        subscribe: () => {
-        }
-      };
-    }
-  };
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [LogsListComponent],
-      imports: [
-        StoreModule.provideStore({
-          auditLogs,
-          serviceLogs,
-          appSettings,
-          clusters,
-          components,
-          hosts
-        }),
-        MomentModule,
-        MomentTimezoneModule,
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        AuditLogsService,
-        ServiceLogsService,
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        HostsService,
-        FilteringService,
-        UtilsService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(LogsListComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
deleted file mode 100644
index 6d73dcb..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/logs-list/logs-list.component.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input} from '@angular/core';
-import {FormGroup} from '@angular/forms';
-import 'rxjs/add/operator/map';
-import {FilteringService} from '@app/services/filtering.service';
-
-@Component({
-  selector: 'logs-list',
-  templateUrl: './logs-list.component.html',
-  styleUrls: ['./logs-list.component.less']
-})
-export class LogsListComponent {
-
-  constructor(private filtering: FilteringService) {
-  }
-
-  @Input()
-  logs: any[] = [];
-
-  @Input()
-  totalCount: number = 0;
-
-  @Input()
-  displayedColumns: any[] = [];
-
-  readonly customStyledColumns = ['level', 'type', 'logtime', 'log_message'];
-
-  timeFormat: string = 'DD/MM/YYYY HH:mm:ss';
-
-  get timeZone(): string {
-    return this.filtering.timeZone;
-  }
-
-  get filters(): any {
-    return this.filtering.filters;
-  }
-  
-  get filtersForm(): FormGroup {
-    return this.filtering.filtersForm;
-  }
-
-  isColumnDisplayed(key: string): boolean {
-    return this.displayedColumns.some(column => column.name === key);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
deleted file mode 100644
index 69b3887..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--
-  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.
--->
-
-<ng-template [ngTemplateOutlet]="template"></ng-template>
-<div *ngIf="isInitialLoading" class="text-center">
-  <span class="fa fa-spinner fa-spin"></span>
-</div>
-<login-form *ngIf="!isInitialLoading && !isAuthorized"></login-form>
-<filters-panel *ngIf="isAuthorized" class="row"></filters-panel>
-<logs-container *ngIf="isAuthorized" logsType="serviceLogs"></logs-container>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.less
deleted file mode 100644
index 9736628..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.less
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.
- */
-
-@import '../variables';
-
-:host {
-  .full-size;
-  overflow-x: hidden;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
deleted file mode 100644
index 42fba68..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.spec.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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.
- */
-
-import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {HttpModule} from '@angular/http';
-import {StoreModule} from '@ngrx/store';
-import {AppStateService, appState} from '@app/services/storage/app-state.service';
-import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-import {MainContainerComponent} from './main-container.component';
-
-describe('MainContainerComponent', () => {
-  let component: MainContainerComponent;
-  let fixture: ComponentFixture<MainContainerComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [MainContainerComponent],
-      imports: [
-        HttpModule,
-        StoreModule.provideStore({
-          appState,
-          auditLogsFields,
-          serviceLogsFields
-        })
-      ],
-      schemas: [CUSTOM_ELEMENTS_SCHEMA],
-      providers: [
-        AppStateService,
-        AuditLogsFieldsService,
-        ServiceLogsFieldsService,
-        HttpClientService
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(MainContainerComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
deleted file mode 100644
index 53d58cf..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/main-container/main-container.component.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, ContentChild, TemplateRef} from '@angular/core';
-import {HttpClientService} from '@app/services/http-client.service';
-import {AppStateService} from '@app/services/storage/app-state.service';
-import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
-import {AuditLogField} from '@app/models/audit-log-field.model';
-import {ServiceLogField} from '@app/models/service-log-field.model';
-
-@Component({
-  selector: 'main-container',
-  templateUrl: './main-container.component.html',
-  styleUrls: ['./main-container.component.less']
-})
-export class MainContainerComponent {
-
-  constructor(private httpClient: HttpClientService, private appState: AppStateService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService) {
-    this.loadColumnsNames();
-    appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
-    appState.getParameter('isInitialLoading').subscribe(value => this.isInitialLoading = value);
-  }
-
-  @ContentChild(TemplateRef)
-  template;
-
-  isAuthorized: boolean = false;
-
-  isInitialLoading: boolean = false;
-
-  private loadColumnsNames(): void {
-    this.httpClient.get('serviceLogsFields').subscribe(response => {
-      const jsonResponse = response.json();
-      if (jsonResponse) {
-        this.serviceLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, ServiceLogField));
-      }
-    });
-    this.httpClient.get('auditLogsFields').subscribe(response => {
-      const jsonResponse = response.json();
-      if (jsonResponse) {
-        this.auditLogsFieldsStorage.addInstances(this.getColumnsArray(jsonResponse, AuditLogField));
-      }
-    });
-  }
-
-  private getColumnsArray(keysObject: any, fieldClass: any): any[] {
-    return Object.keys(keysObject).map(key => new fieldClass(key));
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.html
deleted file mode 100644
index 2f05656..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-  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.
--->
-
-<div #dropdown [ngClass]="{'dropdown': hasSubItems, 'text-center': true}">
-  <a [ngClass]="iconClass + ' icon'" (mousedown)="onMouseDown($event)" (mouseup)="onMouseUp($event)"
-     (click)="$event.stopPropagation()"></a>
-  <a #dropdownToggle class="dropdown-toggle caret" data-toggle="dropdown" *ngIf="hasCaret"></a>
-  <br>
-  <a *ngIf="label" (mousedown)="onMouseDown($event)" [ngClass]="labelClass" (mouseup)="onMouseUp($event)"
-     (click)="$event.stopPropagation()">{{label | translate}}</a>
-  <ul data-component="dropdown-list" *ngIf="hasSubItems" [items]="subItems" (selectedItemChange)="updateValue($event)"
-      [isMultipleChoice]="isMultipleChoice" [additionalLabelComponentSetter]="additionalLabelComponentSetter"
-      [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"></ul>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.less
deleted file mode 100644
index 6a3a43d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.less
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-:host {
-  display: inline-block;
-  cursor: pointer;
-
-  a:hover, a:focus {
-    text-decoration: none;
-  }
-
-  .icon {
-    padding: 5px;
-  }
-
-  .unstyled-link {
-    color: inherit;
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
deleted file mode 100644
index 6c9e021..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.spec.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * 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.
- */
-
-import {NO_ERRORS_SCHEMA} from '@angular/core';
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import {FilteringService} from '@app/services/filtering.service';
-
-import {MenuButtonComponent} from './menu-button.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('MenuButtonComponent', () => {
-  let component: MenuButtonComponent;
-  let fixture: ComponentFixture<MenuButtonComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [MenuButtonComponent],
-      imports: [
-        StoreModule.provideStore({
-          appSettings
-        }),
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        ComponentActionsService,
-        FilteringService
-      ],
-      schemas: [NO_ERRORS_SCHEMA]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(MenuButtonComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-
-  describe('#hasSubItems', () => {
-    const cases = [
-      {
-        subItems: null,
-        hasSubItems: false,
-        title: 'no sub-items'
-      },
-      {
-        subItems: [],
-        hasSubItems: false,
-        title: 'empty sub-items array'
-      },
-      {
-        subItems: [{}],
-        hasSubItems: true,
-        title: 'sub-items present'
-      }
-    ];
-
-    cases.forEach((test) => {
-      it(test.title, () => {
-        component.subItems = test.subItems;
-        expect(component.hasSubItems).toEqual(test.hasSubItems);
-      });
-    });
-  });
-
-  describe('#hasCaret', () => {
-    const cases = [
-      {
-        subItems: null,
-        hasCaret: false,
-        title: 'no sub-items'
-      },
-      {
-        subItems: [],
-        hasCaret: false,
-        title: 'empty sub-items array'
-      },
-      {
-        subItems: [{}],
-        hideCaret: false,
-        hasCaret: true,
-        title: 'sub-items present, caret not hidden'
-      },
-      {
-        subItems: [{}],
-        hideCaret: true,
-        hasCaret: true,
-        title: 'sub-items present, caret hidden'
-      }
-    ];
-
-    cases.forEach((test) => {
-      it(test.title, () => {
-        component.subItems = test.subItems;
-        component.hideCaret = Boolean(test.hideCaret);
-        expect(component.hasSubItems).toEqual(test.hasCaret);
-      });
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
deleted file mode 100644
index b674ec6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/menu-button/menu-button.component.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, Input, ViewChild, ElementRef} from '@angular/core';
-import {ComponentActionsService} from '@app/services/component-actions.service';
-import * as $ from 'jquery';
-
-@Component({
-  selector: 'menu-button',
-  templateUrl: './menu-button.component.html',
-  styleUrls: ['./menu-button.component.less']
-})
-export class MenuButtonComponent {
-
-  constructor(protected actions: ComponentActionsService) {
-  }
-
-  @ViewChild('dropdown')
-  dropdown: ElementRef;
-
-  @Input()
-  label?: string;
-
-  @Input()
-  action: string;
-
-  @Input()
-  iconClass: string;
-
-  @Input()
-  labelClass?: string;
-
-  @Input()
-  subItems?: any[];
-
-  @Input()
-  isMultipleChoice: boolean = false;
-
-  @Input()
-  hideCaret: boolean = false;
-
-  @Input()
-  isRightAlign: boolean = false;
-
-  @Input()
-  additionalLabelComponentSetter?: string;
-
-  get hasSubItems(): boolean {
-    return Boolean(this.subItems && this.subItems.length);
-  }
-
-  get hasCaret(): boolean {
-    return this.hasSubItems && !this.hideCaret;
-  }
-
-  private clickStartTime: number;
-
-  private readonly longClickInterval = 1000;
-
-  onMouseDown(event: MouseEvent): void {
-    if (this.action && event.button === 0) {
-      this.clickStartTime = (new Date()).getTime();
-    }
-  }
-
-  onMouseUp(event: MouseEvent): void {
-    if (event.button === 0) {
-      const clickEndTime = (new Date()).getTime();
-      if (this.hasSubItems && (!this.action || clickEndTime - this.clickStartTime >= this.longClickInterval)) {
-        $(this.dropdown.nativeElement).toggleClass('open');
-      } else if (this.action) {
-        this.actions[this.action]();
-      }
-      event.stopPropagation();
-    }
-  }
-  
-  updateValue(options: any) {
-    // TODO implement value change behaviour
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.html
deleted file mode 100644
index abd7bc8..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-  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.
--->
-
-<div class="modal-backdrop in"></div>
-<div class="modal in">
-  <div [ngClass]="{'modal-dialog': true, 'modal-sm': isSmallModal, 'modal-lg': isLargeModal}">
-    <div class="modal-content">
-      <div *ngIf="showHeader" class="modal-header">
-        <button *ngIf="showCloseButton" type="button" class="close" data-dismiss="modal" (click)="onClose()">
-          <span>&times;</span>
-        </button>
-        <h4 *ngIf="title">{{title}}</h4>
-      </div>
-      <div class="modal-body">
-        <div *ngIf="bodyText">{{bodyText}}</div>
-        <ng-template *ngIf="bodyTemplate" [ngTemplateOutlet]="bodyTemplate"></ng-template>
-      </div>
-      <div *ngIf="showFooter" class="modal-footer">
-        <button *ngIf="showCancelButton" class="btn {{cancelButtonClassName}}"
-                (click)="onCancel()">{{cancelButtonLabel | translate}}</button>
-        <button *ngIf="showSubmitButton" class="btn {{submitButtonClassName}}"
-                (click)="onSubmit()">{{submitButtonLabel | translate}}</button>
-      </div>
-    </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.spec.ts
deleted file mode 100644
index 802bd13..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.spec.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.
- */
-
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
-import {Http} from '@angular/http';
-import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
-import {TranslateHttpLoader} from '@ngx-translate/http-loader';
-
-import {ModalComponent} from './modal.component';
-
-export function HttpLoaderFactory(http: Http) {
-  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
-}
-
-describe('ModalComponent', () => {
-  let component: ModalComponent;
-  let fixture: ComponentFixture<ModalComponent>;
-
-  beforeEach(async(() => {
-    TestBed.configureTestingModule({
-      declarations: [ModalComponent],
-      imports: [
-        TranslateModule.forRoot({
-          provide: TranslateLoader,
-          useFactory: HttpLoaderFactory,
-          deps: [Http]
-        })
-      ]
-    })
-    .compileComponents();
-  }));
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(ModalComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create component', () => {
-    expect(component).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.ts
deleted file mode 100644
index 32f59f6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/modal/modal.component.ts
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * 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.
- */
-
-import {Component, OnInit, AfterViewInit, ElementRef, Input, Output, ContentChild, TemplateRef, EventEmitter} from '@angular/core';
-import * as $ from 'jquery';
-
-@Component({
-  selector: 'modal',
-  templateUrl: './modal.component.html'
-})
-export class ModalComponent implements OnInit, AfterViewInit {
-
-  constructor(private element: ElementRef) {
-    this.rootElement = $(this.element.nativeElement);
-  }
-
-  ngOnInit() {
-    this.modalElements = this.rootElement.find('.in');
-    this.show();
-  }
-
-  ngAfterViewInit() {
-    this.init.emit();
-  }
-
-  private rootElement: JQuery;
-
-  private modalElements: JQuery;
-
-  @Input()
-  showHeader: boolean = true;
-
-  @Input()
-  title: string = '';
-
-  @Input()
-  showCloseButton: boolean = true;
-
-  @Input()
-  bodyText: string = '';
-
-  @Input()
-  showFooter: boolean = true;
-
-  @Input()
-  showSubmitButton: boolean = true;
-
-  @Input()
-  submitButtonLabel: string = 'modal.submit';
-
-  @Input()
-  submitButtonClassName: string = 'btn-success';
-
-  @Input()
-  showCancelButton: boolean = true;
-
-  @Input()
-  cancelButtonLabel: string = 'modal.cancel';
-
-  @Input()
-  cancelButtonClassName: string = 'btn-default';
-
-  @Input()
-  isSmallModal: boolean = false;
-
-  @Input()
-  isLargeModal: boolean = false;
-
-  @ContentChild(TemplateRef)
-  bodyTemplate;
-
-  @Output()
-  init: EventEmitter<any> = new EventEmitter();
-
-  @Output()
-  submit: EventEmitter<any> = new EventEmitter();
-
-  @Output()
-  cancel: EventEmitter<any> = new EventEmitter();
-
-  @Output()
-  close: EventEmitter<any> = new EventEmitter();
-
-  show(): void {
-    this.modalElements.show();
-  }
-
-  hide(): void {
-    this.modalElements.hide();
-  }
-
-  onSubmit(): void {
-    this.hide();
-    this.submit.emit();
-  }
-
-  onCancel(): void {
-    this.hide();
-    this.cancel.emit();
-  }
-
-  onClose(): void {
-    this.hide();
-    this.close.emit();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.html b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.html
deleted file mode 100644
index 96c8619..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-  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.
--->
-
-<div *ngFor="let item of data" class="bar-sector"
-     [ngStyle]="{'background-color': item.color, 'width': (item.value / totalCount * 100) + '%'}"></div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.less b/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.less
deleted file mode 100644
index b78b847..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/components/node-bar/node-bar.component.less
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * 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.
- */
-
-@bar-height: 8px;
-
-:host {
-  display: block;
-  width: 100%;
-
-  .bar-sector {
-    display: inline-block;
-    height: @bar-height;
-
-    &:first-child {
-      border-top-left-radius: @bar-height / 2;
-      border-bottom-left-radius: @bar-height / 2;
-    }
-
-    &:last-child {
-      border-top-right-radius: @bar-height / 2;
-      border-bottom-right-radius: @bar-height / 2;
-    }
-  }
-}


[38/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.ts
new file mode 100644
index 0000000..131edcd
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/accordion-panel/accordion-panel.component.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+import {Component, Input, ContentChild, TemplateRef} from '@angular/core';
+
+@Component({
+  selector: 'accordion-panel',
+  templateUrl: './accordion-panel.component.html',
+  styleUrls: ['./accordion-panel.component.less']
+})
+export class AccordionPanelComponent {
+
+  @Input()
+  toggleId: string;
+
+  @ContentChild(TemplateRef)
+  template;
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.html
new file mode 100644
index 0000000..a0444c9
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.html
@@ -0,0 +1,34 @@
+<!--
+  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.
+-->
+
+<header>
+  <nav class="navbar navbar-fixed-top">
+    <div class="container-fluid">
+      <h1 [ngClass]="{'full-flex-width': !isAuthorized, 'navbar-left': true}">{{'common.title' | translate}}</h1>
+      <top-menu *ngIf="isAuthorized" class="navbar-right"></top-menu>
+    </div>
+  </nav>
+</header>
+
+<main-container>
+  <ng-template>
+    <!-- hidden element for moving the main bar outside the fixed header -->
+    <div class="navbar invisible">
+      <h1>&nbsp;</h1>
+    </div>
+  </ng-template>
+</main-container>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.less
new file mode 100644
index 0000000..d1aa7ff
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.less
@@ -0,0 +1,51 @@
+/**
+ * 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.
+ */
+
+@import 'variables';
+
+:host {
+  .full-size;
+  display: flex;
+  flex-direction: column;
+  background-color: @main-background-color; // TODO implement actual color
+  line-height: @default-line-height;
+
+  .navbar {
+    margin-bottom: 0;
+    border-radius: 0;
+    background-color: @navbar-background-color;
+    color: #fff;
+
+    .container-fluid {
+      .default-flex;
+    }
+
+    h1 {
+      flex-basis: 70%;
+      margin-bottom: @h1-vertical-margin;
+      text-transform: uppercase;
+
+      &.full-flex-width {
+        flex-basis: 100%;
+      }
+    }
+
+    /deep/ top-menu {
+      flex-basis: 30%;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.spec.ts
new file mode 100644
index 0000000..bc16ea4
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.spec.ts
@@ -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.
+ */
+
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {TestBed, async} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+import {AppComponent} from './app.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('AppComponent', () => {
+  beforeEach(async(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {}
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      declarations: [AppComponent],
+      imports: [
+        StoreModule.provideStore({
+          appState
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppStateService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        }
+      ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    }).compileComponents();
+  }));
+
+  it('should create the app', async(() => {
+    const fixture = TestBed.createComponent(AppComponent);
+    const app = fixture.debugElement.componentInstance;
+    expect(app).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.ts
new file mode 100644
index 0000000..4de47ea
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/app.component.ts
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+import {Component} from '@angular/core';
+import {TranslateService} from '@ngx-translate/core';
+import {AppStateService} from '@app/services/storage/app-state.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+@Component({
+  selector: 'app-root',
+  templateUrl: './app.component.html',
+  styleUrls: ['./app.component.less']
+})
+
+export class AppComponent {
+
+  constructor(private httpClient: HttpClientService, private translate: TranslateService, private appState: AppStateService) {
+    appState.getParameter('isAuthorized').subscribe(value => this.isAuthorized = value);
+    appState.setParameter('isInitialLoading', true);
+    this.httpClient.get('status').subscribe(() => this.appState.setParameters({
+      isAuthorized: true,
+      isInitialLoading: false
+    }), () => this.appState.setParameter('isInitialLoading', false));
+    translate.setDefaultLang('en');
+    translate.use('en');
+  }
+
+  isAuthorized: boolean = false;
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
new file mode 100644
index 0000000..a16b205
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.html
@@ -0,0 +1,25 @@
+<!--
+  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.
+-->
+
+<div class="filter-label" *ngIf="label">{{label | translate}}</div>
+<div [ngClass]="{'dropup': isDropup}">
+  <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
+    <span *ngIf="!isMultipleChoice">{{selectedLabel | translate}}</span> <span class="caret"></span>
+  </button>
+  <ul data-component="dropdown-list" [ngClass]="{'dropdown-menu': true, 'dropdown-menu-right': isRightAlign}"
+      [items]="options" [isMultipleChoice]="isMultipleChoice" (selectedItemChange)="updateValue($event)"></ul>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
new file mode 100644
index 0000000..55699b4
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.less
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  .default-flex;
+  position: relative;
+  float: left;
+
+  .filter-label {
+    padding: @input-group-addon-padding;
+  }
+
+  .btn {
+    text-transform: none;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
new file mode 100644
index 0000000..8efe320
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.spec.ts
@@ -0,0 +1,79 @@
+/**
+ * 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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+
+import {DropdownButtonComponent} from './dropdown-button.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('DropdownButtonComponent', () => {
+  let component: DropdownButtonComponent;
+  let fixture: ComponentFixture<DropdownButtonComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [DropdownButtonComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings,
+          clusters,
+          components
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        FilteringService,
+        UtilsService,
+        ComponentActionsService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DropdownButtonComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
new file mode 100644
index 0000000..5800190
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-button/dropdown-button.component.ts
@@ -0,0 +1,96 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit, Input} from '@angular/core';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {UtilsService} from '@app/services/utils.service';
+
+@Component({
+  selector: 'dropdown-button',
+  templateUrl: './dropdown-button.component.html',
+  styleUrls: ['./dropdown-button.component.less']
+})
+export class DropdownButtonComponent implements OnInit {
+
+  constructor(protected actions: ComponentActionsService, protected utils: UtilsService) {
+  }
+
+  ngOnInit() {
+    this.selectedLabel = this.defaultLabel;
+  }
+  
+  @Input()
+  label?: string;
+
+  @Input()
+  options?: any[];
+
+  @Input()
+  defaultValue?: string;
+
+  @Input()
+  defaultLabel?: string;
+
+  @Input()
+  action?: string;
+
+  @Input()
+  additionalArgs: any[] = [];
+
+  @Input()
+  isMultipleChoice: boolean = false;
+
+  @Input()
+  isRightAlign: boolean = false;
+
+  @Input()
+  isDropup: boolean = false;
+
+  protected selectedValue?: any;
+
+  selectedLabel: string;
+
+  get value(): any {
+    return this.selectedValue;
+  }
+
+  set value(value: any) {
+    this.selectedValue = value;
+  }
+
+  updateValue(eventOptions: any): void {
+    const value = eventOptions && eventOptions.value,
+      action = this.action && this.actions[this.action];
+    if (this.isMultipleChoice) {
+      this.value = this.utils.updateMultiSelectValue(this.value, value, eventOptions.isChecked);
+      this.options.find(item => item.value === value).isChecked = eventOptions.isChecked;
+      if (action) {
+        action(this.options.filter(item => item.isChecked).map(item => item.value), ...this.additionalArgs);
+      }
+    } else {
+      if (this.utils.valueHasChanged(this.value, value)) {
+        this.value = value;
+        this.selectedLabel = eventOptions.label;
+        if (action) {
+          action(this.value, ...this.additionalArgs);
+        }
+      }
+    }
+  }
+  
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
new file mode 100644
index 0000000..1baebed
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.html
@@ -0,0 +1,31 @@
+<!--
+  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.
+-->
+
+<li *ngFor="let item of items">
+  <label class="list-item-label" *ngIf="isMultipleChoice">
+    <input type="checkbox" [attr.id]="item.id || item.value" [attr.checked]="item.isChecked ? 'checked' : null"
+           (change)="changeSelectedItem({value: item.value, isChecked: $event.currentTarget.checked})">
+    <label [attr.for]="item.id || item.value" class="label-container">{{item.label | translate}}
+      <div #additionalComponent></div>
+    </label>
+  </label>
+  <span class="list-item-label label-container" *ngIf="!isMultipleChoice"
+        (click)="changeSelectedItem({value: item.value, label: item.label})">
+    {{item.label | translate}}
+    <div #additionalComponent></div>
+  </span>
+</li>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.less
new file mode 100644
index 0000000..d47160f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.less
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  max-height: 500px; // TODO get rid of magic number, base on actual design
+  overflow-y: auto;
+
+  .list-item-label {
+    .dropdown-item-default;
+
+    label {
+      margin-bottom: 0;
+      cursor: pointer;
+    }
+
+    input[type=checkbox]:checked + label:after {
+      top: @checkbox-top;
+    }
+
+    .label-container {
+      width: 100%;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts
new file mode 100644
index 0000000..5409d30
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.spec.ts
@@ -0,0 +1,130 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {ComponentGeneratorService} from '@app/services/component-generator.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+
+import {DropdownListComponent} from './dropdown-list.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('DropdownListComponent', () => {
+  let component: DropdownListComponent;
+  let fixture: ComponentFixture<DropdownListComponent>;
+
+  beforeEach(async(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {
+          }
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      declarations: [DropdownListComponent],
+      imports: [
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        }),
+        StoreModule.provideStore({
+          hosts,
+          auditLogs,
+          serviceLogs,
+          auditLogsFields,
+          serviceLogsFields,
+          serviceLogsHistogramData,
+          appSettings,
+          clusters,
+          components
+        })
+      ],
+      providers: [
+        ComponentGeneratorService,
+        LogsContainerService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        FilteringService,
+        HostsService,
+        AuditLogsService,
+        ServiceLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
+        AppSettingsService,
+        ClustersService,
+        ComponentsService
+      ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DropdownListComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('#changeSelectedItem()', () => {
+
+    const options = {
+      label: 'l',
+      value: 'v'
+    };
+
+    beforeEach(() => {
+      spyOn(component.selectedItemChange, 'emit').and.callFake(() => {});
+      component.changeSelectedItem(options);
+    });
+
+    it('event should be emitted', () => {
+      expect(component.selectedItemChange.emit).toHaveBeenCalled();
+    });
+
+    it('event emitter should be called with correct arguments', () => {
+      expect(component.selectedItemChange.emit).toHaveBeenCalledWith(options);
+    });
+
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
new file mode 100644
index 0000000..3de664e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/dropdown-list/dropdown-list.component.ts
@@ -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.
+ */
+
+import {Component, AfterViewInit, Input, Output, EventEmitter, ViewChildren, ViewContainerRef, QueryList} from '@angular/core';
+import {ComponentGeneratorService} from '@app/services/component-generator.service';
+
+@Component({
+  selector: 'ul[data-component="dropdown-list"]',
+  templateUrl: './dropdown-list.component.html',
+  styleUrls: ['./dropdown-list.component.less']
+})
+export class DropdownListComponent implements AfterViewInit {
+
+  constructor(private componentGenerator: ComponentGeneratorService) {
+  }
+
+  ngAfterViewInit() {
+    const setter = this.additionalLabelComponentSetter;
+    if (setter) {
+      this.containers.forEach((container, index) => this.componentGenerator[setter](this.items[index].value, container));
+    }
+  }
+
+  @Input()
+  items: any[];
+
+  @Input()
+  defaultAction: Function;
+
+  @Input()
+  isMultipleChoice?: boolean = false;
+
+  @Input()
+  additionalLabelComponentSetter?: string;
+
+  @Output()
+  selectedItemChange: EventEmitter<any> = new EventEmitter();
+
+  @ViewChildren('additionalComponent', {
+    read: ViewContainerRef
+  })
+  containers: QueryList<ViewContainerRef>;
+
+  changeSelectedItem(options: any): void {
+    this.selectedItemChange.emit(options);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
new file mode 100644
index 0000000..5d58b5c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.spec.ts
@@ -0,0 +1,78 @@
+/**
+ * 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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+
+import {FilterButtonComponent} from './filter-button.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('FilterButtonComponent', () => {
+  let component: FilterButtonComponent;
+  let fixture: ComponentFixture<FilterButtonComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [FilterButtonComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings,
+          clusters,
+          components
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })],
+      providers: [
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        ComponentActionsService,
+        FilteringService,
+        UtilsService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(FilterButtonComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
new file mode 100644
index 0000000..9940d73
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-button/filter-button.component.ts
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+
+import {Component, Input, forwardRef} from '@angular/core';
+import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {UtilsService} from '@app/services/utils.service';
+import {MenuButtonComponent} from '@app/components/menu-button/menu-button.component';
+
+@Component({
+  selector: 'filter-button',
+  templateUrl: '../menu-button/menu-button.component.html',
+  styleUrls: ['../menu-button/menu-button.component.less'],
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => FilterButtonComponent),
+      multi: true
+    }
+  ]
+})
+export class FilterButtonComponent extends MenuButtonComponent implements ControlValueAccessor {
+
+  constructor(protected actions: ComponentActionsService, private utils: UtilsService) {
+    super(actions);
+  }
+
+  @Input()
+  defaultValue?: string;
+
+  private selectedValue: any;
+
+  private onChange: (fn: any) => void;
+
+  get value(): any {
+    return this.selectedValue;
+  }
+
+  set value(newValue: any) {
+    this.selectedValue = newValue;
+    this.onChange(newValue);
+  }
+
+  updateValue(options: any): void {
+    const value = options && options.value;
+    if (this.isMultipleChoice) {
+      this.value = this.utils.updateMultiSelectValue(this.value, value, options.isChecked);
+    } else {
+      if (this.utils.valueHasChanged(this.selectedValue, value)) {
+        this.value = value;
+      }
+    }
+  }
+
+  writeValue() {
+  }
+
+  registerOnChange(callback: any): void {
+    this.onChange = callback;
+  }
+
+  registerOnTouched() {
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
new file mode 100644
index 0000000..323aa56
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.spec.ts
@@ -0,0 +1,92 @@
+/**
+ * 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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+
+import {FilterDropdownComponent} from './filter-dropdown.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('FilterDropdownComponent', () => {
+  let component: FilterDropdownComponent;
+  let fixture: ComponentFixture<FilterDropdownComponent>;
+  const filtering = {
+    filters: {
+      f: {
+        options: [
+          {
+            value: 'v0',
+            label: 'l0'
+          },
+          {
+            value: 'v1',
+            label: 'l1'
+          }
+        ]
+      }
+    }
+  };
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [FilterDropdownComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        {
+          provide: FilteringService,
+          useValue: filtering
+        },
+        UtilsService,
+        ComponentActionsService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(FilterDropdownComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.ts
new file mode 100644
index 0000000..9e5a6f1
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-dropdown/filter-dropdown.component.ts
@@ -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.
+ */
+
+import {Component, forwardRef} from '@angular/core';
+import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {UtilsService} from '@app/services/utils.service';
+import {DropdownButtonComponent} from '@app/components/dropdown-button/dropdown-button.component';
+
+@Component({
+  selector: 'filter-dropdown',
+  templateUrl: '../dropdown-button/dropdown-button.component.html',
+  styleUrls: ['../dropdown-button/dropdown-button.component.less'],
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => FilterDropdownComponent),
+      multi: true
+    }
+  ]
+})
+export class FilterDropdownComponent extends DropdownButtonComponent implements ControlValueAccessor {
+
+  constructor(protected actions: ComponentActionsService, protected utils: UtilsService) {
+    super(actions, utils);
+  }
+
+  private onChange: (fn: any) => void;
+
+  get value(): any {
+    return this.selectedValue;
+  }
+
+  set value(newValue: any) {
+    this.selectedValue = newValue;
+    this.onChange(newValue);
+  }
+
+  writeValue() {
+  }
+
+  registerOnChange(callback: any): void {
+    this.onChange = callback;
+  }
+
+  registerOnTouched() {
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.html
new file mode 100644
index 0000000..3f00e8b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.html
@@ -0,0 +1,21 @@
+<!--
+  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.
+-->
+
+<div class="input-group">
+  <span class="input-group-addon">{{label | translate}}</span>
+  <input type="text" class="form-control" [(ngModel)]="instantValue" (ngModelChange)="updateInstantValue($event)">
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.less
new file mode 100644
index 0000000..1395959
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.less
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+.input-group {
+  border: @input-border;
+  border-right-width: 0;
+}
+
+.input-group-addon {
+  border: none;
+  background-color: transparent;
+  text-transform: uppercase;
+
+  & + input {
+    border: none;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.spec.ts
new file mode 100644
index 0000000..71039ed
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.spec.ts
@@ -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.
+ */
+
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {FormsModule} from '@angular/forms';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+
+import {FilterTextFieldComponent} from './filter-text-field.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('FilterTextFieldComponent', () => {
+  let component: FilterTextFieldComponent;
+  let fixture: ComponentFixture<FilterTextFieldComponent>;
+  const filtering = {
+    filters: {
+      f: {}
+    }
+  };
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [FilterTextFieldComponent],
+      imports: [
+        FormsModule,
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        }),
+        StoreModule.provideStore({
+          appSettings
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        {
+          provide: FilteringService,
+          useValue: filtering
+        },
+        UtilsService,
+        ComponentActionsService
+      ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(FilterTextFieldComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.ts
new file mode 100644
index 0000000..2b6bfea
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filter-text-field/filter-text-field.component.ts
@@ -0,0 +1,87 @@
+/**
+ * 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.
+ */
+
+import {Component, Input, forwardRef} from '@angular/core';
+import {ControlValueAccessor, NG_VALUE_ACCESSOR, FormGroup} from '@angular/forms';
+import {Subject} from 'rxjs/Subject';
+import 'rxjs/add/operator/debounceTime';
+import {UtilsService} from '@app/services/utils.service';
+
+@Component({
+  selector: 'filter-text-field',
+  templateUrl: './filter-text-field.component.html',
+  styleUrls: ['./filter-text-field.component.less'],
+  providers: [
+    {
+      provide: NG_VALUE_ACCESSOR,
+      useExisting: forwardRef(() => FilterTextFieldComponent),
+      multi: true
+    }
+  ]
+})
+export class FilterTextFieldComponent implements ControlValueAccessor {
+
+  constructor(private utils: UtilsService) {
+    this.valueSubject.debounceTime(this.debounceInterval).subscribe(value => this.updateValue({
+      value
+    }));
+  }
+
+  @Input()
+  label: string;
+
+  private selectedValue: string;
+
+  private onChange: (fn: any) => void;
+
+  private readonly debounceInterval = 1500;
+
+  instantValue: string;
+
+  private valueSubject = new Subject<string>();
+
+  get value(): any {
+    return this.selectedValue;
+  }
+
+  set value(newValue: any) {
+    this.selectedValue = newValue;
+    this.onChange(newValue);
+  }
+
+  updateValue(options: any) {
+    const value = options && options.value;
+    if (this.utils.valueHasChanged(this.selectedValue, value)) {
+      this.value = value;
+    }
+  }
+
+  writeValue() {
+  }
+
+  registerOnChange(callback: any): void {
+    this.onChange = callback;
+  }
+
+  registerOnTouched() {
+  }
+
+  updateInstantValue(value: string): void {
+    this.valueSubject.next(value);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
new file mode 100644
index 0000000..6df6988
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.html
@@ -0,0 +1,46 @@
+<!--
+  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.
+-->
+
+<form class="col-md-12" [formGroup]="filtersForm">
+  <div class="form-inline filter-input-container col-md-8">
+    <filter-dropdown [label]="filters.clusters.label" formControlName="clusters" [options]="filters.clusters.options"
+                     [defaultLabel]="filters.clusters.defaultLabel" [isMultipleChoice]="true"></filter-dropdown>
+    <filter-text-field [label]="filters.text.label"
+                       formControlName="text"></filter-text-field>
+    <filter-dropdown formControlName="timeRange" [options]="filters.timeRange.options"
+                     [defaultLabel]="filters.timeRange.defaultLabel"></filter-dropdown>
+    <timezone-picker></timezone-picker>
+    <!--button class="btn btn-success" type="button">
+      <span class="fa fa-search"></span>
+    </button-->
+  </div>
+  <div class="default-flex col-md-4">
+    <a href="#">
+      <span class="fa fa-search-minus"></span> {{'filter.excluded' | translate}}
+    </a>
+    <filter-button formControlName="hosts" [label]="filters.hosts.label"
+                   [iconClass]="filters.hosts.iconClass" [subItems]="filters.hosts.options"
+                   [isMultipleChoice]="true" [isRightAlign]="true"
+                   additionalLabelComponentSetter="getDataForHostsNodeBar"></filter-button>
+    <filter-button formControlName="components" [label]="filters.components.label"
+                   [iconClass]="filters.components.iconClass" [subItems]="filters.components.options"
+                   [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
+    <filter-button formControlName="levels" [label]="filters.levels.label" [iconClass]="filters.levels.iconClass"
+                   [subItems]="filters.levels.options" [isMultipleChoice]="true" [isRightAlign]="true"></filter-button>
+    <menu-button label="filter.capture" iconClass="fa fa-caret-right"></menu-button>
+  </div>
+</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
new file mode 100644
index 0000000..9ab09ef
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.less
@@ -0,0 +1,51 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  display: block;
+  padding: @filters-panel-padding;
+  background-color: @filters-panel-background-color;
+
+  .filter-input-container {
+    .flex-vertical-align;
+    justify-content: flex-start;
+
+    .btn-success {
+      border-top-left-radius: 0;
+      border-bottom-left-radius: 0;
+    }
+
+    filter-dropdown, dropdown-button, timezone-picker {
+      border: @input-border;
+
+      &:not(:last-child) {
+        border-right-width: 0;
+      }
+
+      &:first-child {
+        border-radius: @button-border-radius 0 0 @button-border-radius;
+      }
+
+      &:last-child {
+        border-radius: 0 @button-border-radius @button-border-radius 0;
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
new file mode 100644
index 0000000..b1cf990
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.spec.ts
@@ -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.
+ */
+
+import {NO_ERRORS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {UtilsService} from '@app/services/utils.service';
+
+import {FiltersPanelComponent} from './filters-panel.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('FiltersPanelComponent', () => {
+  let component: FiltersPanelComponent;
+  let fixture: ComponentFixture<FiltersPanelComponent>;
+
+  beforeEach(async(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {
+          }
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      declarations: [FiltersPanelComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings,
+          clusters,
+          components,
+          hosts
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        FilteringService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        UtilsService
+      ],
+      schemas: [NO_ERRORS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(FiltersPanelComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
new file mode 100644
index 0000000..e407021
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/filters-panel/filters-panel.component.ts
@@ -0,0 +1,44 @@
+/**
+ * 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.
+ */
+
+import {Component} from '@angular/core';
+import {FormGroup} from '@angular/forms';
+import {FilteringService} from '@app/services/filtering.service';
+
+@Component({
+  selector: 'filters-panel',
+  templateUrl: './filters-panel.component.html',
+  styleUrls: ['./filters-panel.component.less']
+})
+export class FiltersPanelComponent {
+
+  constructor(private filtering: FilteringService) {
+    this.filtering.loadClusters();
+    this.filtering.loadComponents();
+    this.filtering.loadHosts();
+  }
+
+  get filters(): any {
+    return this.filtering.filters;
+  }
+
+  get filtersForm(): FormGroup {
+    return this.filtering.filtersForm;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
new file mode 100644
index 0000000..a34cfb8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.html
@@ -0,0 +1,33 @@
+<!--
+  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.
+-->
+
+<div class="login-form well col-md-4 col-md-offset-4 col-sm-offset-4">
+  <div class="alert alert-danger" *ngIf="isLoginAlertDisplayed" [innerHTML]="'authorization.error' | translate"></div>
+  <form #loginForm="ngForm" (ngSubmit)="login()">
+    <div class="form-group">
+      <label for="username">{{'authorization.name' | translate}}</label>
+      <input class="form-control" type="text" id="username" name="username" required [(ngModel)]="username">
+    </div>
+    <div class="form-group">
+      <label for="password">{{'authorization.password' | translate}}</label>
+      <input class="form-control" type="password" id="password" name="password" required [(ngModel)]="password">
+    </div>
+    <button class="btn btn-success" [disabled]="!loginForm.form.valid || isLoginInProgress">
+      {{'authorization.signIn' | translate}}
+    </button>
+  </form>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
new file mode 100644
index 0000000..f760ee8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.less
@@ -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.
+ */
+
+@import '../variables';
+
+.login-form {
+  margin-top: @block-margin-top;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
new file mode 100644
index 0000000..fd54fe6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.spec.ts
@@ -0,0 +1,122 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {FormsModule} from '@angular/forms';
+import {HttpModule, Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+import {LoginFormComponent} from './login-form.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('LoginFormComponent', () => {
+  let component: LoginFormComponent;
+  let fixture: ComponentFixture<LoginFormComponent>;
+
+  let authMock = {
+    isError: false
+  };
+  const httpClient = {
+    isAuthorized: true,
+    postFormData: () => {
+      return {
+        subscribe: (success: () => void, error: () => void) => {
+          authMock.isError ? error() : success();
+        }
+      }
+    }
+  };
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [LoginFormComponent],
+      imports: [
+        HttpModule,
+        FormsModule,
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        }),
+        StoreModule.provideStore({
+          appState
+        })
+      ],
+      providers: [
+        AppStateService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        }
+      ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(LoginFormComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('#login()', () => {
+    const cases = [
+      {
+        isError: true,
+        isLoginAlertDisplayed: true,
+        isAuthorized: false,
+        title: 'login failure'
+      },
+      {
+        isError: false,
+        isLoginAlertDisplayed: false,
+        isAuthorized: true,
+        title: 'login success'
+      }
+    ];
+
+    cases.forEach(test => {
+      describe(test.title, () => {
+        beforeEach(() => {
+          authMock.isError = test.isError;
+          component.login();
+        });
+
+        it('isLoginAlertDisplayed', () => {
+          expect(component.isLoginAlertDisplayed).toEqual(test.isLoginAlertDisplayed);
+        });
+
+        it('isLoginInProgress', () => {
+          expect(component.isLoginInProgress).toEqual(false);
+        });
+      });
+    });
+
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
new file mode 100644
index 0000000..2bc45404
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/login-form/login-form.component.ts
@@ -0,0 +1,59 @@
+/**
+ * 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.
+ */
+
+import {Component} from '@angular/core';
+import 'rxjs/add/operator/finally';
+import {HttpClientService} from '@app/services/http-client.service';
+import {AppStateService} from '@app/services/storage/app-state.service';
+
+@Component({
+  selector: 'login-form',
+  templateUrl: './login-form.component.html',
+  styleUrls: ['./login-form.component.less']
+})
+export class LoginFormComponent {
+
+  constructor(private httpClient: HttpClientService, private appState: AppStateService) {
+    appState.getParameter('isLoginInProgress').subscribe(value => this.isLoginInProgress = value);
+  }
+
+  username: string;
+
+  password: string;
+
+  isLoginAlertDisplayed: boolean;
+
+  isLoginInProgress: boolean;
+
+  private setIsAuthorized(value: boolean): void {
+    this.appState.setParameters({
+      isAuthorized: value,
+      isLoginInProgress: false
+    });
+    this.isLoginAlertDisplayed = !value;
+  }
+
+  login() {
+    this.appState.setParameter('isLoginInProgress', true);
+    this.httpClient.postFormData('login', {
+      username: this.username,
+      password: this.password
+    }).subscribe(() => this.setIsAuthorized(true), () => this.setIsAuthorized(false));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
new file mode 100644
index 0000000..a43f6c0
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.html
@@ -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.
+-->
+
+<time-histogram class="col-md-12" [data]="histogramData" [customOptions]="histogramOptions"></time-histogram>
+<dropdown-button class="pull-right" label="logs.columns" [options]="availableColumns | async" [isRightAlign]="true"
+                 isMultipleChoice="true" action="updateSelectedColumns"
+                 [additionalArgs]="logsTypeMapObject.fieldsModel"></dropdown-button>
+<logs-list [logs]="logs | async" [totalCount]="totalCount" [displayedColumns]="displayedColumns"></logs-list>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
new file mode 100644
index 0000000..60082d6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.less
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+@import '../variables';
+
+:host {
+  display: block;
+  overflow: hidden;
+  padding-top: @block-margin-top;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
new file mode 100644
index 0000000..30c6a33
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/logs-container/logs-container.component.spec.ts
@@ -0,0 +1,102 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {UtilsService} from '@app/services/utils.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+
+import {LogsContainerComponent} from './logs-container.component';
+
+describe('LogsContainerComponent', () => {
+  const httpClient = {
+    get: () => {
+      return {
+        subscribe: () => {
+        }
+      };
+    }
+  };
+  let component: LogsContainerComponent;
+  let fixture: ComponentFixture<LogsContainerComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [LogsContainerComponent],
+      imports: [
+        StoreModule.provideStore({
+          appSettings,
+          appState,
+          clusters,
+          components,
+          auditLogs,
+          auditLogsFields,
+          serviceLogs,
+          serviceLogsFields,
+          serviceLogsHistogramData,
+          hosts
+        })
+      ],
+      providers: [
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        AppSettingsService,
+        AppStateService,
+        ClustersService,
+        ComponentsService,
+        AuditLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
+        HostsService,
+        FilteringService,
+        UtilsService,
+        LogsContainerService
+      ],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(LogsContainerComponent);
+    component = fixture.componentInstance;
+    component.logsType = 'serviceLogs';
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});


[16/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/jstz-1.0.4.min.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/jstz-1.0.4.min.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/jstz-1.0.4.min.js
deleted file mode 100644
index 96e3dd8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/timezone/jstz-1.0.4.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! jstz - v1.0.4 - 2012-12-12 */
-(function(e){var t=function(){"use strict";var e="s",n=function(e){var t=-e.getTimezoneOffset();return t!==null?t:0},r=function(e,t,n){var r=new Date;return e!==undefined&&r.setFullYear(e),r.setDate(n),r.setMonth(t),r},i=function(e){return n(r(e,0,2))},s=function(e){return n(r(e,5,2))},o=function(e){var t=e.getMonth()>7?s(e.getFullYear()):i(e.getFullYear()),r=n(e);return t-r!==0},u=function(){var t=i(),n=s(),r=i()-s();return r<0?t+",1":r>0?n+",1,"+e:t+",0"},a=function(){var e=u();return new t.TimeZone(t.olson.timezones[e])};return{determine:a,date_is_dst:o}}();t.TimeZone=function(e){"use strict";var n=null,r=function(){return n},i=function(){var e=t.olson.ambiguity_list[n],r=e.length,i=0,s=e[0];for(;i<r;i+=1){s=e[i];if(t.date_is_dst(t.olson.dst_start_dates[s])){n=s;return}}},s=function(){return typeof t.olson.ambiguity_list[n]!="undefined"};return n=e,s()&&i(),{name:r}},t.olson={},t.olson.timezones={"-720,0":"Etc/GMT+12","-660,0":"Pacific/Pago_Pago","-600,1":"America/Adak","-600,0":
 "Pacific/Honolulu","-570,0":"Pacific/Marquesas","-540,0":"Pacific/Gambier","-540,1":"America/Anchorage","-480,1":"America/Los_Angeles","-480,0":"Pacific/Pitcairn","-420,0":"America/Phoenix","-420,1":"America/Denver","-360,0":"America/Guatemala","-360,1":"America/Chicago","-360,1,s":"Pacific/Easter","-300,0":"America/Bogota","-300,1":"America/New_York","-270,0":"America/Caracas","-240,1":"America/Halifax","-240,0":"America/Santo_Domingo","-240,1,s":"America/Santiago","-210,1":"America/St_Johns","-180,1":"America/Godthab","-180,0":"America/Argentina/Buenos_Aires","-180,1,s":"America/Montevideo","-120,0":"Etc/GMT+2","-120,1":"Etc/GMT+2","-60,1":"Atlantic/Azores","-60,0":"Atlantic/Cape_Verde","0,0":"Etc/UTC","0,1":"Europe/London","60,1":"Europe/Berlin","60,0":"Africa/Lagos","60,1,s":"Africa/Windhoek","120,1":"Asia/Beirut","120,0":"Africa/Johannesburg","180,0":"Asia/Baghdad","180,1":"Europe/Moscow","210,1":"Asia/Tehran","240,0":"Asia/Dubai","240,1":"Asia/Baku","270,0":"Asia/Kabul","300,1
 ":"Asia/Yekaterinburg","300,0":"Asia/Karachi","330,0":"Asia/Kolkata","345,0":"Asia/Kathmandu","360,0":"Asia/Dhaka","360,1":"Asia/Omsk","390,0":"Asia/Rangoon","420,1":"Asia/Krasnoyarsk","420,0":"Asia/Jakarta","480,0":"Asia/Shanghai","480,1":"Asia/Irkutsk","525,0":"Australia/Eucla","525,1,s":"Australia/Eucla","540,1":"Asia/Yakutsk","540,0":"Asia/Tokyo","570,0":"Australia/Darwin","570,1,s":"Australia/Adelaide","600,0":"Australia/Brisbane","600,1":"Asia/Vladivostok","600,1,s":"Australia/Sydney","630,1,s":"Australia/Lord_Howe","660,1":"Asia/Kamchatka","660,0":"Pacific/Noumea","690,0":"Pacific/Norfolk","720,1,s":"Pacific/Auckland","720,0":"Pacific/Tarawa","765,1,s":"Pacific/Chatham","780,0":"Pacific/Tongatapu","780,1,s":"Pacific/Apia","840,0":"Pacific/Kiritimati"},t.olson.dst_start_dates=function(){"use strict";var e=new Date(2010,6,15,1,0,0,0);return{"America/Denver":new Date(2011,2,13,3,0,0,0),"America/Mazatlan":new Date(2011,3,3,3,0,0,0),"America/Chicago":new Date(2011,2,13,3,0,0,0),"A
 merica/Mexico_City":new Date(2011,3,3,3,0,0,0),"America/Asuncion":new Date(2012,9,7,3,0,0,0),"America/Santiago":new Date(2012,9,3,3,0,0,0),"America/Campo_Grande":new Date(2012,9,21,5,0,0,0),"America/Montevideo":new Date(2011,9,2,3,0,0,0),"America/Sao_Paulo":new Date(2011,9,16,5,0,0,0),"America/Los_Angeles":new Date(2011,2,13,8,0,0,0),"America/Santa_Isabel":new Date(2011,3,5,8,0,0,0),"America/Havana":new Date(2012,2,10,2,0,0,0),"America/New_York":new Date(2012,2,10,7,0,0,0),"Asia/Beirut":new Date(2011,2,27,1,0,0,0),"Europe/Helsinki":new Date(2011,2,27,4,0,0,0),"Europe/Istanbul":new Date(2011,2,28,5,0,0,0),"Asia/Damascus":new Date(2011,3,1,2,0,0,0),"Asia/Jerusalem":new Date(2011,3,1,6,0,0,0),"Asia/Gaza":new Date(2009,2,28,0,30,0,0),"Africa/Cairo":new Date(2009,3,25,0,30,0,0),"Pacific/Auckland":new Date(2011,8,26,7,0,0,0),"Pacific/Fiji":new Date(2010,11,29,23,0,0,0),"America/Halifax":new Date(2011,2,13,6,0,0,0),"America/Goose_Bay":new Date(2011,2,13,2,1,0,0),"America/Miquelon":new Date
 (2011,2,13,5,0,0,0),"America/Godthab":new Date(2011,2,27,1,0,0,0),"Europe/Moscow":e,"Asia/Yekaterinburg":e,"Asia/Omsk":e,"Asia/Krasnoyarsk":e,"Asia/Irkutsk":e,"Asia/Yakutsk":e,"Asia/Vladivostok":e,"Asia/Kamchatka":e,"Europe/Minsk":e,"Australia/Perth":new Date(2008,10,1,1,0,0,0)}}(),t.olson.ambiguity_list={"America/Denver":["America/Denver","America/Mazatlan"],"America/Chicago":["America/Chicago","America/Mexico_City"],"America/Santiago":["America/Santiago","America/Asuncion","America/Campo_Grande"],"America/Montevideo":["America/Montevideo","America/Sao_Paulo"],"Asia/Beirut":["Asia/Beirut","Europe/Helsinki","Europe/Istanbul","Asia/Damascus","Asia/Jerusalem","Asia/Gaza"],"Pacific/Auckland":["Pacific/Auckland","Pacific/Fiji"],"America/Los_Angeles":["America/Los_Angeles","America/Santa_Isabel"],"America/New_York":["America/Havana","America/New_York"],"America/Halifax":["America/Goose_Bay","America/Halifax"],"America/Godthab":["America/Miquelon","America/Godthab"],"Asia/Dubai":["Europe/
 Moscow"],"Asia/Dhaka":["Asia/Yekaterinburg"],"Asia/Jakarta":["Asia/Omsk"],"Asia/Shanghai":["Asia/Krasnoyarsk","Australia/Perth"],"Asia/Tokyo":["Asia/Irkutsk"],"Australia/Brisbane":["Asia/Yakutsk"],"Pacific/Noumea":["Asia/Vladivostok"],"Pacific/Tarawa":["Asia/Kamchatka"],"Africa/Johannesburg":["Asia/Gaza","Africa/Cairo"],"Asia/Baghdad":["Europe/Minsk"]},typeof exports!="undefined"?exports.jstz=t:e.jstz=t})(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/.bower.json
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/.bower.json b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/.bower.json
deleted file mode 100644
index 51f799f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/.bower.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "visualsearch",
-  "version": "0.5.0",
-  "homepage": "http://documentcloud.github.io/visualsearch/",
-  "authors": [
-    "Samuel Clay",
-    "@samuelclay"
-  ],
-  "description": "A Rich Search Box for Real Data",
-  "main": [
-    "build-min/visualsearch-datauri.css",
-    "build-min/visualsearch.css",
-    "build-min/visualsearch.js"
-  ],
-  "license": "MIT",
-  "dependencies": {
-    "jQuery": ">=1.4",
-    "jquery-ui": ">=1.8",
-    "backbone": ">=0.9.10",
-    "underscore": ">=1.4.3"
-  },
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests",
-    "Rakefile",
-    "vendor",
-    "*.html",
-    "build",
-    "docs",
-    "*.yml"
-  ],
-  "_release": "0.5.0",
-  "_resolution": {
-    "type": "version",
-    "tag": "0.5.0",
-    "commit": "6e7613d99eabe1f19984b8d0347d9d8f12567d7e"
-  },
-  "_source": "git://github.com/documentcloud/visualsearch.git",
-  "_target": "~0.5.0",
-  "_originalSource": "visualsearch",
-  "_direct": true
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_facets.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_facets.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_facets.js
deleted file mode 100644
index 394cecd..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_facets.js
+++ /dev/null
@@ -1,67 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// The model that holds individual search facets and their categories.
-// Held in a collection by `VS.app.searchQuery`.
-VS.model.SearchFacet = Backbone.Model.extend({
-
-  // Extract the category and value and serialize it in preparation for
-  // turning the entire searchBox into a search query that can be sent
-  // to the server for parsing and searching.
-  serialize : function() {
-    var category = this.quoteCategory(this.get('category'));
-    var value    = VS.utils.inflector.trim(this.get('value'));
-    var remainder = this.get("app").options.remainder;
-
-    if (!value) return '';
-
-    if (!_.contains(this.get("app").options.unquotable || [], category) && category != remainder) {
-      value = this.quoteValue(value);
-    }
-
-    if (category != remainder) {
-      category = category + ': ';
-    } else {
-      category = "";
-    }
-    return category + value;
-  },
-  
-  // Wrap categories that have spaces or any kind of quote with opposite matching
-  // quotes to preserve the complex category during serialization.
-  quoteCategory : function(category) {
-    var hasDoubleQuote = (/"/).test(category);
-    var hasSingleQuote = (/'/).test(category);
-    var hasSpace       = (/\s/).test(category);
-    
-    if (hasDoubleQuote && !hasSingleQuote) {
-      return "'" + category + "'";
-    } else if (hasSpace || (hasSingleQuote && !hasDoubleQuote)) {
-      return '"' + category + '"';
-    } else {
-      return category;
-    }
-  },
-  
-  // Wrap values that have quotes in opposite matching quotes. If a value has
-  // both single and double quotes, just use the double quotes.
-  quoteValue : function(value) {
-    var hasDoubleQuote = (/"/).test(value);
-    var hasSingleQuote = (/'/).test(value);
-    
-    if (hasDoubleQuote && !hasSingleQuote) {
-      return "'" + value + "'";
-    } else {
-      return '"' + value + '"';
-    }
-  },
-  
-  // If provided, use a custom label instead of the raw value.
-  label : function() {
-      return this.get('label') || this.get('value');
-  }
-
-});
-
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_query.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_query.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_query.js
deleted file mode 100644
index 819b8d2..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/models/search_query.js
+++ /dev/null
@@ -1,70 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Collection which holds all of the individual facets (category: value).
-// Used for finding and removing specific facets.
-VS.model.SearchQuery = Backbone.Collection.extend({
-
-  // Model holds the category and value of the facet.
-  model : VS.model.SearchFacet,
-  
-  // Turns all of the facets into a single serialized string.
-  serialize : function() {
-    return this.map(function(facet){ return facet.serialize(); }).join(' ');
-  },
-  
-  facets : function() {
-    return this.map(function(facet) {
-      var value = {};
-      value[facet.get('category')] = facet.get('value');
-      return value;
-    });
-  },
-
-  // Find a facet by its category. Multiple facets with the same category
-  // is fine, but only the first is returned.
-  find : function(category) {
-    var facet = this.detect(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    });
-    return facet && facet.get('value');
-  },
-
-  // Counts the number of times a specific category is in the search query.
-  count : function(category) {
-    return this.select(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    }).length;
-  },
-
-  // Returns an array of extracted values from each facet in a category.
-  values : function(category) {
-    var facets = this.select(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    });
-    return _.map(facets, function(facet) { return facet.get('value'); });
-  },
-
-  // Checks all facets for matches of either a category or both category and value.
-  has : function(category, value) {
-    return this.any(function(facet) {
-      var categoryMatched = facet.get('category').toLowerCase() == category.toLowerCase();
-      if (!value) return categoryMatched;
-      return categoryMatched && facet.get('value') == value;
-    });
-  },
-
-  // Used to temporarily hide specific categories and serialize the search query.
-  withoutCategory : function() {
-    var categories = _.map(_.toArray(arguments), function(cat) { return cat.toLowerCase(); });
-    return this.map(function(facet) {
-      if (!_.include(categories, facet.get('category').toLowerCase())) { 
-        return facet.serialize();
-      };
-    }).join(' ');
-  }
-
-});
-
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_box.jst
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_box.jst b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_box.jst
deleted file mode 100644
index 137075f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_box.jst
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="VS-search <% if (readOnly) { %>VS-readonly<% } %>">
-  <div class="VS-search-box-wrapper VS-search-box">
-    <div class="VS-icon VS-icon-search"></div>
-    <div class="VS-placeholder"></div>
-    <div class="VS-search-inner"></div>
-    <div class="VS-icon VS-icon-cancel VS-cancel-search-box" title="clear search"></div>
-  </div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_facet.jst
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_facet.jst b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_facet.jst
deleted file mode 100644
index 80838d7..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_facet.jst
+++ /dev/null
@@ -1,9 +0,0 @@
-<% if (model.has('category')) { %>
-  <div class="category"><%- model.get('category') %>:</div>
-<% } %>
-
-<div class="search_facet_input_container">
-  <input type="text" class="search_facet_input ui-menu VS-interface" value="" <% if (readOnly) { %>disabled="disabled"<% } %> />
-</div>
-
-<div class="search_facet_remove VS-icon VS-icon-cancel"></div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_input.jst
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_input.jst b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_input.jst
deleted file mode 100644
index ba17970..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/search_input.jst
+++ /dev/null
@@ -1 +0,0 @@
-<input type="text" class="ui-menu" <% if (readOnly) { %>disabled="disabled"<% } %> />
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/templates.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/templates.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/templates.js
deleted file mode 100644
index 42c46d0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/templates/templates.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function(){
-window.JST = window.JST || {};
-
-window.JST['search_box'] = _.template('<div class="VS-search <% if (readOnly) { %>VS-readonly<% } %>">\n  <div class="VS-search-box-wrapper VS-search-box">\n    <div class="VS-icon VS-icon-search"></div>\n    <div class="VS-placeholder"></div>\n    <div class="VS-search-inner"></div>\n    <div class="VS-icon VS-icon-cancel VS-cancel-search-box" title="clear search"></div>\n  </div>\n</div>');
-window.JST['search_facet'] = _.template('<% if (model.has(\'category\')) { %>\n  <div class="category"><%- model.get(\'category\') %>:</div>\n<% } %>\n\n<div class="search_facet_input_container">\n  <input type="text" class="search_facet_input ui-menu VS-interface" value="" <% if (readOnly) { %>disabled="disabled"<% } %> />\n</div>\n\n<div class="search_facet_remove VS-icon VS-icon-cancel"></div>');
-window.JST['search_input'] = _.template('<input type="text" class="ui-menu" <% if (readOnly) { %>disabled="disabled"<% } %> />');
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/backbone_extensions.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/backbone_extensions.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/backbone_extensions.js
deleted file mode 100644
index de85fa9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/backbone_extensions.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function(){
-
-  var $ = jQuery; // Handle namespaced jQuery
-
-  // Makes the view enter a mode. Modes have both a 'mode' and a 'group',
-  // and are mutually exclusive with any other modes in the same group.
-  // Setting will update the view's modes hash, as well as set an HTML class
-  // of *[mode]_[group]* on the view's element. Convenient way to swap styles
-  // and behavior.
-  Backbone.View.prototype.setMode = function(mode, group) {
-    this.modes || (this.modes = {});
-    if (this.modes[group] === mode) return;
-    $(this.el).setMode(mode, group);
-    this.modes[group] = mode;
-  };
-
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/hotkeys.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/hotkeys.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/hotkeys.js
deleted file mode 100644
index 64a292a..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/hotkeys.js
+++ /dev/null
@@ -1,99 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// DocumentCloud workspace hotkeys. To tell if a key is currently being pressed,
-// just ask `VS.app.hotkeys.[key]` on `keypress`, or ask `VS.app.hotkeys.key(e)`
-// on `keydown`.
-//
-// For the most headache-free way to use this utility, check modifier keys,
-// like shift and command, with `VS.app.hotkeys.shift`, and check every other
-// key with `VS.app.hotkeys.key(e) == 'key_name'`.
-VS.app.hotkeys = {
-
-  // Keys that will be mapped to the `hotkeys` namespace.
-  KEYS: {
-    '16':  'shift',
-    '17':  'command',
-    '91':  'command',
-    '93':  'command',
-    '224': 'command',
-    '13':  'enter',
-    '37':  'left',
-    '38':  'upArrow',
-    '39':  'right',
-    '40':  'downArrow',
-    '46':  'delete',
-    '8':   'backspace',
-    '35':  'end',
-    '36':  'home',
-    '9':   'tab',
-    '188': 'comma'
-  },
-
-  // Binds global keydown and keyup events to listen for keys that match `this.KEYS`.
-  initialize : function() {
-    _.bindAll(this, 'down', 'up', 'blur');
-    $(document).bind('keydown', this.down);
-    $(document).bind('keyup', this.up);
-    $(window).bind('blur', this.blur);
-  },
-
-  // On `keydown`, turn on all keys that match.
-  down : function(e) {
-    var key = this.KEYS[e.which];
-    if (key) this[key] = true;
-  },
-
-  // On `keyup`, turn off all keys that match.
-  up : function(e) {
-    var key = this.KEYS[e.which];
-    if (key) this[key] = false;
-  },
-
-  // If an input is blurred, all keys need to be turned off, since they are no longer
-  // able to modify the document.
-  blur : function(e) {
-    for (var key in this.KEYS) this[this.KEYS[key]] = false;
-  },
-
-  // Check a key from an event and return the common english name.
-  key : function(e) {
-    return this.KEYS[e.which];
-  },
-
-  // Colon is special, since the value is different between browsers.
-  colon : function(e) {
-    var charCode = e.which;
-    return charCode && String.fromCharCode(charCode) == ":";
-  },
-
-  // Check a key from an event and match it against any known characters.
-  // The `keyCode` is different depending on the event type: `keydown` vs. `keypress`.
-  //
-  // These were determined by looping through every `keyCode` and `charCode` that
-  // resulted from `keydown` and `keypress` events and counting what was printable.
-  printable : function(e) {
-    var code = e.which;
-    if (e.type == 'keydown') {
-      if (code == 32 ||                      // space
-          (code >= 48 && code <= 90) ||      // 0-1a-z
-          (code >= 96 && code <= 111) ||     // 0-9+-/*.
-          (code >= 186 && code <= 192) ||    // ;=,-./^
-          (code >= 219 && code <= 222)) {    // (\)'
-        return true;
-      }
-    } else {
-      // [space]!"#$%&'()*+,-.0-9:;<=>?@A-Z[\]^_`a-z{|} and unicode characters
-      if ((code >= 32 && code <= 126)  ||
-          (code >= 160 && code <= 500) ||
-          (String.fromCharCode(code) == ":")) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-};
-
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/inflector.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/inflector.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/inflector.js
deleted file mode 100644
index 8a1d08c..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/inflector.js
+++ /dev/null
@@ -1,21 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Naive English transformations on words. Only used for a few transformations 
-// in VisualSearch.js.
-VS.utils.inflector = {
-
-  // Delegate to the ECMA5 String.prototype.trim function, if available.
-  trim : function(s) {
-    return s.trim ? s.trim() : s.replace(/^\s+|\s+$/g, '');
-  },
-  
-  // Escape strings that are going to be used in a regex. Escapes punctuation
-  // that would be incorrect in a regex.
-  escapeRegExp : function(s) {
-    return s.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-  }
-};
-
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/jquery_extensions.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/jquery_extensions.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/jquery_extensions.js
deleted file mode 100644
index fb77de6..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/jquery_extensions.js
+++ /dev/null
@@ -1,197 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-$.fn.extend({
-
-  // Makes the selector enter a mode. Modes have both a 'mode' and a 'group',
-  // and are mutually exclusive with any other modes in the same group.
-  // Setting will update the view's modes hash, as well as set an HTML class
-  // of *[mode]_[group]* on the view's element. Convenient way to swap styles
-  // and behavior.
-  setMode : function(state, group) {
-    group    = group || 'mode';
-    var re   = new RegExp("\\w+_" + group + "(\\s|$)", 'g');
-    var mode = (state === null) ? "" : state + "_" + group;
-    this.each(function() {
-      this.className = (this.className.replace(re, '')+' '+mode)
-                       .replace(/\s\s/g, ' ');
-    });
-    return mode;
-  },
-
-  // When attached to an input element, this will cause the width of the input
-  // to match its contents. This calculates the width of the contents of the input
-  // by measuring a hidden shadow div that should match the styling of the input.
-  autoGrowInput: function() {
-    return this.each(function() {
-      var $input  = $(this);
-      var $tester = $('<div />').css({
-        opacity     : 0,
-        top         : -9999,
-        left        : -9999,
-        position    : 'absolute',
-        whiteSpace  : 'nowrap'
-      }).addClass('VS-input-width-tester').addClass('VS-interface');
-
-      // Watch for input value changes on all of these events. `resize`
-      // event is called explicitly when the input has been changed without
-      // a single keypress.
-      var events = 'keydown.autogrow keypress.autogrow ' +
-                   'resize.autogrow change.autogrow';
-      $input.next('.VS-input-width-tester').remove();
-      $input.after($tester);
-      $input.unbind(events).bind(events, function(e, realEvent) {
-        if (realEvent) e = realEvent;
-        var value = $input.val();
-
-        // Watching for the backspace key is tricky because it may not
-        // actually be deleting the character, but instead the key gets
-        // redirected to move the cursor from facet to facet.
-        if (VS.app.hotkeys.key(e) == 'backspace') {
-          var position = $input.getCursorPosition();
-          if (position > 0) value = value.slice(0, position-1) +
-                                    value.slice(position, value.length);
-        } else if (VS.app.hotkeys.printable(e) &&
-                   !VS.app.hotkeys.command) {
-          value += String.fromCharCode(e.which);
-        }
-        value = value.replace(/&/g, '&amp;')
-                     .replace(/\s/g,'&nbsp;')
-                     .replace(/</g, '&lt;')
-                     .replace(/>/g, '&gt;');
-
-        $tester.html(value);
-
-        $input.width($tester.width() + 3 + parseInt($input.css('min-width')));
-        $input.trigger('updated.autogrow');
-      });
-
-      // Sets the width of the input on initialization.
-      $input.trigger('resize.autogrow');
-    });
-  },
-
-
-  // Cross-browser method used for calculating where the cursor is in an
-  // input field.
-  getCursorPosition: function() {
-    var position = 0;
-    var input    = this.get(0);
-
-    if (document.selection) { // IE
-      input.focus();
-      var sel    = document.selection.createRange();
-      var selLen = document.selection.createRange().text.length;
-      sel.moveStart('character', -input.value.length);
-      position   = sel.text.length - selLen;
-    } else if (input && $(input).is(':visible') &&
-               input.selectionStart != null) { // Firefox/Safari
-      position = input.selectionStart;
-    }
-
-    return position;
-  },
-
-  // A simple proxy for `selectRange` that sets the cursor position in an
-  // input field.
-  setCursorPosition: function(position) {
-    return this.each(function() {
-      return $(this).selectRange(position, position);
-    });
-  },
-
-  // Cross-browser way to select text in an input field.
-  selectRange: function(start, end) {
-    return this.filter(':visible').each(function() {
-      if (this.setSelectionRange) { // FF/Webkit
-        this.focus();
-        this.setSelectionRange(start, end);
-      } else if (this.createTextRange) { // IE
-        var range = this.createTextRange();
-        range.collapse(true);
-        range.moveEnd('character', end);
-        range.moveStart('character', start);
-        if (end - start >= 0) range.select();
-      }
-    });
-  },
-
-  // Returns an object that contains the text selection range values for
-  // an input field.
-  getSelection: function() {
-    var input = this[0];
-
-    if (input.selectionStart != null) { // FF/Webkit
-      var start = input.selectionStart;
-      var end   = input.selectionEnd;
-      return {
-        start   : start,
-        end     : end,
-        length  : end-start,
-        text    : input.value.substr(start, end-start)
-      };
-    } else if (document.selection) { // IE
-      var range = document.selection.createRange();
-      if (range) {
-        var textRange = input.createTextRange();
-        var copyRange = textRange.duplicate();
-        textRange.moveToBookmark(range.getBookmark());
-        copyRange.setEndPoint('EndToStart', textRange);
-        var start = copyRange.text.length;
-        var end   = start + range.text.length;
-        return {
-          start   : start,
-          end     : end,
-          length  : end-start,
-          text    : range.text
-        };
-      }
-    }
-    return {start: 0, end: 0, length: 0};
-  }
-
-});
-
-// Debugging in Internet Explorer. This allows you to use 
-// `console.log(['message', var1, var2, ...])`. Just remove the `false` and
-// add your console.logs. This will automatically stringify objects using
-// `JSON.stringify', so you can read what's going out. Think of this as a
-// *Diet Firebug Lite Zero with Lemon*.
-if (false) {
-  window.console = {};
-  var _$ied;
-  window.console.log = function(msg) {
-    if (_.isArray(msg)) {
-      var message = msg[0];
-      var vars = _.map(msg.slice(1), function(arg) {
-        return JSON.stringify(arg);
-      }).join(' - ');
-    }
-    if(!_$ied){
-      _$ied = $('<div><ol></ol></div>').css({
-        'position': 'fixed',
-        'bottom': 10,
-        'left': 10,
-        'zIndex': 20000,
-        'width': $('body').width() - 80,
-        'border': '1px solid #000',
-        'padding': '10px',
-        'backgroundColor': '#fff',
-        'fontFamily': 'arial,helvetica,sans-serif',
-        'fontSize': '11px'
-      });
-      $('body').append(_$ied);
-    }
-    var $message = $('<li>'+message+' - '+vars+'</li>').css({
-      'borderBottom': '1px solid #999999'
-    });
-    _$ied.find('ol').append($message);
-    _.delay(function() {
-      $message.fadeOut(500);
-    }, 5000);
-  };
-
-}
-
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/search_parser.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/search_parser.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/search_parser.js
deleted file mode 100644
index a2fa37a..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/utils/search_parser.js
+++ /dev/null
@@ -1,87 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Used to extract keywords and facets from the free text search.
-var QUOTES_RE   = "('[^']+'|\"[^\"]+\")";
-var FREETEXT_RE = "('[^']+'|\"[^\"]+\"|[^'\"\\s]\\S*)";
-var CATEGORY_RE = FREETEXT_RE +                     ':\\s*';
-VS.app.SearchParser = {
-
-  // Matches `category: "free text"`, with and without quotes.
-  ALL_FIELDS : new RegExp(CATEGORY_RE + FREETEXT_RE, 'g'),
-
-  // Matches a single category without the text. Used to correctly extract facets.
-  CATEGORY   : new RegExp(CATEGORY_RE),
-
-  // Called to parse a query into a collection of `SearchFacet` models.
-  parse : function(instance, query) {
-    var searchFacets = this._extractAllFacets(instance, query);
-    instance.searchQuery.reset(searchFacets);
-    return searchFacets;
-  },
-
-  // Walks the query and extracts facets, categories, and free text.
-  _extractAllFacets : function(instance, query) {
-    var facets = [];
-    var originalQuery = query;
-    while (query) {
-      var category, value;
-      originalQuery = query;
-      var field = this._extractNextField(query);
-      if (!field) {
-        category = instance.options.remainder;
-        value    = this._extractSearchText(query);
-        query    = VS.utils.inflector.trim(query.replace(value, ''));
-      } else if (field.indexOf(':') != -1) {
-        category = field.match(this.CATEGORY)[1].replace(/(^['"]|['"]$)/g, '');
-        value    = field.replace(this.CATEGORY, '').replace(/(^['"]|['"]$)/g, '');
-        query    = VS.utils.inflector.trim(query.replace(field, ''));
-      } else if (field.indexOf(':') == -1) {
-        category = instance.options.remainder;
-        value    = field;
-        query    = VS.utils.inflector.trim(query.replace(value, ''));
-      }
-
-      if (category && value) {
-          var searchFacet = new VS.model.SearchFacet({
-            category : category,
-            value    : VS.utils.inflector.trim(value),
-            app      : instance
-          });
-          facets.push(searchFacet);
-      }
-      if (originalQuery == query) break;
-    }
-
-    return facets;
-  },
-
-  // Extracts the first field found, capturing any free text that comes
-  // before the category.
-  _extractNextField : function(query) {
-    var textRe = new RegExp('^\\s*(\\S+)\\s+(?=' + QUOTES_RE + FREETEXT_RE + ')');
-    var textMatch = query.match(textRe);
-    if (textMatch && textMatch.length >= 1) {
-      return textMatch[1];
-    } else {
-      return this._extractFirstField(query);
-    }
-  },
-
-  // If there is no free text before the facet, extract the category and value.
-  _extractFirstField : function(query) {
-    var fields = query.match(this.ALL_FIELDS);
-    return fields && fields.length && fields[0];
-  },
-
-  // If the found match is not a category and facet, extract the trimmed free text.
-  _extractSearchText : function(query) {
-    query = query || '';
-    var text = VS.utils.inflector.trim(query.replace(this.ALL_FIELDS, ''));
-    return text;
-  }
-
-};
-
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_box.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_box.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_box.js
deleted file mode 100644
index 2af7213..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_box.js
+++ /dev/null
@@ -1,458 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// The search box is responsible for managing the many facet views and input views.
-VS.ui.SearchBox = Backbone.View.extend({
-
-  id  : 'search',
-
-  events : {
-    'click .VS-cancel-search-box' : 'clearSearch',
-    'mousedown .VS-search-box'    : 'maybeFocusSearch',
-    'dblclick .VS-search-box'     : 'highlightSearch',
-    'click .VS-search-box'        : 'maybeTripleClick'
-  },
-
-  // Creating a new SearchBox registers handlers for re-rendering facets when necessary,
-  // as well as handling typing when a facet is selected.
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-
-    this.app = this.options.app;
-    this.flags = {
-      allSelected : false
-    };
-    this.facetViews = [];
-    this.inputViews = [];
-    _.bindAll(this, 'renderFacets', '_maybeDisableFacets', 'disableFacets',
-              'deselectAllFacets', 'addedFacet', 'removedFacet', 'changedFacet');
-    this.app.searchQuery
-            .bind('reset', this.renderFacets)
-            .bind('add', this.addedFacet)
-            .bind('remove', this.removedFacet)
-            .bind('change', this.changedFacet);
-    $(document).bind('keydown', this._maybeDisableFacets);
-  },
-
-  // Renders the search box, but requires placement on the page through `this.el`.
-  render : function() {
-    $(this.el).append(JST['search_box']({
-      readOnly: this.app.options.readOnly
-    }));
-    $(document.body).setMode('no', 'search');
-
-    return this;
-  },
-
-  // # Querying Facets #
-
-  // Either gets a serialized query string or sets the faceted query from a query string.
-  value : function(query) {
-    if (query == null) return this.serialize();
-    return this.setQuery(query);
-  },
-
-  // Uses the VS.app.searchQuery collection to serialize the current query from the various
-  // facets that are in the search box.
-  serialize : function() {
-    var query           = [];
-    var inputViewsCount = this.inputViews.length;
-
-    this.app.searchQuery.each(_.bind(function(facet, i) {
-      query.push(this.inputViews[i].value());
-      query.push(facet.serialize());
-    }, this));
-
-    if (inputViewsCount) {
-      query.push(this.inputViews[inputViewsCount-1].value());
-    }
-
-    return _.compact(query).join(' ');
-  },
-
-  // Returns any facet views that are currently selected. Useful for changing the value
-  // callbacks based on what else is in the search box and which facet is being edited.
-  selected: function() {
-    return _.select(this.facetViews, function(view) {
-      return view.modes.editing == 'is' || view.modes.selected == 'is';
-    });
-  },
-
-  // Similar to `this.selected`, returns any facet models that are currently selected.
-  selectedModels: function() {
-    return _.pluck(this.selected(), 'model');
-  },
-
-  // Takes a query string and uses the SearchParser to parse and render it. Note that
-  // `VS.app.SearchParser` refreshes the `VS.app.searchQuery` collection, which is bound
-  // here to call `this.renderFacets`.
-  setQuery : function(query) {
-    this.currentQuery = query;
-    VS.app.SearchParser.parse(this.app, query);
-  },
-
-  // Returns the position of a facet/input view. Useful when moving between facets.
-  viewPosition : function(view) {
-    var views    = view.type == 'facet' ? this.facetViews : this.inputViews;
-    var position = _.indexOf(views, view);
-    if (position == -1) position = 0;
-    return position;
-  },
-
-  // Used to launch a search. Hitting enter or clicking the search button.
-  searchEvent : function(e) {
-    var query = this.value();
-    this.focusSearch(e);
-    this.value(query);
-    this.app.options.callbacks.search(query, this.app.searchQuery);
-  },
-
-  // # Rendering Facets #
-
-  // Add a new facet. Facet will be focused and ready to accept a value. Can also
-  // specify position, in the case of adding facets from an inbetween input.
-  addFacet : function(category, initialQuery, position) {
-    category     = VS.utils.inflector.trim(category);
-    initialQuery = VS.utils.inflector.trim(initialQuery || '');
-    if (!category) return;
-
-    var model = new VS.model.SearchFacet({
-      category : category,
-      value    : initialQuery || '',
-      app      : this.app
-    });
-    this.app.searchQuery.add(model, {at: position});
-  },
-
-  // Renders a newly added facet, and selects it.
-  addedFacet : function (model) {
-    this.renderFacets();
-    var facetView = _.detect(this.facetViews, function(view) {
-      if (view.model == model) return true;
-    });
-
-    _.defer(function() {
-      facetView.enableEdit();
-    });
-  },
-
-  // Changing a facet programmatically re-renders it.
-  changedFacet: function () {
-    this.renderFacets();
-  },
-
-  // When removing a facet, potentially do something. For now, the adjacent
-  // remaining facet is selected, but this is handled by the facet's view,
-  // since its position is unknown by the time the collection triggers this
-  // remove callback.
-  removedFacet : function (facet, query, options) {
-    this.app.options.callbacks.removedFacet(facet, query, options);
-  },
-
-  // Renders each facet as a searchFacet view.
-  renderFacets : function() {
-    this.facetViews = [];
-    this.inputViews = [];
-
-    this.$('.VS-search-inner').empty();
-
-    this.app.searchQuery.each(_.bind(this.renderFacet, this));
-
-    // Add on an n+1 empty search input on the very end.
-    this.renderSearchInput();
-    this.renderPlaceholder();
-  },
-
-  // Render a single facet, using its category and query value.
-  renderFacet : function(facet, position) {
-    var view = new VS.ui.SearchFacet({
-      app   : this.app,
-      model : facet,
-      order : position
-    });
-
-    // Input first, facet second.
-    this.renderSearchInput();
-    this.facetViews.push(view);
-    this.$('.VS-search-inner').children().eq(position*2).after(view.render().el);
-
-    view.calculateSize();
-    _.defer(_.bind(view.calculateSize, view));
-
-    return view;
-  },
-
-  // Render a single input, used to create and autocomplete facets
-  renderSearchInput : function() {
-    var input = new VS.ui.SearchInput({
-      position: this.inputViews.length,
-      app: this.app,
-      showFacets: this.options.showFacets
-    });
-    this.$('.VS-search-inner').append(input.render().el);
-    this.inputViews.push(input);
-  },
-
-  // Handles showing/hiding the placeholder text
-  renderPlaceholder : function() {
-    var $placeholder = this.$('.VS-placeholder');
-    if (this.app.searchQuery.length) {
-      $placeholder.addClass("VS-hidden");
-    } else {
-      $placeholder.removeClass("VS-hidden")
-                  .text(this.app.options.placeholder);
-    }
-  },
-
-  // # Modifying Facets #
-
-  // Clears out the search box. Command+A + delete can trigger this, as can a cancel button.
-  //
-  // If a `clearSearch` callback was provided, the callback is invoked and
-  // provided with a function performs the actual removal of the data.  This
-  // allows third-party developers to either clear data asynchronously, or
-  // prior to performing their custom "clear" logic.
-  clearSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    var actualClearSearch = _.bind(function() {
-      this.disableFacets();
-      this.value('');
-      this.flags.allSelected = false;
-      this.searchEvent(e);
-      this.focusSearch(e);
-    }, this);
-
-    if (this.app.options.callbacks.clearSearch != $.noop) {
-      this.app.options.callbacks.clearSearch(actualClearSearch);
-    } else {
-      actualClearSearch();
-    }
-  },
-
-  // Command+A selects all facets.
-  selectAllFacets : function() {
-    this.flags.allSelected = true;
-
-    $(document).one('click.selectAllFacets', this.deselectAllFacets);
-
-    _.each(this.facetViews, function(facetView, i) {
-      facetView.selectFacet();
-    });
-    _.each(this.inputViews, function(inputView, i) {
-      inputView.selectText();
-    });
-  },
-
-  // Used by facets and input to see if all facets are currently selected.
-  allSelected : function(deselect) {
-    if (deselect) this.flags.allSelected = false;
-    return this.flags.allSelected;
-  },
-
-  // After `selectAllFacets` is engaged, this method is bound to the entire document.
-  // This immediate disables and deselects all facets, but it also checks if the user
-  // has clicked on either a facet or an input, and properly selects the view.
-  deselectAllFacets : function(e) {
-    this.disableFacets();
-
-    if (this.$(e.target).is('.category,input')) {
-      var el   = $(e.target).closest('.search_facet,.search_input');
-      var view = _.detect(this.facetViews.concat(this.inputViews), function(v) {
-        return v.el == el[0];
-      });
-      if (view.type == 'facet') {
-        view.selectFacet();
-      } else if (view.type == 'input') {
-        _.defer(function() {
-          view.enableEdit(true);
-        });
-      }
-    }
-  },
-
-  // Disables all facets except for the passed in view. Used when switching between
-  // facets, so as not to have to keep state of active facets.
-  disableFacets : function(keepView) {
-    _.each(this.inputViews, function(view) {
-      if (view && view != keepView &&
-          (view.modes.editing == 'is' || view.modes.selected == 'is')) {
-        view.disableEdit();
-      }
-    });
-    _.each(this.facetViews, function(view) {
-      if (view && view != keepView &&
-          (view.modes.editing == 'is' || view.modes.selected == 'is')) {
-        view.disableEdit();
-        view.deselectFacet();
-      }
-    });
-
-    this.flags.allSelected = false;
-    this.removeFocus();
-    $(document).unbind('click.selectAllFacets');
-  },
-
-  // Resize all inputs to account for extra keystrokes which may be changing the facet
-  // width incorrectly. This is a safety check to ensure inputs are correctly sized.
-  resizeFacets : function(view) {
-    _.each(this.facetViews, function(facetView, i) {
-      if (!view || facetView == view) {
-        facetView.resize();
-      }
-    });
-  },
-
-  // Handles keydown events on the document. Used to complete the Cmd+A deletion, and
-  // blurring focus.
-  _maybeDisableFacets : function(e) {
-    if (this.flags.allSelected && VS.app.hotkeys.key(e) == 'backspace') {
-      e.preventDefault();
-      this.clearSearch(e);
-      return false;
-    } else if (this.flags.allSelected && VS.app.hotkeys.printable(e)) {
-      this.clearSearch(e);
-    }
-  },
-
-  // # Focusing Facets #
-
-  // Move focus between facets and inputs. Takes a direction as well as many options
-  // for skipping over inputs and only to facets, placement of cursor position in facet
-  // (i.e. at the end), and selecting the text in the input/facet.
-  focusNextFacet : function(currentView, direction, options) {
-    options = options || {};
-    var viewCount    = this.facetViews.length;
-    var viewPosition = options.viewPosition || this.viewPosition(currentView);
-
-    if (!options.skipToFacet) {
-      // Correct for bouncing between matching text and facet arrays.
-      if (currentView.type == 'text'  && direction > 0) direction -= 1;
-      if (currentView.type == 'facet' && direction < 0) direction += 1;
-    } else if (options.skipToFacet && currentView.type == 'text' &&
-               viewCount == viewPosition && direction >= 0) {
-      // Special case of looping around to a facet from the last search input box.
-      return false;
-    }
-    var view, next = Math.min(viewCount, viewPosition + direction);
-
-    if (currentView.type == 'text') {
-      if (next >= 0 && next < viewCount) {
-        view = this.facetViews[next];
-      } else if (next == viewCount) {
-        view = this.inputViews[this.inputViews.length-1];
-      }
-      if (view && options.selectFacet && view.type == 'facet') {
-        view.selectFacet();
-      } else if (view) {
-        view.enableEdit();
-        view.setCursorAtEnd(direction || options.startAtEnd);
-      }
-    } else if (currentView.type == 'facet') {
-      if (options.skipToFacet) {
-        if (next >= viewCount || next < 0) {
-          view = _.last(this.inputViews);
-          view.enableEdit();
-        } else {
-          view = this.facetViews[next];
-          view.enableEdit();
-          view.setCursorAtEnd(direction || options.startAtEnd);
-        }
-      } else {
-        view = this.inputViews[next];
-        view.enableEdit();
-      }
-    }
-    if (options.selectText) view.selectText();
-    this.resizeFacets();
-
-    return true;
-  },
-
-  maybeFocusSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    if ($(e.target).is('.VS-search-box') ||
-        $(e.target).is('.VS-search-inner') ||
-        e.type == 'keydown') {
-      this.focusSearch(e);
-    }
-  },
-
-  // Bring focus to last input field.
-  focusSearch : function(e, selectText) {
-    if (this.app.options.readOnly) return;
-    var view = this.inputViews[this.inputViews.length-1];
-    view.enableEdit(selectText);
-    if (!selectText) view.setCursorAtEnd(-1);
-    if (e.type == 'keydown') {
-      view.keydown(e);
-      view.box.trigger('keydown');
-    }
-    _.defer(_.bind(function() {
-      if (!this.$('input:focus').length) {
-        view.enableEdit(selectText);
-      }
-    }, this));
-  },
-
-  // Double-clicking on the search wrapper should select the existing text in
-  // the last search input. Also start the triple-click timer.
-  highlightSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    if ($(e.target).is('.VS-search-box') ||
-        $(e.target).is('.VS-search-inner') ||
-        e.type == 'keydown') {
-      var lastinput = this.inputViews[this.inputViews.length-1];
-      lastinput.startTripleClickTimer();
-      this.focusSearch(e, true);
-    }
-  },
-
-  maybeTripleClick : function(e) {
-    var lastinput = this.inputViews[this.inputViews.length-1];
-    return lastinput.maybeTripleClick(e);
-  },
-
-  // Used to show the user is focused on some input inside the search box.
-  addFocus : function() {
-    if (this.app.options.readOnly) return;
-    this.app.options.callbacks.focus();
-    this.$('.VS-search-box').addClass('VS-focus');
-  },
-
-  // User is no longer focused on anything in the search box.
-  removeFocus : function() {
-    this.app.options.callbacks.blur();
-    var focus = _.any(this.facetViews.concat(this.inputViews), function(view) {
-      return view.isFocused();
-    });
-    if (!focus) this.$('.VS-search-box').removeClass('VS-focus');
-  },
-
-  // Show a menu which adds pre-defined facets to the search box. This is unused for now.
-  showFacetCategoryMenu : function(e) {
-    e.preventDefault();
-    e.stopPropagation();
-    if (this.facetCategoryMenu && this.facetCategoryMenu.modes.open == 'is') {
-      return this.facetCategoryMenu.close();
-    }
-
-    var items = [
-      {title: 'Account', onClick: _.bind(this.addFacet, this, 'account', '')},
-      {title: 'Project', onClick: _.bind(this.addFacet, this, 'project', '')},
-      {title: 'Filter', onClick: _.bind(this.addFacet, this, 'filter', '')},
-      {title: 'Access', onClick: _.bind(this.addFacet, this, 'access', '')}
-    ];
-
-    var menu = this.facetCategoryMenu || (this.facetCategoryMenu = new dc.ui.Menu({
-      items       : items,
-      standalone  : true
-    }));
-
-    this.$('.VS-icon-search').after(menu.render().open().content);
-    return false;
-  }
-
-});
-
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_facet.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_facet.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_facet.js
deleted file mode 100644
index cb54414..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_facet.js
+++ /dev/null
@@ -1,442 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// This is the visual search facet that holds the category and its autocompleted
-// input field.
-VS.ui.SearchFacet = Backbone.View.extend({
-
-  type : 'facet',
-
-  className : 'search_facet',
-
-  events : {
-    'click .category'           : 'selectFacet',
-    'keydown input'             : 'keydown',
-    'mousedown input'           : 'enableEdit',
-    'mouseover .VS-icon-cancel' : 'showDelete',
-    'mouseout .VS-icon-cancel'  : 'hideDelete',
-    'click .VS-icon-cancel'     : 'remove'
-  },
-
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-
-    this.flags = {
-      canClose : false
-    };
-    _.bindAll(this, 'set', 'keydown', 'deselectFacet', 'deferDisableEdit');
-    this.app = this.options.app;
-  },
-
-  // Rendering the facet sets up autocompletion, events on blur, and populates
-  // the facet's input with its starting value.
-  render : function() {
-    $(this.el).html(JST['search_facet']({
-      model : this.model,
-      readOnly: this.app.options.readOnly
-    }));
-
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.box = this.$('input');
-    this.box.val(this.model.label());
-    this.box.bind('blur', this.deferDisableEdit);
-    // Handle paste events with `propertychange`
-    this.box.bind('input propertychange', this.keydown);
-    this.setupAutocomplete();
-
-    return this;
-  },
-
-  // This method is used to setup the facet's input to auto-grow.
-  // This is defered in the searchBox so it can be attached to the
-  // DOM to get the correct font-size.
-  calculateSize : function() {
-    this.box.autoGrowInput();
-    this.box.unbind('updated.autogrow');
-    this.box.bind('updated.autogrow', _.bind(this.moveAutocomplete, this));
-  },
-
-  // Forces a recalculation of this facet's input field's value. Called when
-  // the facet is focused, removed, or otherwise modified.
-  resize : function(e) {
-    this.box.trigger('resize.autogrow', e);
-  },
-
-  // Watches the facet's input field to see if it matches the beginnings of
-  // words in `autocompleteValues`, which is different for every category.
-  // If the value, when selected from the autocompletion menu, is different
-  // than what it was, commit the facet and search for it.
-  setupAutocomplete : function() {
-    this.box.autocomplete({
-      source    : _.bind(this.autocompleteValues, this),
-      minLength : 0,
-      delay     : 0,
-      autoFocus : true,
-      position  : {offset : "0 5"},
-      create    : _.bind(function(e, ui) {
-        $(this.el).find('.ui-autocomplete-input').css('z-index','auto');
-      }, this),
-      select    : _.bind(function(e, ui) {
-        e.preventDefault();
-        var originalValue = this.model.get('value');
-        this.set(ui.item.value);
-        if (originalValue != ui.item.value || this.box.val() != ui.item.value) {
-          if (this.app.options.autosearch) {
-            this.search(e);
-          } else {
-              this.app.searchBox.renderFacets();
-              this.app.searchBox.focusNextFacet(this, 1, {viewPosition: this.options.order});
-          }
-        }
-        return false;
-      }, this),
-      open      : _.bind(function(e, ui) {
-        var box = this.box;
-        this.box.autocomplete('widget').find('.ui-menu-item').each(function() {
-          var $value = $(this),
-              autoCompleteData = $value.data('item.autocomplete') || $value.data('ui-autocomplete-item');
-
-          if (autoCompleteData['value'] == box.val() && box.data('ui-autocomplete').menu.activate) {
-            box.data('ui-autocomplete').menu.activate(new $.Event("mouseover"), $value);
-          }
-        });
-      }, this)
-    });
-
-    this.box.autocomplete('widget').addClass('VS-interface');
-  },
-
-  // As the facet's input field grows, it may move to the next line in the
-  // search box. `autoGrowInput` triggers an `updated` event on the input
-  // field, which is bound to this method to move the autocomplete menu.
-  moveAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      autocomplete.menu.element.position({
-        my        : "left top",
-        at        : "left bottom",
-        of        : this.box.data('ui-autocomplete').element,
-        collision : "flip",
-        offset    : "0 5"
-      });
-    }
-  },
-
-  // When a user enters a facet and it is being edited, immediately show
-  // the autocomplete menu and size it to match the contents.
-  searchAutocomplete : function(e) {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      var menu = autocomplete.menu.element;
-      autocomplete.search();
-
-      // Resize the menu based on the correctly measured width of what's bigger:
-      // the menu's original size or the menu items' new size.
-      menu.outerWidth(Math.max(
-        menu.width('').outerWidth(),
-        autocomplete.element.outerWidth()
-      ));
-    }
-  },
-
-  // Closes the autocomplete menu. Called on disabling, selecting, deselecting,
-  // and anything else that takes focus out of the facet's input field.
-  closeAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) autocomplete.close();
-  },
-
-  // Search terms used in the autocomplete menu. These are specific to the facet,
-  // and only match for the facet's category. The values are then matched on the
-  // first letter of any word in matches, and finally sorted according to the
-  // value's own category. You can pass `preserveOrder` as an option in the
-  // `facetMatches` callback to skip any further ordering done client-side.
-  autocompleteValues : function(req, resp) {
-    var category = this.model.get('category');
-    var value    = this.model.get('value');
-    var searchTerm = req.term;
-
-    this.app.options.callbacks.valueMatches(category, searchTerm, function(matches, options) {
-      options = options || {};
-      matches = matches || [];
-
-      if (searchTerm && value != searchTerm) {
-        if (options.preserveMatches) {
-          resp(matches);
-        } else {
-          var re = VS.utils.inflector.escapeRegExp(searchTerm || '');
-          var matcher = new RegExp('\\b' + re, 'i');
-          matches = $.grep(matches, function(item) {
-            return matcher.test(item) ||
-                   matcher.test(item.value) ||
-                   matcher.test(item.label);
-        });
-        }
-      }
-
-      if (options.preserveOrder) {
-        resp(matches);
-      } else {
-        resp(_.sortBy(matches, function(match) {
-          if (match == value || match.value == value) return '';
-          else return match;
-        }));
-      }
-    });
-
-  },
-
-  // Sets the facet's model's value.
-  set : function(value) {
-    if (!value) return;
-    this.model.set({'value': value});
-  },
-
-  // Before the searchBox performs a search, we need to close the
-  // autocomplete menu.
-  search : function(e, direction) {
-    if (!direction) direction = 1;
-    this.closeAutocomplete();
-    this.app.searchBox.searchEvent(e);
-    _.defer(_.bind(function() {
-      this.app.searchBox.focusNextFacet(this, direction, {viewPosition: this.options.order});
-    }, this));
-  },
-
-  // Begin editing the facet's input. This is called when the user enters
-  // the input either from another facet or directly clicking on it.
-  //
-  // This method tells all other facets and inputs to disable so it can have
-  // the sole focus. It also prepares the autocompletion menu.
-  enableEdit : function() {
-    if (this.app.options.readOnly) return;
-    if (this.modes.editing != 'is') {
-      this.setMode('is', 'editing');
-      this.deselectFacet();
-      if (this.box.val() == '') {
-        this.box.val(this.model.get('value'));
-      }
-    }
-
-    this.flags.canClose = false;
-    this.app.searchBox.disableFacets(this);
-    this.app.searchBox.addFocus();
-    _.defer(_.bind(function() {
-      this.app.searchBox.addFocus();
-    }, this));
-    this.resize();
-    this.searchAutocomplete();
-    this.box.focus();
-  },
-
-  // When the user blurs the input, they may either be going to another input
-  // or off the search box entirely. If they go to another input, this facet
-  // will be instantly disabled, and the canClose flag will be turned back off.
-  //
-  // However, if the user clicks elsewhere on the page, this method starts a timer
-  // that checks if any of the other inputs are selected or are being edited. If
-  // not, then it can finally close itself and its autocomplete menu.
-  deferDisableEdit : function() {
-    this.flags.canClose = true;
-    _.delay(_.bind(function() {
-      if (this.flags.canClose && !this.box.is(':focus') &&
-          this.modes.editing == 'is' && this.modes.selected != 'is') {
-        this.disableEdit();
-      }
-    }, this), 250);
-  },
-
-  // Called either by other facets receiving focus or by the timer in `deferDisableEdit`,
-  // this method will turn off the facet, remove any text selection, and close
-  // the autocomplete menu.
-  disableEdit : function() {
-    var newFacetQuery = VS.utils.inflector.trim(this.box.val());
-    if (newFacetQuery != this.model.get('value')) {
-      this.set(newFacetQuery);
-    }
-    this.flags.canClose = false;
-    this.box.selectRange(0, 0);
-    this.box.blur();
-    this.setMode('not', 'editing');
-    this.closeAutocomplete();
-    this.app.searchBox.removeFocus();
-  },
-
-  // Selects the facet, which blurs the facet's input and highlights the facet.
-  // If this is the only facet being selected (and not part of a select all event),
-  // we attach a mouse/keyboard watcher to check if the next action by the user
-  // should delete this facet or just deselect it.
-  selectFacet : function(e) {
-    if (e) e.preventDefault();
-    if (this.app.options.readOnly) return;
-    var allSelected = this.app.searchBox.allSelected();
-    if (this.modes.selected == 'is') return;
-
-    if (this.box.is(':focus')) {
-      this.box.setCursorPosition(0);
-      this.box.blur();
-    }
-
-    this.flags.canClose = false;
-    this.closeAutocomplete();
-    this.setMode('is', 'selected');
-    this.setMode('not', 'editing');
-    if (!allSelected || e) {
-      $(document).unbind('keydown.facet', this.keydown);
-      $(document).unbind('click.facet', this.deselectFacet);
-      _.defer(_.bind(function() {
-        $(document).unbind('keydown.facet').bind('keydown.facet', this.keydown);
-        $(document).unbind('click.facet').one('click.facet', this.deselectFacet);
-      }, this));
-      this.app.searchBox.disableFacets(this);
-      this.app.searchBox.addFocus();
-    }
-    return false;
-  },
-
-  // Turns off highlighting on the facet. Called in a variety of ways, this
-  // only deselects the facet if it is selected, and then cleans up the
-  // keyboard/mouse watchers that were created when the facet was first
-  // selected.
-  deselectFacet : function(e) {
-    if (e) e.preventDefault();
-    if (this.modes.selected == 'is') {
-      this.setMode('not', 'selected');
-      this.closeAutocomplete();
-      this.app.searchBox.removeFocus();
-    }
-    $(document).unbind('keydown.facet', this.keydown);
-    $(document).unbind('click.facet', this.deselectFacet);
-    return false;
-  },
-
-  // Is the user currently focused in this facet's input field?
-  isFocused : function() {
-    return this.box.is(':focus');
-  },
-
-  // Hovering over the delete button styles the facet so the user knows that
-  // the delete button will kill the entire facet.
-  showDelete : function() {
-    $(this.el).addClass('search_facet_maybe_delete');
-  },
-
-  // On `mouseout`, the user is no longer hovering on the delete button.
-  hideDelete : function() {
-    $(this.el).removeClass('search_facet_maybe_delete');
-  },
-
-  // When switching between facets, depending on the direction the cursor is
-  // coming from, the cursor in this facet's input field should match the original
-  // direction.
-  setCursorAtEnd : function(direction) {
-    if (direction == -1) {
-      this.box.setCursorPosition(this.box.val().length);
-    } else {
-      this.box.setCursorPosition(0);
-    }
-  },
-
-  // Deletes the facet and sends the cursor over to the nearest input field.
-  remove : function(e) {
-    var committed = this.model.get('value');
-    this.deselectFacet();
-    this.disableEdit();
-    this.app.searchQuery.remove(this.model);
-    if (committed && this.app.options.autosearch) {
-      this.search(e, -1);
-    } else {
-      this.app.searchBox.renderFacets();
-      this.app.searchBox.focusNextFacet(this, -1, {viewPosition: this.options.order});
-    }
-  },
-
-  // Selects the text in the facet's input field. When the user tabs between
-  // facets, convention is to highlight the entire field.
-  selectText: function() {
-    this.box.selectRange(0, this.box.val().length);
-  },
-
-  // Handles all keyboard inputs when in the facet's input field. This checks
-  // for movement between facets and inputs, entering a new value that needs
-  // to be autocompleted, as well as the removal of this facet.
-  keydown : function(e) {
-    var key = VS.app.hotkeys.key(e);
-
-    if (key == 'enter' && this.box.val()) {
-      this.disableEdit();
-      this.search(e);
-    } else if (key == 'left') {
-      if (this.modes.selected == 'is') {
-        this.deselectFacet();
-        this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      } else if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        this.selectFacet();
-      }
-    } else if (key == 'right') {
-      if (this.modes.selected == 'is') {
-        e.preventDefault();
-        this.deselectFacet();
-        this.setCursorAtEnd(0);
-        this.enableEdit();
-      } else if (this.box.getCursorPosition() == this.box.val().length) {
-        e.preventDefault();
-        this.disableEdit();
-        this.app.searchBox.focusNextFacet(this, 1);
-      }
-    } else if (VS.app.hotkeys.shift && key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, -1, {
-        startAtEnd  : -1,
-        skipToFacet : true,
-        selectText  : true
-      });
-    } else if (key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, 1, {
-        skipToFacet : true,
-        selectText  : true
-      });
-    } else if (VS.app.hotkeys.command && (e.which == 97 || e.which == 65)) {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    } else if (VS.app.hotkeys.printable(e) && this.modes.selected == 'is') {
-      this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      this.remove(e);
-    } else if (key == 'backspace') {
-       $(document).on('keydown.backspace', function(e) {
-          if (VS.app.hotkeys.key(e) === 'backspace') {
-             e.preventDefault();
-          }
-       });
-
-       $(document).on('keyup.backspace', function(e) {
-          $(document).off('.backspace');
-       });
-
-      if (this.modes.selected == 'is') {
-        e.preventDefault();
-        this.remove(e);
-      } else if (this.box.getCursorPosition() == 0 &&
-                 !this.box.getSelection().length) {
-        e.preventDefault();
-        this.selectFacet();
-      }
-       e.stopPropagation();
-    }
-
-    // Handle paste events
-    if (e.which == null) {
-        // this.searchAutocomplete(e);
-        _.defer(_.bind(this.resize, this, e));
-    } else {
-      this.resize(e);
-    }
-  }
-
-});
-
-})();

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_input.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_input.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_input.js
deleted file mode 100644
index 5292984..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/views/search_input.js
+++ /dev/null
@@ -1,418 +0,0 @@
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// This is the visual search input that is responsible for creating new facets.
-// There is one input placed in between all facets.
-VS.ui.SearchInput = Backbone.View.extend({
-
-  type : 'text',
-
-  className : 'search_input ui-menu',
-
-  events : {
-    'keypress input'  : 'keypress',
-    'keydown input'   : 'keydown',
-    'keyup input'     : 'keyup',
-    'click input'     : 'maybeTripleClick',
-    'dblclick input'  : 'startTripleClickTimer'
-  },
-
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-    
-    this.app = this.options.app;
-    this.flags = {
-      canClose : false
-    };
-    _.bindAll(this, 'removeFocus', 'addFocus', 'moveAutocomplete', 'deferDisableEdit');
-  },
-
-  // Rendering the input sets up autocomplete, events on focusing and blurring
-  // the input, and the auto-grow of the input.
-  render : function() {
-    $(this.el).html(JST['search_input']({
-      readOnly: this.app.options.readOnly
-    }));
-
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.box = this.$('input');
-    this.box.autoGrowInput();
-    this.box.bind('updated.autogrow', this.moveAutocomplete);
-    this.box.bind('blur',  this.deferDisableEdit);
-    this.box.bind('focus', this.addFocus);
-    this.setupAutocomplete();
-
-    return this;
-  },
-
-  // Watches the input and presents an autocompleted menu, taking the
-  // remainder of the input field and adding a separate facet for it.
-  //
-  // See `addTextFacetRemainder` for explanation on how the remainder works.
-  setupAutocomplete : function() {
-    this.box.autocomplete({
-      minLength : this.options.showFacets ? 0 : 1,
-      delay     : 50,
-      autoFocus : true,
-      position  : {offset : "0 -1"},
-      source    : _.bind(this.autocompleteValues, this),
-      // Prevent changing the input value on focus of an option
-      focus     : function() { return false; },
-      create    : _.bind(function(e, ui) {
-        $(this.el).find('.ui-autocomplete-input').css('z-index','auto');
-      }, this),
-      select    : _.bind(function(e, ui) {
-        e.preventDefault();
-        // stopPropogation does weird things in jquery-ui 1.9
-        // e.stopPropagation();
-        var remainder = this.addTextFacetRemainder(ui.item.label || ui.item.value);
-        var position  = this.options.position + (remainder ? 1 : 0);
-        this.app.searchBox.addFacet(ui.item instanceof String ? ui.item : ui.item.value, '', position);
-        return false;
-      }, this)
-    });
-
-    // Renders the results grouped by the categories they belong to.
-    this.box.data('ui-autocomplete')._renderMenu = function(ul, items) {
-      var category = '';
-      _.each(items, _.bind(function(item, i) {
-        if (item.category && item.category != category) {
-          ul.append('<li class="ui-autocomplete-category">'+item.category+'</li>');
-          category = item.category;
-        }
-
-        if(this._renderItemData) {
-          this._renderItemData(ul, item);
-        } else {
-          this._renderItem(ul, item);
-        }
-
-      }, this));
-    };
-
-    this.box.autocomplete('widget').addClass('VS-interface');
-  },
-
-  // Search terms used in the autocomplete menu. The values are matched on the
-  // first letter of any word in matches, and finally sorted according to the
-  // value's own category. You can pass `preserveOrder` as an option in the
-  // `facetMatches` callback to skip any further ordering done client-side.
-  autocompleteValues : function(req, resp) {
-    var searchTerm = req.term;
-    var lastWord   = searchTerm.match(/\w+\*?$/); // Autocomplete only last word.
-    var re         = VS.utils.inflector.escapeRegExp(lastWord && lastWord[0] || '');
-    this.app.options.callbacks.facetMatches(function(prefixes, options) {
-      options = options || {};
-      prefixes = prefixes || [];
-
-      // Only match from the beginning of the word.
-      var matcher    = new RegExp('^' + re, 'i');
-      var matches    = $.grep(prefixes, function(item) {
-        return item && matcher.test(item.label || item);
-      });
-
-      if (options.preserveOrder) {
-        resp(matches);
-      } else {
-        resp(_.sortBy(matches, function(match) {
-          if (match.label) return match.category + '-' + match.label;
-          else             return match;
-        }));
-      }
-    });
-
-  },
-
-  // Closes the autocomplete menu. Called on disabling, selecting, deselecting,
-  // and anything else that takes focus out of the facet's input field.
-  closeAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) autocomplete.close();
-  },
-
-  // As the input field grows, it may move to the next line in the
-  // search box. `autoGrowInput` triggers an `updated` event on the input
-  // field, which is bound to this method to move the autocomplete menu.
-  moveAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      autocomplete.menu.element.position({
-        my        : "left top",
-        at        : "left bottom",
-        of        : this.box.data('ui-autocomplete').element,
-        collision : "none",
-        offset    : '0 -1'
-      });
-    }
-  },
-
-  // When a user enters a facet and it is being edited, immediately show
-  // the autocomplete menu and size it to match the contents.
-  searchAutocomplete : function(e) {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      var menu = autocomplete.menu.element;
-      autocomplete.search();
-
-      // Resize the menu based on the correctly measured width of what's bigger:
-      // the menu's original size or the menu items' new size.
-      menu.outerWidth(Math.max(
-        menu.width('').outerWidth(),
-        autocomplete.element.outerWidth()
-      ));
-    }
-  },
-
-  // If a user searches for "word word category", the category would be
-  // matched and autocompleted, and when selected, the "word word" would
-  // also be caught as the remainder and then added in its own facet.
-  addTextFacetRemainder : function(facetValue) {
-    var boxValue = this.box.val();
-    var lastWord = boxValue.match(/\b(\w+)$/);
-
-    if (!lastWord) {
-      return '';
-    }
-
-    var matcher = new RegExp(lastWord[0], "i");
-    if (facetValue.search(matcher) == 0) {
-      boxValue = boxValue.replace(/\b(\w+)$/, '');
-    }
-    boxValue = boxValue.replace('^\s+|\s+$', '');
-
-    if (boxValue) {
-      this.app.searchBox.addFacet(this.app.options.remainder, boxValue, this.options.position);
-    }
-
-    return boxValue;
-  },
-
-  // Directly called to focus the input. This is different from `addFocus`
-  // because this is not called by a focus event. This instead calls a
-  // focus event causing the input to become focused.
-  enableEdit : function(selectText) {
-    this.addFocus();
-    if (selectText) {
-      this.selectText();
-    }
-    this.box.focus();
-  },
-
-  // Event called on user focus on the input. Tells all other input and facets
-  // to give up focus, and starts revving the autocomplete.
-  addFocus : function() {
-    this.flags.canClose = false;
-    if (!this.app.searchBox.allSelected()) {
-      this.app.searchBox.disableFacets(this);
-    }
-    this.app.searchBox.addFocus();
-    this.setMode('is', 'editing');
-    this.setMode('not', 'selected');
-    if (!this.app.searchBox.allSelected()) {
-        this.searchAutocomplete();
-    }
-  },
-
-  // Directly called to blur the input. This is different from `removeFocus`
-  // because this is not called by a blur event.
-  disableEdit : function() {
-    this.box.blur();
-    this.removeFocus();
-  },
-
-  // Event called when user blur's the input, either through the keyboard tabbing
-  // away or the mouse clicking off. Cleans up
-  removeFocus : function() {
-    this.flags.canClose = false;
-    this.app.searchBox.removeFocus();
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.closeAutocomplete();
-  },
-
-  // When the user blurs the input, they may either be going to another input
-  // or off the search box entirely. If they go to another input, this facet
-  // will be instantly disabled, and the canClose flag will be turned back off.
-  //
-  // However, if the user clicks elsewhere on the page, this method starts a timer
-  // that checks if any of the other inputs are selected or are being edited. If
-  // not, then it can finally close itself and its autocomplete menu.
-  deferDisableEdit : function() {
-    this.flags.canClose = true;
-    _.delay(_.bind(function() {
-      if (this.flags.canClose &&
-          !this.box.is(':focus') &&
-          this.modes.editing == 'is') {
-        this.disableEdit();
-      }
-    }, this), 250);
-  },
-
-  // Starts a timer that will cause a triple-click, which highlights all facets.
-  startTripleClickTimer : function() {
-    this.tripleClickTimer = setTimeout(_.bind(function() {
-      this.tripleClickTimer = null;
-    }, this), 500);
-  },
-
-  // Event on click that checks if a triple click is in play. The
-  // `tripleClickTimer` is counting down, ready to be engaged and intercept
-  // the click event to force a select all instead.
-  maybeTripleClick : function(e) {
-    if (this.app.options.readOnly) return;
-    if (!!this.tripleClickTimer) {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    }
-  },
-
-  // Is the user currently focused in the input field?
-  isFocused : function() {
-    return this.box.is(':focus');
-  },
-
-  // When serializing the facets, the inputs need to also have their values represented,
-  // in case they contain text that is not yet faceted (but will be once the search is
-  // completed).
-  value : function() {
-    return this.box.val();
-  },
-
-  // When switching between facets and inputs, depending on the direction the cursor
-  // is coming from, the cursor in this facet's input field should match the original
-  // direction.
-  setCursorAtEnd : function(direction) {
-    if (direction == -1) {
-      this.box.setCursorPosition(this.box.val().length);
-    } else {
-      this.box.setCursorPosition(0);
-    }
-  },
-
-  // Selects the entire range of text in the input. Useful when tabbing between inputs
-  // and facets.
-  selectText : function() {
-    this.box.selectRange(0, this.box.val().length);
-    if (!this.app.searchBox.allSelected()) {
-      this.box.focus();
-    } else {
-      this.setMode('is', 'selected');
-    }
-  },
-
-  // Before the searchBox performs a search, we need to close the
-  // autocomplete menu.
-  search : function(e, direction) {
-    if (!direction) direction = 0;
-    this.closeAutocomplete();
-    this.app.searchBox.searchEvent(e);
-    _.defer(_.bind(function() {
-      this.app.searchBox.focusNextFacet(this, direction);
-    }, this));
-  },
-
-  // Callback fired on key press in the search box. We search when they hit return.
-  keypress : function(e) {
-    var key = VS.app.hotkeys.key(e);
-
-    if (key == 'enter') {
-      return this.search(e, 100);
-    } else if (VS.app.hotkeys.colon(e)) {
-      this.box.trigger('resize.autogrow', e);
-      var query    = this.box.val();
-      var prefixes = [];
-      this.app.options.callbacks.facetMatches(function(p) {
-          prefixes = p;
-      });
-      var labels   = _.map(prefixes, function(prefix) {
-        if (prefix.label) return prefix.label;
-        else              return prefix;
-      });
-      if (_.contains(labels, query)) {
-        e.preventDefault();
-        var remainder = this.addTextFacetRemainder(query);
-        var position  = this.options.position + (remainder?1:0);
-        this.app.searchBox.addFacet(query, '', position);
-        return false;
-      }
-    } else if (key == 'backspace') {
-      if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        e.preventDefault();
-        e.stopPropagation();
-        e.stopImmediatePropagation();
-        this.app.searchBox.resizeFacets();
-        return false;
-      }
-    }
-  },
-
-  // Handles all keyboard inputs when in the input field. This checks
-  // for movement between facets and inputs, entering a new value that needs
-  // to be autocompleted, as well as stepping between facets with backspace.
-  keydown : function(e) {
-    var key = VS.app.hotkeys.key(e);
-
-    if (key == 'left') {
-      if (this.box.getCursorPosition() == 0) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      }
-    } else if (key == 'right') {
-      if (this.box.getCursorPosition() == this.box.val().length) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, 1, {selectFacet: true});
-      }
-    } else if (VS.app.hotkeys.shift && key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, -1, {selectText: true});
-    } else if (key == 'tab') {
-      var value = this.box.val();
-      if (value.length) {
-        e.preventDefault();
-        var remainder = this.addTextFacetRemainder(value);
-        var position  = this.options.position + (remainder?1:0);
-        if (value != remainder) {
-            this.app.searchBox.addFacet(value, '', position);
-        }
-      } else {
-        var foundFacet = this.app.searchBox.focusNextFacet(this, 0, {
-          skipToFacet: true,
-          selectText: true
-        });
-        if (foundFacet) {
-          e.preventDefault();
-        }
-      }
-    } else if (VS.app.hotkeys.command &&
-               String.fromCharCode(e.which).toLowerCase() == 'a') {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    } else if (key == 'backspace' && !this.app.searchBox.allSelected()) {
-      if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, -1, {backspace: true});
-        return false;
-      }
-    } else if (key == 'end') {
-      var view = this.app.searchBox.inputViews[this.app.searchBox.inputViews.length-1];
-      view.setCursorAtEnd(-1);
-    } else if (key == 'home') {
-      var view = this.app.searchBox.inputViews[0];
-      view.setCursorAtEnd(-1);
-    }
-
-  },
-
-  // We should get the value of an input should be done
-  // on keyup since keydown gets the previous value and not the current one
-  keyup : function(e) {
-    this.box.trigger('resize.autogrow', e);
-  }
-
-});
-
-})();


[31/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.css
deleted file mode 100644
index 2dcdc22..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.css
+++ /dev/null
@@ -1,1801 +0,0 @@
-/*!
- *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../fonts/fontawesome-webfont.eot?v=4.3.0');
-  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.fa {
-  display: inline-block;
-  font: normal normal normal 14px/1 FontAwesome;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  transform: translate(0, 0);
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
-  font-size: 1.33333333em;
-  line-height: 0.75em;
-  vertical-align: -15%;
-}
-.fa-2x {
-  font-size: 2em;
-}
-.fa-3x {
-  font-size: 3em;
-}
-.fa-4x {
-  font-size: 4em;
-}
-.fa-5x {
-  font-size: 5em;
-}
-.fa-fw {
-  width: 1.28571429em;
-  text-align: center;
-}
-.fa-ul {
-  padding-left: 0;
-  margin-left: 2.14285714em;
-  list-style-type: none;
-}
-.fa-ul > li {
-  position: relative;
-}
-.fa-li {
-  position: absolute;
-  left: -2.14285714em;
-  width: 2.14285714em;
-  top: 0.14285714em;
-  text-align: center;
-}
-.fa-li.fa-lg {
-  left: -1.85714286em;
-}
-.fa-border {
-  padding: .2em .25em .15em;
-  border: solid 0.08em #eeeeee;
-  border-radius: .1em;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.fa.pull-left {
-  margin-right: .3em;
-}
-.fa.pull-right {
-  margin-left: .3em;
-}
-.fa-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-  animation: fa-spin 2s infinite linear;
-}
-.fa-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-  animation: fa-spin 1s infinite steps(8);
-}
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-.fa-rotate-90 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-  -webkit-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.fa-rotate-180 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-  -webkit-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.fa-rotate-270 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-  -webkit-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.fa-flip-horizontal {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
-  -webkit-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.fa-flip-vertical {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
-  -webkit-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-:root .fa-rotate-90,
-:root .fa-rotate-180,
-:root .fa-rotate-270,
-:root .fa-flip-horizontal,
-:root .fa-flip-vertical {
-  filter: none;
-}
-.fa-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.fa-stack-1x {
-  line-height: inherit;
-}
-.fa-stack-2x {
-  font-size: 2em;
-}
-.fa-inverse {
-  color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.fa-glass:before {
-  content: "\f000";
-}
-.fa-music:before {
-  content: "\f001";
-}
-.fa-search:before {
-  content: "\f002";
-}
-.fa-envelope-o:before {
-  content: "\f003";
-}
-.fa-heart:before {
-  content: "\f004";
-}
-.fa-star:before {
-  content: "\f005";
-}
-.fa-star-o:before {
-  content: "\f006";
-}
-.fa-user:before {
-  content: "\f007";
-}
-.fa-film:before {
-  content: "\f008";
-}
-.fa-th-large:before {
-  content: "\f009";
-}
-.fa-th:before {
-  content: "\f00a";
-}
-.fa-th-list:before {
-  content: "\f00b";
-}
-.fa-check:before {
-  content: "\f00c";
-}
-.fa-remove:before,
-.fa-close:before,
-.fa-times:before {
-  content: "\f00d";
-}
-.fa-search-plus:before {
-  content: "\f00e";
-}
-.fa-search-minus:before {
-  content: "\f010";
-}
-.fa-power-off:before {
-  content: "\f011";
-}
-.fa-signal:before {
-  content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
-  content: "\f013";
-}
-.fa-trash-o:before {
-  content: "\f014";
-}
-.fa-home:before {
-  content: "\f015";
-}
-.fa-file-o:before {
-  content: "\f016";
-}
-.fa-clock-o:before {
-  content: "\f017";
-}
-.fa-road:before {
-  content: "\f018";
-}
-.fa-download:before {
-  content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
-  content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
-  content: "\f01b";
-}
-.fa-inbox:before {
-  content: "\f01c";
-}
-.fa-play-circle-o:before {
-  content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
-  content: "\f01e";
-}
-.fa-refresh:before {
-  content: "\f021";
-}
-.fa-list-alt:before {
-  content: "\f022";
-}
-.fa-lock:before {
-  content: "\f023";
-}
-.fa-flag:before {
-  content: "\f024";
-}
-.fa-headphones:before {
-  content: "\f025";
-}
-.fa-volume-off:before {
-  content: "\f026";
-}
-.fa-volume-down:before {
-  content: "\f027";
-}
-.fa-volume-up:before {
-  content: "\f028";
-}
-.fa-qrcode:before {
-  content: "\f029";
-}
-.fa-barcode:before {
-  content: "\f02a";
-}
-.fa-tag:before {
-  content: "\f02b";
-}
-.fa-tags:before {
-  content: "\f02c";
-}
-.fa-book:before {
-  content: "\f02d";
-}
-.fa-bookmark:before {
-  content: "\f02e";
-}
-.fa-print:before {
-  content: "\f02f";
-}
-.fa-camera:before {
-  content: "\f030";
-}
-.fa-font:before {
-  content: "\f031";
-}
-.fa-bold:before {
-  content: "\f032";
-}
-.fa-italic:before {
-  content: "\f033";
-}
-.fa-text-height:before {
-  content: "\f034";
-}
-.fa-text-width:before {
-  content: "\f035";
-}
-.fa-align-left:before {
-  content: "\f036";
-}
-.fa-align-center:before {
-  content: "\f037";
-}
-.fa-align-right:before {
-  content: "\f038";
-}
-.fa-align-justify:before {
-  content: "\f039";
-}
-.fa-list:before {
-  content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
-  content: "\f03b";
-}
-.fa-indent:before {
-  content: "\f03c";
-}
-.fa-video-camera:before {
-  content: "\f03d";
-}
-.fa-photo:before,
-.fa-image:before,
-.fa-picture-o:before {
-  content: "\f03e";
-}
-.fa-pencil:before {
-  content: "\f040";
-}
-.fa-map-marker:before {
-  content: "\f041";
-}
-.fa-adjust:before {
-  content: "\f042";
-}
-.fa-tint:before {
-  content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
-  content: "\f044";
-}
-.fa-share-square-o:before {
-  content: "\f045";
-}
-.fa-check-square-o:before {
-  content: "\f046";
-}
-.fa-arrows:before {
-  content: "\f047";
-}
-.fa-step-backward:before {
-  content: "\f048";
-}
-.fa-fast-backward:before {
-  content: "\f049";
-}
-.fa-backward:before {
-  content: "\f04a";
-}
-.fa-play:before {
-  content: "\f04b";
-}
-.fa-pause:before {
-  content: "\f04c";
-}
-.fa-stop:before {
-  content: "\f04d";
-}
-.fa-forward:before {
-  content: "\f04e";
-}
-.fa-fast-forward:before {
-  content: "\f050";
-}
-.fa-step-forward:before {
-  content: "\f051";
-}
-.fa-eject:before {
-  content: "\f052";
-}
-.fa-chevron-left:before {
-  content: "\f053";
-}
-.fa-chevron-right:before {
-  content: "\f054";
-}
-.fa-plus-circle:before {
-  content: "\f055";
-}
-.fa-minus-circle:before {
-  content: "\f056";
-}
-.fa-times-circle:before {
-  content: "\f057";
-}
-.fa-check-circle:before {
-  content: "\f058";
-}
-.fa-question-circle:before {
-  content: "\f059";
-}
-.fa-info-circle:before {
-  content: "\f05a";
-}
-.fa-crosshairs:before {
-  content: "\f05b";
-}
-.fa-times-circle-o:before {
-  content: "\f05c";
-}
-.fa-check-circle-o:before {
-  content: "\f05d";
-}
-.fa-ban:before {
-  content: "\f05e";
-}
-.fa-arrow-left:before {
-  content: "\f060";
-}
-.fa-arrow-right:before {
-  content: "\f061";
-}
-.fa-arrow-up:before {
-  content: "\f062";
-}
-.fa-arrow-down:before {
-  content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
-  content: "\f064";
-}
-.fa-expand:before {
-  content: "\f065";
-}
-.fa-compress:before {
-  content: "\f066";
-}
-.fa-plus:before {
-  content: "\f067";
-}
-.fa-minus:before {
-  content: "\f068";
-}
-.fa-asterisk:before {
-  content: "\f069";
-}
-.fa-exclamation-circle:before {
-  content: "\f06a";
-}
-.fa-gift:before {
-  content: "\f06b";
-}
-.fa-leaf:before {
-  content: "\f06c";
-}
-.fa-fire:before {
-  content: "\f06d";
-}
-.fa-eye:before {
-  content: "\f06e";
-}
-.fa-eye-slash:before {
-  content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
-  content: "\f071";
-}
-.fa-plane:before {
-  content: "\f072";
-}
-.fa-calendar:before {
-  content: "\f073";
-}
-.fa-random:before {
-  content: "\f074";
-}
-.fa-comment:before {
-  content: "\f075";
-}
-.fa-magnet:before {
-  content: "\f076";
-}
-.fa-chevron-up:before {
-  content: "\f077";
-}
-.fa-chevron-down:before {
-  content: "\f078";
-}
-.fa-retweet:before {
-  content: "\f079";
-}
-.fa-shopping-cart:before {
-  content: "\f07a";
-}
-.fa-folder:before {
-  content: "\f07b";
-}
-.fa-folder-open:before {
-  content: "\f07c";
-}
-.fa-arrows-v:before {
-  content: "\f07d";
-}
-.fa-arrows-h:before {
-  content: "\f07e";
-}
-.fa-bar-chart-o:before,
-.fa-bar-chart:before {
-  content: "\f080";
-}
-.fa-twitter-square:before {
-  content: "\f081";
-}
-.fa-facebook-square:before {
-  content: "\f082";
-}
-.fa-camera-retro:before {
-  content: "\f083";
-}
-.fa-key:before {
-  content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
-  content: "\f085";
-}
-.fa-comments:before {
-  content: "\f086";
-}
-.fa-thumbs-o-up:before {
-  content: "\f087";
-}
-.fa-thumbs-o-down:before {
-  content: "\f088";
-}
-.fa-star-half:before {
-  content: "\f089";
-}
-.fa-heart-o:before {
-  content: "\f08a";
-}
-.fa-sign-out:before {
-  content: "\f08b";
-}
-.fa-linkedin-square:before {
-  content: "\f08c";
-}
-.fa-thumb-tack:before {
-  content: "\f08d";
-}
-.fa-external-link:before {
-  content: "\f08e";
-}
-.fa-sign-in:before {
-  content: "\f090";
-}
-.fa-trophy:before {
-  content: "\f091";
-}
-.fa-github-square:before {
-  content: "\f092";
-}
-.fa-upload:before {
-  content: "\f093";
-}
-.fa-lemon-o:before {
-  content: "\f094";
-}
-.fa-phone:before {
-  content: "\f095";
-}
-.fa-square-o:before {
-  content: "\f096";
-}
-.fa-bookmark-o:before {
-  content: "\f097";
-}
-.fa-phone-square:before {
-  content: "\f098";
-}
-.fa-twitter:before {
-  content: "\f099";
-}
-.fa-facebook-f:before,
-.fa-facebook:before {
-  content: "\f09a";
-}
-.fa-github:before {
-  content: "\f09b";
-}
-.fa-unlock:before {
-  content: "\f09c";
-}
-.fa-credit-card:before {
-  content: "\f09d";
-}
-.fa-rss:before {
-  content: "\f09e";
-}
-.fa-hdd-o:before {
-  content: "\f0a0";
-}
-.fa-bullhorn:before {
-  content: "\f0a1";
-}
-.fa-bell:before {
-  content: "\f0f3";
-}
-.fa-certificate:before {
-  content: "\f0a3";
-}
-.fa-hand-o-right:before {
-  content: "\f0a4";
-}
-.fa-hand-o-left:before {
-  content: "\f0a5";
-}
-.fa-hand-o-up:before {
-  content: "\f0a6";
-}
-.fa-hand-o-down:before {
-  content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
-  content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
-  content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
-  content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
-  content: "\f0ab";
-}
-.fa-globe:before {
-  content: "\f0ac";
-}
-.fa-wrench:before {
-  content: "\f0ad";
-}
-.fa-tasks:before {
-  content: "\f0ae";
-}
-.fa-filter:before {
-  content: "\f0b0";
-}
-.fa-briefcase:before {
-  content: "\f0b1";
-}
-.fa-arrows-alt:before {
-  content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
-  content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
-  content: "\f0c1";
-}
-.fa-cloud:before {
-  content: "\f0c2";
-}
-.fa-flask:before {
-  content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
-  content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
-  content: "\f0c5";
-}
-.fa-paperclip:before {
-  content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
-  content: "\f0c7";
-}
-.fa-square:before {
-  content: "\f0c8";
-}
-.fa-navicon:before,
-.fa-reorder:before,
-.fa-bars:before {
-  content: "\f0c9";
-}
-.fa-list-ul:before {
-  content: "\f0ca";
-}
-.fa-list-ol:before {
-  content: "\f0cb";
-}
-.fa-strikethrough:before {
-  content: "\f0cc";
-}
-.fa-underline:before {
-  content: "\f0cd";
-}
-.fa-table:before {
-  content: "\f0ce";
-}
-.fa-magic:before {
-  content: "\f0d0";
-}
-.fa-truck:before {
-  content: "\f0d1";
-}
-.fa-pinterest:before {
-  content: "\f0d2";
-}
-.fa-pinterest-square:before {
-  content: "\f0d3";
-}
-.fa-google-plus-square:before {
-  content: "\f0d4";
-}
-.fa-google-plus:before {
-  content: "\f0d5";
-}
-.fa-money:before {
-  content: "\f0d6";
-}
-.fa-caret-down:before {
-  content: "\f0d7";
-}
-.fa-caret-up:before {
-  content: "\f0d8";
-}
-.fa-caret-left:before {
-  content: "\f0d9";
-}
-.fa-caret-right:before {
-  content: "\f0da";
-}
-.fa-columns:before {
-  content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
-  content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-desc:before {
-  content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-asc:before {
-  content: "\f0de";
-}
-.fa-envelope:before {
-  content: "\f0e0";
-}
-.fa-linkedin:before {
-  content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
-  content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
-  content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
-  content: "\f0e4";
-}
-.fa-comment-o:before {
-  content: "\f0e5";
-}
-.fa-comments-o:before {
-  content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
-  content: "\f0e7";
-}
-.fa-sitemap:before {
-  content: "\f0e8";
-}
-.fa-umbrella:before {
-  content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
-  content: "\f0ea";
-}
-.fa-lightbulb-o:before {
-  content: "\f0eb";
-}
-.fa-exchange:before {
-  content: "\f0ec";
-}
-.fa-cloud-download:before {
-  content: "\f0ed";
-}
-.fa-cloud-upload:before {
-  content: "\f0ee";
-}
-.fa-user-md:before {
-  content: "\f0f0";
-}
-.fa-stethoscope:before {
-  content: "\f0f1";
-}
-.fa-suitcase:before {
-  content: "\f0f2";
-}
-.fa-bell-o:before {
-  content: "\f0a2";
-}
-.fa-coffee:before {
-  content: "\f0f4";
-}
-.fa-cutlery:before {
-  content: "\f0f5";
-}
-.fa-file-text-o:before {
-  content: "\f0f6";
-}
-.fa-building-o:before {
-  content: "\f0f7";
-}
-.fa-hospital-o:before {
-  content: "\f0f8";
-}
-.fa-ambulance:before {
-  content: "\f0f9";
-}
-.fa-medkit:before {
-  content: "\f0fa";
-}
-.fa-fighter-jet:before {
-  content: "\f0fb";
-}
-.fa-beer:before {
-  content: "\f0fc";
-}
-.fa-h-square:before {
-  content: "\f0fd";
-}
-.fa-plus-square:before {
-  content: "\f0fe";
-}
-.fa-angle-double-left:before {
-  content: "\f100";
-}
-.fa-angle-double-right:before {
-  content: "\f101";
-}
-.fa-angle-double-up:before {
-  content: "\f102";
-}
-.fa-angle-double-down:before {
-  content: "\f103";
-}
-.fa-angle-left:before {
-  content: "\f104";
-}
-.fa-angle-right:before {
-  content: "\f105";
-}
-.fa-angle-up:before {
-  content: "\f106";
-}
-.fa-angle-down:before {
-  content: "\f107";
-}
-.fa-desktop:before {
-  content: "\f108";
-}
-.fa-laptop:before {
-  content: "\f109";
-}
-.fa-tablet:before {
-  content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
-  content: "\f10b";
-}
-.fa-circle-o:before {
-  content: "\f10c";
-}
-.fa-quote-left:before {
-  content: "\f10d";
-}
-.fa-quote-right:before {
-  content: "\f10e";
-}
-.fa-spinner:before {
-  content: "\f110";
-}
-.fa-circle:before {
-  content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
-  content: "\f112";
-}
-.fa-github-alt:before {
-  content: "\f113";
-}
-.fa-folder-o:before {
-  content: "\f114";
-}
-.fa-folder-open-o:before {
-  content: "\f115";
-}
-.fa-smile-o:before {
-  content: "\f118";
-}
-.fa-frown-o:before {
-  content: "\f119";
-}
-.fa-meh-o:before {
-  content: "\f11a";
-}
-.fa-gamepad:before {
-  content: "\f11b";
-}
-.fa-keyboard-o:before {
-  content: "\f11c";
-}
-.fa-flag-o:before {
-  content: "\f11d";
-}
-.fa-flag-checkered:before {
-  content: "\f11e";
-}
-.fa-terminal:before {
-  content: "\f120";
-}
-.fa-code:before {
-  content: "\f121";
-}
-.fa-mail-reply-all:before,
-.fa-reply-all:before {
-  content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
-  content: "\f123";
-}
-.fa-location-arrow:before {
-  content: "\f124";
-}
-.fa-crop:before {
-  content: "\f125";
-}
-.fa-code-fork:before {
-  content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
-  content: "\f127";
-}
-.fa-question:before {
-  content: "\f128";
-}
-.fa-info:before {
-  content: "\f129";
-}
-.fa-exclamation:before {
-  content: "\f12a";
-}
-.fa-superscript:before {
-  content: "\f12b";
-}
-.fa-subscript:before {
-  content: "\f12c";
-}
-.fa-eraser:before {
-  content: "\f12d";
-}
-.fa-puzzle-piece:before {
-  content: "\f12e";
-}
-.fa-microphone:before {
-  content: "\f130";
-}
-.fa-microphone-slash:before {
-  content: "\f131";
-}
-.fa-shield:before {
-  content: "\f132";
-}
-.fa-calendar-o:before {
-  content: "\f133";
-}
-.fa-fire-extinguisher:before {
-  content: "\f134";
-}
-.fa-rocket:before {
-  content: "\f135";
-}
-.fa-maxcdn:before {
-  content: "\f136";
-}
-.fa-chevron-circle-left:before {
-  content: "\f137";
-}
-.fa-chevron-circle-right:before {
-  content: "\f138";
-}
-.fa-chevron-circle-up:before {
-  content: "\f139";
-}
-.fa-chevron-circle-down:before {
-  content: "\f13a";
-}
-.fa-html5:before {
-  content: "\f13b";
-}
-.fa-css3:before {
-  content: "\f13c";
-}
-.fa-anchor:before {
-  content: "\f13d";
-}
-.fa-unlock-alt:before {
-  content: "\f13e";
-}
-.fa-bullseye:before {
-  content: "\f140";
-}
-.fa-ellipsis-h:before {
-  content: "\f141";
-}
-.fa-ellipsis-v:before {
-  content: "\f142";
-}
-.fa-rss-square:before {
-  content: "\f143";
-}
-.fa-play-circle:before {
-  content: "\f144";
-}
-.fa-ticket:before {
-  content: "\f145";
-}
-.fa-minus-square:before {
-  content: "\f146";
-}
-.fa-minus-square-o:before {
-  content: "\f147";
-}
-.fa-level-up:before {
-  content: "\f148";
-}
-.fa-level-down:before {
-  content: "\f149";
-}
-.fa-check-square:before {
-  content: "\f14a";
-}
-.fa-pencil-square:before {
-  content: "\f14b";
-}
-.fa-external-link-square:before {
-  content: "\f14c";
-}
-.fa-share-square:before {
-  content: "\f14d";
-}
-.fa-compass:before {
-  content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
-  content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
-  content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
-  content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
-  content: "\f153";
-}
-.fa-gbp:before {
-  content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
-  content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
-  content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
-  content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
-  content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
-  content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
-  content: "\f15a";
-}
-.fa-file:before {
-  content: "\f15b";
-}
-.fa-file-text:before {
-  content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
-  content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
-  content: "\f15e";
-}
-.fa-sort-amount-asc:before {
-  content: "\f160";
-}
-.fa-sort-amount-desc:before {
-  content: "\f161";
-}
-.fa-sort-numeric-asc:before {
-  content: "\f162";
-}
-.fa-sort-numeric-desc:before {
-  content: "\f163";
-}
-.fa-thumbs-up:before {
-  content: "\f164";
-}
-.fa-thumbs-down:before {
-  content: "\f165";
-}
-.fa-youtube-square:before {
-  content: "\f166";
-}
-.fa-youtube:before {
-  content: "\f167";
-}
-.fa-xing:before {
-  content: "\f168";
-}
-.fa-xing-square:before {
-  content: "\f169";
-}
-.fa-youtube-play:before {
-  content: "\f16a";
-}
-.fa-dropbox:before {
-  content: "\f16b";
-}
-.fa-stack-overflow:before {
-  content: "\f16c";
-}
-.fa-instagram:before {
-  content: "\f16d";
-}
-.fa-flickr:before {
-  content: "\f16e";
-}
-.fa-adn:before {
-  content: "\f170";
-}
-.fa-bitbucket:before {
-  content: "\f171";
-}
-.fa-bitbucket-square:before {
-  content: "\f172";
-}
-.fa-tumblr:before {
-  content: "\f173";
-}
-.fa-tumblr-square:before {
-  content: "\f174";
-}
-.fa-long-arrow-down:before {
-  content: "\f175";
-}
-.fa-long-arrow-up:before {
-  content: "\f176";
-}
-.fa-long-arrow-left:before {
-  content: "\f177";
-}
-.fa-long-arrow-right:before {
-  content: "\f178";
-}
-.fa-apple:before {
-  content: "\f179";
-}
-.fa-windows:before {
-  content: "\f17a";
-}
-.fa-android:before {
-  content: "\f17b";
-}
-.fa-linux:before {
-  content: "\f17c";
-}
-.fa-dribbble:before {
-  content: "\f17d";
-}
-.fa-skype:before {
-  content: "\f17e";
-}
-.fa-foursquare:before {
-  content: "\f180";
-}
-.fa-trello:before {
-  content: "\f181";
-}
-.fa-female:before {
-  content: "\f182";
-}
-.fa-male:before {
-  content: "\f183";
-}
-.fa-gittip:before,
-.fa-gratipay:before {
-  content: "\f184";
-}
-.fa-sun-o:before {
-  content: "\f185";
-}
-.fa-moon-o:before {
-  content: "\f186";
-}
-.fa-archive:before {
-  content: "\f187";
-}
-.fa-bug:before {
-  content: "\f188";
-}
-.fa-vk:before {
-  content: "\f189";
-}
-.fa-weibo:before {
-  content: "\f18a";
-}
-.fa-renren:before {
-  content: "\f18b";
-}
-.fa-pagelines:before {
-  content: "\f18c";
-}
-.fa-stack-exchange:before {
-  content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
-  content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
-  content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
-  content: "\f191";
-}
-.fa-dot-circle-o:before {
-  content: "\f192";
-}
-.fa-wheelchair:before {
-  content: "\f193";
-}
-.fa-vimeo-square:before {
-  content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
-  content: "\f195";
-}
-.fa-plus-square-o:before {
-  content: "\f196";
-}
-.fa-space-shuttle:before {
-  content: "\f197";
-}
-.fa-slack:before {
-  content: "\f198";
-}
-.fa-envelope-square:before {
-  content: "\f199";
-}
-.fa-wordpress:before {
-  content: "\f19a";
-}
-.fa-openid:before {
-  content: "\f19b";
-}
-.fa-institution:before,
-.fa-bank:before,
-.fa-university:before {
-  content: "\f19c";
-}
-.fa-mortar-board:before,
-.fa-graduation-cap:before {
-  content: "\f19d";
-}
-.fa-yahoo:before {
-  content: "\f19e";
-}
-.fa-google:before {
-  content: "\f1a0";
-}
-.fa-reddit:before {
-  content: "\f1a1";
-}
-.fa-reddit-square:before {
-  content: "\f1a2";
-}
-.fa-stumbleupon-circle:before {
-  content: "\f1a3";
-}
-.fa-stumbleupon:before {
-  content: "\f1a4";
-}
-.fa-delicious:before {
-  content: "\f1a5";
-}
-.fa-digg:before {
-  content: "\f1a6";
-}
-.fa-pied-piper:before {
-  content: "\f1a7";
-}
-.fa-pied-piper-alt:before {
-  content: "\f1a8";
-}
-.fa-drupal:before {
-  content: "\f1a9";
-}
-.fa-joomla:before {
-  content: "\f1aa";
-}
-.fa-language:before {
-  content: "\f1ab";
-}
-.fa-fax:before {
-  content: "\f1ac";
-}
-.fa-building:before {
-  content: "\f1ad";
-}
-.fa-child:before {
-  content: "\f1ae";
-}
-.fa-paw:before {
-  content: "\f1b0";
-}
-.fa-spoon:before {
-  content: "\f1b1";
-}
-.fa-cube:before {
-  content: "\f1b2";
-}
-.fa-cubes:before {
-  content: "\f1b3";
-}
-.fa-behance:before {
-  content: "\f1b4";
-}
-.fa-behance-square:before {
-  content: "\f1b5";
-}
-.fa-steam:before {
-  content: "\f1b6";
-}
-.fa-steam-square:before {
-  content: "\f1b7";
-}
-.fa-recycle:before {
-  content: "\f1b8";
-}
-.fa-automobile:before,
-.fa-car:before {
-  content: "\f1b9";
-}
-.fa-cab:before,
-.fa-taxi:before {
-  content: "\f1ba";
-}
-.fa-tree:before {
-  content: "\f1bb";
-}
-.fa-spotify:before {
-  content: "\f1bc";
-}
-.fa-deviantart:before {
-  content: "\f1bd";
-}
-.fa-soundcloud:before {
-  content: "\f1be";
-}
-.fa-database:before {
-  content: "\f1c0";
-}
-.fa-file-pdf-o:before {
-  content: "\f1c1";
-}
-.fa-file-word-o:before {
-  content: "\f1c2";
-}
-.fa-file-excel-o:before {
-  content: "\f1c3";
-}
-.fa-file-powerpoint-o:before {
-  content: "\f1c4";
-}
-.fa-file-photo-o:before,
-.fa-file-picture-o:before,
-.fa-file-image-o:before {
-  content: "\f1c5";
-}
-.fa-file-zip-o:before,
-.fa-file-archive-o:before {
-  content: "\f1c6";
-}
-.fa-file-sound-o:before,
-.fa-file-audio-o:before {
-  content: "\f1c7";
-}
-.fa-file-movie-o:before,
-.fa-file-video-o:before {
-  content: "\f1c8";
-}
-.fa-file-code-o:before {
-  content: "\f1c9";
-}
-.fa-vine:before {
-  content: "\f1ca";
-}
-.fa-codepen:before {
-  content: "\f1cb";
-}
-.fa-jsfiddle:before {
-  content: "\f1cc";
-}
-.fa-life-bouy:before,
-.fa-life-buoy:before,
-.fa-life-saver:before,
-.fa-support:before,
-.fa-life-ring:before {
-  content: "\f1cd";
-}
-.fa-circle-o-notch:before {
-  content: "\f1ce";
-}
-.fa-ra:before,
-.fa-rebel:before {
-  content: "\f1d0";
-}
-.fa-ge:before,
-.fa-empire:before {
-  content: "\f1d1";
-}
-.fa-git-square:before {
-  content: "\f1d2";
-}
-.fa-git:before {
-  content: "\f1d3";
-}
-.fa-hacker-news:before {
-  content: "\f1d4";
-}
-.fa-tencent-weibo:before {
-  content: "\f1d5";
-}
-.fa-qq:before {
-  content: "\f1d6";
-}
-.fa-wechat:before,
-.fa-weixin:before {
-  content: "\f1d7";
-}
-.fa-send:before,
-.fa-paper-plane:before {
-  content: "\f1d8";
-}
-.fa-send-o:before,
-.fa-paper-plane-o:before {
-  content: "\f1d9";
-}
-.fa-history:before {
-  content: "\f1da";
-}
-.fa-genderless:before,
-.fa-circle-thin:before {
-  content: "\f1db";
-}
-.fa-header:before {
-  content: "\f1dc";
-}
-.fa-paragraph:before {
-  content: "\f1dd";
-}
-.fa-sliders:before {
-  content: "\f1de";
-}
-.fa-share-alt:before {
-  content: "\f1e0";
-}
-.fa-share-alt-square:before {
-  content: "\f1e1";
-}
-.fa-bomb:before {
-  content: "\f1e2";
-}
-.fa-soccer-ball-o:before,
-.fa-futbol-o:before {
-  content: "\f1e3";
-}
-.fa-tty:before {
-  content: "\f1e4";
-}
-.fa-binoculars:before {
-  content: "\f1e5";
-}
-.fa-plug:before {
-  content: "\f1e6";
-}
-.fa-slideshare:before {
-  content: "\f1e7";
-}
-.fa-twitch:before {
-  content: "\f1e8";
-}
-.fa-yelp:before {
-  content: "\f1e9";
-}
-.fa-newspaper-o:before {
-  content: "\f1ea";
-}
-.fa-wifi:before {
-  content: "\f1eb";
-}
-.fa-calculator:before {
-  content: "\f1ec";
-}
-.fa-paypal:before {
-  content: "\f1ed";
-}
-.fa-google-wallet:before {
-  content: "\f1ee";
-}
-.fa-cc-visa:before {
-  content: "\f1f0";
-}
-.fa-cc-mastercard:before {
-  content: "\f1f1";
-}
-.fa-cc-discover:before {
-  content: "\f1f2";
-}
-.fa-cc-amex:before {
-  content: "\f1f3";
-}
-.fa-cc-paypal:before {
-  content: "\f1f4";
-}
-.fa-cc-stripe:before {
-  content: "\f1f5";
-}
-.fa-bell-slash:before {
-  content: "\f1f6";
-}
-.fa-bell-slash-o:before {
-  content: "\f1f7";
-}
-.fa-trash:before {
-  content: "\f1f8";
-}
-.fa-copyright:before {
-  content: "\f1f9";
-}
-.fa-at:before {
-  content: "\f1fa";
-}
-.fa-eyedropper:before {
-  content: "\f1fb";
-}
-.fa-paint-brush:before {
-  content: "\f1fc";
-}
-.fa-birthday-cake:before {
-  content: "\f1fd";
-}
-.fa-area-chart:before {
-  content: "\f1fe";
-}
-.fa-pie-chart:before {
-  content: "\f200";
-}
-.fa-line-chart:before {
-  content: "\f201";
-}
-.fa-lastfm:before {
-  content: "\f202";
-}
-.fa-lastfm-square:before {
-  content: "\f203";
-}
-.fa-toggle-off:before {
-  content: "\f204";
-}
-.fa-toggle-on:before {
-  content: "\f205";
-}
-.fa-bicycle:before {
-  content: "\f206";
-}
-.fa-bus:before {
-  content: "\f207";
-}
-.fa-ioxhost:before {
-  content: "\f208";
-}
-.fa-angellist:before {
-  content: "\f209";
-}
-.fa-cc:before {
-  content: "\f20a";
-}
-.fa-shekel:before,
-.fa-sheqel:before,
-.fa-ils:before {
-  content: "\f20b";
-}
-.fa-meanpath:before {
-  content: "\f20c";
-}
-.fa-buysellads:before {
-  content: "\f20d";
-}
-.fa-connectdevelop:before {
-  content: "\f20e";
-}
-.fa-dashcube:before {
-  content: "\f210";
-}
-.fa-forumbee:before {
-  content: "\f211";
-}
-.fa-leanpub:before {
-  content: "\f212";
-}
-.fa-sellsy:before {
-  content: "\f213";
-}
-.fa-shirtsinbulk:before {
-  content: "\f214";
-}
-.fa-simplybuilt:before {
-  content: "\f215";
-}
-.fa-skyatlas:before {
-  content: "\f216";
-}
-.fa-cart-plus:before {
-  content: "\f217";
-}
-.fa-cart-arrow-down:before {
-  content: "\f218";
-}
-.fa-diamond:before {
-  content: "\f219";
-}
-.fa-ship:before {
-  content: "\f21a";
-}
-.fa-user-secret:before {
-  content: "\f21b";
-}
-.fa-motorcycle:before {
-  content: "\f21c";
-}
-.fa-street-view:before {
-  content: "\f21d";
-}
-.fa-heartbeat:before {
-  content: "\f21e";
-}
-.fa-venus:before {
-  content: "\f221";
-}
-.fa-mars:before {
-  content: "\f222";
-}
-.fa-mercury:before {
-  content: "\f223";
-}
-.fa-transgender:before {
-  content: "\f224";
-}
-.fa-transgender-alt:before {
-  content: "\f225";
-}
-.fa-venus-double:before {
-  content: "\f226";
-}
-.fa-mars-double:before {
-  content: "\f227";
-}
-.fa-venus-mars:before {
-  content: "\f228";
-}
-.fa-mars-stroke:before {
-  content: "\f229";
-}
-.fa-mars-stroke-v:before {
-  content: "\f22a";
-}
-.fa-mars-stroke-h:before {
-  content: "\f22b";
-}
-.fa-neuter:before {
-  content: "\f22c";
-}
-.fa-facebook-official:before {
-  content: "\f230";
-}
-.fa-pinterest-p:before {
-  content: "\f231";
-}
-.fa-whatsapp:before {
-  content: "\f232";
-}
-.fa-server:before {
-  content: "\f233";
-}
-.fa-user-plus:before {
-  content: "\f234";
-}
-.fa-user-times:before {
-  content: "\f235";
-}
-.fa-hotel:before,
-.fa-bed:before {
-  content: "\f236";
-}
-.fa-viacoin:before {
-  content: "\f237";
-}
-.fa-train:before {
-  content: "\f238";
-}
-.fa-subway:before {
-  content: "\f239";
-}
-.fa-medium:before {
-  content: "\f23a";
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.min.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.min.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.min.css
deleted file mode 100644
index 24fcc04..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/css/font-awesome.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{p
 osition:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Micr
 osoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size
 :2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o
 -up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:
 "\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}
 .fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-sl
 ash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:be
 fore{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-h
 and-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-
 underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-
 flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content
 :"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content
 :"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-c
 ircle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{conten
 t:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:bef
 ore{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-arc
 hive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{c
 ontent:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{cont
 ent:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:
 "\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:
 "\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"
 \f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"
 }.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/FontAwesome.otf
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/FontAwesome.otf b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/FontAwesome.otf
deleted file mode 100644
index 7012545..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/FontAwesome.otf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.eot
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.eot b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.eot
deleted file mode 100644
index 0662cb9..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.eot and /dev/null differ


[07/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/TimeZoneChangeView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/TimeZoneChangeView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/TimeZoneChangeView.js
deleted file mode 100644
index 900c232..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dialog/TimeZoneChangeView.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/dialog/TimeZoneChangeView_tmpl'
-],function(require,Backbone,Utils,TimeZoneChangeViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends TimeZoneChangeView */
-        {
-            _viewName: 'TimeZoneChangeView',
-
-            template: TimeZoneChangeViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                map: "#timezone-picker"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                return events;
-            },
-
-            /**
-             * intialize a new TimeZoneChangeView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'currentTime'));
-                this.dateUtil = Utils.dateUtil;
-                this.changedTimeZone = false;
-                var storeTimezone = '';
-                if(!_.isUndefined(this.currentTime)){
-                    storeTimezone = this.currentTime;
-                }
-                if (storeTimezone && storeTimezone != "undefined") {
-                    this.selectedtimeZone = storeTimezone.value
-                }
-            },
-            bindEvents: function() {
-                var that = this;
-                this.ui.map.on('map:clicked', function(e) {
-                    var valueArray = $(this).data('WorldMapGenerator').getValue();
-                    if (valueArray.length) {
-                        if (that.selectedtimeZone != valueArray[0].zonename) {
-                            that.selectedtimeZone = valueArray[0].timezone + "," + valueArray[0].zonename + "," + valueArray.length
-                            that.changedTimeZone = true;
-                        }
-                    }
-
-                    that.enabledButton()
-                })
-                this.ui.map.on('map:loaded', function(e) {
-                    var selectedtimeZone = that.selectedtimeZone.split(',');
-                    if (selectedtimeZone.length <= 1) {
-                        $(this).data('WorldMapGenerator').setValue(that.selectedtimeZone.split(',')[0], 'timezone');
-                    } else {
-                        if (selectedtimeZone[2] && parseInt(selectedtimeZone[2]) <= 1 ) {
-                            $(this).data('WorldMapGenerator').setValue(that.selectedtimeZone.split(',')[0], 'timezone');
-                        } else {
-                            $(this).data('WorldMapGenerator').setValue(that.selectedtimeZone.split(',')[1], 'zonename');
-                        }
-                    }
-
-                    that.trigger('toggle:btn', false, 'reloadBtn');
-                    that.trigger('toggle:btn', false, 'reloadNewBtn');
-                })
-            },
-            onRender: function() {
-                this.bindEvents();
-            },
-            enabledButton: function() {
-                this.trigger('toggle:btn', true, 'reloadBtn');
-                this.trigger('toggle:btn', true, 'reloadNewBtn');
-            }
-
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
deleted file mode 100644
index bcab975..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/filter/CreateLogfeederFilterView.js
+++ /dev/null
@@ -1,383 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/filter/CreateLogfeederFilter_tmpl',
-    'models/VUserFilter',
-    'utils/Globals',
-    'collections/VGroupList',
-    'moment',
-    'select2',
-], function(require, Backbone, Utils, CreateLogfeederFilter_tmpl, VUserFilter, Globals, VGroupList, moment) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends TimeZoneChangeView */
-        {
-            _viewName: 'FilterView',
-
-            template: CreateLogfeederFilter_tmpl,
-
-            /** ui selector cache */
-            ui: {
-                'componentSelect2': "#components",
-                'hostSelect2': "#hosts",
-                // 'levelSelect2': "#levels",
-                'filterInput': '#filter[input]',
-                'loader'     : "[data-id='loader']",
-                'filterContent' : '#filterContent',
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events["click [data-override]"] = 'onDataOverrideClick';
-                events["click [data-value]"] = 'onLogLevelHeaderClick';
-                events["click #filterContent input[type='checkbox']"] = 'onAnyCheckboxClick';
-                events["click .overrideRow a"] = 'onEditHost';
-
-                return events;
-            },
-
-            /**
-             * intialize a new Filter Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, ''));
-                this.componentsList = new VGroupList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 99999
-                    }
-                });
-
-                this.hostList = new VGroupList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 99999
-                    }
-                });
-
-                this.componentsList.url = Globals.baseURL + "service/logs/components";
-                this.hostList.url = Globals.baseURL + "service/logs/hosts";
-                this.model = new VUserFilter();
-
-                this.levelCollection = new Backbone.Collection();
-                var levelArr = ["FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE", "UNKNOWN"];
-
-                for (var i in levelArr) {
-                    this.levelCollection.add(new Backbone.Model({ type: levelArr[i] }));
-                }
-                this.bindEvents();
-            },
-            bindEvents: function() {
-                // this.listenTo(this.componentsList, "reset", function(col, abc) {
-                //      this.setupSelect2Fields(col, "type", 'type', 'componentSelect2', 'Select Component');
-                // }, this);
-
-                this.listenTo(this.hostList, "reset", function(col, abc) {
-                    //this.setupSelect2Fields(col, "host", 'host', 'hostSelect2', 'Select Host', 'hostBoolean');
-                }, this);
-            },
-            onRender: function() {
-                var that = this;
-                // this.setupSelect2Fields(this.levelCollection, "type", "type", "levelSelect2", 'Select Level');
-
-                $.when(this.hostList.fetch({ reset: true }), this.componentsList.fetch({ reset: true }), this.model.fetch({})).then(function(c1, c2, m1) {
-                    // if (!_.isUndefined(that.model.get('components'))) {
-                    //     that.ui.componentSelect2.select2('val', that.model.get('components'));
-                    // }
-                    //if (!_.isUndefined(that.model.get('hosts'))) {
-                    //    that.ui.hostSelect2.select2('val', that.model.get('hosts'));
-                    //}
-                    // if (!_.isUndefined(that.model.get('levels'))) {
-                    //     that.ui.levelSelect2.select2('val', that.model.get('levels'));
-                    // }
-                    that.hideLoading();
-                    that.trigger("toggle:okBtn",true);
-
-                    //that.dataLevels = [];
-                    //that.dataLevels = _.pluck(that.levelCollection.models, 'attributes');
-
-                    //that.dataList = [];
-                    //that.dataList = _.pluck(that.componentsList.models, 'attributes');
-                    that.renderComponents();
-                    that.populateValues();
-                },function(error){
-                	that.hideLoading();
-                	Utils.notifyError({
-                        content: "There is some issues on server, Please try again later."
-                    });
-                	that.trigger("closeDialog");
-                });
-            },
-            hideLoading : function(){
-            	this.ui.loader.hide();
-            },
-            renderComponents : function(){
-              var that = this;
-              var set = new Set();
-              _.each(that.componentsList.models, function(model){
-                that.createRow(model.get("type"), that);
-                set.add(model.get("type"));
-              });
-              
-              if (set.size > 0) {
-                that.ui.filterContent.append('<tr class="overrideSpacer"></tr><tr class="overrideSpacer"></tr><tr class="overrideSpacer"></tr>');
-              }
-              
-              var components = this.model.get("filter");
-              _.each(components,function(value,key){
-                if (!set.has(key)) {
-                  that.createRow(key, that);
-                }
-              });
-            },
-            createRow : function(type, that) {
-              var levels = '<td align="left">'+type+'</td>';
-              var override = '<td class="text-left"><span class="pull-left"><!--small><i>Override</i></small--> <input data-override type="checkbox" data-name='+type+'></span></td>';
-              levels +=  override + that.getLevelForComponent(type,false);
-              var html = '<tr class="overrideSpacer"></tr><tr class="componentRow borderShow" data-component="'+type+'">'+levels+'</tr><tr></tr>';
-              that.ui.filterContent.append(html);
-            },
-            populateValues : function(){
-            	var that =this;
-            	if(this.model.get("filter")){
-            		var components = this.model.get("filter");
-            		_.each(components,function(value,key){
-            			var obj = components[key];
-
-            			if((_.isArray(obj.overrideLevels) && obj.overrideLevels.length) ||
-            					(_.isArray(obj.hosts) && obj.hosts.length) || obj.expiryTime){
-            				var $el = that.$("input[data-name='"+key+"']").filter("[data-override]");
-        					$el.click();
-            			}
-
-            			//setting override data
-            			if(_.isArray(obj.overrideLevels)){
-            				if(obj.overrideLevels.length){
-            					var $override = that.$("tr.overrideRow."+key);
-            					if($override.length){
-            						for(var z=0; z<obj.overrideLevels.length; z++){
-            							var $checkbox = $override.find("input[data-id='"+obj.overrideLevels[z]+"']");
-            							if(! $checkbox.is(":checked")){
-            								$checkbox.prop("checked",true);
-            								// that.showHostSelect2(key);
-            							}
-            						}
-            					}
-            				}
-            			}
-            			//setting expiry
-            			if(obj.expiryTime && that.$("[data-date='"+key+"']").data('daterangepicker')){
-            				var dateObj = Utils.dateUtil.getMomentObject(obj.expiryTime);
-            				that.$("[data-date='"+key+"']").data('daterangepicker').setStartDate(dateObj);
-            				that.$("[data-date='"+key+"']").val(dateObj.format("MM/DD/YYYY HH:mm"));
-            				that.showExpiry(key)
-            			}
-            			//setting hosts
-            			if(_.isArray(obj.hosts)){
-            				if(obj.hosts.length){
-            					that.$("[data-host='"+key+"']").select2("val",obj.hosts);
-                                that.showHostSelect2(key);
-            				}
-            			}
-            			//setting default values
-            			if(obj.defaultLevels && _.isArray(obj.defaultLevels) && obj.defaultLevels.length){
-            				var $default = that.$("tr[data-component='"+key+"']");
-        					if($default.length){
-        						for(var z=0; z<obj.defaultLevels.length; z++){
-        							var $checkbox = $default.find("input[data-id='"+obj.defaultLevels[z]+"']");
-        							if(! $checkbox.is(":checked")){
-        								$checkbox.prop("checked",true);
-        							}
-        						}
-        					}
-            			}
-            		});
-            	}
-            	//set check all value
-            	_.each(this.levelCollection.models,function(model){
-            		that.setCheckAllValue(model.get("type"));
-            	});
-
-            },
-            onAnyCheckboxClick : function(e){
-            	var $el = $(e.currentTarget);
-            	this.setCheckAllValue($el.data("id"));
-            },
-            onEditHost : function(e){
-            	var $el = $(e.currentTarget);
-            	$el.hide();
-            	if($el.data("type") == "host"){
-            		this.showHostSelect2($el.data("component"));
-                }else{
-            		this.showExpiry($el.data("component"));
-                }
-            },
-            hideHostSelect2 : function(forComponent){
-            	this.ui[forComponent].siblings(".select2-container").hide();
-            	this.$("a[data-component='"+forComponent+"'][data-type='host']").show();
-                this.$('i.hostDown[data-component="'+forComponent+'"]').show();
-            },
-            showHostSelect2 : function(forComponent){
-            	this.ui[forComponent].siblings(".select2-container").show();
-            	this.$("a[data-component='"+forComponent+"'][data-type='host']").hide();
-                this.$('i.hostDown[data-component="'+forComponent+'"]').hide();
-            },
-            showExpiry : function(forComponent){
-            	this.$("[data-date='"+forComponent+"']").show();
-            	this.$("a[data-component='"+forComponent+"'][data-type='expiry']").hide();
-            },
-            hideExpiry : function(forComponent){
-            	this.$("[data-date='"+forComponent+"']").hide();
-            	this.$("a[data-component='"+forComponent+"'][data-type='expiry']").show();
-            },
-            setCheckAllValue : function(type){
-            	var that = this;
-            	if(! type)
-            		return
-            	if(that.$("[data-id='"+type+"']:checked").length == that.$("[data-id='"+type+"']").length){
-        			that.$("[data-value='"+type+"']").prop("checked",true);
-        		}else{
-        			that.$("[data-value='"+type+"']").prop("checked",false);
-        		}
-            },
-            getLevelForComponent : function(type,checked){
-            	var html="";
-            	for(var z=0;z<this.levelCollection.length;z++){
-            		html += '<td><input '+((checked) ? "checked":"") +' type="checkbox" data-id='+this.levelCollection.models[z].get("type")+' data-name='+type+'></td>';
-                }
-            	return html;
-            },
-            onDataOverrideClick : function(e){
-            	var $el = $(e.currentTarget);
-            	if(e.currentTarget.checked){
-            		this.addOverrideRow($el.data("name"));
-                    this.$('tr[data-component="'+$el.data("name")+'"]').removeClass('borderShow ');
-                    this.$('tr[data-component="'+$el.data("name")+'"]').addClass('bgHighlight ');
-            	}else{
-            		this.removeOverrideRow($el.data("name"));
-                    this.$('tr[data-component="'+$el.data("name")+'"]').addClass('bgHighlight borderShow ');
-                    this.$('tr[data-component="'+$el.data("name")+'"]').removeClass('bgHighlight ');
-            	}
-            },
-            onLogLevelHeaderClick : function(e){
-            	var $el = $(e.currentTarget);
-            	if(e.currentTarget.checked){
-            		this.$("[data-id='"+$el.data("value")+"']").prop("checked",true);
-            	}else{
-            		this.$("[data-id='"+$el.data("value")+"']").prop("checked",false);
-            	}
-            },
-            addOverrideRow : function(forComponent){
-            	var $el = this.ui.filterContent.find("tr[data-component='"+forComponent+"']"),textForHost = "Click here to apply on specific host",
-            	textForExpiry="Select Expiry Date";
-            	if($el.length){
-            		var html = "<tr class='overrideRow bgHighlight "+forComponent+"'><td class='text-left'><i data-component='"+forComponent+"' class='fa fa-level-down hostDown' aria-hidden='true'></i><a href='javascript:void(0);' data-type='host' data-component='"+forComponent+"'>"+textForHost+"</a><input data-host='"+forComponent+"' type='hidden' /></td>" +
-            				"<td  class='text-left'><a href='javascript:void(0);' data-type='expiry' data-component='"+forComponent+"'>"+textForExpiry+"</a>" +
-            				"<input class='datepickerFilter' data-date='"+forComponent+"'></td>"+this.getLevelForComponent($el.data("component"),false)+"</tr>";
-            		//html += "<tr class='overrideRow "+forComponent+"'><td>&nbsp;</td><td>&nbsp;</td><td colspan='3'><input class='datepickerFilter' data-date='"+forComponent+"'></td>" +
-            			//	"<td colspan='3'><div ><input data-host='"+forComponent+"' type='hidden' /></div></td></tr>"
-            		$el.after(html);
-            		this.ui[forComponent] = this.$("[data-host='"+forComponent+"']");
-            		this.setupSelect2Fields(this.hostList, "host", 'host', forComponent, 'Select Host', 'hostBoolean');
-            		this.hideHostSelect2(forComponent);
-            		this.$("[data-date='"+forComponent+"']").daterangepicker({
-            	        singleDatePicker: true,
-            	        showDropdowns: true,
-            	        parentEl : this.$el,
-                       'startDate':moment().add(1,'hours').format('MM/DD/YYYY HH:mm'),
-            	        //timeZone: 0,
-            	        locale: {
-            	            format: 'MM/DD/YYYY HH:mm'
-            	        },
-            	        //timePickerSeconds: true,
-            	        "timePicker": true,
-                        "timePicker24Hour": true,
-            	    });
-                    this.$("[data-date='"+forComponent+"']").val(moment().add(1,'hours').format("MM/DD/YYYY HH:mm"));
-            		this.hideExpiry(forComponent);
-            	}
-            },
-            removeOverrideRow : function(foComponent){
-            	this.ui.filterContent.find("tr.overrideRow."+foComponent).remove();
-            },
-            setupSelect2Fields: function(col, idKey, textKey, selectTagId, placeHolder) {
-                var that = this,
-                    data = [];
-                data = _.pluck(col.models, 'attributes');
-
-                for (var i = 0; i < data.length; i++) {
-                    data[i].id = data[i][idKey];
-                }
-
-                this.ui[selectTagId].select2({
-                    dropdownParent: that.$el,
-                    placeholder: (placeHolder) ? placeHolder : 'Select',
-                    tags: true,
-                    allowClear: true,
-                    width: '100%',
-                    data: { results: data, text: textKey },
-                    formatSelection: function(item) {
-                        return item[textKey];
-                    },
-                    formatResult: function(item) {
-                        return item[textKey];
-                    }
-
-                });
-
-            },
-            setValues : function(){
-              var obj = {filter: {}},that = this;
-              var components = this.model.get("filter");
-              _.each(components,function(value,key){
-                var date = that.$("[data-date='"+key+"']").data("daterangepicker");
-                var host = (that.$("[data-host='"+key+"']").length) ? that.$("[data-host='"+key+"']").select2('val') : [];
-                obj.filter[key] = {
-                    label : key,
-                    hosts: host,
-                    defaultLevels : that.getDefaultValues(key),
-                    overrideLevels : that.getOverideValues(key),
-                    expiryTime : (date && date.startDate) ? date.startDate.toJSON() : ""
-                };
-              });
-              return (obj);
-            },
-            getOverideValues : function(ofComponent){
-              var $els = this.$("tr.overrideRow."+ofComponent).find("input:checked"),values=[];
-              for(var i=0; i<$els.length; i++){
-                values.push($($els[i]).data("id"));
-              }
-              return values;
-            },
-            getDefaultValues : function(ofComponent){
-              var $els = this.$("tr[data-component='"+ofComponent+"']").find("input:checked"),values=[];
-              for(var i=0; i<$els.length; i++){
-                if($($els[i]).data("id"))
-                  values.push($($els[i]).data("id"));
-              }
-              return values;
-            }
-        });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GraphLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GraphLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GraphLayoutView.js
deleted file mode 100644
index 728d721..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GraphLayoutView.js
+++ /dev/null
@@ -1,559 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'moment',
-    'd3.tip',
-    'utils/Globals',
-    'utils/Utils',
-    'collections/VLogList',
-    'hbs!tmpl/graphs/GraphLayoutView_tmpl',
-    'bootstrap-daterangepicker',
-    'nv'
-], function(require, backbone, moment, tip, Globals, Utils, VLogList, GraphLayoutViewTmpl, daterangepicker, nv) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends GraphLayoutViewTmpl */
-        {
-            _viewName: 'GraphLayoutView',
-
-            template: GraphLayoutViewTmpl,
-
-            /** ui selector cache */
-            ui: {
-                histoGraph: "div[data-id='rHistogramGraph']",
-                dateRange: "#dateRange",
-                selectDateRange: ".selectDateRange",
-                dateRangeTitle: "span[data-id='dateRangeTitle']",
-                graphHeader: "div[data-id='graphHeader']",
-                showUnit : "span[data-id='showUnit']"
-
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                events['click [data-id="refresh-tab-graph"]'] = 'onTabRefresh';
-                return events;
-            },
-
-            /**
-             * intialize a new GraphLayoutView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'globalVent', 'params', 'viewType', 'showDatePicker', 'showUnit','futureDate'));
-                /* if (this.showDatePicker) {
-                     this.graphVent = new Backbone.Wreqr.EventAggregator();
-                 }*/
-                this.boxOpen = true;
-                this.collection = new VLogList([], {
-                    state: {
-                        firstPage: 0,
-                        pageSize: 999999999,
-
-                    }
-                });
-                this.dateUtil = Utils.dateUtil;
-                this.dateRangeLabel = new String();
-
-                this.bindEvents();
-                this.graphParams = {};
-                this.unit = this.params.unit ? this.params.unit : "+1HOUR";
-                this.firstRender = true;
-                if (!this.viewType || this.viewType == Globals.graphType.HISTOGRAM.value) {
-                    this.histogramView = true;
-                    this.collection.url = Globals.baseURL + "service/logs/histogram";
-                    this.collection.modelAttrName = "graphData";
-                } else {
-                    this.collection.url = Globals.baseURL + "audit/logs/bargraph";
-                    this.collection.modelAttrName = "graphData";
-                    this.lineView = true;
-                }
-
-            },
-            bindEvents: function() {
-                this.listenTo(this.collection, "reset", function(collection) {
-                    this.createDataForGraph();
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                    if(this.showUnit && this.collection.length > 0){
-                        this.showUnitCheck();
-                    }else{
-                        this.ui.showUnit.hide();
-                    }
-                }, this);
-                this.listenTo(this.collection, 'request', function() {
-                    this.$(".loader").show();
-                    this.$("#loaderGraph").show();
-                }, this);
-                this.listenTo(this.collection, 'sync error', function() {
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                }, this);
-                /*          if (this.showDatePicker) {
-                    this.listenTo(this.graphVent, "logtime:filter ", function(value) {
-                        this.vent.trigger("logtime:filter", value);
-                        this.fetchGraphData(value);
-                    }, this);
-                    this.listenTo(this.vent, "main:search tree:search type:mustNot type:mustBe level:filter search:include:exclude logtime:filter " +
-                        Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns,
-                        function(value) {
-                            if (value.unit) {
-                                this.unit = value.unit;
-                            }
-                            this.fetchGraphData(value);
-                        }, this);
-                } else {
-                    this.listenTo(this.vent, "main:search tree:search type:mustNot type:mustBe level:filter search:include:exclude logtime:filter " +
-                        Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns,
-                        function(value) {
-                            if (value.unit) {
-                                this.unit = value.unit;
-                            }
-                            this.fetchGraphData(value);
-                        }, this);
-                }*/
-                this.listenTo(this.vent, "main:search tree:search type:mustNot type:mustBe level:filter search:include:exclude logtime:filter " +
-                    Globals.eventName.serviceLogsIncludeColumns + " " + Globals.eventName.serviceLogsExcludeColumns,
-                    function(value) {
-                        if (value.unit) {
-                            this.unit = value.unit;
-                        }
-                        this.fetchGraphData(value);
-                    }, this);
-                this.listenTo(this.vent, "reinitialize:filter:logtime", function(value) {
-                    if (value.unit) {
-                        this.unit = value.unit;
-                    }
-                    this.reinitializeFilter(value);
-                }, this);
-                this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-                    this.fetchGraphData(value);
-                }, this);
-                this.listenTo(this.vent, "tab:refresh", function(params) {
-                    this.reRenderView(params);
-                }, this);
-                /*
-                 * Audit events
-                 */
-                this.listenTo(this.vent, "search:audit:query auditComponents:include auditComponents:exclude search:audit:include search:audit:exclude", function(value) {
-                    this.fetchGraphData(value);
-                }, this);
-
-            },
-            onRender: function() {
-                var that = this;
-                if (this.showDatePicker) {
-                    var region = {};
-                    var regionName = "R_DatePicker";
-                    region[regionName] = '#DatePicker';
-                    $('<div/>', {
-                        'id': 'DatePicker',
-                        'class': "col-md-12",
-                    }).appendTo(that.$('.addDatePicker'));
-                    that.addRegions(region);
-                    this.renderDatePicker(regionName);
-                }
-                if (this.histogramView) {
-                    this.ui.graphHeader.html('<i class="fa fa-signal"></i><span >Histogram</span>');
-                } else {
-                    this.ui.graphHeader.html('<i class="fa fa-line-chart"></i><span >Line</span>');
-                }
-                if (this.lineView) {
-                    this.ui.histoGraph.addClass('myLineChart');
-                }
-                if (this.params) {
-                    this.fetchGraphData(this.params);
-                }
-                this.$("svg").on("mouseover", function() {
-                    if ($(this).find(".nv-noData").length) {
-                        that.$(".nvtooltip.xy-tooltip").hide();
-                    } else
-                        that.$(".nvtooltip.xy-tooltip").show();
-                })
-            },
-            showUnitCheck : function(){
-                this.ui.showUnit.show().html(Utils.graphUnitParse(this.unit));
-            },
-            renderDatePicker: function(regionName) {
-                var that = this;
-                require(['views/common/DatePickerLayout'], function(DatePickerLayout) {
-                    var region = that.getRegion(regionName);
-                    region.show(new DatePickerLayout({
-                        vent: /*(that.showDatePicker) ? (that.vent) : */ (that.vent),
-                        globalVent: that.globalVent,
-                        params: that.params,
-                        parentEl: that.$el,
-                        fetch: true,
-                        rangeLabel: true,
-                        datePickerPosition : "left",
-                        width: '65%'
-                    }));
-                });
-            },
-            fetchGraphData: function(params) {
-                var that = this;
-                that.$("#loaderGraph").show();
-                that.$(".loader").show();
-                _.extend(this.collection.queryParams, params);
-                this.collection.fetch({
-                    reset: true
-                });
-            },
-            createDataForGraph: function() {
-                var data = [],
-                    that = this,
-                    dataL = [],
-                    color = d3.scale.category20().range();
-                _.each(this.collection.models, function(model, i) {
-                    var Obj = {
-                        key: model.get('name'),
-                        values: model.get('dataCount').map(function(object) {
-                            return {
-                                x: that.dateUtil.getMomentObject(object.name), //(new Date(object.name)).toUTCString(),
-                                y: parseFloat(object.value)
-                            }
-                        })
-                    };
-
-                    if(!that.futureDate){
-                        var date = moment().add(1,"hours").format("YYYY-MM-DDTHH:mm:ss.SSSSZ");
-                        var newObj =[];
-                        for(var k = 0 ;k < Obj.values.length ;k++){
-                                if(moment(date).isAfter(that.dateUtil.getMomentObject(Obj.values[k].x))){
-                                    newObj[k] = {
-                                                     x : that.dateUtil.getMomentObject(Obj.values[k].x),
-                                                     y : Obj.values[k].y
-                                                 }
-                                }
-                        }
-                        Obj.values = newObj;
-                    }
-
-                    if (that.histogramView) {
-                        Obj['color'] = ((model.get('name') === 'ERROR') ? ("#E81D1D") :
-                            (model.get('name') === 'INFO') ? ("#2577B5") :
-                            (model.get('name') === 'WARN') ? ("#FF8916") :
-                            (model.get('name') === 'FATAL') ? ("#830A0A") :
-                            (model.get('name') === 'DEBUG') ? ("#65E8FF") :
-                            (model.get('name') === 'TRACE') ? ("#888888") : 
-                            (model.get('name') === 'UNKNOWN') ? ("#bdbdbd") : ("white"));
-                    } else {
-                        Obj['color'] = color[i];
-                    }
-                    data.push(Obj);
-                });
-
-                if (that.histogramView) {
-                    for (var i = data.length - 1; i >= 0; i--) {
-                        dataL.push(data[i])
-
-                    }
-                }
-
-                this.$('svg').find('g.nv-x  g.tick').hide();
-                (!this.firstRender) ? this.updateGraph(data, dataL): this.renderGraph(data, dataL);
-
-            },
-            //Using NVD3
-            renderGraph: function(data, dataL) {
-                var that = this,
-                    formatValue = d3.format(".2s");
-                // that.ui.histoGraph.find('svg').empty();
-                nv.addGraph({
-                    generate: function() {
-                        /* var parentWidth = (that.ui.histoGraph.find('svg').parent().width()),
-                             parentHeight = (that.ui.histoGraph.find('svg').parent().height())
-                             width = ((parentWidth === 0) ? (891) : (parentWidth)), // -15 because  parent has 15 padding
-                              height = ((parentHeight === 0) ? (640) : (parentHeight)) // -15 because  parent has 15 padding */
-                        if (that.histogramView) {
-                            that.chart = nv.models.multiBarChart()
-                                /* .width(width)
-                                 .height(height)*/
-                                .stacked(true)
-                                .showControls(false);
-                            that.chart.groupSpacing(0.6) // for bar width and aspace
-                        } else {
-                            that.chart = nv.models.lineChart().options({
-                                transitionDuration: 300,
-                                useInteractiveGuideline: true
-                            });
-                            //We want nice looking tooltips and a guideline!
-
-                            that.chart.showLegend(true); //Show the legend, allowing users to turn on/off line series.
-                            that.chart.showYAxis(true); //Show the y-axis
-                            that.chart.showXAxis(true);
-
-                        }
-                        that.ExtentValue = that.chart.xAxis
-                            .tickFormat(function(d) {
-                                var date = that.dateUtil.getTimeZoneFromMomentObject(((that.histogramView) ? (d) : (that.dateUtil.getMomentObject(d))));
-                                return (((that.unit.search('HOUR') + 1) || (that.unit.search('MINUTE') + 1)) ?
-                                    (d3.time.format('%H:%M - %m/%d/%y')(date)) :
-                                    (((that.unit.search('MILLI') + 1)) ? (d3.time.format('%H:%M:%S.%L - %m/%d/%y')(date)) :
-                                        (((that.unit.search('MONTH') + 1)) ? ((d3.time.format('%b %d')(date))) :
-                                            (((that.unit.search('SECOND') + 1)) ? (d3.time.format('%H:%M:%S - %m/%d/%y')(date)) : (d3.time.format('%m/%d/%y')(date))))))
-                            });
-                        that.chart.yAxis
-                            .tickFormat(function(d) {
-                                return formatValue(d).replace('G', 'B');
-                            });
-                        // For legend and control margin
-                        that.chart.legend.margin({
-                            top: 5,
-                            right: 50,
-                            left: 90,
-                            bottom: 10
-                        });
-                        that.chart.margin({
-                            right: 30,
-                            left: 30,
-                        });
-                        that.chart.dispatch.on('renderEnd', function() {
-                            if (that.firstRender) {
-                                that.firstRender = false
-                                var svgElem = that.$('svg');
-                                if (that.histogramView) {
-                                    var elem = svgElem.find('g.nv-barsWrap.nvd3-svg .nv-groups');
-                                } else {
-                                    var elem = svgElem.find('g.nv-linesWrap.nvd3-svg .nv-groups');
-                                }
-
-                            }
-                            that.graphXAxisBreak();
-                            if (that.boxOpen) {
-                                that.createBrush(); // if box is open then only it will plot brush
-                            }
-
-
-
-                        });
-
-                        that.chart.tooltip.contentGenerator(
-                            function(data) {
-                                if (data.data.size <= 0)
-                                    return "<div></div>";
-                                var tootTipTemplate = '<div>' +
-                                    '<table>' +
-                                    '<thead>' +
-                                    '<tr>' +
-                                    '<td colspan="3"><strong class="x-value">' + data[((that.histogramView) ? ('data') : ('point'))].x.format('MM/DD/YYYY') + '</strong></td>' +
-                                    '</tr>' +
-                                    '<tr>' +
-                                    '<td colspan="3"><strong class="x-value">' + data[((that.histogramView) ? ('data') : ('point'))].x.format('H:mm:ss,SSS') + '</strong></td>' +
-                                    '</tr>' +
-                                    '</thead>' +
-                                    '<tbody>' +
-                                    '<tr>' +
-                                    '<td class="legend-color-guide">' +
-                                    '<div style="background-color: ' + ((that.histogramView) ? (data.color) : (data.series[0].color)) + '"></div>' +
-                                    '</td>' +
-                                    '<td class="key">' + ((that.histogramView) ? (data.data.key) : (data.series[0].key)) + '</td>' +
-                                    '<td class="value">' + ((that.histogramView) ? (data.data.size) : (data.series[0].value)) + '</td>' +
-                                    '</tr>' +
-                                    '</tbody>' +
-                                    '</table>' +
-                                    '</div>'
-
-                                return tootTipTemplate
-                            });
-
-
-                        that.chart.legend.dispatch.legendClick = function(d, i) {
-                            that.$('svg').find('g.nv-x  g.tick').hide();
-                        };
-                        var elem = that.$('svg');
-                        that.svg = d3.select(elem[0]).datum(data);
-                        that.svg.transition().duration(0).call(that.chart);
-                        if (dataL.length > 0) {
-                            that.svg.datum(dataL).call(that.chart.legend);
-                            var legendObject = (that.$('svg').children()[0]);
-                            if (that.$(legendObject).is('g[class="nvd3 nv-legend"]')) {
-                                that.$(legendObject).remove();
-                            } else if (that.$(legendObject).is('text[class="nvd3 nv-noData"]')) {
-                                that.$(that.$('svg').children()[1]).remove();
-                            }
-
-                        }
-
-
-
-                        return that.chart;
-                    },
-                    callback: function(graph) {
-                        that.$(".box").resize(function() {
-                            if ($(this).find('.collapse-link i').hasClass('fa-chevron-up')) {
-                                that.boxOpen = true;
-                                var elem = that.$('[data-id=rHistogramGraph] svg');
-                                d3.select(elem[0])
-                                    .transition().duration(0)
-                                    .call(graph);
-                            } else {
-                                that.boxOpen = false;
-                            }
-                        });
-                    }
-                });
-
-            },
-            updateGraph: function(data, dataL) {
-
-                // Update the SVG with the new data and call chart
-                this.svg.datum(data).transition().duration(0).call(this.chart);
-                if (dataL.length > 0) {
-                    this.svg.datum(dataL).transition().duration(0).call(this.chart.legend);
-                    if (d3.select(this.$('svg').children().first()[0]).classed('nvd3 nv-legend')) {
-                        d3.select(this.$('svg').children().first()[0]).remove();
-                    }
-                    var legendObject = (this.$('svg').children()[0]);
-                    if (this.$(legendObject).is('g[class="nvd3 nv-legend"]')) {
-                        this.$(legendObject).remove();
-                    } else if (this.$(legendObject).is('text[class="nvd3 nv-noData"]')) {
-                        this.$(this.$('svg').children()[1]).remove();
-                    }
-                }
-
-            },
-            createBrush: function() {
-                var that = this,
-                    svgElem = this.$('svg'),
-                    //var elem = svgElem.find('g.nv-barsWrap.nvd3-svg .nv-groups');
-                    elem = svgElem.find('g.nv-axis.nvd3-svg .nv-axis');
-                if (elem.length == 0 || elem.length == undefined) {
-                    return;
-                }
-
-                var height = (elem.get(0).getBBox().height === 0) ? that.svgHeight : elem.get(0).getBBox().height + 2,
-                    width = (elem.get(0).getBBox().width === 0) ? that.svgWidth : elem.get(0).getBBox().width
-
-                /*var x = d3.time.scale().range([0, width]).domain(d3.extent(that.ExtentValue.domain().map(function(d) {
-                    return that.dateUtil.getMomentObject(d);
-                })));*/
-
-                var x = d3.time.scale().range([0, width]).domain([new Date(this.params.from), new Date(this.params.to)])
-                var brush = d3.svg.brush()
-                    .x(x)
-                    .on("brush", brushed)
-                    .on('brushend', brushend);
-
-                if (that.histogramView) {
-                    var brushElem = svgElem.find('g.nv-barsWrap.nvd3-svg .nv-groups');
-                } else {
-                    var brushElem = svgElem.find('g.nv-linesWrap.nvd3-svg .nv-groups');
-                }
-                brushElem.find('.x-brush').parent().remove();
-                var svg = d3.select(brushElem[0])
-                    .insert("g", ":first-child")
-                    .attr("transform", "translate(" + elem.get(0).getBBox().x + ",-9)");
-
-
-                svg.append("g")
-                    .attr("class", "x-brush brush")
-                    .call(brush)
-                    .selectAll("rect")
-                    .attr("y", 6)
-                    .attr("height", height);
-
-                function brushed() {
-                    that.brushValue = brush.extent();
-                    /*   if (that.showDatePicker) {
-                           that.graphVent.trigger("date:setDate", {
-                               'from': that.dateUtil.getMomentObject(that.brushValue[0]),
-                               'to': that.dateUtil.getMomentObject(that.brushValue[1])
-                           });
-                       } else {*/
-                    if (!moment(that.brushValue[0]).isSame(that.brushValue[1])){
-                        that.vent.trigger("date:setDate", {
-                                'from': that.dateUtil.getMomentObject(that.brushValue[0]),
-                                'to': that.dateUtil.getMomentObject(that.brushValue[1])
-                          });
-                     }
-                    /*}*/
-
-                }
-
-                function brushend() {
-
-                    if (moment(brush.extent()[0]).isSame(brush.extent()[1])) {
-                        that.createBrush();
-                        return;
-                    }
-                    $('.nvtooltip').css('opacity', '0');
-                    that.$('g.x-brush').parent().remove();
-                    /* if (that.showDatePicker) {
-                         that.graphVent.trigger("date:click", {
-                             dateRangeLabel: "Custom Range",
-                         });
-                     } else {*/
-                    that.vent.trigger("date:click", {
-                        dateRangeLabel: "Custom Range",
-                    });
-                    /* }*/
-
-
-                }
-
-            },
-            graphXAxisBreak: function() {
-                var insertLinebreaks = function() {
-                    var el = d3.select(this);
-                    var words = $(this).text().split('-');
-                    $(this).text('');
-                    for (var i = 0; i < words.length; i++) {
-                        var tspan = el.append('tspan').text(words[i]);
-                        if (i > 0)
-                            tspan.attr('x', 0).attr('dy', '19');
-                    }
-                };
-                if (this.$('svg').find('g.nv-x  g.tick text').first().text().split('-').length > 1) {
-                    this.$('svg').find('g.nv-x  g.tick text').each(insertLinebreaks);
-                    this.$('svg').find('g.nv-x  g.nv-axisMaxMin text').each(insertLinebreaks);
-                    this.$('svg').find('g.nv-x  g.tick').show();
-                } else {
-                    this.$('svg').find('g.nv-x  g.tick').show();
-                }
-            },
-            reinitializeFilter: function(value) {
-                this.fetchGraphData(value);
-                /*   if (this.showDatePicker) {
-                       this.graphVent.trigger("date:setDate", value);
-                   } else {*/
-                this.vent.trigger("date:setDate", value);
-                /* }*/
-
-            },
-            onTabRefresh: function(e) {
-                this.fetchGraphData({});
-            },
-            reRenderView: function(params) {
-                this.fetchGraphData(params);
-                /*     if (this.showDatePicker) {
-                         this.graphVent.trigger("date:setDate", _.extend(this.params, params));
-                     } else {*/
-                this.vent.trigger("date:setDate", _.extend(this.params, params));
-                /*}*/
-
-            }
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GridGraphLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GridGraphLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GridGraphLayoutView.js
deleted file mode 100644
index ae76ba8..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/graphs/GridGraphLayoutView.js
+++ /dev/null
@@ -1,594 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'moment',
-    'd3.tip',
-    'utils/Globals',
-    'utils/Utils',
-    'collections/VLogList',
-    'hbs!tmpl/graphs/GridGraphLayoutView_tmpl',
-    'bootstrap-daterangepicker',
-    'nv'
-], function(require, Backbone, moment, tip, Globals, Utils, VLogList, GridGraphLayoutViewTmpl, daterangepicker, nv) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends GridGraphLayoutView */
-        {
-            _viewName: 'GridGraphLayoutView',
-
-            template: GridGraphLayoutViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                histoGraph: "div[data-id='rHistogramGraph']",
-                dateRange: "#dateRange",
-                selectDateRange: ".selectDateRange",
-                dateRangeTitle: "span[data-id='dateRangeTitle']",
-                gridSettingPopup: "[data-id='gridSettingPopup']",
-                gridHeader: ".gridHeader"
-
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['change ' + this.ui.viewType] = 'onViewTypeChange';
-                events['click [data-id="refresh-tab-graph"]'] = 'onTabRefresh';
-                events['click ' + this.ui.gridSettingPopup] = 'onGridSettingPopupClick';
-                return events;
-            },
-
-            /**
-             * intialize a new GridGraphLayoutView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params', 'viewType', 'dashboard', 'model', 'gridHelp', 'collection', 'showHeader'));
-                this.vent = new Backbone.Wreqr.EventAggregator();
-                if(! this.collection){
-                	this.collection = new VLogList([], {
-                        state: {
-                            firstPage: 0,
-                            pageSize: 999999999,
-
-                        }
-                    });
-                	this.collection.url = Globals.baseURL + "audit/logs/anygraph";
-                    this.collection.modelAttrName = "graphData";
-                }
-                this.dateUtil = Utils.dateUtil;
-                this.dateRangeLabel = new String();
-
-                this.bindEvents();
-                this.graphParams = {};
-                this.unit = "+1HOUR";
-                var modalParams = this.model.get('params');
-                if (modalParams && modalParams.unit) {
-                    this.unit = modalParams.unit
-                }
-
-                this.firstRender = true;
-
-                if (!this.viewType || this.viewType == Globals.graphType.HISTOGRAM.value) {
-                    this.histogramView = true;
-                } else if (this.viewType == Globals.graphType.MULTILINE.value) {
-                    this.lineView = true;
-                } else if (this.viewType == Globals.graphType.PIE.value) {
-                    this.pieView = true;
-                }
-
-            },
-            bindEvents: function() {
-                this.listenTo(this.collection, "reset", function(collection) {
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                }, this);
-                this.listenTo(this.collection, 'request', function() {
-                    this.$(".loader").show();
-                    this.$("#loaderGraph").show();
-                }, this);
-                this.listenTo(this.collection, 'sync error', function() {
-                    this.$(".loader").hide();
-                    this.$("#loaderGraph").hide();
-                }, this);
-                this.listenTo(this.vent, "graph:update", function(options) {
-
-                    options['params'] = this.params
-                    if (this.model) {
-                        options['id'] = this.model.get('id')
-                        this.model.clear().set(options)
-                    }
-                    this.configureChart(options);
-                }, this);
-                this.listenTo(this.vent, "graph:data:update", function(params, options) {
-                    this.params = params
-                    options['params'] = this.params
-                    if (this.model) {
-                        options['id'] = this.model.get('id')
-                        this.model.clear().set(options)
-                    }
-                    this.fetchGraphData(params, options);
-                }, this);
-                this.listenTo(this.vent, "graph:grid:update", function(options) {
-                    options['params'] = this.params
-                    if (this.model) {
-                        options['id'] = this.model.get('id')
-                        this.model.clear().set(options)
-                    }
-                    this.updateGrid(options)
-                }, this);
-
-            },
-            onRender: function() {
-                var that = this;
-                if (this.model) {
-                    var mObject = this.model.toJSON();
-                    if (mObject.params) {
-                        this.params = mObject.params;
-                        this.fetchGraphData(mObject.params, mObject);
-                    }
-                    this.updateGrid(mObject);
-                }
-                if (this.gridHelp) {
-                    setTimeout(function() {
-                        this.$('.gridSettinghand').hide();
-                    }, 3000);
-                } else {
-                    this.$('.gridSettinghand').hide();
-                }
-                if(! _.isUndefined(this.showHeader)){
-                	if(! this.showHeader)
-                		this.$(".gridHeader").hide();
-                }	
-            },
-
-            fetchGraphData: function(params, options) {
-                var that = this;
-                that.$("#loaderGraph").show();
-                that.$(".loader").show();
-                _.extend(this.collection.queryParams, params);
-                this.collection.fetch({
-                    reset: true,
-                    success: function() {
-                        that.createDataForGraph(options)
-                    }
-                });
-            },
-            updateGrid: function(options) {
-                if (options.title) {
-                    this.ui.gridHeader.find('.gridTitle').text(options.title);
-                }
-                /*if (options.gridSizeX && options.gridSizeY) {
-                    this.dashboard.resize_widget(this.$el.parents('li'), parseInt(options.gridSizeX), parseInt(options.gridSizeY))
-                }*/
-            },
-            createDataForGraph: function(options) {
-                var that = this,
-                    color = d3.scale.category20().range();
-                this.data = [];
-                this.dataL = [];
-                if (this.lineView || this.histogramView) {
-                    _.each(this.collection.models, function(model, i) {
-                        var Obj = {
-                            key: model.get('name'),
-                            values: model.get('dataCount').map(function(object) {
-                                return {
-                                    x: (options && options.xAxis == "evtTime") ? (that.dateUtil.getMomentObject(object.name)) : (object.name), //(new Date(object.name)).toUTCString(),
-                                    y: parseFloat(object.value)
-                                }
-                            })
-                        };
-                        if (that.histogramView) {
-                               Obj['color'] = (((""+model.get('name')).toUpperCase() === 'ERROR') ? ("#E81D1D") :
-                                   ( (""+model.get('name')).toUpperCase() === 'INFO') ? ("#2577B5") :
-                                   ( (""+model.get('name')).toUpperCase() === 'WARN') ? ("#FF8916") :
-                                   ( (""+model.get('name')).toUpperCase() === 'FATAL') ? ("#830A0A") :
-                                   ( (""+model.get('name')).toUpperCase() === 'DEBUG') ? ("#65E8FF") :
-                                   ( (""+model.get('name')).toUpperCase() === 'TRACE') ? ("#888888") :
-                                   ( (""+model.get('name')).toUpperCase() === 'UNKNOWN') ? ("#bdbdbd") : color[i]);
-                           } else {
-                               Obj['color'] = color[i];
-                           }
-                        that.data.push(Obj);
-                    });
-                }
-                if (this.pieView) {
-                    _.each(this.collection.models, function(model, i) {
-                        that.data = model.get('dataCount').map(function(object) {
-                            return {
-                                x: (object.name),
-                                y: parseFloat(object.value)
-                            }
-                        });
-                    });
-                }
-                if (that.histogramView) {
-                    for (var i = this.data.length - 1; i >= 0; i--) {
-                        this.dataL.push(this.data[i])
-                    }
-                }
-                this.configureChart(options)
-                    //(!this.firstRender) ? this.updateGraph(this.data, this.dataL): this.renderGraph(this.data, this.dataL);
-
-            },
-            //Using NVD3
-            configureChart: function(options) {
-                var that = this,
-                    formatValue = d3.format(".2s");
-
-                if (this.firstRender) {
-                    if (that.histogramView) {
-                        that.chart = nv.models.multiBarChart()
-                            .showControls(false)
-                            .showXAxis(true)
-                            .showLegend(true);
-                        that.chart.groupSpacing(0.6) // for bar width and aspace 
-                        this.showLegend = true
-                    } else if (this.lineView) {
-                        that.chart = nv.models.lineChart().options({
-                            transitionDuration: 300,
-                            useInteractiveGuideline: true
-                        });
-                        //We want nice looking tooltips and a guideline!
-
-                        that.chart.showLegend(true); //Show the legend, allowing users to turn on/off line series.
-                        that.chart.showYAxis(true); //Show the y-axis
-                        that.chart.showXAxis(true);
-
-                    } else if (this.pieView) {
-
-                        var height = this.$el.find('.gridGraph').height() || 260;
-                        var width = this.$el.find('.gridGraph').width() - 20 || 420;
-                        that.chart = nv.models.pieChart()
-                            .x(function(d) {
-                                return d.x
-                            })
-                            .y(function(d) {
-                                return d.y
-                            })
-                            .width(width)
-                            .height(height);
-                    }
-                    that.chart.legend.margin({
-                        top: 5,
-                        right: 50,
-                        left: 90,
-                        bottom: 10
-                    });
-                    that.chart.margin({
-                        right: 30,
-                        left: 30
-                    });
-
-                    that.chart.dispatch.on('renderEnd', function() {
-                        if (that.firstRender) {
-                            that.firstRender = false
-                            var svgElem = that.$('svg');
-                            if (that.histogramView) {
-                                var elem = svgElem.find('g.nv-barsWrap.nvd3-svg .nv-groups');
-                            } else {
-                                var elem = svgElem.find('g.nv-linesWrap.nvd3-svg .nv-groups');
-                            }
-                            if (elem.get(0)) {
-                                that.svgHeight = elem.get(0).getBBox().height;
-                                that.svgWidth = elem.get(0).getBBox().width;
-                            }
-                        }
-                        that.graphXAxisBreak();
-                    });
-                    /*          that.chart.xAxis
-                                  .tickFormat(function(d) {
-                                      var date = that.dateUtil.getTimeZoneFromMomentObject(((that.histogramView) ? (d) : (that.dateUtil.getMomentObject(d))));
-                                      return (d3.time.format('%H:%M:%S - %m/%d/%y')(date))
-                                  });
-                              that.chart.yAxis
-                                  .tickFormat(function(d) {
-                                      return formatValue(d).replace('G', 'B');
-                                  });*/
-                    /*             that.chart.tooltip.contentGenerator(
-                                     function(data) {
-                                         var tootTipTemplate = '<div>' +
-                                             '<table>' +
-                                             '<thead>' +
-                                             '<tr>' +
-                                             '<td colspan="3"><strong class="x-value">' + data[((that.histogramView) ? ('data') : ('point'))].x.format('MM/DD/YYYY') + '</strong></td>' +
-                                             '</tr>' +
-                                             '<tr>' +
-                                             '<td colspan="3"><strong class="x-value">' + data[((that.histogramView) ? ('data') : ('point'))].x.format('H:mm:ss') + '</strong></td>' +
-                                             '</tr>' +
-                                             '</thead>' +
-                                             '<tbody>' +
-                                             '<tr>' +
-                                             '<td class="legend-color-guide">' +
-                                             '<div style="background-color: ' + ((that.histogramView) ? (data.color) : (data.series[0].color)) + '"></div>' +
-                                             '</td>' +
-                                             '<td class="key">' + ((that.histogramView) ? (data.data.key) : (data.series[0].key)) + '</td>' +
-                                             '<td class="value">' + ((that.histogramView) ? (data.data.size) : (data.series[0].value)) + '</td>' +
-                                             '</tr>' +
-                                             '</tbody>' +
-                                             '</table>' +
-                                             '</div>'
-
-                                         return tootTipTemplate
-                                     });*/
-                    that.chart.legend.dispatch.legendClick = function(d, i) {
-                        that.$('svg').find('g.nv-x  g.tick').hide();
-                    };
-                    that.$el.parents('.gs-w').resize(function() {
-                        if (that.svg) {
-                            if (that.pieView) {
-                                that.chart.height(that.$el.find('.gridGraph').height());
-                                that.chart.width(that.$el.find('.gridGraph').width() - 20);
-                            }
-                            that.svg.transition().duration(0).call(that.chart);
-                        } else {
-                            var elem = that.$('[data-id=rHistogramGraph] svg');
-                            d3.select(elem[0])
-                                .attr('width', that.$el.parents('.brick').width())
-                                .attr('height', that.$el.parents('.brick').height())
-                                .transition().duration(0)
-                                .call(that.chart);
-                        }
-                    });
-                }
-
-                
-                // For legend and control margin
-                if (options) {
-                	if(options.rotateXaxis){
-                		this.chart.xAxis.rotateLabels(options.rotateXaxis);
-                	}
-                    if (this.histogramView) {
-                        if (options.stackOrGroup && options.stackOrGroup == "Group") {
-                            this.chart.stacked(false);
-                        } else {
-                            this.chart.stacked(true);
-                        }
-                    }
-
-                    if (this.histogramView || this.lineView) {
-                        if (options.showX) {
-                            that.chart.showXAxis(true);
-                            if (options.xAxis) {
-
-                                if (options.xAxis == "evtTime") {
-                                    var xTimeFormat = ""
-                                    if (options.xTimeFormat) {
-                                        xTimeFormat = options.xTimeFormat;
-                                    } else {
-                                        xTimeFormat = "%H:%M:%S.%L - %m/%d/%y"
-                                    }
-                                    this.chart.x(function(d) {
-                                        return d.x
-                                    });
-                                    this.chart.xAxis
-                                        .tickFormat(function(d) {
-                                            var xAxisFormat = xTimeFormat;
-                                            var date = that.dateUtil.getTimeZoneFromMomentObject(((that.histogramView) ? (d) : (that.dateUtil.getMomentObject(d))));
-                                            return (d3.time.format(xAxisFormat)(date))
-                                        });
-                                    if (options.startDate && options.endDate) {}
-                                    if (options.unit) {}
-                                } else {
-
-                                    if (!this.histogramView) {
-                                        this.chart.xAxis
-                                            .tickFormat(function(d) {
-                                                return that.data[0].values[d].x // x will be same for stack and group only y is different so we take name of x from first value array
-                                            });
-                                        this.chart.x(function(d, i) {
-                                            return i
-                                        });
-                                         this.chart.interpolate('basis')
-                                    } else {
-                                        this.chart.xAxis
-                                            .tickFormat(function(d) {
-                                                return d
-                                            });
-                                        this.chart.x(function(d) {
-                                            return d.x
-                                        });
-                                    }
-                                }
-                            }
-                        } else {
-                            this.chart.showXAxis(false);
-                        }
-
-                        // Y axis Setting
-                        if (options.showY) {
-                            that.chart.showYAxis(true);
-                            var yFormat = ""
-                            if (options.yAxisFormat && options.yAxisFormat.length) {
-                                yFormat = options.yAxisFormat;
-                            } else {
-                                yFormat = ".2s"
-                            }
-                            var yformatValue = d3.format(yFormat);
-                            this.chart.y(function(d) {
-                                return parseInt(d.y)
-                            })
-                            this.chart.yAxis
-                                .tickFormat(function(d) {
-                                    return yformatValue(d) //.replace('G', 'B');
-                                });
-
-                        } else {
-                            this.chart.showYAxis(false);
-                        }
-                    }
-                    if (this.pieView) {
-                        if (options.pieOrDonut == "donut") {
-                            that.chart.donut(true);
-                            that.chart.donutRatio(0.35);
-                        } else {
-                            that.chart.donut(false);
-                        }
-                    }
-
-
-
-                    // Legend  Setting
-                    if (options.showLegend) {
-                        this.chart.showLegend(true);
-                        this.showLegend = true;
-                    } else {
-                        this.chart.showLegend(false);
-                        this.showLegend = false;
-                    }
-                    // refreshInterval 
-
-                    if (options.refreshInterval && options.refreshInterval.length) {
-                        this.setRefereshInterval(options);
-                    } else {
-                        if (this.refereshInterval) {
-                            this.clearRefereshInterval();
-                        }
-                    }
-                    this.updateGraph(options)
-
-                } else {
-                    this.updateGraph()
-                }
-
-            },
-            setRefereshInterval: function(options) {
-                var that = this;
-                clearInterval(this.refereshInterval);
-                this.refereshInterval = setInterval(function() {
-                    that.fetchGraphData({}, options);
-                }, options.refreshInterval);
-            },
-            clearRefereshInterval: function() {
-                clearInterval(this.refereshInterval);
-            },
-            updateGraph: function(options) {
-                if (options) {
-                    var elem = this.$('svg').empty();
-                } else {
-                    var elem = this.$('svg');
-                }
-                // Update the SVG with the new this.data and call chart
-                if (this.data) {
-                    this.svg = d3.select(elem[0]).datum(this.data);
-                    if (this.pieView) {
-                        this.chart.height(this.$el.find('.gridGraph').height());
-                        this.chart.width(this.$el.find('.gridGraph').width() - 20);
-                    }
-                    this.svg.transition().duration(0).call(this.chart);
-                    //this.svg.datum(this.data).transition().duration(0).call(this.chart);
-                    if (this.dataL.length > 0 && this.showLegend) {
-                        this.svg.datum(this.dataL).transition().duration(0).call(this.chart.legend);
-                        if (d3.select(this.$('svg').children().first()[0]).classed('nvd3 nv-legend')) {
-                            d3.select(this.$('svg').children().first()[0]).remove();
-                        }
-                        var legendObject = (this.$('svg').children()[0]);
-                        if (this.$(legendObject).is('g[class="nvd3 nv-legend"]')) {
-                            this.$(legendObject).remove();
-                        } else if (this.$(legendObject).is('text[class="nvd3 nv-nodata"]')) {
-                            this.$(this.$('svg').children()[1]).remove();
-                        }
-
-                    }
-                }
-
-
-            },
-            graphXAxisBreak: function() {
-                var insertLinebreaks = function() {
-                    var el = d3.select(this);
-                    var words = $(this).text().split('-');
-                    $(this).text('');
-                    for (var i = 0; i < words.length; i++) {
-                        var tspan = el.append('tspan').text(words[i]);
-                        if (i > 0)
-                            tspan.attr('x', 0).attr('dy', '19');
-                    }
-                };
-                if (this.$('svg').find('g.nv-x  g.tick text').first().text().split('-').length > 1) {
-                    this.$('svg').find('g.nv-x  g.tick text').each(insertLinebreaks);
-                    this.$('svg').find('g.nv-x  g.nv-axisMaxMin text').each(insertLinebreaks);
-                    this.$('svg').find('g.nv-x  g.tick').show();
-                } else {
-                    this.$('svg').find('g.nv-x  g.tick').show();
-                }
-            },
-            setupDialog: function(options) {
-                var that = this;
-                require(['views/common/JBDialog'], function(JBDialog) {
-                    var opts = _.extend({
-                        appendTo: that.$el,
-                        modal: true,
-                        resizable: false,
-                        beforeClose: function(event, ui) {
-                            that.onDialogClosed();
-                        }
-                    }, options);
-                    var dialog = that.dialog = new JBDialog(opts).render().open();
-                })
-
-            },
-            onGridSettingPopupClick: function() {
-                this.$('.gridSettinghand').hide();
-                this.dashboard.disable();
-                var that = this;
-                var overlay = document.createElement('div');
-                overlay.setAttribute('class', 'overlayDashboard');
-                this.$el.append(overlay);
-                require(['views/dialog/GridGraphSettingView'], function(GridGraphSettingView) {
-                    var view = new GridGraphSettingView({
-                        vent: that.vent,
-                        params: (that.model) ? (that.params) : ({}),
-                        model: that.model,
-                        viewType: that.viewType
-                    });
-
-                    that.setupDialog({
-                        title: "Setting",
-                        content: view,
-                        viewType: 'Save',
-                        width: 560,
-                        height: 500,
-                        buttons: [{
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    });
-                });
-            },
-            onDialogClosed: function() {
-                this.$el.find('.overlayDashboard').remove();
-                this.dashboard.enable();
-                if (this.dialog) {
-                    this.dialog.close && this.dialog.close();
-                    this.dialog.remove && this.dialog.remove();
-                    this.dialog = null;
-                }
-            }
-        });
-
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonLayoutView.js
deleted file mode 100644
index 73cca56..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/tabs/ComparisonLayoutView.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/tabs/ComparisonLayoutView_tmpl'
-],function(require,Backbone,Utils,ComparisonLayoutViewTmpl) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends ComparisonLayoutView */
-        {
-            _viewName: 'ComparisonLayoutView',
-
-            template: ComparisonLayoutViewTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                comparisonTab: '.comparisonTab'
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                return events;
-            },
-            regions: { },
-
-            /**
-             * intialize a new ComparisonLayoutView Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'globalVent', 'params', 'componetList'));
-            },
-            bindEvents: function() {},
-            onRender: function() {
-                this.createRegion()
-            },
-            createRegion: function() {
-                var that = this;
-                require(['views/tabs/ComparisonView'],function(ComparisonView){
-
-                    if (that.componetList) {
-                        var $parent = that.ui.comparisonTab;
-                        _.each(that.componetList, function(object,i) {
-                            var id = (object.host_name + '_' + object.component_name).replace(/\./g, "_");
-                            if(i % 2 == 0 && i > 0){
-                                var $div = $("<div class='row comparisonTab'></div>");
-                                that.ui.comparisonTab.parent().append($div);
-                                $parent = $div;
-                            }
-                            $parent.append('<div id="' + id + '" style="position: relative;"></div>');
-                            
-                            var region = {};
-                            region[id] = '#' + id;
-                            that.addRegions(region);
-                            var region = that.getRegion(id);
-                            region.show(new ComparisonView({
-                                globalVent: that.globalVent,
-                                params: _.extend({},that.params, {
-                                    'host_name': object.host_name,
-                                    'component_name': object.component_name
-                                }),
-                                datePickerPosition:(((i+1) % 2 == 0)?("left"):("right"))
-                            }));
-                        })
-                    }
-                })
-            }
-
-
-        });
-
-
-});


[36/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
new file mode 100644
index 0000000..0ef17de
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.spec.ts
@@ -0,0 +1,73 @@
+/**
+ * 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.
+ */
+
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {Http} from '@angular/http';
+import {TranslateModule, TranslateLoader} from '@ngx-translate/core';
+import {TranslateHttpLoader} from '@ngx-translate/http-loader';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+import {TimeZoneAbbrPipe} from '@app/pipes/timezone-abbr.pipe';
+import {ModalComponent} from '@app/components/modal/modal.component';
+
+import {TimeZonePickerComponent} from './timezone-picker.component';
+
+export function HttpLoaderFactory(http: Http) {
+  return new TranslateHttpLoader(http, 'assets/i18n/', '.json');
+}
+
+describe('TimeZonePickerComponent', () => {
+  let component: TimeZonePickerComponent;
+  let fixture: ComponentFixture<TimeZonePickerComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [
+        TimeZonePickerComponent,
+        ModalComponent,
+        TimeZoneAbbrPipe
+      ],
+      imports: [
+        StoreModule.provideStore({
+          appSettings
+        }),
+        TranslateModule.forRoot({
+          provide: TranslateLoader,
+          useFactory: HttpLoaderFactory,
+          deps: [Http]
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        ComponentActionsService
+      ],
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TimeZonePickerComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.ts
new file mode 100644
index 0000000..32f6474
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/timezone-picker/timezone-picker.component.ts
@@ -0,0 +1,77 @@
+/**
+ * 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.
+ */
+
+import {Component} from '@angular/core';
+import * as $ from 'jquery';
+import '@vendor/js/WorldMapGenerator.min';
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
+import {ComponentActionsService} from '@app/services/component-actions.service';
+
+@Component({
+  selector: 'timezone-picker',
+  templateUrl: './timezone-picker.component.html',
+  styleUrls: ['./timezone-picker.component.less']
+})
+export class TimeZonePickerComponent {
+
+  constructor(private appSettings: AppSettingsService, private actions: ComponentActionsService) {
+    appSettings.getParameter('timeZone').subscribe(value => this.timeZone = value);
+  }
+
+  readonly mapElementId = 'timezone-map';
+  
+  private readonly mapOptions = {
+    quickLink: [
+      {
+        PST: 'PST',
+        MST: 'MST',
+        CST: 'CST',
+        EST: 'EST',
+        GMT: 'GMT',
+        LONDON: 'Europe/London',
+        IST: 'IST'
+      }
+    ]
+  };
+
+  private mapElement: any;
+
+  private timeZoneSelect: JQuery;
+
+  isTimeZonePickerDisplayed: boolean = false;
+
+  timeZone: string;
+
+  setTimeZonePickerDisplay(isDisplayed: boolean): void {
+    this.isTimeZonePickerDisplayed = isDisplayed;
+  }
+
+  initMap(): void {
+    this.mapElement = $(`#${this.mapElementId}`);
+    this.mapElement.WorldMapGenerator(this.mapOptions);
+    this.timeZoneSelect = this.mapElement.find('select');
+    this.timeZoneSelect.removeClass('btn btn-default').addClass('form-control').val(this.timeZone);
+  }
+
+  setTimeZone(): void {
+    const timeZone = this.timeZoneSelect.val();
+    this.actions.setTimeZone(timeZone);
+    this.setTimeZonePickerDisplay(false);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
new file mode 100644
index 0000000..6898354
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.html
@@ -0,0 +1,21 @@
+<!--
+  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.
+-->
+
+<menu-button *ngFor="let item of items" [label]="item.label" [action]="item.action"
+             [iconClass]="item.iconClass" [labelClass]="item.labelClass"
+             [subItems]="item.subItems" [hideCaret]="item.hideCaret">
+</menu-button>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.less
new file mode 100644
index 0000000..e5e85f4
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.less
@@ -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.
+ */
+
+@import '../variables';
+
+:host {
+  .default-flex;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
new file mode 100644
index 0000000..1649a50
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.spec.ts
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+
+import {TopMenuComponent} from './top-menu.component';
+
+describe('TopMenuComponent', () => {
+  let component: TopMenuComponent;
+  let fixture: ComponentFixture<TopMenuComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [TopMenuComponent],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(TopMenuComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create component', () => {
+    expect(component).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
new file mode 100644
index 0000000..73b6131
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/top-menu/top-menu.component.ts
@@ -0,0 +1,122 @@
+/**
+ * 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.
+ */
+
+import {Component, OnInit} from '@angular/core';
+
+@Component({
+  selector: 'top-menu',
+  templateUrl: './top-menu.component.html',
+  styleUrls: ['./top-menu.component.less']
+})
+export class TopMenuComponent implements OnInit {
+
+  constructor() {
+  }
+
+  ngOnInit() {
+  }
+
+  //TODO implement loading of real data into subItems
+  readonly items = [
+    {
+      iconClass: 'fa fa-arrow-left',
+      label: 'topMenu.undo',
+      labelClass: 'unstyled-link',
+      action: 'undo',
+      subItems: [
+        {
+          label: 'Apply \'Last week\' filter'
+        },
+        {
+          label: 'Clear all filters'
+        },
+        {
+          label: 'Apply \'HDFS\' filter'
+        },
+        {
+          label: 'Apply \'Errors\' filter'
+        }
+      ]
+    },
+    {
+      iconClass: 'fa fa-arrow-right',
+      label: 'topMenu.redo',
+      labelClass: 'unstyled-link',
+      action: 'redo',
+      subItems: [
+        {
+          label: 'Apply \'Warnings\' filter'
+        },
+        {
+          label: 'Switch to graph mode'
+        },
+        {
+          label: 'Apply \'Custom Date\' filter'
+        }
+      ]
+    },
+    {
+      iconClass: 'fa fa-refresh',
+      label: 'topMenu.refresh',
+      labelClass: 'unstyled-link',
+      action: 'refresh'
+    },
+    {
+      iconClass: 'fa fa-history',
+      label: 'topMenu.history',
+      labelClass: 'unstyled-link',
+      action: 'openHistory',
+      subItems: [
+        {
+          label: 'Apply \'Custom Date\' filter'
+        },
+        {
+          label: 'Switch to graph mode'
+        },
+        {
+          label: 'Apply \'Warnings\' filter'
+        },
+        {
+          label: 'Apply \'Last week\' filter'
+        },
+        {
+          label: 'Clear all filters'
+        },
+        {
+          label: 'Apply \'HDFS\' filter'
+        },
+        {
+          label: 'Apply \'Errors\' filter'
+        }
+      ]
+    },
+    {
+      iconClass: 'fa fa-user unstyled-link',
+      hideCaret: true,
+      subItems: [
+        {
+          label: 'Options'
+        },
+        {
+          label: 'Logout'
+        }
+      ]
+    }
+  ];
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
new file mode 100644
index 0000000..f72183c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/components/variables.less
@@ -0,0 +1,118 @@
+/**
+ * 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.
+ */
+
+// Variables
+@navbar-background-color: #323544;
+@h1-vertical-margin: 20px;
+@button-border-radius: 4px;
+@input-border: 1px solid #CFD3D7;
+@button-border-radius: 4px;
+@input-group-addon-padding: 6px 0 6px 12px;
+@block-margin-top: 20px;
+@link-color: #1491C1;
+@link-hover-color: #23527C;
+@grey-color: #666;
+@default-line-height: 1.42857143;
+@main-background-color: #ECECEC;
+@filters-panel-background-color: #FFF;
+@filters-panel-padding: 10px 0;
+@list-header-background-color: #F2F2F2;
+@checkbox-top: 4px;
+
+@fatal-color: #830A0A;
+@error-color: #E81D1D;
+@warning-color: #FF8916;
+@info-color: #2577B5;
+@debug-color: #65E8FF;
+@trace-color: #888;
+@unknown-color: #BDBDBD;
+@submit-color: #5CB85C;
+@submit-hover-color: #449D44;
+
+// Mixins
+.flex-vertical-align {
+  display: flex;
+  align-items: center;
+}
+
+.default-flex {
+  .flex-vertical-align;
+  justify-content: space-between;
+}
+
+.common-hexagon(@side, @color) {
+  display: block;
+  position: absolute;
+  margin: (@side / 3.464101615) 0;
+  width: @side;
+  height: @side / 1.732050808;
+  background-color: @color;
+
+  &:before, &:after {
+    display: block;
+    position: absolute;
+    width: 0;
+    border-left: (@side / 2) solid transparent;
+    border-right: (@side / 2) solid transparent;
+    content: '';
+  }
+
+  &:before {
+    bottom: 100%;
+    border-bottom: (@side / 3.464101615) solid @color;
+  }
+
+  &:after {
+    top: 100%;
+    border-top: (@side / 3.464101615) solid @color;
+  }
+}
+
+.clickable-item {
+  cursor: pointer;
+  color: @link-color;
+
+  &:hover {
+    color: @link-hover-color;
+  }
+}
+
+.full-size {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+.dropdown-item-default {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: 400;
+  line-height: 1.42857143;
+  color: #333;
+  white-space: nowrap;
+  cursor: pointer;
+
+  &:hover {
+    color: #262626;
+    text-decoration: none;
+    background-color: #f5f5f5;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts b/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
new file mode 100644
index 0000000..f23139b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/mock-data.ts
@@ -0,0 +1,1067 @@
+/**
+ * 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.
+ */
+
+import * as moment from 'moment';
+
+export const mockData = {
+  login: {},
+  api: {
+    v1: {
+      audit: {
+        logs: {
+          logList: [
+            {
+              policy: 'policy',
+              reason: 'Authentication required',
+              result: 0,
+              text: 'Please log in',
+              tags: [
+                'ambari_agent'
+              ],
+              resource: '/ambari-agent',
+              sess: '0',
+              access: '0',
+              logType: 'AmbariAudit',
+              tags_str: 'ambari_agent',
+              resType: 'agent',
+              reqUser: 'admin',
+              reqData: 'data',
+              repoType: 1,
+              repo: 'ambari',
+              proxyUsers: [
+                'admin'
+              ],
+              evtTime: '2017-05-29T11:30:22.531Z',
+              enforcer: 'ambari-acl',
+              reqContext: 'ambari',
+              cliType: 'GET',
+              cliIP: '192.168.0.1',
+              agent: 'agent',
+              agentHost: 'localhost',
+              action: 'SERVICE_CHECK',
+              type: 'ambari-audit',
+              _version_: 2,
+              id: 'id0',
+              file: 'ambari-agent.log',
+              seq_num: 3,
+              bundle_id: 'b0',
+              case_id: 'c0',
+              log_message: 'User(admin), Operation(SERVICE_CHECK)',
+              logfile_line_number: 4,
+              message_md5: '12345678900987654321',
+              cluster: 'cl0',
+              event_count: 0,
+              event_md5: '09876543211234567890',
+              event_dur_ms: 100,
+              _ttl_: '+7DAYS',
+              _expire_at_: '2017-05-29T11:30:22.531Z',
+              _router_field_: 5
+            },
+            {
+              policy: 'policy',
+              reason: 'Server error',
+              result: 1,
+              text: 'Something went wrong',
+              tags: [
+                'ambari_agent'
+              ],
+              resource: '/ambari-agent',
+              sess: '1',
+              access: '1',
+              logType: 'AmbariAudit',
+              tags_str: 'ambari_server',
+              resType: 'server',
+              reqUser: 'user',
+              reqData: 'data',
+              repoType: 1,
+              repo: 'ambari',
+              proxyUsers: [
+                'user'
+              ],
+              evtTime: '2017-05-29T11:30:22.531Z',
+              enforcer: 'hdfs',
+              reqContext: 'ambari_server',
+              cliType: 'PUT',
+              cliIP: '192.168.0.1',
+              agent: 'agent',
+              agentHost: 'localhost',
+              action: 'SERVICE_CHECK',
+              type: 'ambari-audit',
+              _version_: 4,
+              id: 'id1',
+              file: 'ambari-agent.log',
+              seq_num: 5,
+              bundle_id: 'b1',
+              case_id: 'c1',
+              log_message: 'User(user), Operation(SERVICE_CHECK)',
+              logfile_line_number: 6,
+              message_md5: '10293847561029384756',
+              cluster: 'cl1',
+              event_count: 2,
+              event_md5: '01928374650192837465',
+              event_dur_ms: 500,
+              _ttl_: '+7DAYS',
+              _expire_at_: '2017-05-29T11:30:22.531Z',
+              _router_field_: 10
+            }
+          ],
+          bargraph: {
+            graphData: [
+              {
+                dataCount: [
+                  {
+                    name: 'n0',
+                    value: 1
+                  },
+                  {
+                    name: 'n1',
+                    value: 2
+                  }
+                ],
+                name: 'graph0'
+              },
+              {
+                dataCount: [
+                  {
+                    name: 'n2',
+                    value: 10
+                  },
+                  {
+                    name: 'n3',
+                    value: 20
+                  }
+                ],
+                name: 'graph1'
+              }
+            ]
+          },
+          components: {},
+          resources: {
+            graphData: [
+              {
+                dataCount: [
+                  {
+                    name: 'n16',
+                    value: 800
+                  },
+                  {
+                    name: 'n17',
+                    value: 400
+                  }
+                ],
+                name: 'graph8'
+              },
+              {
+                dataCount: [
+                  {
+                    name: 'n18',
+                    value: 600
+                  },
+                  {
+                    name: 'n19',
+                    value: 300
+                  }
+                ],
+                name: 'graph9'
+              }
+            ]
+          },
+          schema: {
+            fields: {
+              'cluster': 'key_lower_case',
+              'ws_status': 'text_ws',
+              'reason': 'text_std_token_lower_case',
+              'agent': 'key_lower_case',
+              'Base URL': 'key_lower_case',
+              'sess': 'key_lower_case',
+              'type': 'key_lower_case',
+              'seq_num': 'tlong',
+              'path': 'key_lower_case',
+              'ugi': 'key_lower_case',
+              'host': 'key_lower_case',
+              'case_id': 'key_lower_case',
+              'action': 'key_lower_case',
+              'id': 'string',
+              'logger_name': 'key_lower_case',
+              'text': 'text_std_token_lower_case',
+              'Repo id': 'key_lower_case',
+              'Stack version': 'tdouble',
+              'logfile_line_number': 'tint',
+              'Status': 'tlong',
+              'RequestId': 'tlong',
+              'level': 'key_lower_case',
+              'resource': 'key_lower_case',
+              'resType': 'key_lower_case',
+              'ip': 'key_lower_case',
+              'Hostname': 'key_lower_case',
+              'Roles': 'key_lower_case',
+              'Stack': 'key_lower_case',
+              'req_self_id': 'key_lower_case',
+              'repoType': 'tint',
+              'VersionNote': 'key_lower_case',
+              'Cluster name': 'key_lower_case',
+              'bundle_id': 'key_lower_case',
+              'cliType': 'key_lower_case',
+              'reqContext': 'key_lower_case',
+              'ws_result_status': 'text_ws',
+              'proxyUsers': 'key_lower_case',
+              'RequestType': 'key_lower_case',
+              'Repositories': 'key_lower_case',
+              'logType': 'key_lower_case',
+              'Repo version': 'key_lower_case',
+              'TaskId': 'tlong',
+              'User': 'key_lower_case',
+              'access': 'key_lower_case',
+              'dst': 'key_lower_case',
+              'perm': 'key_lower_case',
+              'event_count': 'tlong',
+              'repo': 'key_lower_case',
+              'reqUser': 'key_lower_case',
+              'task_id': 'tlong',
+              'Operation': 'key_lower_case',
+              'Reason': 'key_lower_case',
+              'reqData': 'text_std_token_lower_case',
+              'result': 'tint',
+              'file': 'key_lower_case',
+              'log_message': 'key_lower_case',
+              'agentHost': 'key_lower_case',
+              'Component': 'key_lower_case',
+              'authType': 'key_lower_case',
+              'Display name': 'key_lower_case',
+              'policy': 'tlong',
+              'cliIP': 'key_lower_case',
+              'OS': 'key_lower_case',
+              'RemoteIp': 'key_lower_case',
+              'ResultStatus': 'tlong',
+              'evtTime': 'tdate',
+              'VersionNumber': 'key_lower_case',
+              'url': 'key_lower_case',
+              'req_caller_id': 'key_lower_case',
+              'enforcer': 'key_lower_case',
+              'Command': 'key_lower_case'
+            }
+          },
+          serviceload: {
+            graphData: [
+              {
+                dataCount: [
+                  {
+                    name: 'n4',
+                    value: 1
+                  },
+                  {
+                    name: 'n5',
+                    value: 2
+                  }
+                ],
+                name: 'graph2'
+              },
+              {
+                dataCount: [
+                  {
+                    name: 'n6',
+                    value: 10
+                  },
+                  {
+                    name: 'n7',
+                    value: 20
+                  }
+                ],
+                name: 'graph3'
+              }
+            ]
+          }
+        }
+      },
+      public: {
+        config: {}
+      },
+      service: {
+        logs: {
+          logList: [
+            {
+              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+              host: 'h0',
+              level: 'WARN',
+              logtime: moment().valueOf(),
+              ip: '192.168.0.1',
+              logfile_line_number: 8,
+              type: 'ams_collector',
+              _version_: 9,
+              id: 'id2',
+              file: 'ambari-metrics-collector.log',
+              seq_num: 10,
+              bundle_id: 'b2',
+              case_id: 'c2',
+              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
+              message_md5: '1357908642',
+              cluster: 'cl2',
+              event_count: 5,
+              event_md5: '1908755391',
+              event_dur_ms: 200,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().add(5, 'd').valueOf(),
+              _router_field_: 20
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+              host: 'h1',
+              level: 'ERROR',
+              logtime: moment().subtract(2, 'd'),
+              ip: '192.168.0.2',
+              type: 'ams_collector',
+              _version_: 14,
+              id: 'id3',
+              file: 'ambari-metrics-collector.log',
+              seq_num: 15,
+              bundle_id: 'b3',
+              case_id: 'c3',
+              log_message: 'Connection refused.\nPlease check Ambari Metrics.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1357908642',
+              cluster: 'cl3',
+              event_count: 2,
+              event_md5: '1029384756',
+              event_dur_ms: 700,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().add(3, 'd').valueOf(),
+              _router_field_: 5
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+              host: 'h1',
+              level: 'FATAL',
+              logtime: moment().subtract(10, 'd').valueOf(),
+              ip: '192.168.0.3',
+              type: 'ambari_agent',
+              _version_: 14,
+              id: 'id4',
+              file: 'ambari-agent.log',
+              seq_num: 15,
+              bundle_id: 'b4',
+              case_id: 'c4',
+              log_message: 'Connection refused.\nPlease check Ambari Agent.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1038027502',
+              cluster: 'cl4',
+              event_count: 2,
+              event_md5: '67589403',
+              event_dur_ms: 100,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().subtract(5, 'd').valueOf(),
+              _router_field_: 45
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
+              host: 'h1',
+              level: 'INFO',
+              logtime: moment().subtract(25, 'h').valueOf(),
+              ip: '192.168.0.4',
+              type: 'zookeeper_server',
+              _version_: 14,
+              id: 'id4',
+              file: 'zookeeper_server.log',
+              seq_num: 15,
+              bundle_id: 'b0',
+              case_id: 'c0',
+              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1038027502',
+              cluster: 'cl0',
+              event_count: 2,
+              event_md5: '67589403',
+              event_dur_ms: 1000,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().subtract(25, 'h').add(5, 'd').valueOf(),
+              _router_field_: 55
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/zookeeper-server.log',
+              host: 'h1',
+              level: 'DEBUG',
+              logtime: moment().subtract(25, 'd').valueOf(),
+              ip: '192.168.0.4',
+              type: 'zookeeper_server',
+              _version_: 14,
+              id: 'id4',
+              file: 'zookeeper_server.log',
+              seq_num: 15,
+              bundle_id: 'b0',
+              case_id: 'c0',
+              log_message: 'Connection refused.\nPlease check ZooKeeper Server.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1038027502',
+              cluster: 'cl1',
+              event_count: 2,
+              event_md5: '67589403',
+              event_dur_ms: 1000,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().subtract(20, 'd').valueOf(),
+              _router_field_: 55
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
+              host: 'h1',
+              level: 'TRACE',
+              logtime: moment().subtract(2, 'h').valueOf(),
+              ip: '192.168.0.4',
+              type: 'zookeeper_client',
+              _version_: 14,
+              id: 'id4',
+              file: 'zookeeper_client.log',
+              seq_num: 15,
+              bundle_id: 'b0',
+              case_id: 'c0',
+              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1038027502',
+              cluster: 'cl1',
+              event_count: 2,
+              event_md5: '67589403',
+              event_dur_ms: 1000,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().subtract(2, 'h').add(5, 'd').valueOf(),
+              _router_field_: 55
+            },
+            {
+              path: '/var/log/ambari-metrics-collector/zookeeper-client.log',
+              host: 'h1',
+              level: 'UNKNOWN',
+              logtime: moment().subtract(31, 'd').valueOf(),
+              ip: '192.168.0.4',
+              type: 'zookeeper_client',
+              _version_: 14,
+              id: 'id4',
+              file: 'zookeeper_client.log',
+              seq_num: 15,
+              bundle_id: 'b0',
+              case_id: 'c0',
+              log_message: 'Connection refused.\nPlease check ZooKeeper Client.\nCheck log file for details.',
+              logfile_line_number: 16,
+              message_md5: '1038027502',
+              cluster: 'cl1',
+              event_count: 2,
+              event_md5: '67589403',
+              event_dur_ms: 1000,
+              _ttl_: '+5DAYS',
+              _expire_at_: moment().subtract(26, 'd').valueOf(),
+              _router_field_: 55
+            }
+          ],
+          aggregated: {
+            graphData: [
+              {
+                name: 'n0',
+                count: 100,
+                dataList: [
+                  {
+                    name: 'n1',
+                    count: 50,
+                    dataList: null
+                  },
+                  {
+                    name: 'n2',
+                    count: 200,
+                    dataList: null
+                  }
+                ]
+              },
+              {
+                name: 'n3',
+                count: 10,
+                dataList: [
+                  {
+                    name: 'n4',
+                    count: 5,
+                    dataList: null
+                  },
+                  {
+                    name: 'n5',
+                    count: 20,
+                    dataList: null
+                  }
+                ]
+              }
+            ]
+          },
+          components: {
+            count: {
+              anygraph: {
+                graphData: [
+                  {
+                    dataCount: [
+                      {
+                        name: 'n8',
+                        value: 50
+                      },
+                      {
+                        name: 'n9',
+                        value: 100
+                      }
+                    ],
+                    name: 'graph4'
+                  },
+                  {
+                    dataCount: [
+                      {
+                        name: 'n10',
+                        value: 5
+                      },
+                      {
+                        name: 'n11',
+                        value: 10
+                      }
+                    ],
+                    name: 'graph5'
+                  }
+                ]
+              }
+            },
+            levels: {
+              counts: {
+                vNodeList: [
+                  {
+                    name: 'ambari',
+                    type: 0,
+                    logLevelCount: [
+                      {
+                        name: 'ERROR',
+                        value: '10'
+                      },
+                      {
+                        name: 'WARN',
+                        value: '50'
+                      }
+                    ],
+                    childs: [
+                      {
+                        name: 'hdfs',
+                        type: 2,
+                        logLevelCount: [
+                          {
+                            name: 'ERROR',
+                            value: '10'
+                          },
+                          {
+                            name: 'WARN',
+                            value: '20'
+                          }
+                        ],
+                        isParent: false,
+                        isRoot: false
+                      },
+                      {
+                        name: 'zookeeper',
+                        type: 3,
+                        logLevelCount: [
+                          {
+                            name: 'ERROR',
+                            value: '20'
+                          },
+                          {
+                            name: 'WARN',
+                            value: '40'
+                          }
+                        ],
+                        isParent: false,
+                        isRoot: false
+                      }
+                    ],
+                    isParent: true,
+                    isRoot: false
+                  },
+                  {
+                    name: 'ambari_agent',
+                    type: 1,
+                    logLevelCount: [
+                      {
+                        name: 'ERROR',
+                        value: '100'
+                      },
+                      {
+                        name: 'WARN',
+                        value: '500'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  }
+                ]
+              }
+            },
+            groupList: [
+              {
+                type: 'ams_collector'
+              },
+              {
+                type: 'ambari_agent'
+              },
+              {
+                type: 'zookeeper_server'
+              },
+              {
+                type: 'zookeeper_client'
+              }
+            ]
+          },
+          files: {
+            hostLogFiles: {
+              clusters: [
+                'c0',
+                'c1'
+              ],
+              services: [
+                'hdfs',
+                'zookeeper'
+              ]
+            }
+          },
+          histogram: {
+            graphData: [
+              {
+                dataCount: [
+                  {
+                    name: moment().toISOString(),
+                    value: '1000'
+                  },
+                  {
+                    name: moment().subtract(1, 'h').toISOString(),
+                    value: '2000'
+                  }
+                ],
+                name: 'ERROR'
+              },
+              {
+                dataCount: [
+                  {
+                    name: moment().toISOString(),
+                    value: '700'
+                  },
+                  {
+                    name: moment().subtract(1, 'h').toISOString(),
+                    value: '900'
+                  }
+                ],
+                name: 'WARN'
+              }
+            ]
+          },
+          hosts: {
+            groupList: [
+              {
+                host: 'h0'
+              },
+              {
+                host: 'h1'
+              }
+            ],
+            components: {
+              vNodeList: [
+                {
+                  name: 'ambari',
+                  type: 0,
+                  logLevelCount: [
+                    {
+                      name: 'ERROR',
+                      value: '100'
+                    },
+                    {
+                      name: 'WARN',
+                      value: '500'
+                    }
+                  ],
+                  childs: [
+                    {
+                      name: 'ambari_metrics',
+                      type: 2,
+                      logLevelCount: [
+                        {
+                          name: 'ERROR',
+                          value: '100'
+                        },
+                        {
+                          name: 'WARN',
+                          value: '200'
+                        }
+                      ],
+                      isParent: false,
+                      isRoot: false
+                    },
+                    {
+                      name: 'hbase',
+                      type: 3,
+                      logLevelCount: [
+                        {
+                          name: 'ERROR',
+                          value: '200'
+                        },
+                        {
+                          name: 'WARN',
+                          value: '400'
+                        }
+                      ],
+                      isParent: false,
+                      isRoot: false
+                    }
+                  ],
+                  isParent: true,
+                  isRoot: false
+                },
+                {
+                  name: 'ambari_server',
+                  type: 1,
+                  logLevelCount: [
+                    {
+                      name: 'ERROR',
+                      value: '1000'
+                    },
+                    {
+                      name: 'WARN',
+                      value: '5000'
+                    }
+                  ],
+                  isParent: false,
+                  isRoot: false
+                }
+              ]
+            },
+            count: {
+              getvCounts: [
+                {
+                  name: 'n20',
+                  count: 100
+                },
+                {
+                  name: 'n21',
+                  count: 200
+                }
+              ]
+            }
+          },
+          levels: {
+            counts: {
+              getvNameValues: [
+                {
+                  name: 'n22',
+                  count: 1000
+                },
+                {
+                  name: 'n23',
+                  count: 2000
+                }
+              ]
+            }
+          },
+          schema: {
+            fields: {
+              cluster: 'key_lower_case',
+              method: 'key_lower_case',
+              level: 'key_lower_case',
+              event_count: 'tlong',
+              ip: 'string',
+              rowtype: 'key_lower_case',
+              key_log_message: 'key_lower_case',
+              type: 'key_lower_case',
+              seq_num: 'tlong',
+              path: 'key_lower_case',
+              logtype: 'key_lower_case',
+              file: 'key_lower_case',
+              line_number: 'tint',
+              thread_name: 'key_lower_case',
+              bundle_id: 'key_lower_case',
+              host: 'key_lower_case',
+              case_id: 'key_lower_case',
+              log_message: 'text_std_token_lower_case',
+              id: 'string',
+              logger_name: 'key_lower_case',
+              text: 'text_std_token_lower_case',
+              logfile_line_number: 'tint',
+              logtime: 'tdate'
+            }
+          },
+          serviceconfig: '',
+          tree: {
+            vNodeList: [
+              {
+                name: 'h0',
+                type: 'H',
+                value: '1',
+                childs: [
+                  {
+                    name: 'ams_collector',
+                    type: 'C',
+                    value: '1',
+                    logLevelCount: [
+                      {
+                        name: 'WARN',
+                        value: '1'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  }
+                ],
+                logLevelCount: [
+                  {
+                    name: 'WARN',
+                    value: '1'
+                  }
+                ],
+                isParent: true,
+                isRoot: true
+              },
+              {
+                name: 'h1',
+                type: 'H',
+                value: '6',
+                childs: [
+                  {
+                    name: 'ams_collector',
+                    type: 'C',
+                    value: '1',
+                    logLevelCount: [
+                      {
+                        name: 'ERROR',
+                        value: '1'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  },
+                  {
+                    name: 'ambari_agent',
+                    type: 'C',
+                    value: '1',
+                    logLevelCount: [
+                      {
+                        name: 'FATAL',
+                        value: '1'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  },
+                  {
+                    name: 'zookeeper_server',
+                    type: 'C',
+                    value: '2',
+                    logLevelCount: [
+                      {
+                        name: 'INFO',
+                        value: '1'
+                      },
+                      {
+                        name: 'DEBUG',
+                        value: '1'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  },
+                  {
+                    name: 'zookeeper_client',
+                    type: 'C',
+                    value: '2',
+                    logLevelCount: [
+                      {
+                        name: 'TRACE',
+                        value: '1'
+                      },
+                      {
+                        name: 'UNKNOWN',
+                        value: '1'
+                      }
+                    ],
+                    isParent: false,
+                    isRoot: false
+                  }
+                ],
+                logLevelCount: [
+                  {
+                    name: 'ERROR',
+                    value: '1'
+                  },
+                  {
+                    name: 'FATAL',
+                    value: '1'
+                  },
+                  {
+                    name: 'INFO',
+                    value: '1'
+                  },
+                  {
+                    name: 'DEBUG',
+                    value: '1'
+                  },
+                  {
+                    name: 'TRACE',
+                    value: '1'
+                  },
+                  {
+                    name: 'UNKNOWN',
+                    value: '1'
+                  }
+                ],
+                isParent: true,
+                isRoot: true
+              }
+            ]
+          },
+          truncated: {
+            logList: [
+              {
+                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+                host: 'h0',
+                level: 'WARN',
+                logtime: '2017-05-28T11:30:22.531Z',
+                ip: '192.168.0.1',
+                logfile_line_number: 8,
+                type: 'ams_collector',
+                _version_: 9,
+                id: 'id2',
+                file: 'ambari-metrics-collector.log',
+                seq_num: 10,
+                bundle_id: 'b2',
+                case_id: 'c2',
+                log_message: 'Connection refused',
+                message_md5: '1357908642',
+                cluster: 'cl2',
+                event_count: 5,
+                event_md5: '1908755391',
+                event_dur_ms: 200,
+                _ttl_: '+5DAYS',
+                _expire_at_: '2017-05-29T11:30:22.531Z',
+                _router_field_: 20
+              },
+              {
+                path: '/var/log/ambari-metrics-collector/ambari-metrics-collector.log',
+                host: 'h1',
+                level: 'ERROR',
+                logtime: '2017-05-28T10:30:22.531Z',
+                ip: '192.168.0.2',
+                type: 'ams_collector',
+                _version_: 14,
+                id: 'id3',
+                file: 'ambari-metrics-collector.log',
+                seq_num: 15,
+                bundle_id: 'b3',
+                case_id: 'c3',
+                log_message: 'Connection refused',
+                logfile_line_number: 16,
+                message_md5: '1357908642',
+                cluster: 'cl3',
+                event_count: 2,
+                event_md5: '1029384756',
+                event_dur_ms: 700,
+                _ttl_: '+5DAYS',
+                _expire_at_: '2017-05-29T10:30:22.531Z',
+                _router_field_: 5
+              }
+            ]
+          },
+          clusters: [
+            'cl0',
+            'cl1',
+            'cl2',
+            'cl3',
+            'cl4'
+          ]
+        }
+      },
+      status: {
+        auditlogs: {
+          znodeReady: true,
+          solrCollectionReady: true,
+          solrAliasReady: false,
+          configurationUploaded: true
+        },
+        servicelogs: {
+          znodeReady: true,
+          solrCollectionReady: true,
+          configurationUploaded: true
+        },
+        userconfig: {
+          znodeReady: true,
+          solrCollectionReady: true,
+          configurationUploaded: true
+        }
+      },
+      userconfig: {
+        userConfigList: [
+          {
+            id: 'c0',
+            userName: 'admin',
+            filtername: 'service',
+            values: 'hdfs',
+            shareNameList: [
+              's0',
+              's1'
+            ],
+            rowType: 'history'
+          },
+          {
+            id: 'c0',
+            userName: 'user',
+            filtername: 'component',
+            values: 'namenode',
+            shareNameList: [
+              's2',
+              's3'
+            ],
+            rowType: 'history'
+          }
+        ],
+        filters: {
+          filter0: {
+            label: 'filter0',
+            hosts: [
+              'h0',
+              'h1'
+            ],
+            defaultLevels: [
+              'l0',
+              'l1'
+            ],
+            overrideLevels: [
+              'l2',
+              'l3'
+            ],
+            expiryTime: '2017-05-29T11:30:22.531Z'
+          },
+          filter1: {
+            label: 'filter1',
+            hosts: [
+              'h1',
+              'h2'
+            ],
+            defaultLevels: [
+              'l4',
+              'l5'
+            ],
+            overrideLevels: [
+              'l6',
+              'l7'
+            ],
+            expiryTime: '2017-05-30T11:30:22.531Z'
+          }
+        },
+        names: []
+      }
+    }
+  }
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/app-settings.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/app-settings.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/app-settings.model.ts
new file mode 100644
index 0000000..11821a3
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/app-settings.model.ts
@@ -0,0 +1,27 @@
+/**
+ * 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.
+ */
+
+import * as moment from 'moment-timezone';
+
+export interface AppSettings {
+  timeZone: string;
+}
+
+export const defaultSettings: AppSettings = {
+  timeZone: moment.tz.guess()
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/app-state.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/app-state.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/app-state.model.ts
new file mode 100644
index 0000000..2995002
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/app-state.model.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+export interface AppState {
+  isAuthorized: boolean;
+  isInitialLoading: boolean;
+  isLoginInProgress: boolean;
+  isAuditLogsSet: boolean;
+  isServiceLogsSet: boolean;
+}
+
+export const initialState: AppState = {
+  isAuthorized: false,
+  isInitialLoading: false,
+  isLoginInProgress: false,
+  isAuditLogsSet: false,
+  isServiceLogsSet: false
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log-field.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log-field.model.ts
new file mode 100644
index 0000000..96372a1
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log-field.model.ts
@@ -0,0 +1,225 @@
+/**
+ * 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.
+ */
+
+import {LogField} from '@app/models/log-field.model';
+
+const columnsNamesMap = {
+  access: {
+    displayName: 'logs.accessType',
+    isDisplayed: true
+  },
+  action: {
+    displayName: 'logs.action'
+  },
+  agent: {
+    displayName: 'logs.agent'
+  },
+  agentHost: {
+    displayName: 'logs.agentHost'
+  },
+  authType: {
+    displayName: 'logs.authType'
+  },
+  bundle_id: {
+    displayName: 'logs.bundleId'
+  },
+  case_id: {
+    displayName: 'logs.caseId'
+  },
+  cliIP: {
+    displayName: 'logs.clientIp',
+    isDisplayed: true
+  },
+  cliType: {
+    displayName: 'logs.clientType'
+  },
+  cluster: {
+    displayName: 'logs.cluster'
+  },
+  dst: {
+    displayName: 'logs.dst'
+  },
+  evtTime: {
+    displayName: 'logs.eventTime',
+    isDisplayed: true
+  },
+  file: {
+    displayName: 'logs.file'
+  },
+  host: {
+    displayName: 'logs.host'
+  },
+  id: {
+    displayName: 'logs.id'
+  },
+  ip: {
+    displayName: 'logs.ip'
+  },
+  level: {
+    displayName: 'logs.level'
+  },
+  log_message: {
+    displayName: 'logs.message'
+  },
+  logType: {
+    displayName: 'logs.logType'
+  },
+  logfile_line_number: {
+    displayName: 'logs.logfileLineNumber'
+  },
+  logger_name: {
+    displayName: 'logs.loggerName'
+  },
+  logtime: {
+    displayName: 'logs.logTime'
+  },
+  path: {
+    displayName: 'logs.path'
+  },
+  perm: {
+    displayName: 'logs.perm'
+  },
+  policy: {
+    displayName: 'logs.policy'
+  },
+  proxyUsers: {
+    displayName: 'logs.proxyUsers'
+  },
+  reason: {
+    displayName: 'logs.reason'
+  },
+  repo: {
+    displayName: 'logs.repo',
+    isDisplayed: true
+  },
+  repoType: {
+    displayName: 'logs.repoType'
+  },
+  req_caller_id: {
+    displayName: 'logs.reqCallerId'
+  },
+  reqContext: {
+    displayName: 'logs.reqContext'
+  },
+  reqData: {
+    displayName: 'logs.reqData'
+  },
+  req_self_id: {
+    displayName: 'logs.reqSelfId'
+  },
+  resType: {
+    displayName: 'logs.resType'
+  },
+  resource: {
+    displayName: 'logs.resource',
+    isDisplayed: true
+  },
+  result: {
+    displayName: 'logs.result',
+    isDisplayed: true
+  },
+  sess: {
+    displayName: 'logs.session'
+  },
+  text: {
+    displayName: 'logs.text'
+  },
+  type: {
+    displayName: 'logs.type'
+  },
+  ugi: {
+    displayName: 'logs.ugi'
+  },
+  reqUser: {
+    displayName: 'logs.user',
+    isDisplayed: true
+  },
+  ws_base_url: {
+    displayName: 'logs.baseUrl'
+  },
+  ws_command: {
+    displayName: 'logs.command'
+  },
+  ws_component: {
+    displayName: 'logs.component'
+  },
+  ws_details: {
+    displayName: 'logs.details'
+  },
+  ws_display_name: {
+    displayName: 'logs.displayName'
+  },
+  ws_os: {
+    displayName: 'logs.os'
+  },
+  ws_repo_id: {
+    displayName: 'logs.repoId'
+  },
+  ws_repo_version: {
+    displayName: 'logs.repoVersion'
+  },
+  ws_repositories: {
+    displayName: 'logs.repositories'
+  },
+  ws_request_id: {
+    displayName: 'logs.requestId'
+  },
+  ws_result_status: {
+    displayName: 'logs.resultStatus'
+  },
+  ws_roles: {
+    displayName: 'logs.roles'
+  },
+  ws_stack_version: {
+    displayName: 'logs.stackVersion'
+  },
+  ws_stack: {
+    displayName: 'logs.stack'
+  },
+  ws_status: {
+    displayName: 'logs.status'
+  },
+  ws_task_id: {
+    displayName: 'logs.taskId'
+  },
+  ws_version_note: {
+    displayName: 'logs.versionNote'
+  },
+  ws_version_number: {
+    displayName: 'logs.versionNumber'
+  },
+  tags: {
+    isAvailable: false
+  },
+  tags_str: {
+    isAvailable: false
+  },
+  seq_num: {
+    isAvailable: false
+  }
+};
+
+export class AuditLogField extends LogField {
+  constructor(name: string) {
+    super(name);
+    const preset = columnsNamesMap[this.name];
+    if (preset) {
+      Object.assign(this, preset);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log.model.ts
new file mode 100644
index 0000000..2b34cd6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/audit-log.model.ts
@@ -0,0 +1,46 @@
+/**
+ * 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.
+ */
+
+import {Log} from '@app/models/log.model';
+
+export interface AuditLog extends Log {
+  policy?: string;
+  reason?: string;
+  result: number;
+  text?: string;
+  tags?: string[];
+  resource?: string;
+  sess?: string;
+  access?: string;
+  logType: string;
+  tags_str?: string;
+  resType?: string;
+  reqUser: string;
+  reqData?: string;
+  repoType: number;
+  repo: string;
+  proxyUsers?: string[];
+  evtTime: string;
+  enforcer: string;
+  reqContext?: string;
+  cliType?: string;
+  cliIP?: string;
+  agent?: string;
+  agentHost?: string;
+  action?: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/bar-graph.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/bar-graph.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/bar-graph.model.ts
new file mode 100644
index 0000000..a197bf5
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/bar-graph.model.ts
@@ -0,0 +1,24 @@
+/**
+ * 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.
+ */
+
+import {CommonEntry} from '@app/models/common-entry.model';
+
+export interface BarGraph {
+  dataCount: CommonEntry[],
+  name: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/common-entry.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/common-entry.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/common-entry.model.ts
new file mode 100644
index 0000000..dad82ab
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/common-entry.model.ts
@@ -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.
+ */
+
+export interface CommonEntry {
+  name: string;
+  value: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/count.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/count.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/count.model.ts
new file mode 100644
index 0000000..02fc41c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/count.model.ts
@@ -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.
+ */
+
+export interface Count {
+  name: string;
+  count: number;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/filter.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/filter.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/filter.model.ts
new file mode 100644
index 0000000..c7ff662
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/filter.model.ts
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+export interface Filter {
+  label: string;
+  hosts: string[];
+  defaultLevels: string[];
+  overrideLevels: string[];
+  expiryTime: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/graph.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/graph.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/graph.model.ts
new file mode 100644
index 0000000..04966b2
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/graph.model.ts
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+export interface Graph {
+  name: string;
+  count: string;
+  dataList?: Graph[]
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/log-field.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/log-field.model.ts
new file mode 100644
index 0000000..0e738ab
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/log-field.model.ts
@@ -0,0 +1,27 @@
+/**
+ * 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.
+ */
+
+export class LogField {
+  constructor(name: string) {
+    this.name = name;
+  }
+  name: string;
+  displayName: string = this.name;
+  isDisplayed: boolean = false;
+  isAvailable: boolean = true;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/log.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/log.model.ts
new file mode 100644
index 0000000..188bbd2
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/log.model.ts
@@ -0,0 +1,37 @@
+/**
+ * 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.
+ */
+
+export interface Log {
+  type: string;
+  _version_: number;
+  id: string;
+  file?: string;
+  seq_num: number;
+  bundle_id?: string;
+  case_id?: string;
+  log_message: string;
+  logfile_line_number: number;
+  message_md5: string;
+  cluster: string;
+  event_count: number;
+  event_md5: string;
+  event_dur_ms: number;
+  _ttl_: string;
+  _expire_at_: number;
+  _router_field_?: number;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/node.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/node.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/node.model.ts
new file mode 100644
index 0000000..2891d142
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/node.model.ts
@@ -0,0 +1,29 @@
+/**
+ * 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.
+ */
+
+import {CommonEntry} from '@app/models/common-entry.model';
+
+export interface Node {
+  name: string;
+  type?: string;
+  value: string;
+  isParent: boolean;
+  isRoot: boolean;
+  childs?: Node[];
+  logLevelCount: CommonEntry[];
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log-field.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log-field.model.ts
new file mode 100644
index 0000000..081eecf
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log-field.model.ts
@@ -0,0 +1,107 @@
+/**
+ * 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.
+ */
+
+import {LogField} from '@app/models/log-field.model';
+
+const columnsNamesMap = {
+  log_message: {
+    displayName: 'logs.message',
+    isDisplayed: true
+  },
+  bundle_id: {
+    displayName: 'logs.bundleId'
+  },
+  case_id: {
+    displayName: 'logs.caseId'
+  },
+  cluster: {
+    displayName: 'logs.cluster'
+  },
+  event_count: {
+    displayName: 'logs.eventCount'
+  },
+  file: {
+    displayName: 'logs.file'
+  },
+  host: {
+    displayName: 'logs.host'
+  },
+  id: {
+    displayName: 'logs.id'
+  },
+  ip: {
+    displayName: 'logs.ip'
+  },
+  level: {
+    displayName: 'logs.level',
+    isDisplayed: true
+  },
+  line_number: {
+    displayName: 'logs.lineNumber'
+  },
+  logtype: {
+    displayName: 'logs.logType'
+  },
+  logfile_line_number: {
+    displayName: 'logs.logfileLineNumber'
+  },
+  logger_name: {
+    displayName: 'logs.loggerName'
+  },
+  logtime: {
+    isDisplayed: true
+  },
+  method: {
+    displayName: 'logs.method'
+  },
+  path: {
+    displayName: 'logs.path'
+  },
+  rowtype: {
+    displayName: 'logs.rowType'
+  },
+  thread_name: {
+    displayName: 'logs.threadName'
+  },
+  type: {
+    displayName: 'logs.type',
+    isDisplayed: true
+  },
+  tags: {
+    isAvailable: false
+  },
+  text: {
+    isAvailable: false
+  },
+  message: {
+    isAvailable: false
+  },
+  seq_num: {
+    isAvailable: false
+  }
+};
+
+export class ServiceLogField extends LogField {
+  constructor(name: string) {
+    super(name);
+    const preset = columnsNamesMap[this.name];
+    if (preset) {
+      Object.assign(this, preset);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log.model.ts
new file mode 100644
index 0000000..ee27343
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/service-log.model.ts
@@ -0,0 +1,27 @@
+/**
+ * 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.
+ */
+
+import {Log} from '@app/models/log.model';
+
+export interface ServiceLog extends Log {
+  path: string;
+  host: string;
+  level: string;
+  logtime: number;
+  ip: string;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/solr-collection-state.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/solr-collection-state.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/solr-collection-state.model.ts
new file mode 100644
index 0000000..0824dda
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/solr-collection-state.model.ts
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+
+export interface SolrCollectionState {
+  znodeReady: boolean;
+  configurationUploaded: boolean;
+  solrCollectionReady: boolean;
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/store.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/store.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/store.model.ts
new file mode 100644
index 0000000..31d52b3
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/store.model.ts
@@ -0,0 +1,169 @@
+/**
+ * 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.
+ */
+
+import {Observable} from 'rxjs/Observable';
+import {Store, Action} from '@ngrx/store';
+import {AppSettings} from '@app/models/app-settings.model';
+import {AppState} from '@app/models/app-state.model';
+import {AuditLog} from '@app/models/audit-log.model';
+import {ServiceLog} from '@app/models/service-log.model';
+import {BarGraph} from '@app/models/bar-graph.model';
+import {Graph} from '@app/models/graph.model';
+import {Node} from '@app/models/node.model';
+import {UserConfig} from '@app/models/user-config.model';
+import {Filter} from '@app/models/filter.model';
+import {AuditLogField} from '@app/models/audit-log-field.model';
+import {ServiceLogField} from '@app/models/service-log-field.model';
+
+export const storeActions = {
+  'ARRAY.ADD': 'ADD',
+  'ARRAY.DELETE.PRIMITIVE': 'DELETE_PRIMITIVE',
+  'ARRAY.DELETE.OBJECT': 'DELETE_OBJECT',
+  'ARRAY.CLEAR': 'CLEAR',
+  'ARRAY.MAP': 'MAP',
+
+  'OBJECT.SET': 'SET'
+};
+
+export interface AppStore {
+  appSettings: AppSettings;
+  appState: AppState;
+  auditLogs: AuditLog[];
+  serviceLogs: ServiceLog[];
+  serviceLogsHistogramData: BarGraph[];
+  graphs: Graph[];
+  hosts: Node[];
+  userConfigs: UserConfig[];
+  filters: Filter[];
+  clusters: string[];
+  components: string[];
+  serviceLogsFields: ServiceLogField[];
+  auditLogsFields: AuditLogField[];
+}
+
+export class ModelService {
+
+  constructor(modelName: string, store: Store<AppStore>) {
+    this.modelName = modelName;
+    this.store = store;
+  }
+
+  protected modelName: string;
+
+  protected store: Store<AppStore>;
+
+  getAll(): Observable<any> {
+    return this.store.select(this.modelName);
+  }
+
+}
+
+export class CollectionModelService extends ModelService {
+
+  addInstance(instance: any): void {
+    this.addInstances([instance]);
+  }
+
+  addInstances(instances: any[]): void {
+    this.store.dispatch({
+      type: `${storeActions['ARRAY.ADD']}_${this.modelName}`,
+      payload: instances
+    });
+  }
+
+  deleteObjectInstance(instance: any): void {
+    this.store.dispatch({
+      type: `${storeActions['ARRAY.DELETE.OBJECT']}_${this.modelName}`,
+      payload: instance
+    });
+  }
+
+  deletePrimitiveInstance(instance: any): void {
+    this.store.dispatch({
+      type: `${storeActions['ARRAY.DELETE.PRIMITIVE']}_${this.modelName}`,
+      payload: instance
+    });
+  }
+
+  clear(): void {
+    this.store.dispatch({
+      type: `${storeActions['ARRAY.CLEAR']}_${this.modelName}`
+    });
+  }
+
+  mapCollection(modifier: (item: any) => {}): void {
+    this.store.dispatch({
+      type: `${storeActions['ARRAY.MAP']}_${this.modelName}`,
+      payload: {
+        modifier: modifier
+      }
+    });
+  }
+
+}
+
+export class ObjectModelService extends ModelService {
+
+  getParameter(key: string): Observable<any> {
+    return this.store.select(this.modelName, key);
+  }
+
+  setParameter(key: string, value: any): void {
+    let payload = {};
+    payload[key] = value;
+    this.setParameters(payload);
+  }
+
+  setParameters(params: any): void {
+    this.store.dispatch({
+      type: `${storeActions['OBJECT.SET']}_${this.modelName}`,
+      payload: params
+    });
+  }
+
+}
+
+export function getCollectionReducer(modelName: string, defaultState: any = []): any {
+  return (state: any = defaultState, action: Action) => {
+    switch (action.type) {
+      case `${storeActions['ARRAY.ADD']}_${modelName}`:
+        return [...state, ...action.payload];
+      case `${storeActions['ARRAY.DELETE.OBJECT']}_${modelName}`:
+        return state.filter(instance => instance.id !== action.payload.id);
+      case `${storeActions['ARRAY.DELETE.PRIMITIVE']}_${modelName}`:
+        return state.filter(item => item !== action.payload);
+      case `${storeActions['ARRAY.CLEAR']}_${modelName}`:
+        return [];
+      case `${storeActions['ARRAY.MAP']}_${modelName}`:
+        return state.map(action.payload.modifier);
+      default:
+        return state;
+    }
+  };
+}
+
+export function getObjectReducer(modelName: string, defaultState: any = {}) {
+  return (state: any = defaultState, action: Action): any => {
+    switch (action.type) {
+      case `${storeActions['OBJECT.SET']}_${modelName}`:
+        return Object.assign({}, state, action.payload);
+      default:
+        return state;
+    }
+  };
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/models/user-config.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/models/user-config.model.ts b/ambari-logsearch/ambari-logsearch-web/src/app/models/user-config.model.ts
new file mode 100644
index 0000000..f52761c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/models/user-config.model.ts
@@ -0,0 +1,26 @@
+/**
+ * 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.
+ */
+
+export interface UserConfig {
+  id: string;
+  userName: string;
+  filtername: string;
+  values: string;
+  shareNameList: string[];
+  rowType: string;
+}


[02/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.css
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.css b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.css
deleted file mode 100644
index 3c48696..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/styles/bootstrap.css
+++ /dev/null
@@ -1,6422 +0,0 @@
-/*
- * 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.
- */
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-nav,
-section {
-  display: block;
-}
-audio,
-canvas,
-video {
-  display: inline-block;
-  *display: inline;
-  *zoom: 1;
-}
-audio:not([controls]) {
-  display: none;
-}
-html {
-  font-size: 100%;
-  -webkit-text-size-adjust: 100%;
-  -ms-text-size-adjust: 100%;
-}
-a:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-a:hover,
-a:active {
-  outline: 0;
-}
-sub,
-sup {
-  position: relative;
-  font-size: 75%;
-  line-height: 0;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  /* Responsive images (ensure images don't scale beyond their parents) */
-  max-width: 100%;
-  /* Part 1: Set a maxium relative to the parent */
-  width: auto\9;
-  /* IE7-8 need help adjusting responsive images */
-  height: auto;
-  /* Part 2: Scale the height according to the width, otherwise you get stretching */
-  vertical-align: middle;
-  border: 0;
-  -ms-interpolation-mode: bicubic;
-}
-#map_canvas img,
-.google-maps img {
-  max-width: none;
-}
-button,
-input,
-select,
-textarea {
-  margin: 0;
-  font-size: 100%;
-  vertical-align: middle;
-}
-button,
-input {
-  *overflow: visible;
-  line-height: normal;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  padding: 0;
-  border: 0;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-label,
-select,
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"],
-input[type="radio"],
-input[type="checkbox"] {
-  cursor: pointer;
-}
-input[type="search"] {
-  -webkit-box-sizing: content-box;
-  -moz-box-sizing: content-box;
-  box-sizing: content-box;
-  -webkit-appearance: textfield;
-}
-input[type="search"]::-webkit-search-decoration,
-input[type="search"]::-webkit-search-cancel-button {
-  -webkit-appearance: none;
-}
-textarea {
-  overflow: auto;
-  vertical-align: top;
-}
-@media print {
-  * {
-    text-shadow: none !important;
-    color: #000 !important;
-    background: transparent !important;
-    box-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  .ir a:after,
-  a[href^="javascript:"]:after,
-  a[href^="#"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  @page {
-    margin: 0.5cm;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-}
-.clearfix {
-  *zoom: 1;
-}
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.clearfix:after {
-  clear: both;
-}
-.hide-text {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-.input-block-level {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-body {
-  margin: 0;
-  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  line-height: 20px;
-  color: #444444;
-  background-color: #f1f1f1;
-}
-a {
-  color: #3ea211;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #245d0a;
-  text-decoration: underline;
-}
-.img-rounded {
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.img-polaroid {
-  padding: 4px;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-}
-.img-circle {
-  -webkit-border-radius: 500px;
-  -moz-border-radius: 500px;
-  border-radius: 500px;
-}
-.row {
-  margin-left: -30px;
-  *zoom: 1;
-}
-.row:before,
-.row:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.row:after {
-  clear: both;
-}
-[class*="span"] {
-  float: left;
-  min-height: 1px;
-  margin-left: 30px;
-}
-.container,
-.navbar-static-top .container,
-.navbar-fixed-top .container,
-.navbar-fixed-bottom .container {
-  width: 870px;
-}
-.span12 {
-  width: 870px;
-}
-.span11 {
-  width: 795px;
-}
-.span10 {
-  width: 720px;
-}
-.span9 {
-  width: 645px;
-}
-.span8 {
-  width: 570px;
-}
-.span7 {
-  width: 495px;
-}
-.span6 {
-  width: 420px;
-}
-.span5 {
-  width: 345px;
-}
-.span4 {
-  width: 270px;
-}
-.span3 {
-  width: 195px;
-}
-.span2 {
-  width: 120px;
-}
-.span1 {
-  width: 45px;
-}
-.offset12 {
-  margin-left: 930px;
-}
-.offset11 {
-  margin-left: 855px;
-}
-.offset10 {
-  margin-left: 780px;
-}
-.offset9 {
-  margin-left: 705px;
-}
-.offset8 {
-  margin-left: 630px;
-}
-.offset7 {
-  margin-left: 555px;
-}
-.offset6 {
-  margin-left: 480px;
-}
-.offset5 {
-  margin-left: 405px;
-}
-.offset4 {
-  margin-left: 330px;
-}
-.offset3 {
-  margin-left: 255px;
-}
-.offset2 {
-  margin-left: 180px;
-}
-.offset1 {
-  margin-left: 105px;
-}
-.row-fluid {
-  width: 100%;
-  *zoom: 1;
-}
-.row-fluid:before,
-.row-fluid:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.row-fluid:after {
-  clear: both;
-}
-.row-fluid [class*="span"] {
-  display: block;
-  width: 100%;
-  min-height: 30px;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-  float: left;
-  margin-left: 3.44827586%;
-  *margin-left: 3.3908046%;
-}
-.row-fluid [class*="span"]:first-child {
-  margin-left: 0;
-}
-.row-fluid .controls-row [class*="span"] + [class*="span"] {
-  margin-left: 3.44827586%;
-}
-.row-fluid .span12 {
-  width: 100%;
-  *width: 99.94252874%;
-}
-.row-fluid .span11 {
-  width: 91.37931034%;
-  *width: 91.32183908%;
-}
-.row-fluid .span10 {
-  width: 82.75862069%;
-  *width: 82.70114943%;
-}
-.row-fluid .span9 {
-  width: 74.13793103%;
-  *width: 74.08045977%;
-}
-.row-fluid .span8 {
-  width: 65.51724138%;
-  *width: 65.45977011%;
-}
-.row-fluid .span7 {
-  width: 56.89655172%;
-  *width: 56.83908046%;
-}
-.row-fluid .span6 {
-  width: 48.27586207%;
-  *width: 48.2183908%;
-}
-.row-fluid .span5 {
-  width: 39.65517241%;
-  *width: 39.59770115%;
-}
-.row-fluid .span4 {
-  width: 31.03448276%;
-  *width: 30.97701149%;
-}
-.row-fluid .span3 {
-  width: 22.4137931%;
-  *width: 22.35632184%;
-}
-.row-fluid .span2 {
-  width: 13.79310345%;
-  *width: 13.73563218%;
-}
-.row-fluid .span1 {
-  width: 5.17241379%;
-  *width: 5.11494253%;
-}
-.row-fluid .offset12 {
-  margin-left: 106.89655172%;
-  *margin-left: 106.7816092%;
-}
-.row-fluid .offset12:first-child {
-  margin-left: 103.44827586%;
-  *margin-left: 103.33333333%;
-}
-.row-fluid .offset11 {
-  margin-left: 98.27586207%;
-  *margin-left: 98.16091954%;
-}
-.row-fluid .offset11:first-child {
-  margin-left: 94.82758621%;
-  *margin-left: 94.71264368%;
-}
-.row-fluid .offset10 {
-  margin-left: 89.65517241%;
-  *margin-left: 89.54022989%;
-}
-.row-fluid .offset10:first-child {
-  margin-left: 86.20689655%;
-  *margin-left: 86.09195402%;
-}
-.row-fluid .offset9 {
-  margin-left: 81.03448276%;
-  *margin-left: 80.91954023%;
-}
-.row-fluid .offset9:first-child {
-  margin-left: 77.5862069%;
-  *margin-left: 77.47126437%;
-}
-.row-fluid .offset8 {
-  margin-left: 72.4137931%;
-  *margin-left: 72.29885057%;
-}
-.row-fluid .offset8:first-child {
-  margin-left: 68.96551724%;
-  *margin-left: 68.85057471%;
-}
-.row-fluid .offset7 {
-  margin-left: 63.79310345%;
-  *margin-left: 63.67816092%;
-}
-.row-fluid .offset7:first-child {
-  margin-left: 60.34482759%;
-  *margin-left: 60.22988506%;
-}
-.row-fluid .offset6 {
-  margin-left: 55.17241379%;
-  *margin-left: 55.05747126%;
-}
-.row-fluid .offset6:first-child {
-  margin-left: 51.72413793%;
-  *margin-left: 51.6091954%;
-}
-.row-fluid .offset5 {
-  margin-left: 46.55172414%;
-  *margin-left: 46.43678161%;
-}
-.row-fluid .offset5:first-child {
-  margin-left: 43.10344828%;
-  *margin-left: 42.98850575%;
-}
-.row-fluid .offset4 {
-  margin-left: 37.93103448%;
-  *margin-left: 37.81609195%;
-}
-.row-fluid .offset4:first-child {
-  margin-left: 34.48275862%;
-  *margin-left: 34.36781609%;
-}
-.row-fluid .offset3 {
-  margin-left: 29.31034483%;
-  *margin-left: 29.1954023%;
-}
-.row-fluid .offset3:first-child {
-  margin-left: 25.86206897%;
-  *margin-left: 25.74712644%;
-}
-.row-fluid .offset2 {
-  margin-left: 20.68965517%;
-  *margin-left: 20.57471264%;
-}
-.row-fluid .offset2:first-child {
-  margin-left: 17.24137931%;
-  *margin-left: 17.12643678%;
-}
-.row-fluid .offset1 {
-  margin-left: 12.06896552%;
-  *margin-left: 11.95402299%;
-}
-.row-fluid .offset1:first-child {
-  margin-left: 8.62068966%;
-  *margin-left: 8.50574713%;
-}
-[class*="span"].hide,
-.row-fluid [class*="span"].hide {
-  display: none;
-}
-[class*="span"].pull-right,
-.row-fluid [class*="span"].pull-right {
-  float: right;
-}
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  *zoom: 1;
-}
-.container:before,
-.container:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.container:after {
-  clear: both;
-}
-.container-fluid {
-  padding-right: 30px;
-  padding-left: 30px;
-  *zoom: 1;
-}
-.container-fluid:before,
-.container-fluid:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.container-fluid:after {
-  clear: both;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 19.5px;
-  font-weight: 200;
-  line-height: 30px;
-}
-small {
-  font-size: 85%;
-}
-strong {
-  font-weight: bold;
-}
-em {
-  font-style: italic;
-}
-cite {
-  font-style: normal;
-}
-.muted {
-  color: #999999;
-}
-a.muted:hover,
-a.muted:focus {
-  color: #808080;
-}
-.text-warning {
-  color: #aa7d29;
-}
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #815f1f;
-}
-.text-error {
-  color: #b85355;
-}
-a.text-error:hover,
-a.text-error:focus {
-  color: #993f41;
-}
-.text-info {
-  color: #4e7b86;
-}
-a.text-info:hover,
-a.text-info:focus {
-  color: #3b5d66;
-}
-.text-success {
-  color: #5c8846;
-}
-a.text-success:hover,
-a.text-success:focus {
-  color: #456635;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin: 10px 0;
-  font-family: inherit;
-  font-weight: bold;
-  line-height: 20px;
-  color: inherit;
-  text-rendering: optimizelegibility;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small {
-  font-weight: normal;
-  line-height: 1;
-  color: #999999;
-}
-h1,
-h2,
-h3 {
-  line-height: 40px;
-}
-h1 {
-  font-size: 35.75px;
-}
-h2 {
-  font-size: 29.25px;
-}
-h3 {
-  font-size: 22.75px;
-}
-h4 {
-  font-size: 16.25px;
-}
-h5 {
-  font-size: 13px;
-}
-h6 {
-  font-size: 11.05px;
-}
-h1 small {
-  font-size: 22.75px;
-}
-h2 small {
-  font-size: 16.25px;
-}
-h3 small {
-  font-size: 13px;
-}
-h4 small {
-  font-size: 13px;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 20px 0 30px;
-  border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
-  padding: 0;
-  margin: 0 0 10px 25px;
-}
-ul ul,
-ul ol,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-li {
-  line-height: 20px;
-}
-ul.unstyled,
-ol.unstyled {
-  margin-left: 0;
-  list-style: none;
-}
-ul.inline,
-ol.inline {
-  margin-left: 0;
-  list-style: none;
-}
-ul.inline > li,
-ol.inline > li {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-dl {
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 20px;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 10px;
-}
-.dl-horizontal {
-  *zoom: 1;
-}
-.dl-horizontal:before,
-.dl-horizontal:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.dl-horizontal:after {
-  clear: both;
-}
-.dl-horizontal dt {
-  float: left;
-  width: 160px;
-  clear: left;
-  text-align: right;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.dl-horizontal dd {
-  margin-left: 180px;
-}
-hr {
-  margin: 20px 0;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-  border-bottom: 1px solid #ffffff;
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #999999;
-}
-abbr.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 0 0 0 15px;
-  margin: 0 0 20px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p {
-  margin-bottom: 0;
-  font-size: 16.25px;
-  font-weight: 300;
-  line-height: 1.25;
-}
-blockquote small {
-  display: block;
-  line-height: 20px;
-  color: #999999;
-}
-blockquote small:before {
-  content: '\2014 \00A0';
-}
-blockquote.pull-right {
-  float: right;
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-}
-blockquote.pull-right p,
-blockquote.pull-right small {
-  text-align: right;
-}
-blockquote.pull-right small:before {
-  content: '';
-}
-blockquote.pull-right small:after {
-  content: '\00A0 \2014';
-}
-q:before,
-q:after,
-blockquote:before,
-blockquote:after {
-  content: "";
-}
-address {
-  display: block;
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 20px;
-}
-code,
-pre {
-  padding: 0 3px 2px;
-  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
-  font-size: 11px;
-  color: #444444;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-code {
-  padding: 2px 4px;
-  color: #d14;
-  background-color: #f7f7f9;
-  border: 1px solid #e1e1e8;
-  white-space: nowrap;
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 12px;
-  line-height: 20px;
-  word-break: break-all;
-  word-wrap: break-word;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-pre.prettyprint {
-  margin-bottom: 20px;
-}
-pre code {
-  padding: 0;
-  color: inherit;
-  white-space: pre;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-form {
-  margin: 0 0 20px;
-}
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 19.5px;
-  line-height: 40px;
-  color: #444444;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-legend small {
-  font-size: 15px;
-  color: #999999;
-}
-label,
-input,
-button,
-select,
-textarea {
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 20px;
-}
-input,
-button,
-select,
-textarea {
-  font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-label {
-  display: block;
-  margin-bottom: 5px;
-}
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  display: inline-block;
-  height: 20px;
-  padding: 4px 6px;
-  margin-bottom: 10px;
-  font-size: 13px;
-  line-height: 20px;
-  color: #555555;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  vertical-align: middle;
-}
-input,
-textarea,
-.uneditable-input {
-  width: 206px;
-}
-textarea {
-  height: auto;
-}
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
-  background-color: #ffffff;
-  border: 1px solid #c4c4c4;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border linear .2s, box-shadow linear .2s;
-  -moz-transition: border linear .2s, box-shadow linear .2s;
-  -o-transition: border linear .2s, box-shadow linear .2s;
-  transition: border linear .2s, box-shadow linear .2s;
-}
-textarea:focus,
-input[type="text"]:focus,
-input[type="password"]:focus,
-input[type="datetime"]:focus,
-input[type="datetime-local"]:focus,
-input[type="date"]:focus,
-input[type="month"]:focus,
-input[type="time"]:focus,
-input[type="week"]:focus,
-input[type="number"]:focus,
-input[type="email"]:focus,
-input[type="url"]:focus,
-input[type="search"]:focus,
-input[type="tel"]:focus,
-input[type="color"]:focus,
-.uneditable-input:focus {
-  border-color: rgba(82, 168, 236, 0.8);
-  outline: 0;
-  outline: thin dotted \9;
-  /* IE6-9 */
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  *margin-top: 0;
-  /* IE7 */
-  margin-top: 1px \9;
-  /* IE8-9 */
-  line-height: normal;
-}
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
-  width: auto;
-}
-select,
-input[type="file"] {
-  height: 30px;
-  /* In IE7, the height of the select element cannot be changed by height, only font-size */
-  *margin-top: 4px;
-  /* For IE7, add top margin to align select with labels */
-  line-height: 30px;
-}
-select {
-  width: 220px;
-  border: 1px solid #c4c4c4;
-  background-color: #ffffff;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-select:focus,
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.uneditable-input,
-.uneditable-textarea {
-  color: #999999;
-  background-color: #fcfcfc;
-  border-color: #c4c4c4;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-  cursor: not-allowed;
-}
-.uneditable-input {
-  overflow: hidden;
-  white-space: nowrap;
-}
-.uneditable-textarea {
-  width: auto;
-  height: auto;
-}
-input:-moz-placeholder,
-textarea:-moz-placeholder {
-  color: #999999;
-}
-input:-ms-input-placeholder,
-textarea:-ms-input-placeholder {
-  color: #999999;
-}
-input::-webkit-input-placeholder,
-textarea::-webkit-input-placeholder {
-  color: #999999;
-}
-.radio,
-.checkbox {
-  min-height: 20px;
-  padding-left: 20px;
-}
-.radio input[type="radio"],
-.checkbox input[type="checkbox"] {
-  float: left;
-  margin-left: -20px;
-}
-.controls > .radio:first-child,
-.controls > .checkbox:first-child {
-  padding-top: 5px;
-}
-.radio.inline,
-.checkbox.inline {
-  display: inline-block;
-  padding-top: 5px;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.radio.inline + .radio.inline,
-.checkbox.inline + .checkbox.inline {
-  margin-left: 10px;
-}
-.input-mini {
-  width: 60px;
-}
-.input-small {
-  width: 90px;
-}
-.input-medium {
-  width: 150px;
-}
-.input-large {
-  width: 210px;
-}
-.input-xlarge {
-  width: 270px;
-}
-.input-xxlarge {
-  width: 530px;
-}
-input[class*="span"],
-select[class*="span"],
-textarea[class*="span"],
-.uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"] {
-  float: none;
-  margin-left: 0;
-}
-.input-append input[class*="span"],
-.input-append .uneditable-input[class*="span"],
-.input-prepend input[class*="span"],
-.input-prepend .uneditable-input[class*="span"],
-.row-fluid input[class*="span"],
-.row-fluid select[class*="span"],
-.row-fluid textarea[class*="span"],
-.row-fluid .uneditable-input[class*="span"],
-.row-fluid .input-prepend [class*="span"],
-.row-fluid .input-append [class*="span"] {
-  display: inline-block;
-}
-input,
-textarea,
-.uneditable-input {
-  margin-left: 0;
-}
-.controls-row [class*="span"] + [class*="span"] {
-  margin-left: 30px;
-}
-input.span12,
-textarea.span12,
-.uneditable-input.span12 {
-  width: 856px;
-}
-input.span11,
-textarea.span11,
-.uneditable-input.span11 {
-  width: 781px;
-}
-input.span10,
-textarea.span10,
-.uneditable-input.span10 {
-  width: 706px;
-}
-input.span9,
-textarea.span9,
-.uneditable-input.span9 {
-  width: 631px;
-}
-input.span8,
-textarea.span8,
-.uneditable-input.span8 {
-  width: 556px;
-}
-input.span7,
-textarea.span7,
-.uneditable-input.span7 {
-  width: 481px;
-}
-input.span6,
-textarea.span6,
-.uneditable-input.span6 {
-  width: 406px;
-}
-input.span5,
-textarea.span5,
-.uneditable-input.span5 {
-  width: 331px;
-}
-input.span4,
-textarea.span4,
-.uneditable-input.span4 {
-  width: 256px;
-}
-input.span3,
-textarea.span3,
-.uneditable-input.span3 {
-  width: 181px;
-}
-input.span2,
-textarea.span2,
-.uneditable-input.span2 {
-  width: 106px;
-}
-input.span1,
-textarea.span1,
-.uneditable-input.span1 {
-  width: 31px;
-}
-.controls-row {
-  *zoom: 1;
-}
-.controls-row:before,
-.controls-row:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.controls-row:after {
-  clear: both;
-}
-.controls-row [class*="span"],
-.row-fluid .controls-row [class*="span"] {
-  float: left;
-}
-.controls-row .checkbox[class*="span"],
-.controls-row .radio[class*="span"] {
-  padding-top: 5px;
-}
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
-  cursor: not-allowed;
-  background-color: #eeeeee;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"][readonly],
-input[type="checkbox"][readonly] {
-  background-color: transparent;
-}
-.control-group.warning .control-label,
-.control-group.warning .help-block,
-.control-group.warning .help-inline {
-  color: #aa7d29;
-}
-.control-group.warning .checkbox,
-.control-group.warning .radio,
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  color: #aa7d29;
-}
-.control-group.warning input,
-.control-group.warning select,
-.control-group.warning textarea {
-  border-color: #aa7d29;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.warning input:focus,
-.control-group.warning select:focus,
-.control-group.warning textarea:focus {
-  border-color: #815f1f;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d9af60;
-}
-.control-group.warning .input-prepend .add-on,
-.control-group.warning .input-append .add-on {
-  color: #aa7d29;
-  background-color: #fcf8e3;
-  border-color: #aa7d29;
-}
-.control-group.error .control-label,
-.control-group.error .help-block,
-.control-group.error .help-inline {
-  color: #b85355;
-}
-.control-group.error .checkbox,
-.control-group.error .radio,
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  color: #b85355;
-}
-.control-group.error input,
-.control-group.error select,
-.control-group.error textarea {
-  border-color: #b85355;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.error input:focus,
-.control-group.error select:focus,
-.control-group.error textarea:focus {
-  border-color: #993f41;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d69b9c;
-}
-.control-group.error .input-prepend .add-on,
-.control-group.error .input-append .add-on {
-  color: #b85355;
-  background-color: #f2dede;
-  border-color: #b85355;
-}
-.control-group.success .control-label,
-.control-group.success .help-block,
-.control-group.success .help-inline {
-  color: #5c8846;
-}
-.control-group.success .checkbox,
-.control-group.success .radio,
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  color: #5c8846;
-}
-.control-group.success input,
-.control-group.success select,
-.control-group.success textarea {
-  border-color: #5c8846;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.success input:focus,
-.control-group.success select:focus,
-.control-group.success textarea:focus {
-  border-color: #456635;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #8fba7a;
-}
-.control-group.success .input-prepend .add-on,
-.control-group.success .input-append .add-on {
-  color: #5c8846;
-  background-color: #dff0d8;
-  border-color: #5c8846;
-}
-.control-group.info .control-label,
-.control-group.info .help-block,
-.control-group.info .help-inline {
-  color: #4e7b86;
-}
-.control-group.info .checkbox,
-.control-group.info .radio,
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  color: #4e7b86;
-}
-.control-group.info input,
-.control-group.info select,
-.control-group.info textarea {
-  border-color: #4e7b86;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.control-group.info input:focus,
-.control-group.info select:focus,
-.control-group.info textarea:focus {
-  border-color: #3b5d66;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #83adb7;
-}
-.control-group.info .input-prepend .add-on,
-.control-group.info .input-append .add-on {
-  color: #4e7b86;
-  background-color: #d9edf7;
-  border-color: #4e7b86;
-}
-input:focus:invalid,
-textarea:focus:invalid,
-select:focus:invalid {
-  color: #b94a48;
-  border-color: #ee5f5b;
-}
-input:focus:invalid:focus,
-textarea:focus:invalid:focus,
-select:focus:invalid:focus {
-  border-color: #e9322d;
-  -webkit-box-shadow: 0 0 6px #f8b9b7;
-  -moz-box-shadow: 0 0 6px #f8b9b7;
-  box-shadow: 0 0 6px #f8b9b7;
-}
-.form-actions {
-  padding: 19px 20px 20px;
-  margin-top: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #e5e5e5;
-  *zoom: 1;
-}
-.form-actions:before,
-.form-actions:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.form-actions:after {
-  clear: both;
-}
-.help-block,
-.help-inline {
-  color: #6a6a6a;
-}
-.help-block {
-  display: block;
-  margin-bottom: 10px;
-}
-.help-inline {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  vertical-align: middle;
-  padding-left: 5px;
-}
-.input-append,
-.input-prepend {
-  display: inline-block;
-  margin-bottom: 10px;
-  vertical-align: middle;
-  font-size: 0;
-  white-space: nowrap;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input,
-.input-append .dropdown-menu,
-.input-prepend .dropdown-menu,
-.input-append .popover,
-.input-prepend .popover {
-  font-size: 13px;
-}
-.input-append input,
-.input-prepend input,
-.input-append select,
-.input-prepend select,
-.input-append .uneditable-input,
-.input-prepend .uneditable-input {
-  position: relative;
-  margin-bottom: 0;
-  *margin-left: 0;
-  vertical-align: top;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append input:focus,
-.input-prepend input:focus,
-.input-append select:focus,
-.input-prepend select:focus,
-.input-append .uneditable-input:focus,
-.input-prepend .uneditable-input:focus {
-  z-index: 2;
-}
-.input-append .add-on,
-.input-prepend .add-on {
-  display: inline-block;
-  width: auto;
-  height: 20px;
-  min-width: 16px;
-  padding: 4px 5px;
-  font-size: 13px;
-  font-weight: normal;
-  line-height: 20px;
-  text-align: center;
-  text-shadow: 0 1px 0 #ffffff;
-  background-color: #eeeeee;
-  border: 1px solid #ccc;
-}
-.input-append .add-on,
-.input-prepend .add-on,
-.input-append .btn,
-.input-prepend .btn,
-.input-append .btn-group > .dropdown-toggle,
-.input-prepend .btn-group > .dropdown-toggle {
-  vertical-align: top;
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.input-append .active,
-.input-prepend .active {
-  background-color: #a9dba9;
-  border-color: #46a546;
-}
-.input-prepend .add-on,
-.input-prepend .btn {
-  margin-right: -1px;
-}
-.input-prepend .add-on:first-child,
-.input-prepend .btn:first-child {
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append input,
-.input-append select,
-.input-append .uneditable-input {
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-append input + .btn-group .btn:last-child,
-.input-append select + .btn-group .btn:last-child,
-.input-append .uneditable-input + .btn-group .btn:last-child {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-append .add-on,
-.input-append .btn,
-.input-append .btn-group {
-  margin-left: -1px;
-}
-.input-append .add-on:last-child,
-.input-append .btn:last-child,
-.input-append .btn-group:last-child > .dropdown-toggle {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append input,
-.input-prepend.input-append select,
-.input-prepend.input-append .uneditable-input {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.input-prepend.input-append input + .btn-group .btn,
-.input-prepend.input-append select + .btn-group .btn,
-.input-prepend.input-append .uneditable-input + .btn-group .btn {
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append .add-on:first-child,
-.input-prepend.input-append .btn:first-child {
-  margin-right: -1px;
-  -webkit-border-radius: 3px 0 0 3px;
-  -moz-border-radius: 3px 0 0 3px;
-  border-radius: 3px 0 0 3px;
-}
-.input-prepend.input-append .add-on:last-child,
-.input-prepend.input-append .btn:last-child {
-  margin-left: -1px;
-  -webkit-border-radius: 0 3px 3px 0;
-  -moz-border-radius: 0 3px 3px 0;
-  border-radius: 0 3px 3px 0;
-}
-.input-prepend.input-append .btn-group:first-child {
-  margin-left: 0;
-}
-input.search-query {
-  padding-right: 14px;
-  padding-right: 4px \9;
-  padding-left: 14px;
-  padding-left: 4px \9;
-  /* IE7-8 doesn't have border-radius, so don't indent the padding */
-  margin-bottom: 0;
-  -webkit-border-radius: 15px;
-  -moz-border-radius: 15px;
-  border-radius: 15px;
-}
-/* Allow for input prepend/append in search forms */
-.form-search .input-append .search-query,
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0;
-  -moz-border-radius: 0;
-  border-radius: 0;
-}
-.form-search .input-append .search-query {
-  -webkit-border-radius: 14px 0 0 14px;
-  -moz-border-radius: 14px 0 0 14px;
-  border-radius: 14px 0 0 14px;
-}
-.form-search .input-append .btn {
-  -webkit-border-radius: 0 14px 14px 0;
-  -moz-border-radius: 0 14px 14px 0;
-  border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .search-query {
-  -webkit-border-radius: 0 14px 14px 0;
-  -moz-border-radius: 0 14px 14px 0;
-  border-radius: 0 14px 14px 0;
-}
-.form-search .input-prepend .btn {
-  -webkit-border-radius: 14px 0 0 14px;
-  -moz-border-radius: 14px 0 0 14px;
-  border-radius: 14px 0 0 14px;
-}
-.form-search input,
-.form-inline input,
-.form-horizontal input,
-.form-search textarea,
-.form-inline textarea,
-.form-horizontal textarea,
-.form-search select,
-.form-inline select,
-.form-horizontal select,
-.form-search .help-inline,
-.form-inline .help-inline,
-.form-horizontal .help-inline,
-.form-search .uneditable-input,
-.form-inline .uneditable-input,
-.form-horizontal .uneditable-input,
-.form-search .input-prepend,
-.form-inline .input-prepend,
-.form-horizontal .input-prepend,
-.form-search .input-append,
-.form-inline .input-append,
-.form-horizontal .input-append {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.form-search .hide,
-.form-inline .hide,
-.form-horizontal .hide {
-  display: none;
-}
-.form-search label,
-.form-inline label,
-.form-search .btn-group,
-.form-inline .btn-group {
-  display: inline-block;
-}
-.form-search .input-append,
-.form-inline .input-append,
-.form-search .input-prepend,
-.form-inline .input-prepend {
-  margin-bottom: 0;
-}
-.form-search .radio,
-.form-search .checkbox,
-.form-inline .radio,
-.form-inline .checkbox {
-  padding-left: 0;
-  margin-bottom: 0;
-  vertical-align: middle;
-}
-.form-search .radio input[type="radio"],
-.form-search .checkbox input[type="checkbox"],
-.form-inline .radio input[type="radio"],
-.form-inline .checkbox input[type="checkbox"] {
-  float: left;
-  margin-right: 3px;
-  margin-left: 0;
-}
-.control-group {
-  margin-bottom: 10px;
-}
-legend + .control-group {
-  margin-top: 20px;
-  -webkit-margin-top-collapse: separate;
-}
-.form-horizontal .control-group {
-  margin-bottom: 20px;
-  *zoom: 1;
-}
-.form-horizontal .control-group:before,
-.form-horizontal .control-group:after {
-  display: table;
-  content: "";
-  line-height: 0;
-}
-.form-horizontal .control-group:after {
-  clear: both;
-}
-.form-horizontal .control-label {
-  float: left;
-  width: 160px;
-  padding-top: 5px;
-  text-align: right;
-}
-.form-horizontal .controls {
-  *display: inline-block;
-  *padding-left: 20px;
-  margin-left: 180px;
-  *margin-left: 0;
-}
-.form-horizontal .controls:first-child {
-  *padding-left: 180px;
-}
-.form-horizontal .help-block {
-  margin-bottom: 0;
-}
-.form-horizontal input + .help-block,
-.form-horizontal select + .help-block,
-.form-horizontal textarea + .help-block,
-.form-horizontal .uneditable-input + .help-block,
-.form-horizontal .input-prepend + .help-block,
-.form-horizontal .input-append + .help-block {
-  margin-top: 10px;
-}
-.form-horizontal .form-actions {
-  padding-left: 180px;
-}
-table {
-  max-width: 100%;
-  background-color: transparent;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-.table {
-  width: 100%;
-  margin-bottom: 20px;
-}
-.table th,
-.table td {
-  padding: 8px;
-  line-height: 20px;
-  text-align: left;
-  vertical-align: top;
-  border-top: 1px solid #dddddd;
-}
-.table th {
-  font-weight: bold;
-}
-.table thead th {
-  vertical-align: bottom;
-}
-.table caption + thead tr:first-child th,
-.table caption + thead tr:first-child td,
-.table colgroup + thead tr:first-child th,
-.table colgroup + thead tr:first-child td,
-.table thead:first-child tr:first-child th,
-.table thead:first-child tr:first-child td {
-  border-top: 0;
-}
-.table tbody + tbody {
-  border-top: 2px solid #dddddd;
-}
-.table .table {
-  background-color: #f1f1f1;
-}
-.table-condensed th,
-.table-condensed td {
-  padding: 4px 5px;
-}
-.table-bordered {
-  border: 1px solid #dddddd;
-  border-collapse: separate;
-  *border-collapse: collapse;
-  border-left: 0;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.table-bordered th,
-.table-bordered td {
-  border-left: 1px solid #dddddd;
-}
-.table-bordered caption + thead tr:first-child th,
-.table-bordered caption + tbody tr:first-child th,
-.table-bordered caption + tbody tr:first-child td,
-.table-bordered colgroup + thead tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child th,
-.table-bordered colgroup + tbody tr:first-child td,
-.table-bordered thead:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child th,
-.table-bordered tbody:first-child tr:first-child td {
-  border-top: 0;
-}
-.table-bordered thead:first-child tr:first-child > th:first-child,
-.table-bordered tbody:first-child tr:first-child > td:first-child,
-.table-bordered tbody:first-child tr:first-child > th:first-child {
-  -webkit-border-top-left-radius: 3px;
-  -moz-border-radius-topleft: 3px;
-  border-top-left-radius: 3px;
-}
-.table-bordered thead:first-child tr:first-child > th:last-child,
-.table-bordered tbody:first-child tr:first-child > td:last-child,
-.table-bordered tbody:first-child tr:first-child > th:last-child {
-  -webkit-border-top-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  border-top-right-radius: 3px;
-}
-.table-bordered thead:last-child tr:last-child > th:first-child,
-.table-bordered tbody:last-child tr:last-child > td:first-child,
-.table-bordered tbody:last-child tr:last-child > th:first-child,
-.table-bordered tfoot:last-child tr:last-child > td:first-child,
-.table-bordered tfoot:last-child tr:last-child > th:first-child {
-  -webkit-border-bottom-left-radius: 3px;
-  -moz-border-radius-bottomleft: 3px;
-  border-bottom-left-radius: 3px;
-}
-.table-bordered thead:last-child tr:last-child > th:last-child,
-.table-bordered tbody:last-child tr:last-child > td:last-child,
-.table-bordered tbody:last-child tr:last-child > th:last-child,
-.table-bordered tfoot:last-child tr:last-child > td:last-child,
-.table-bordered tfoot:last-child tr:last-child > th:last-child {
-  -webkit-border-bottom-right-radius: 3px;
-  -moz-border-radius-bottomright: 3px;
-  border-bottom-right-radius: 3px;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
-  -webkit-border-bottom-left-radius: 0;
-  -moz-border-radius-bottomleft: 0;
-  border-bottom-left-radius: 0;
-}
-.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
-  -webkit-border-bottom-right-radius: 0;
-  -moz-border-radius-bottomright: 0;
-  border-bottom-right-radius: 0;
-}
-.table-bordered caption + thead tr:first-child th:first-child,
-.table-bordered caption + tbody tr:first-child td:first-child,
-.table-bordered colgroup + thead tr:first-child th:first-child,
-.table-bordered colgroup + tbody tr:first-child td:first-child {
-  -webkit-border-top-left-radius: 3px;
-  -moz-border-radius-topleft: 3px;
-  border-top-left-radius: 3px;
-}
-.table-bordered caption + thead tr:first-child th:last-child,
-.table-bordered caption + tbody tr:first-child td:last-child,
-.table-bordered colgroup + thead tr:first-child th:last-child,
-.table-bordered colgroup + tbody tr:first-child td:last-child {
-  -webkit-border-top-right-radius: 3px;
-  -moz-border-radius-topright: 3px;
-  border-top-right-radius: 3px;
-}
-.table-striped tbody > tr:nth-child(odd) > td,
-.table-striped tbody > tr:nth-child(odd) > th {
-  background-color: #f9f9f9;
-}
-.table-hover tbody tr:hover > td,
-.table-hover tbody tr:hover > th {
-  background-color: #f5f5f5;
-}
-table td[class*="span"],
-table th[class*="span"],
-.row-fluid table td[class*="span"],
-.row-fluid table th[class*="span"] {
-  display: table-cell;
-  float: none;
-  margin-left: 0;
-}
-.table td.span1,
-.table th.span1 {
-  float: none;
-  width: 29px;
-  margin-left: 0;
-}
-.table td.span2,
-.table th.span2 {
-  float: none;
-  width: 104px;
-  margin-left: 0;
-}
-.table td.span3,
-.table th.span3 {
-  float: none;
-  width: 179px;
-  margin-left: 0;
-}
-.table td.span4,
-.table th.span4 {
-  float: none;
-  width: 254px;
-  margin-left: 0;
-}
-.table td.span5,
-.table th.span5 {
-  float: none;
-  width: 329px;
-  margin-left: 0;
-}
-.table td.span6,
-.table th.span6 {
-  float: none;
-  width: 404px;
-  margin-left: 0;
-}
-.table td.span7,
-.table th.span7 {
-  float: none;
-  width: 479px;
-  margin-left: 0;
-}
-.table td.span8,
-.table th.span8 {
-  float: none;
-  width: 554px;
-  margin-left: 0;
-}
-.table td.span9,
-.table th.span9 {
-  float: none;
-  width: 629px;
-  margin-left: 0;
-}
-.table td.span10,
-.table th.span10 {
-  float: none;
-  width: 704px;
-  margin-left: 0;
-}
-.table td.span11,
-.table th.span11 {
-  float: none;
-  width: 779px;
-  margin-left: 0;
-}
-.table td.span12,
-.table th.span12 {
-  float: none;
-  width: 854px;
-  margin-left: 0;
-}
-.table tbody tr.success > td {
-  background-color: #dff0d8;
-}
-.table tbody tr.error > td {
-  background-color: #f2dede;
-}
-.table tbody tr.warning > td {
-  background-color: #fcf8e3;
-}
-.table tbody tr.info > td {
-  background-color: #d9edf7;
-}
-.table-hover tbody tr.success:hover > td {
-  background-color: #d0e9c6;
-}
-.table-hover tbody tr.error:hover > td {
-  background-color: #ebcccc;
-}
-.table-hover tbody tr.warning:hover > td {
-  background-color: #faf2cc;
-}
-.table-hover tbody tr.info:hover > td {
-  background-color: #c4e3f3;
-}
-/*!
- *  Font Awesome 3.2.1
- *  the iconic font designed for Bootstrap
- *  ------------------------------------------------------------------------------
- *  The full suite of pictographic icons, examples, and documentation can be
- *  found at http://fontawesome.io.  Stay up to date on Twitter at
- *  http://twitter.com/fontawesome.
- *
- *  License
- *  ------------------------------------------------------------------------------
- *  - The Font Awesome font is licensed under SIL OFL 1.1 -
- *    http://scripts.sil.org/OFL
- *  - Font Awesome CSS, LESS, and SASS files are licensed under MIT License -
- *    http://opensource.org/licenses/mit-license.html
- *  - Font Awesome documentation licensed under CC BY 3.0 -
- *    http://creativecommons.org/licenses/by/3.0/
- *  - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
- *    "Font Awesome by Dave Gandy - http://fontawesome.io"
- *
- *  Author - Dave Gandy
- *  ------------------------------------------------------------------------------
- *  Email: dave@fontawesome.io
- *  Twitter: http://twitter.com/davegandy
- *  Work: Lead Product Designer @ Kyruus - http://kyruus.com
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('../fonts/fontawesome/fontawesome-webfont.eot?v=3.2.1');
-  src: url('../fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'), url('../fonts/fontawesome/fontawesome-webfont.woff?v=3.2.1') format('woff'), url('../fonts/fontawesome/fontawesome-webfont.ttf?v=3.2.1') format('truetype'), url('../fonts/fontawesome/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-/* FONT AWESOME CORE
- * -------------------------- */
-[class^="icon-"],
-[class*=" icon-"] {
-  font-family: FontAwesome;
-  font-weight: normal;
-  font-style: normal;
-  text-decoration: inherit;
-  -webkit-font-smoothing: antialiased;
-  *margin-right: .3em;
-}
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
-  text-decoration: inherit;
-  display: inline-block;
-  speak: none;
-}
-/* makes the font 33% larger relative to the icon container */
-.icon-large:before {
-  vertical-align: -10%;
-  font-size: 1.33333333em;
-}
-/* makes sure icons active on rollover in links */
-a [class^="icon-"],
-a [class*=" icon-"] {
-  display: inline;
-}
-/* increased font size for icon-large */
-[class^="icon-"].icon-fixed-width,
-[class*=" icon-"].icon-fixed-width {
-  display: inline-block;
-  width: 1.14285714em;
-  text-align: right;
-  padding-right: 0.28571429em;
-}
-[class^="icon-"].icon-fixed-width.icon-large,
-[class*=" icon-"].icon-fixed-width.icon-large {
-  width: 1.42857143em;
-}
-.icons-ul {
-  margin-left: 2.14285714em;
-  list-style-type: none;
-}
-.icons-ul > li {
-  position: relative;
-}
-.icons-ul .icon-li {
-  position: absolute;
-  left: -2.14285714em;
-  width: 2.14285714em;
-  text-align: center;
-  line-height: inherit;
-}
-[class^="icon-"].hide,
-[class*=" icon-"].hide {
-  display: none;
-}
-.icon-muted {
-  color: #eeeeee;
-}
-.icon-light {
-  color: #ffffff;
-}
-.icon-dark {
-  color: #333333;
-}
-.icon-border {
-  border: solid 1px #eeeeee;
-  padding: .2em .25em .15em;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.icon-2x {
-  font-size: 2em;
-}
-.icon-2x.icon-border {
-  border-width: 2px;
-  -webkit-border-radius: 4px;
-  -moz-border-radius: 4px;
-  border-radius: 4px;
-}
-.icon-3x {
-  font-size: 3em;
-}
-.icon-3x.icon-border {
-  border-width: 3px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.icon-4x {
-  font-size: 4em;
-}
-.icon-4x.icon-border {
-  border-width: 4px;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-}
-.icon-5x {
-  font-size: 5em;
-}
-.icon-5x.icon-border {
-  border-width: 5px;
-  -webkit-border-radius: 7px;
-  -moz-border-radius: 7px;
-  border-radius: 7px;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-[class^="icon-"].pull-left,
-[class*=" icon-"].pull-left {
-  margin-right: .3em;
-}
-[class^="icon-"].pull-right,
-[class*=" icon-"].pull-right {
-  margin-left: .3em;
-}
-/* BOOTSTRAP SPECIFIC CLASSES
- * -------------------------- */
-/* Bootstrap 2.0 sprites.less reset */
-[class^="icon-"],
-[class*=" icon-"] {
-  display: inline;
-  width: auto;
-  height: auto;
-  line-height: normal;
-  vertical-align: baseline;
-  background-image: none;
-  background-position: 0% 0%;
-  background-repeat: repeat;
-  margin-top: 0;
-}
-/* more sprites.less reset */
-.icon-white,
-.nav-pills > .active > a > [class^="icon-"],
-.nav-pills > .active > a > [class*=" icon-"],
-.nav-list > .active > a > [class^="icon-"],
-.nav-list > .active > a > [class*=" icon-"],
-.navbar-inverse .nav > .active > a > [class^="icon-"],
-.navbar-inverse .nav > .active > a > [class*=" icon-"],
-.dropdown-menu > li > a:hover > [class^="icon-"],
-.dropdown-menu > li > a:hover > [class*=" icon-"],
-.dropdown-menu > .active > a > [class^="icon-"],
-.dropdown-menu > .active > a > [class*=" icon-"],
-.dropdown-submenu:hover > a > [class^="icon-"],
-.dropdown-submenu:hover > a > [class*=" icon-"] {
-  background-image: none;
-}
-/* keeps Bootstrap styles with and without icons the same */
-.btn [class^="icon-"].icon-large,
-.nav [class^="icon-"].icon-large,
-.btn [class*=" icon-"].icon-large,
-.nav [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].icon-spin,
-.nav [class^="icon-"].icon-spin,
-.btn [class*=" icon-"].icon-spin,
-.nav [class*=" icon-"].icon-spin {
-  display: inline-block;
-}
-.nav-tabs [class^="icon-"],
-.nav-pills [class^="icon-"],
-.nav-tabs [class*=" icon-"],
-.nav-pills [class*=" icon-"],
-.nav-tabs [class^="icon-"].icon-large,
-.nav-pills [class^="icon-"].icon-large,
-.nav-tabs [class*=" icon-"].icon-large,
-.nav-pills [class*=" icon-"].icon-large {
-  line-height: .9em;
-}
-.btn [class^="icon-"].pull-left.icon-2x,
-.btn [class*=" icon-"].pull-left.icon-2x,
-.btn [class^="icon-"].pull-right.icon-2x,
-.btn [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .18em;
-}
-.btn [class^="icon-"].icon-spin.icon-large,
-.btn [class*=" icon-"].icon-spin.icon-large {
-  line-height: .8em;
-}
-.btn.btn-small [class^="icon-"].pull-left.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-small [class^="icon-"].pull-right.icon-2x,
-.btn.btn-small [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .25em;
-}
-.btn.btn-large [class^="icon-"],
-.btn.btn-large [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x,
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-top: .05em;
-}
-.btn.btn-large [class^="icon-"].pull-left.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-left.icon-2x {
-  margin-right: .2em;
-}
-.btn.btn-large [class^="icon-"].pull-right.icon-2x,
-.btn.btn-large [class*=" icon-"].pull-right.icon-2x {
-  margin-left: .2em;
-}
-/* Fixes alignment in nav lists */
-.nav-list [class^="icon-"],
-.nav-list [class*=" icon-"] {
-  line-height: inherit;
-}
-/* EXTRAS
- * -------------------------- */
-/* Stacked and layered icon */
-.icon-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: -35%;
-}
-.icon-stack [class^="icon-"],
-.icon-stack [class*=" icon-"] {
-  display: block;
-  text-align: center;
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  font-size: 1em;
-  line-height: inherit;
-  *line-height: 2em;
-}
-.icon-stack .icon-stack-base {
-  font-size: 2em;
-  *line-height: 1em;
-}
-/* Animated rotating icon */
-.icon-spin {
-  display: inline-block;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  -webkit-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-/* Prevent stack and spinners from being taken inline when inside a link */
-a .icon-stack,
-a .icon-spin {
-  display: inline-block;
-  text-decoration: none;
-}
-@-moz-keyframes spin {
-  0% {
-    -moz-transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(359deg);
-  }
-}
-@-webkit-keyframes spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-  }
-}
-@-o-keyframes spin {
-  0% {
-    -o-transform: rotate(0deg);
-  }
-  100% {
-    -o-transform: rotate(359deg);
-  }
-}
-@-ms-keyframes spin {
-  0% {
-    -ms-transform: rotate(0deg);
-  }
-  100% {
-    -ms-transform: rotate(359deg);
-  }
-}
-@keyframes spin {
-  0% {
-    transform: rotate(0deg);
-  }
-  100% {
-    transform: rotate(359deg);
-  }
-}
-/* Icon rotations and mirroring */
-.icon-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-}
-.icon-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-}
-.icon-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-}
-.icon-flip-horizontal:before {
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.icon-flip-vertical:before {
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-/* ensure rotation occurs inside anchor tags */
-a .icon-rotate-90:before,
-a .icon-rotate-180:before,
-a .icon-rotate-270:before,
-a .icon-flip-horizontal:before,
-a .icon-flip-vertical:before {
-  display: inline-block;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.icon-glass:before {
-  content: "\f000";
-}
-.icon-music:before {
-  content: "\f001";
-}
-.icon-search:before {
-  content: "\f002";
-}
-.icon-envelope-alt:before {
-  content: "\f003";
-}
-.icon-heart:before {
-  content: "\f004";
-}
-.icon-star:before {
-  content: "\f005";
-}
-.icon-star-empty:before {
-  content: "\f006";
-}
-.icon-user:before {
-  content: "\f007";
-}
-.icon-film:before {
-  content: "\f008";
-}
-.icon-th-large:before {
-  content: "\f009";
-}
-.icon-th:before {
-  content: "\f00a";
-}
-.icon-th-list:before {
-  content: "\f00b";
-}
-.icon-ok:before {
-  content: "\f00c";
-}
-.icon-remove:before {
-  content: "\f00d";
-}
-.icon-zoom-in:before {
-  content: "\f00e";
-}
-.icon-zoom-out:before {
-  content: "\f010";
-}
-.icon-power-off:before,
-.icon-off:before {
-  content: "\f011";
-}
-.icon-signal:before {
-  content: "\f012";
-}
-.icon-gear:before,
-.icon-cog:before {
-  content: "\f013";
-}
-.icon-trash:before {
-  content: "\f014";
-}
-.icon-home:before {
-  content: "\f015";
-}
-.icon-file-alt:before {
-  content: "\f016";
-}
-.icon-time:before {
-  content: "\f017";
-}
-.icon-road:before {
-  content: "\f018";
-}
-.icon-download-alt:before {
-  content: "\f019";
-}
-.icon-download:before {
-  content: "\f01a";
-}
-.icon-upload:before {
-  content: "\f01b";
-}
-.icon-inbox:before {
-  content: "\f01c";
-}
-.icon-play-circle:before {
-  content: "\f01d";
-}
-.icon-rotate-right:before,
-.icon-repeat:before {
-  content: "\f01e";
-}
-.icon-refresh:before {
-  content: "\f021";
-}
-.icon-list-alt:before {
-  content: "\f022";
-}
-.icon-lock:before {
-  content: "\f023";
-}
-.icon-flag:before {
-  content: "\f024";
-}
-.icon-headphones:before {
-  content: "\f025";
-}
-.icon-volume-off:before {
-  content: "\f026";
-}
-.icon-volume-down:before {
-  content: "\f027";
-}
-.icon-volume-up:before {
-  content: "\f028";
-}
-.icon-qrcode:before {
-  content: "\f029";
-}
-.icon-barcode:before {
-  content: "\f02a";
-}
-.icon-tag:before {
-  content: "\f02b";
-}
-.icon-tags:before {
-  content: "\f02c";
-}
-.icon-book:before {
-  content: "\f02d";
-}
-.icon-bookmark:before {
-  content: "\f02e";
-}
-.icon-print:before {
-  content: "\f02f";
-}
-.icon-camera:before {
-  content: "\f030";
-}
-.icon-font:before {
-  content: "\f031";
-}
-.icon-bold:before {
-  content: "\f032";
-}
-.icon-italic:before {
-  content: "\f033";
-}
-.icon-text-height:before {
-  content: "\f034";
-}
-.icon-text-width:before {
-  content: "\f035";
-}
-.icon-align-left:before {
-  content: "\f036";
-}
-.icon-align-center:before {
-  content: "\f037";
-}
-.icon-align-right:before {
-  content: "\f038";
-}
-.icon-align-justify:before {
-  content: "\f039";
-}
-.icon-list:before {
-  content: "\f03a";
-}
-.icon-indent-left:before {
-  content: "\f03b";
-}
-.icon-indent-right:before {
-  content: "\f03c";
-}
-.icon-facetime-video:before {
-  content: "\f03d";
-}
-.icon-picture:before {
-  content: "\f03e";
-}
-.icon-pencil:before {
-  content: "\f040";
-}
-.icon-map-marker:before {
-  content: "\f041";
-}
-.icon-adjust:before {
-  content: "\f042";
-}
-.icon-tint:before {
-  content: "\f043";
-}
-.icon-edit:before {
-  content: "\f044";
-}
-.icon-share:before {
-  content: "\f045";
-}
-.icon-check:before {
-  content: "\f046";
-}
-.icon-move:before {
-  content: "\f047";
-}
-.icon-step-backward:before {
-  content: "\f048";
-}
-.icon-fast-backward:before {
-  content: "\f049";
-}
-.icon-backward:before {
-  content: "\f04a";
-}
-.icon-play:before {
-  content: "\f04b";
-}
-.icon-pause:before {
-  content: "\f04c";
-}
-.icon-stop:before {
-  content: "\f04d";
-}
-.icon-forward:before {
-  content: "\f04e";
-}
-.icon-fast-forward:before {
-  content: "\f050";
-}
-.icon-step-forward:before {
-  content: "\f051";
-}
-.icon-eject:before {
-  content: "\f052";
-}
-.icon-chevron-left:before {
-  content: "\f053";
-}
-.icon-chevron-right:before {
-  content: "\f054";
-}
-.icon-plus-sign:before {
-  content: "\f055";
-}
-.icon-minus-sign:before {
-  content: "\f056";
-}
-.icon-remove-sign:before {
-  content: "\f057";
-}
-.icon-ok-sign:before {
-  content: "\f058";
-}
-.icon-question-sign:before {
-  content: "\f059";
-}
-.icon-info-sign:before {
-  content: "\f05a";
-}
-.icon-screenshot:before {
-  content: "\f05b";
-}
-.icon-remove-circle:before {
-  content: "\f05c";
-}
-.icon-ok-circle:before {
-  content: "\f05d";
-}
-.icon-ban-circle:before {
-  content: "\f05e";
-}
-.icon-arrow-left:before {
-  content: "\f060";
-}
-.icon-arrow-right:before {
-  content: "\f061";
-}
-.icon-arrow-up:before {
-  content: "\f062";
-}
-.icon-arrow-down:before {
-  content: "\f063";
-}
-.icon-mail-forward:before,
-.icon-share-alt:before {
-  content: "\f064";
-}
-.icon-resize-full:before {
-  content: "\f065";
-}
-.icon-resize-small:before {
-  content: "\f066";
-}
-.icon-plus:before {
-  content: "\f067";
-}
-.icon-minus:before {
-  content: "\f068";
-}
-.icon-asterisk:before {
-  content: "\f069";
-}
-.icon-exclamation-sign:before {
-  content: "\f06a";
-}
-.icon-gift:before {
-  content: "\f06b";
-}
-.icon-leaf:before {
-  content: "\f06c";
-}
-.icon-fire:before {
-  content: "\f06d";
-}
-.icon-eye-open:before {
-  content: "\f06e";
-}
-.icon-eye-close:before {
-  content: "\f070";
-}
-.icon-warning-sign:before {
-  content: "\f071";
-}
-.icon-plane:before {
-  content: "\f072";
-}
-.icon-calendar:before {
-  content: "\f073";
-}
-.icon-random:before {
-  content: "\f074";
-}
-.icon-comment:before {
-  content: "\f075";
-}
-.icon-magnet:before {
-  content: "\f076";
-}
-.icon-chevron-up:before {
-  content: "\f077";
-}
-.icon-chevron-down:before {
-  content: "\f078";
-}
-.icon-retweet:before {
-  content: "\f079";
-}
-.icon-shopping-cart:before {
-  content: "\f07a";
-}
-.icon-folder-close:before {
-  content: "\f07b";
-}
-.icon-folder-open:before {
-  content: "\f07c";
-}
-.icon-resize-vertical:before {
-  content: "\f07d";
-}
-.icon-resize-horizontal:before {
-  content: "\f07e";
-}
-.icon-bar-chart:before {
-  content: "\f080";
-}
-.icon-twitter-sign:before {
-  content: "\f081";
-}
-.icon-facebook-sign:before {
-  content: "\f082";
-}
-.icon-camera-retro:before {
-  content: "\f083";
-}
-.icon-key:before {
-  content: "\f084";
-}
-.icon-gears:before,
-.icon-cogs:before {
-  content: "\f085";
-}
-.icon-comments:before {
-  content: "\f086";
-}
-.icon-thumbs-up-alt:before {
-  content: "\f087";
-}
-.icon-thumbs-down-alt:before {
-  content: "\f088";
-}
-.icon-star-half:before {
-  content: "\f089";
-}
-.icon-heart-empty:before {
-  content: "\f08a";
-}
-.icon-signout:before {
-  content: "\f08b";
-}
-.icon-linkedin-sign:before {
-  content: "\f08c";
-}
-.icon-pushpin:before {
-  content: "\f08d";
-}
-.icon-external-link:before {
-  content: "\f08e";
-}
-.icon-signin:before {
-  content: "\f090";
-}
-.icon-trophy:before {
-  content: "\f091";
-}
-.icon-github-sign:before {
-  content: "\f092";
-}
-.icon-upload-alt:before {
-  content: "\f093";
-}
-.icon-lemon:before {
-  content: "\f094";
-}
-.icon-phone:before {
-  content: "\f095";
-}
-.icon-unchecked:before,
-.icon-check-empty:before {
-  content: "\f096";
-}
-.icon-bookmark-empty:before {
-  content: "\f097";
-}
-.icon-phone-sign:before {
-  content: "\f098";
-}
-.icon-twitter:before {
-  content: "\f099";
-}
-.icon-facebook:before {
-  content: "\f09a";
-}
-.icon-github:before {
-  content: "\f09b";
-}
-.icon-unlock:before {
-  content: "\f09c";
-}
-.icon-credit-card:before {
-  content: "\f09d";
-}
-.icon-rss:before {
-  content: "\f09e";
-}
-.icon-hdd:before {
-  content: "\f0a0";
-}
-.icon-bullhorn:before {
-  content: "\f0a1";
-}
-.icon-bell:before {
-  content: "\f0a2";
-}
-.icon-certificate:before {
-  content: "\f0a3";
-}
-.icon-hand-right:before {
-  content: "\f0a4";
-}
-.icon-hand-left:before {
-  content: "\f0a5";
-}
-.icon-hand-up:before {
-  content: "\f0a6";
-}
-.icon-hand-down:before {
-  content: "\f0a7";
-}
-.icon-circle-arrow-left:before {
-  content: "\f0a8";
-}
-.icon-circle-arrow-right:before {
-  content: "\f0a9";
-}
-.icon-circle-arrow-up:before {
-  content: "\f0aa";
-}
-.icon-circle-arrow-down:before {
-  content: "\f0ab";
-}
-.icon-globe:before {
-  content: "\f0ac";
-}
-.icon-wrench:before {
-  content: "\f0ad";
-}
-.icon-tasks:before {
-  content: "\f0ae";
-}
-.icon-filter:before {
-  content: "\f0b0";
-}
-.icon-briefcase:before {
-  content: "\f0b1";
-}
-.icon-fullscreen:before {
-  content: "\f0b2";
-}
-.icon-group:before {
-  content: "\f0c0";
-}
-.icon-link:before {
-  content: "\f0c1";
-}
-.icon-cloud:before {
-  content: "\f0c2";
-}
-.icon-beaker:before {
-  content: "\f0c3";
-}
-.icon-cut:before {
-  content: "\f0c4";
-}
-.icon-copy:before {
-  content: "\f0c5";
-}
-.icon-paperclip:before,
-.icon-paper-clip:before {
-  content: "\f0c6";
-}
-.icon-save:before {
-  content: "\f0c7";
-}
-.icon-sign-blank:before {
-  content: "\f0c8";
-}
-.icon-reorder:before {
-  content: "\f0c9";
-}
-.icon-list-ul:before {
-  content: "\f0ca";
-}
-.icon-list-ol:before {
-  content: "\f0cb";
-}
-.icon-strikethrough:before {
-  content: "\f0cc";
-}
-.icon-underline:before {
-  content: "\f0cd";
-}
-.icon-table:before {
-  content: "\f0ce";
-}
-.icon-magic:before {
-  content: "\f0d0";
-}
-.icon-truck:before {
-  content: "\f0d1";
-}
-.icon-pinterest:before {
-  content: "\f0d2";
-}
-.icon-pinterest-sign:before {
-  content: "\f0d3";
-}
-.icon-google-plus-sign:before {
-  content: "\f0d4";
-}
-.icon-google-plus:before {
-  content: "\f0d5";
-}
-.icon-money:before {
-  content: "\f0d6";
-}
-.icon-caret-down:before {
-  content: "\f0d7";
-}
-.icon-caret-up:before {
-  content: "\f0d8";
-}
-.icon-caret-left:before {
-  content: "\f0d9";
-}
-.icon-caret-right:before {
-  content: "\f0da";
-}
-.icon-columns:before {
-  content: "\f0db";
-}
-.icon-sort:before {
-  content: "\f0dc";
-}
-.icon-sort-down:before {
-  content: "\f0dd";
-}
-.icon-sort-up:before {
-  content: "\f0de";
-}
-.icon-envelope:before {
-  content: "\f0e0";
-}
-.icon-linkedin:before {
-  content: "\f0e1";
-}
-.icon-rotate-left:before,
-.icon-undo:before {
-  content: "\f0e2";
-}
-.icon-legal:before {
-  content: "\f0e3";
-}
-.icon-dashboard:before {
-  content: "\f0e4";
-}
-.icon-comment-alt:before {
-  content: "\f0e5";
-}
-.icon-comments-alt:before {
-  content: "\f0e6";
-}
-.icon-bolt:before {
-  content: "\f0e7";
-}
-.icon-sitemap:before {
-  content: "\f0e8";
-}
-.icon-umbrella:before {
-  content: "\f0e9";
-}
-.icon-paste:before {
-  content: "\f0ea";
-}
-.icon-lightbulb:before {
-  content: "\f0eb";
-}
-.icon-exchange:before {
-  content: "\f0ec";
-}
-.icon-cloud-download:before {
-  content: "\f0ed";
-}
-.icon-cloud-upload:before {
-  content: "\f0ee";
-}
-.icon-user-md:before {
-  content: "\f0f0";
-}
-.icon-stethoscope:before {
-  content: "\f0f1";
-}
-.icon-suitcase:before {
-  content: "\f0f2";
-}
-.icon-bell-alt:before {
-  content: "\f0f3";
-}
-.icon-coffee:before {
-  content: "\f0f4";
-}
-.icon-food:before {
-  content: "\f0f5";
-}
-.icon-file-text-alt:before {
-  content: "\f0f6";
-}
-.icon-building:before {
-  content: "\f0f7";
-}
-.icon-hospital:before {
-  content: "\f0f8";
-}
-.icon-ambulance:before {
-  content: "\f0f9";
-}
-.icon-medkit:before {
-  content: "\f0fa";
-}
-.icon-fighter-jet:before {
-  content: "\f0fb";
-}
-.icon-beer:before {
-  content: "\f0fc";
-}
-.icon-h-sign:before {
-  content: "\f0fd";
-}
-.icon-plus-sign-alt:before {
-  content: "\f0fe";
-}
-.icon-double-angle-left:before {
-  content: "\f100";
-}
-.icon-double-angle-right:before {
-  content: "\f101";
-}
-.icon-double-angle-up:before {
-  content: "\f102";
-}
-.icon-double-angle-down:before {
-  content: "\f103";
-}
-.icon-angle-left:before {
-  content: "\f104";
-}
-.icon-angle-right:before {
-  content: "\f105";
-}
-.icon-angle-up:before {
-  content: "\f106";
-}
-.icon-angle-down:before {
-  content: "\f107";
-}
-.icon-desktop:before {
-  content: "\f108";
-}
-.icon-laptop:before {
-  content: "\f109";
-}
-.icon-tablet:before {
-  content: "\f10a";
-}
-.icon-mobile-phone:before {
-  content: "\f10b";
-}
-.icon-circle-blank:before {
-  content: "\f10c";
-}
-.icon-quote-left:before {
-  content: "\f10d";
-}
-.icon-quote-right:before {
-  content: "\f10e";
-}
-.icon-spinner:before {
-  content: "\f110";
-}
-.icon-circle:before {
-  content: "\f111";
-}
-.icon-mail-reply:before,
-.icon-reply:before {
-  content: "\f112";
-}
-.icon-github-alt:before {
-  content: "\f113";
-}
-.icon-folder-close-alt:before {
-  content: "\f114";
-}
-.icon-folder-open-alt:before {
-  content: "\f115";
-}
-.icon-expand-alt:before {
-  content: "\f116";
-}
-.icon-collapse-alt:before {
-  content: "\f117";
-}
-.icon-smile:before {
-  content: "\f118";
-}
-.icon-frown:before {
-  content: "\f119";
-}
-.icon-meh:before {
-  content: "\f11a";
-}
-.icon-gamepad:before {
-  content: "\f11b";
-}
-.icon-keyboard:before {
-  content: "\f11c";
-}
-.icon-flag-alt:before {
-  content: "\f11d";
-}
-.icon-flag-checkered:before {
-  content: "\f11e";
-}
-.icon-terminal:before {
-  content: "\f120";
-}
-.icon-code:before {
-  content: "\f121";
-}
-.icon-reply-all:before {
-  content: "\f122";
-}
-.icon-mail-reply-all:before {
-  content: "\f122";
-}
-.icon-star-half-full:before,
-.icon-star-half-empty:before {
-  content: "\f123";
-}
-.icon-location-arrow:before {
-  content: "\f124";
-}
-.icon-crop:before {
-  content: "\f125";
-}
-.icon-code-fork:before {
-  content: "\f126";
-}
-.icon-unlink:before {
-  content: "\f127";
-}
-.icon-question:before {
-  content: "\f128";
-}
-.icon-info:before {
-  content: "\f129";
-}
-.icon-exclamation:before {
-  content: "\f12a";
-}
-.icon-superscript:before {
-  content: "\f12b";
-}
-.icon-subscript:before {
-  content: "\f12c";
-}
-.icon-eraser:before {
-  content: "\f12d";
-}
-.icon-puzzle-piece:before {
-  content: "\f12e";
-}
-.icon-microphone:before {
-  content: "\f130";
-}
-.icon-microphone-off:before {
-  content: "\f131";
-}
-.icon-shield:before {
-  content: "\f132";
-}
-.icon-calendar-empty:before {
-  content: "\f133";
-}
-.icon-fire-extinguisher:before {
-  content: "\f134";
-}
-.icon-rocket:before {
-  content: "\f135";
-}
-.icon-maxcdn:before {
-  content: "\f136";
-}
-.icon-chevron-sign-left:before {
-  content: "\f137";
-}
-.icon-chevron-sign-right:before {
-  content: "\f138";
-}
-.icon-chevron-sign-up:before {
-  content: "\f139";
-}
-.icon-chevron-sign-down:before {
-  content: "\f13a";
-}
-.icon-html5:before {
-  content: "\f13b";
-}
-.icon-css3:before {
-  content: "\f13c";
-}
-.icon-anchor:before {
-  content: "\f13d";
-}
-.icon-unlock-alt:before {
-  content: "\f13e";
-}
-.icon-bullseye:before {
-  content: "\f140";
-}
-.icon-ellipsis-horizontal:before {
-  content: "\f141";
-}
-.icon-ellipsis-vertical:before {
-  content: "\f142";
-}
-.icon-rss-sign:before {
-  content: "\f143";
-}
-.icon-play-sign:before {
-  content: "\f144";
-}
-.icon-ticket:before {
-  content: "\f145";
-}
-.icon-minus-sign-alt:before {
-  content: "\f146";
-}
-.icon-check-minus:before {
-  content: "\f147";
-}
-.icon-level-up:before {
-  content: "\f148";
-}
-.icon-level-down:before {
-  content: "\f149";
-}
-.icon-check-sign:before {
-  content: "\f14a";
-}
-.icon-edit-sign:before {
-  content: "\f14b";
-}
-.icon-external-link-sign:before {
-  content: "\f14c";
-}
-.icon-share-sign:before {
-  content: "\f14d";
-}
-.icon-compass:before {
-  content: "\f14e";
-}
-.icon-collapse:before {
-  content: "\f150";
-}
-.icon-collapse-top:before {
-  content: "\f151";
-}
-.icon-expand:before {
-  content: "\f152";
-}
-.icon-euro:before,
-.icon-eur:before {
-  content: "\f153";
-}
-.icon-gbp:before {
-  content: "\f154";
-}
-.icon-dollar:before,
-.icon-usd:before {
-  content: "\f155";
-}
-.icon-rupee:before,
-.icon-inr:before {
-  content: "\f156";
-}
-.icon-yen:before,
-.icon-jpy:before {
-  content: "\f157";
-}
-.icon-renminbi:before,
-.icon-cny:before {
-  content: "\f158";
-}
-.icon-won:before,
-.icon-krw:before {
-  content: "\f159";
-}
-.icon-bitcoin:before,
-.icon-btc:before {
-  content: "\f15a";
-}
-.icon-file:before {
-  content: "\f15b";
-}
-.icon-file-text:before {
-  content: "\f15c";
-}
-.icon-sort-by-alphabet:before {
-  content: "\f15d";
-}
-.icon-sort-by-alphabet-alt:before {
-  content: "\f15e";
-}
-.icon-sort-by-attributes:before {
-  content: "\f160";
-}
-.icon-sort-by-attributes-alt:before {
-  content: "\f161";
-}
-.icon-sort-by-order:before {
-  content: "\f162";
-}
-.icon-sort-by-order-alt:before {
-  content: "\f163";
-}
-.icon-thumbs-up:before {
-  content: "\f164";
-}
-.icon-thumbs-down:before {
-  content: "\f165";
-}
-.icon-youtube-sign:before {
-  content: "\f166";
-}
-.icon-youtube:before {
-  content: "\f167";
-}
-.icon-xing:before {
-  content: "\f168";
-}
-.icon-xing-sign:before {
-  content: "\f169";
-}
-.icon-youtube-play:before {
-  content: "\f16a";
-}
-.icon-dropbox:before {
-  content: "\f16b";
-}
-.icon-stackexchange:before {
-  content: "\f16c";
-}
-.icon-instagram:before {
-  content: "\f16d";
-}
-.icon-flickr:before {
-  content: "\f16e";
-}
-.icon-adn:before {
-  content: "\f170";
-}
-.icon-bitbucket:before {
-  content: "\f171";
-}
-.icon-bitbucket-sign:before {
-  content: "\f172";
-}
-.icon-tumblr:before {
-  content: "\f173";
-}
-.icon-tumblr-sign:before {
-  content: "\f174";
-}
-.icon-long-arrow-down:before {
-  content: "\f175";
-}
-.icon-long-arrow-up:before {
-  content: "\f176";
-}
-.icon-long-arrow-left:before {
-  content: "\f177";
-}
-.icon-long-arrow-right:before {
-  content: "\f178";
-}
-.icon-apple:before {
-  content: "\f179";
-}
-.icon-windows:before {
-  content: "\f17a";
-}
-.icon-android:before {
-  content: "\f17b";
-}
-.icon-linux:before {
-  content: "\f17c";
-}
-.icon-dribbble:before {
-  content: "\f17d";
-}
-.icon-skype:before {
-  content: "\f17e";
-}
-.icon-foursquare:before {
-  content: "\f180";
-}
-.icon-trello:before {
-  content: "\f181";
-}
-.icon-female:before {
-  content: "\f182";
-}
-.icon-male:before {
-  content: "\f183";
-}
-.icon-gittip:before {
-  content: "\f184";
-}
-.icon-sun:before {
-  content: "\f185";
-}
-.icon-moon:before {
-  content: "\f186";
-}
-.icon-archive:before {
-  content: "\f187";
-}
-.icon-bug:before {
-  content: "\f188";
-}
-.icon-vk:before {
-  content: "\f189";
-}
-.icon-weibo:before {
-  content: "\f18a";
-}
-.icon-renren:before {
-  content: "\f18b";
-}
-.dropup,
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle {
-  *margin-bottom: -3px;
-}
-.dropdown-toggle:active,
-.open .dropdown-toggle {
-  outline: 0;
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  vertical-align: top;
-  border-top: 4px solid #000000;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-  content: "";
-}
-.dropdown .caret {
-  margin-top: 8px;
-  margin-left: 2px;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  list-style: none;
-  background-color: #ffffff;
-  border: 1px solid #ccc;
-  border: 1px solid #c0c0c0;
-  *border-right-width: 2px;
-  *border-bottom-width: 2px;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  border-radius: 6px;
-  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-  -webkit-background-clip: padding-box;
-  -moz-background-clip: padding;
-  background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  *width: 100%;
-  height: 1px;
-  margin: 9px 1px;
-  *margin: -5px 0 5px;
-  overflow: hidden;
-  background-color: #e5e5e5;
-  border-bottom: 1px solid #ffffff;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 20px;
-  color: #444444;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-submenu:hover > a,
-.dropdown-submenu:focus > a {
-  text-decoration: none;
-  color: #ffffff;
-  background-color: #3a9910;
-  background-image: -moz-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#358b0f));
-  background-image: -webkit-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -o-linear-gradient(top, #3ea211, #358b0f);
-  background-image: linear-gradient(to bottom, #3ea211, #358b0f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff358b0f', GradientType=0);
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #ffffff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #3a9910;
-  background-image: -moz-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#358b0f));
-  background-image: -webkit-linear-gradient(top, #3ea211, #358b0f);
-  background-image: -o-linear-gradient(top, #3ea211, #358b0f);
-  background-image: linear-gradient(to bottom, #3ea211, #358b0f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff358b0f', GradientType=0);
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #999999;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: default;
-}
-.open {
-  *z-index: 1000;
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px solid #000000;
-  content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 1px;
-}
-.dropdown-submenu {
-  position: relative;
-}
-.dropdown-submenu > .dropdown-menu {
-  top: 0;
-  left: 100%;
-  margin-top: -6px;
-  margin-left: -1px;
-  -webkit-border-radius: 0 6px 6px 6px;
-  -moz-border-radius: 0 6px 6px 6px;
-  border-radius: 0 6px 6px 6px;
-}
-.dropdown-submenu:hover > .dropdown-menu {
-  display: block;
-}
-.dropup .dropdown-submenu > .dropdown-menu {
-  top: auto;
-  bottom: 0;
-  margin-top: 0;
-  margin-bottom: -2px;
-  -webkit-border-radius: 5px 5px 5px 0;
-  -moz-border-radius: 5px 5px 5px 0;
-  border-radius: 5px 5px 5px 0;
-}
-.dropdown-submenu > a:after {
-  display: block;
-  content: " ";
-  float: right;
-  width: 0;
-  height: 0;
-  border-color: transparent;
-  border-style: solid;
-  border-width: 5px 0 5px 5px;
-  border-left-color: #cccccc;
-  margin-top: 5px;
-  margin-right: -10px;
-}
-.dropdown-submenu:hover > a:after {
-  border-left-color: #ffffff;
-}
-.dropdown-submenu.pull-left {
-  float: none;
-}
-.dropdown-submenu.pull-left > .dropdown-menu {
-  left: -100%;
-  margin-left: 10px;
-  -webkit-border-radius: 6px 0 6px 6px;
-  -moz-border-radius: 6px 0 6px 6px;
-  border-radius: 6px 0 6px 6px;
-}
-.dropdown .dropdown-menu .nav-header {
-  padding-left: 20px;
-  padding-right: 20px;
-}
-.typeahead {
-  z-index: 1051;
-  margin-top: 2px;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-.well-large {
-  padding: 24px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.well-small {
-  padding: 9px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-  -moz-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition: height 0.35s ease;
-  -moz-transition: height 0.35s ease;
-  -o-transition: height 0.35s ease;
-  transition: height 0.35s ease;
-}
-.collapse.in {
-  height: auto;
-}
-.close {
-  float: right;
-  font-size: 20px;
-  font-weight: bold;
-  line-height: 20px;
-  color: #000000;
-  text-shadow: 0 1px 0 #ffffff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
-  color: #000000;
-  text-decoration: none;
-  cursor: pointer;
-  opacity: 0.4;
-  filter: alpha(opacity=40);
-}
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-.btn {
-  display: inline-block;
-  *display: inline;
-  /* IE7 inline-block hack */
-  *zoom: 1;
-  padding: 4px 12px;
-  margin-bottom: 0;
-  font-size: 13px;
-  line-height: 20px;
-  text-align: center;
-  vertical-align: middle;
-  cursor: pointer;
-  color: #444444;
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
-  background-color: #f5f5f5;
-  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
-  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
-  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
-  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #e6e6e6;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  border: 1px solid #bbbbbb;
-  *border: 0;
-  border-bottom-color: #a2a2a2;
-  -webkit-border-radius: 3px;
-  -moz-border-radius: 3px;
-  border-radius: 3px;
-  *margin-left: .3em;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-  -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-  box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn:hover,
-.btn:focus,
-.btn:active,
-.btn.active,
-.btn.disabled,
-.btn[disabled] {
-  color: #444444;
-  background-color: #e6e6e6;
-  *background-color: #d9d9d9;
-}
-.btn:active,
-.btn.active {
-  background-color: #cccccc \9;
-}
-.btn:first-child {
-  *margin-left: 0;
-}
-.btn:hover,
-.btn:focus {
-  color: #444444;
-  text-decoration: none;
-  background-position: 0 -15px;
-  -webkit-transition: background-position 0.1s linear;
-  -moz-transition: background-position 0.1s linear;
-  -o-transition: background-position 0.1s linear;
-  transition: background-position 0.1s linear;
-}
-.btn:focus {
-  outline: thin dotted #333;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn.active,
-.btn:active {
-  background-image: none;
-  outline: 0;
-  -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-  -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-  box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
-}
-.btn.disabled,
-.btn[disabled] {
-  cursor: default;
-  background-image: none;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  -moz-box-shadow: none;
-  box-shadow: none;
-}
-.btn-large {
-  padding: 11px 19px;
-  font-size: 16.25px;
-  -webkit-border-radius: 5px;
-  -moz-border-radius: 5px;
-  border-radius: 5px;
-}
-.btn-large [class^="icon-"],
-.btn-large [class*=" icon-"] {
-  margin-top: 4px;
-}
-.btn-small {
-  padding: 2px 10px;
-  font-size: 11.05px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.btn-small [class^="icon-"],
-.btn-small [class*=" icon-"] {
-  margin-top: 0;
-}
-.btn-mini [class^="icon-"],
-.btn-mini [class*=" icon-"] {
-  margin-top: -1px;
-}
-.btn-mini {
-  padding: 0 6px;
-  font-size: 9.75px;
-  -webkit-border-radius: 2px;
-  -moz-border-radius: 2px;
-  border-radius: 2px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-  padding-left: 0;
-  padding-right: 0;
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.btn-primary.active,
-.btn-warning.active,
-.btn-danger.active,
-.btn-success.active,
-.btn-info.active,
-.btn-inverse.active {
-  color: rgba(255, 255, 255, 0.75);
-}
-.btn-primary {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #2ca212;
-  background-image: -moz-linear-gradient(top, #3ea211, #11a214);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3ea211), to(#11a214));
-  background-image: -webkit-linear-gradient(top, #3ea211, #11a214);
-  background-image: -o-linear-gradient(top, #3ea211, #11a214);
-  background-image: linear-gradient(to bottom, #3ea211, #11a214);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3ea211', endColorstr='#ff11a214', GradientType=0);
-  border-color: #11a214 #11a214 #0a5d0c;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #11a214;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.btn-primary.disabled,
-.btn-primary[disabled] {
-  color: #ffffff;
-  background-color: #11a214;
-  *background-color: #0f8b11;
-}
-.btn-primary:active,
-.btn-primary.active {
-  background-color: #0c740f \9;
-}
-.btn-warning {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #faa732;
-  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
-  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
-  background-image: -o-linear-gradient(top, #fbb450, #f89406);
-  background-image: linear-gradient(to bottom, #fbb450, #f89406);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
-  border-color: #f89406 #f89406 #ad6704;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #f89406;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning:active,
-.btn-warning.active,
-.btn-warning.disabled,
-.btn-warning[disabled] {
-  color: #ffffff;
-  background-color: #f89406;
-  *background-color: #df8505;
-}
-.btn-warning:active,
-.btn-warning.active {
-  background-color: #c67605 \9;
-}
-.btn-danger {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #da4f49;
-  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
-  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
-  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
-  border-color: #bd362f #bd362f #802420;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #bd362f;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger:active,
-.btn-danger.active,
-.btn-danger.disabled,
-.btn-danger[disabled] {
-  color: #ffffff;
-  background-color: #bd362f;
-  *background-color: #a9302a;
-}
-.btn-danger:active,
-.btn-danger.active {
-  background-color: #942a25 \9;
-}
-.btn-success {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #5bb75b;
-  background-image: -moz-linear-gradient(top, #62c462, #51a351);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
-  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
-  background-image: -o-linear-gradient(top, #62c462, #51a351);
-  background-image: linear-gradient(to bottom, #62c462, #51a351);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
-  border-color: #51a351 #51a351 #387038;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #51a351;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-success:hover,
-.btn-success:focus,
-.btn-success:active,
-.btn-success.active,
-.btn-success.disabled,
-.btn-success[disabled] {
-  color: #ffffff;
-  background-color: #51a351;
-  *background-color: #499249;
-}
-.btn-success:active,
-.btn-success.active {
-  background-color: #408140 \9;
-}
-.btn-info {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #49afcd;
-  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
-  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
-  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
-  background-repeat: repeat-x;
-  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
-  border-color: #2f96b4 #2f96b4 #1f6377;
-  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-  *background-color: #2f96b4;
-  /* Darken IE7 buttons by default so they stand out more given they won't have borders */
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-}
-.btn-info:hover,
-.btn-info:focus,
-.btn-info:active,
-.btn-info.active,
-.btn-info.disabled,
-.btn-info[disabled] {
-  color: #ffffff;
-  background-color: #2f96b4;
-  *background-color: #2a85a0;
-}
-.btn-info:active,
-.btn-info.active {
-  background-color: #24748c \9;
-}
-.btn-inverse {
-  color: #ffffff;
-  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
-  background-color: #363636;
-  background-image: -moz-linear-gradient(top, #444444, #222222);
-  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
-  background-image: -webkit-linear-gradient(top, #444444, #222222);
-  background-image: -o-linear-gradient(top, #4444

<TRUNCATED>

[10/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
deleted file mode 100644
index 3cdca56..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * 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',
-    'backbone',
-    'handlebars',
-    'hbs!tmpl/common/Header_tmpl',
-    'utils/Utils',
-    'moment',
-    'utils/Globals',
-], function(require, Backbone, Handlebars, Header_tmpl, Utils, moment, Globals) {
-    'use strict';
-
-    var Header = Backbone.Marionette.Layout.extend(
-        /** @lends Header */
-        {
-            _viewName: 'Header',
-
-            template: Header_tmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                'takeATour': "[data-id='takeATour']",
-                'globalFilter': "li[data-id='exclusionList']",
-                'globalNotification': '.dropdown .excludeStatus',
-                'timeZoneChange': "li[data-id='timeZoneChange']",
-                'createFilters' : "[data-id='createFilters']",
-                'editParams'  : "a[data-id='editParams']"
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events['click ' + this.ui.takeATour] = 'takeATour';
-                events['click ' + this.ui.globalFilter] = 'exclusionListClick';
-                events['click ' + this.ui.timeZoneChange] = 'timeZoneChangeClick';
-                events['click ' + this.ui.createFilters] = 'createFiltersClick';
-                events['click ' + this.ui.editParams] = 'editParamsClick';
-                return events;
-            },
-
-            /**
-             * intialize a new Header Layout 
-             * @constructs
-             */
-            initialize: function(options) {
-
-                _.extend(this, _.pick(options, 'collection', 'globalVent'));
-                this.collection = new Backbone.Collection();
-                this.bottomToTop();
-                this.topToBottom();
-                this.exclusionObj = {
-                    logMessageCollection: this.collection,
-                    components: []
-                }
-
-                this.bindEvents();
-            },
-
-            /** all events binding here */
-            bindEvents: function() {
-                this.listenTo(this.globalVent,"currentMap:load",function(obj){
-                    this.currentTimezone = obj;
-                },this);
-            },
-            /** on render callback */
-            onRender: function() {
-                this.loadTimeZone();
-                this.setNotificationCount(this.exclusionObj.components, this.collection.length);
-                var storeTimezone = Utils.localStorage.checkLocalStorage('timezone');
-                var zoneName = moment.tz(storeTimezone.value.split(',')[0]).zoneName();
-
-                if (storeTimezone.value.split(',').length) {
-                    if (storeTimezone.value.split(',')[1]) {
-                        if (storeTimezone.value.split(',')[1] != zoneName) {
-                            Utils.localStorage.setLocalStorage('timezone', storeTimezone.value.split(',')[0] + "," + zoneName);
-                        }
-                    }
-                    this.ui.timeZoneChange.find('span').text(moment.tz(storeTimezone.value.split(',')[0]).zoneName());
-                }
-                this.currentTimezone = storeTimezone;
-                this.checkParams();
-            },
-            onShow : function(){
-                this.triggerAutoTourCheck();
-            },
-            loadTimeZone: function() {
-
-
-            },
-            checkParams : function(){
-                if(window.location.search){
-                    var url = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
-                    if(url.length === 1){
-                        var bundleIdCheck = url[0].split('=');
-                        (bundleIdCheck[0] ==='bundle_id') ? this.ui.editParams.hide() : this.ui.editParams.show();
-                    }else{
-                      this.ui.editParams.show();  
-                    }
-                }
-            },
-            editParamsClick: function() {
-                 var that = this;
-                 var newUrl = '',
-                     hash,
-                     str = '<ul>';
-                 var oldUrl = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
-                 for (var i = 0; i < oldUrl.length; i++) {
-
-                     hash = oldUrl[i].split('=');
-                     if (hash[0] === "bundle_id") {
-                            if(_.isEmpty(hash[1])){
-                                hash[1] = '';
-                            }
-                         newUrl = hash[0] + "=" + hash[1];
-                     }else{
-                       str += '<li>' + hash[0] + "  : " + hash[1] + '</li>'; 
-                     }     
-                 }
-                 str += '</ul>';
-
-                 Utils.bootboxCustomDialogs({
-                     'title': ' Are you sure you want to remove these params ?',
-                     'msg': str,
-                     'callback': function() {
-                         var editUrl = window.location.href.substring(0, window.location.href.indexOf('?'));
-                         var params = (newUrl.length > 0) ? window.location.search = '?' + newUrl : window.location.search = '';
-                         window.location.href = editUrl + params;
-                         that.ui.editParams.hide();
-                     }
-                 });
-            },
-            takeATour: function() {
-            	require(['utils/Tour'],function(Tour){
-            		Tour.Start();
-            	});
-
-                /*localStorage.clear();
-                if (typeof(Storage) !== "undefined") {
-                    if (!localStorage.getItem("startIntro")) {
-                        localStorage.setItem("startIntro", true);
-                        //Intro.Start();
-                    }
-                } else {
-                    // Sorry! No Web Storage support..
-                }*/
-            },
-            createFiltersClick: function(){
-                var that = this;
-                require(['views/filter/CreateLogfeederFilterView'],function(CreateLogfeederFilter){
-                    var view = new CreateLogfeederFilter({});
-                    var options = {
-                        title: "Log Feeder Log Levels Filter",
-                        content: view,
-                        viewType: 'Filter',
-                        resizable: false,
-                        width: 1000,
-                        height: 550,
-                        autoFocus1stElement : false,
-                        buttons: [{
-                            id: "okBtn",
-                            text: "Save",
-                            "class": "btn btn-primary defaultBtn",
-                            click: function() {
-                                that.onCreateFilterSubmit();
-                            }
-                        }, {
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default defaultCancelBtn",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    };
-                    that.createFilterDialog(options);
-                    that.onDialogClosed();
-                });
-            },// Filter Dialogs
-            createFilterDialog : function(options){
-                 var that = this,
-                    opts = _.extend({
-                        appendTo: this.$el,
-                        modal: true,
-                        resizable: false,
-                        width: 650,
-                        height: 350,
-                        beforeClose: function(event, ui) {
-                            //that.onDialogClosed();
-                        }
-                    },options);
-
-                  require(['views/common/JBDialog'], function(JBDialog) {
-                    var dialog = that.dialog = new JBDialog(opts).render();
-                    if(options.viewType == "Filter"){
-                        dialog.on("dialog:open", function(){
-                            options.content.trigger("toggle:okBtn",false);
-                            // dialog.trigger("toggle:okBtn",false);
-                        });
-                    }
-                    options.content.on("closeDialog",function(){
-                    	that.onDialogClosed();
-                    });
-                    dialog.open();
-                });
-            },
-            onCreateFilterSubmit : function(){
-                var content = this.dialog.options.content;
-                var that = this;
-                content.setValues();
-                    content.trigger("toggle:okBtn",false);
-                    
-                    // this.componentArray  = content.ui.componentSelect2.val().split(',');
-                    //this.hostArray = content.ui.hostSelect2.val().split(',');
-                    // this.levelArray = content.ui.levelSelect2.val().split(',');
-
-                    //this.filterList = { /*components : this.componentArray,*/hosts : this.hostArray/*, levels : this.levelArray */}
-                    content.model.set(content.setValues());
-
-                    content.model.save(content.model.attributes, {
-                        url: Globals.baseURL + 'history/filters',
-                        success : function(model,response){
-                            Utils.notifySuccess({
-                                content: "Filter has been saved."
-                            });
-                        },
-                        error : function(model,response){
-                            Utils.notifyError({
-                                content: "There is some issues on server, Please try again later."
-                            });
-                        },
-                        complete : function(){
-                            that.onDialogClosed();
-                        }
-                    });
-            },
-            setupDialog: function(options) {
-                var that = this,
-                    opts = _.extend({
-                        appendTo: this.$el,
-                        modal: true,
-                        resizable: false,
-                        width: 650,
-                        height: 450,
-                        beforeClose: function(event, ui) {
-                            that.onDialogClosed();
-                        }
-                    }, options);
-
-                require(['views/common/JBDialog'], function(JBDialog) {
-                    var dialog = that.dialog = new JBDialog(opts).render();
-                    if (options.viewType == "timezone") {
-                        dialog.on("dialog:open", function() {
-                            that.dialog.options.content.$('#timezone-picker').WorldMapGenerator({
-                                quickLink: [{
-                                    "PST": "PST",
-                                    "MST": "MST",
-                                    "CST": "CST",
-                                    "EST": "EST",
-                                    "GMT": "GMT",
-                                    "LONDON": "Europe/London",
-                                    "IST": "IST"
-                                }]
-                            });
-                        });
-                    }
-                    dialog.open();
-                });
-            },
-            exclusionListClick: function() {
-                var that = this;
-                require(['views/dialog/GlobalExclusionCompositeView'], function(GlobalExclusionView) {
-                    var view = new GlobalExclusionView({
-                        exclusionObj: that.exclusionObj
-                    });
-                    var opts = {
-                        title: "Global Exclusion",
-                        content: view,
-                        viewType: 'exclusion',
-                        resizable: false,
-                        width: 650,
-                        height: 450,
-                        buttons: [{
-                            id: "okBtn",
-                            text: "Apply",
-                            "class": "btn btn-primary",
-                            click: function() {
-                                that.onDialogSubmitted();
-                            }
-                        }, {
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    }
-                    that.setupDialog(opts);
-                });
-
-            },
-            onDialogSubmitted: function() {
-                var content = this.dialog.options.content;
-                var componentList = [];
-                if (content.ui.select2Input.select2("data") != null) {
-                    componentList = content.ui.select2Input.select2("data").map(function(d) {
-                        return d.type
-                    });
-                }
-
-                this.exclusionObj.components = componentList;
-                var logMessagesList = [];
-                content.$('div[data-id="L"] textarea').map(function(i, element) {
-                    if (element.value != "") logMessagesList.push({
-                        "message": element.value
-                    })
-
-                })
-                this.collection.reset(logMessagesList);
-
-                var gMessage = logMessagesList.map(function(e) {
-                    return e.message
-                });
-                this.setNotificationCount(componentList.length, gMessage.length);
-            },
-            /** closing the movable/resizable popup */
-            onDialogClosed: function() {
-                if (this.dialog) {
-                    this.dialog.close && this.dialog.close();
-                    this.dialog.remove && this.dialog.remove();
-                    this.dialog = null;
-                }
-            },
-            timeZoneChangeClick: function() {
-                var that = this;
-                require(['views/dialog/TimeZoneChangeView'], function(TimeZoneChangeView) {
-                    var view = new TimeZoneChangeView({currentTime : that.currentTimezone});
-                    var opts = {
-                        title: "Time Zone",
-                        content: view,
-                        viewType: 'timezone',
-                        resizable: false,
-                        width: 650,
-                        height: 530,
-                        buttons: [{
-                            id: "reloadBtn",
-                            text: "Reload",
-                            "class": "btn btn-primary defaultBtn",
-                            click: function() {
-                                that.onTimeZoneReload();
-                            }
-                        }, {
-                            id: "reloadNewBtn",
-                            text: "Reload in new tab",
-                            "class": "btn btn-primary defaultBtn",
-                            click: function() {
-                                that.onTimeZoneReloadinNewTab();
-                            }
-                        }, {
-                            id: "cancelBtn",
-                            text: "Close",
-                            "class": "btn btn-default defaultCancelBtn",
-                            click: function() {
-                                that.onDialogClosed();
-                            }
-                        }]
-                    }
-                    that.setupDialog(opts);
-                });
-            },
-            onTimeZoneReloadinNewTab: function() {
-                var content = this.dialog.options.content;
-                this.onDialogClosed();
-                if (content.changedTimeZone) {
-                    var obj = Utils.localStorage.checkLocalStorage('timezone');
-                    Utils.localStorage.setLocalStorage('timezone', content.selectedtimeZone);
-                    //this.ui.timeZoneChange.find('span').text(moment.tz(content.selectedtimeZone).zoneName());
-                    this.globalVent.trigger("currentMap:load",obj);
-                    window.open(window.location.href);
-
-                }
-            },
-            onTimeZoneReload: function() {
-                var content = this.dialog.options.content;
-                if (content.changedTimeZone) {
-                    Utils.localStorage.setLocalStorage('timezone', content.selectedtimeZone);
-                    //this.ui.timeZoneChange.find('span').text(moment.tz(content.selectedtimeZone).zoneName());
-                    window.location.reload();
-
-                } else {
-                    this.onDialogClosed();
-                }
-            },
-            setNotificationCount: function(componentList, gMessage) {
-                if (componentList > 0 || gMessage > 0) {
-                    this.ui.globalNotification.addClass('full')
-                } else {
-                    this.ui.globalNotification.removeClass('full')
-                }
-
-            },
-            /** on close */
-            onClose: function() {},
-            bottomToTop: function() {
-                $(window).scroll(function() {
-                    var tabSelected = $('[role="tablist"]').find('.active').data()
-                        /*if (tabSelected.id == "hierarchy") {*/
-                    if ($(this).scrollTop() >= 53) {
-                        $('.topLevelFilter').addClass('fixed');
-                        if ($('.topLevelFilter').find('.fixedSearchBox .select2-container.select2-dropdown-open').length || $('.topLevelFilter').find('.VS-focus').length || $('.topLevelFilter').find('.advanceSearchActive').length) {
-                            $('.topLevelFilter').find('.fixedSearchBox').removeClass('hiddeBox')
-                        } else {
-                            $('.topLevelFilter').find('.fixedSearchBox').addClass('hiddeBox')
-                        }
-                        $('.setHeight').css('height', '120px');
-                        $('.setHeight_LogFile').css('height', '90px');
-                    } else {
-                        $('.topLevelFilter').removeClass('fixed');
-                        $('.setHeight').css('height', '0px');
-                        $('.setHeight_LogFile').css('height', '0px');
-                    }
-                    /* }*/
-
-                    if ($(this).scrollTop() > 600) {
-                        $('.arrowDiv').fadeIn();
-                    } else {
-                        $('.arrowDiv').fadeOut();
-                    }
-                });
-                $('.bottomToTop').click(function() {
-                    $('html, body').animate({
-                        scrollTop: 0
-                    }, 400);
-                });
-
-            },
-            topToBottom: function() {
-                $('.topToBottom').click(function() {
-                    $('html, body').animate({
-                        scrollTop: $(document).height()
-                    }, 400);
-                });
-            },
-            triggerAutoTourCheck : function(){
-                var that = this;
-                var storageVal = Utils.localStorage.checkLocalStorage('autoTour');
-                if(! storageVal.found){
-                    Utils.localStorage.setLocalStorage("autoTour",true);
-                    setTimeout(function(){
-                        Utils.confirmPopup({
-                            'msg':'Do you want to take a Tour with LogSearch App ?',
-                            'callback':that.takeATour
-                        });
-                    },3000);
-                }
-            }
-
-
-        });
-
-    return Header;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/JBDialog.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/JBDialog.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/JBDialog.js
deleted file mode 100644
index b047f4a..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/JBDialog.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/**
-* 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.
-*/
-/**
- * @file jQuery Dialog (movable and resizable popup) wrapper for use with Backbone.
- *
- * Takes care of instantiation, fires and listen to events,
- * adds several options and removes the element from the DOM when closed.
- *
- * @borrows jquery-ui.js
- * @extends Backbone.View
- *
- * @fires dialog:rendered - Fired when the dialog view is rendered
- * @fires dialog:open - Fired when the dialog is instantiated and opened
- * @fires dialog:closing - Fired when the dialog view is about to close (before closing)
- */
-define(['require','backbone'],function(require,Backbone){
-  //var App      = require('App');
-
-  /**
-   * Creates instance of JBDialog
-   */
-  var JBDialog = Backbone.View.extend({
-    /** @lends JBDialog */
-    className: 'ui-dialog-content ui-widget-content',
-
-    tagName: 'div',
-
-    initialize: function(customOpts){
-      this.options = _.extend({
-        // defaults
-        appendTo: "body",
-        autoOpen: false,
-        buttons: [],
-        closeOnEscape: false,
-        closeText: "close",
-        dialogClass: "",
-        draggable: true,
-        hide: null,
-        height: "auto",
-        maxHeight: 600,
-        maxWidth: 1000,
-        minHeight: 300,
-        minWidth: 250,
-        modal: false,
-        position: {
-          my: "center",
-          at: "center",
-          of: window,
-          collision: "fit"
-        },
-        resizable: true,
-        show: null,
-        title: null,
-        width: "auto",
-        autoFocus1stElement : true,
-        // callbacks
-        // beforeClose: null,
-        // close: null,
-        // drag: null,
-        // dragStart: null,
-        // dragStop: null,
-        // focus: null,
-        // open: null,
-        // resize: null,
-        // resizeStart: null,
-        // resizeStop: null
-      }, customOpts);
-
-      this.customOpts = customOpts;
-
-      this.bindButtonEvents();
-    },
-
-    bindButtonEvents: function(){
-      var options = this.options,
-        content = options.content;
-
-      /*Bind button events on main content, if it's a view*/
-      if (content && content.$el) {
-        this.listenTo(content, "toggle:okBtn", function(isEnable){
-          this.toggleButtonState('okBtn',!!isEnable);
-        }, this);
-
-        this.listenTo(content, "toggle:cancelBtn", function(isEnable){
-          this.toggleButtonState('cancelBtn',!!isEnable);
-        }, this);
-
-        this.listenTo(content, "toggle:btn", function(isEnable, buttonId){
-          this.toggleButtonState(buttonId,!!isEnable);
-        }, this);
-      }
-    },
-
-    render: function() {
-      var self = this;
-      var $el = self.$el,
-          options = self.options,
-          content = options.content;
-
-      /*Create the modal container*/
-      if (content && content.$el) {
-        /*Insert the main content if it's a view*/
-        content.render();
-        $el.html(options.content.$el);
-      } else {
-        $el.html(options.content);
-      }
-
-      self.isRendered = true;
-
-      self.trigger("dialog:rendered");
-
-      return self;
-    },
-
-    /**
-     * [initializing and invoking open function on dialog]
-     * @return {Object} context
-     */
-    open: function() {
-      var self = this;
-      var $el = self.$el;
-
-      if (!self.isRendered){
-        self.render();
-      }
-
-      //Create it
-      $el.dialog(self.options);
-      if (!self.options.autoOpen) {
-        $el.dialog("open");
-      }
-      $('.ui-dialog-titlebar-close').click(function(e){
-    	  self.close();  
-      });
-      if (this.options.autoFocus1stElement)
-        $el.find("[autofocus]:first").focus();
-
-      self.trigger("dialog:open");
-
-      return self;
-    },
-
-    /**
-     * closing the dialog and destroying it from DOM if open
-     */
-    close: function() {
-      var self = this;
-      var $el = self.$el;
-
-      self.trigger("dialog:closing");
-
-      $el.hide();
-
-      if (self.options.content) {
-        /*Closing Backbone.View*/
-        self.options.content.close();
-      }
-      if($el.dialog("isOpen")){
-        $el.dialog("destroy");
-      }
-    },
-
-    /**
-     * toggle particular button state
-     * @param  {String}  buttonId - id of the button element
-     * @param  {Boolean} isEnable - flag to enable/disable
-     * @return {Object} context
-     */
-    toggleButtonState: function(buttonId, isEnable){
-      var $selector, self = this;
-      if (buttonId) {
-        $selector = self.$el.next().find('#'+buttonId);
-        self.enableDisableBtn($selector, isEnable);
-      }
-      return self;
-    },
-
-    /**
-     * enable/disable button
-     * @param  {Object}  selector - jquery dom element
-     * @param  {Boolean} isEnable - flag to enable/disable
-     */
-    enableDisableBtn: function(selector, isEnable) {
-      if (selector && selector.length) {
-        if (isEnable) {
-          selector.removeAttr('disabled');
-        } else {
-          selector.attr('disabled', 'disabled');
-        }
-      }
-    }
-
-  });
-  return JBDialog;
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/LogSnapShotLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/LogSnapShotLayout.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/LogSnapShotLayout.js
deleted file mode 100644
index 4750592..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/LogSnapShotLayout.js
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * 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',
-    'backbone',
-    'utils/Utils',
-    'hbs!tmpl/common/LogSnapShotLayout_tmpl',
-    'moment'
-], function(require, backbone, Utils, LogSnapShotLayoutTmpl, moment) {
-    'use strict';
-
-    return Backbone.Marionette.Layout.extend(
-        /** @lends LogSnapShotLayout */
-        {
-            _viewName: 'LogSnapShotLayout',
-
-            template: LogSnapShotLayoutTmpl,
-
-
-            /** ui selector cache */
-            ui: {
-                startStop: '[data-id="startStop"]',
-                start: '[data-id="start"]',
-                stop: '[data-id="stop"]',
-                counter: '[data-id="counter"]',
-                showAutoTriggerMsg:'[data-id="showAutoTriggerMsg"]'
-            },
-
-            /** ui events hash */
-            events: function() {
-                var events = {};
-                events["click " + this.ui.startStop] = 'onStartStopClick';
-                /*  events["click " + this.ui.start] = 'onStartClick';
-                  events["click " + this.ui.stop] = 'onStopClick';*/
-                return events;
-            },
-
-            /**
-             * intialize a new LogSnapShotLayout Layout
-             * @constructs
-             */
-            initialize: function(options) {
-                _.extend(this, _.pick(options, 'vent', 'globalVent', 'params'));
-                this.dateUtil = Utils.dateUtil;
-            },
-            bindEvents: function() {},
-            onRender: function() {
-                this.ui.stop.hide();
-                this.ui.counter.hide();
-                this.ui.counter.text("00:00");
-            },
-            onStartStopClick: function() {
-                if (this.ui.start.is(":hidden")) {
-                    this.onStopClick();
-                } else {
-                    this.onStartClick();
-                }
-            },
-            onStartClick: function() {
-                var that = this;
-                this.startDate = this.dateUtil.getMomentObject();
-                clearTimeout(that.autoStartTime);
-                clearTimeout(this.textAutoRefresh);
-                clearTimeout(this.refreshInterval);
-                that.ui.showAutoTriggerMsg.hide();
-                this.ui.start.hide();
-                this.ui.stop.show();
-                this.ui.counter.show();
-                this.$('.snapShotTitle').hide();
-                this.counterValue = new Date(moment().format("MM/DD/YY"));
-                this.counter = 1;
-                that.ui.counter.text('00:01');
-                     this.interval = setInterval(function() {
-                    if (that.counterValue.getSeconds() == 0) {
-                        that.counter = 1;
-                    }
-                    if (that.counterValue.getMinutes() > 59 && that.counterValue.getHours() >= 0) {
-                        that.onStopClick();
-                        return;
-                    }
-                    that.counterValue.setSeconds(++that.counter);
-                    that.ui.counter.text(((that.counterValue.getMinutes().toString().length > 1) ?
-                            (that.counterValue.getMinutes()) : ("0" + that.counterValue.getMinutes())) + ':' +
-                        ((that.counterValue.getSeconds().toString().length > 1) ?
-                            (that.counterValue.getSeconds()) : ("0" + that.counterValue.getSeconds())));
-                }, 1000);
-            },
-            onStopClick: function() {
-                var that = this;
-                Utils.alertPopup({
-                     msg:"For more accurate results, automatic refresh will be triggered in 30 secs."
-                }); 
-                this.refreshSecond = 30;
-                this.ui.showAutoTriggerMsg.text("Triggering auto-refresh in" + " " + ('30')).show();
-                this.timerStartRefresh();
-                this.autoStartTime = setTimeout(function(){
-                    that.vent.trigger("tab:refresh",that.params);
-                    that.ui.showAutoTriggerMsg.hide();
-                }, 30000);
-                this.endDate = this.dateUtil.getMomentObject();
-                this.vent.trigger("date:click", {
-                    'from': that.startDate,
-                    'to': that.endDate,
-                    dateRangeLabel: "Custom Range",
-                });
-                this.ui.stop.hide();
-                this.ui.start.show();
-                this.ui.counter.hide();
-                this.$('.snapShotTitle').show();
-                this.ui.counter.text("00:00");
-                this.counterValue = new Date(moment().format("MM/DD/YY"));
-                this.counter = 1;
-                clearInterval(this.interval);
-            },
-            timerStartRefresh: function(){
-                var that= this;
-                var refreshCounter = new Date(moment().format("MM/DD/YY"));
-                refreshCounter.setSeconds(30);
-                this.refreshInterval = setInterval(function() {
-                    var getCounterValue = refreshCounter.getSeconds();
-                    refreshCounter.setSeconds(--getCounterValue);
-                    that.ui.showAutoTriggerMsg.text("Triggering auto-refresh in" + " " + refreshCounter.getSeconds());
-                }, 1000);
-            }
-        });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ProfileBar.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ProfileBar.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ProfileBar.js
deleted file mode 100644
index 0cdef28..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/ProfileBar.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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',
-	'backbone',
-	'App',
-	'communicator',
-	'hbs!tmpl/common/ProfileBar_tmpl'
-],function(require,Backbone,App,Communicator,ProfileBar_tmpl){
-    'use strict';
-	
-	var ProfileBar = Backbone.Marionette.ItemView.extend(
-	/** @lends ProfileBar */
-	{
-		_viewName : ProfileBar,
-		
-    	template: ProfileBar_tmpl,
-    	templateHelpers : function(){
-    		return {
-    			userProfile : this.userProfile
-    		};
-    	},
-        
-    	/** ui selector cache */
-    	ui: {
-    		logout : 'a[data-id="logout"]'
-    	},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			events['click ' + this.ui.logout]  = 'onLogout';
-			return events;
-		},
-		onLogout : function(){
-			var url = 'security-admin-web/logout.html';
-			$.ajax({
-				url : url,
-				type : 'GET',
-				headers : {
-					"cache-control" : "no-cache"
-				},
-				success : function() {
-					window.location.replace('login.html');
-				},
-				error : function(jqXHR, textStatus, err ) {
-				}
-				
-			});
-		},
-    	/**
-		* intialize a new ProfileBar ItemView 
-		* @constructs
-		*/
-		initialize: function(options) {
-			console.log("initialized a ProfileBar ItemView");
-
-			_.extend(this, _.pick(options, ''));
-
-			this.userProfile = SessionMgr.getUserProfile();
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-			//this.listenTo(this.userProfile, "change", this.render, this);
-			this.listenTo(Communicator.vent,'ProfileBar:rerender', this.render, this);
-		},
-
-		/** on render callback */
-		onRender: function() {
-
-			this.initializePlugins();
-		},
-
-		/** all post render plugin initialization */
-		initializePlugins: function(){
-		},
-
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return ProfileBar;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Spinner.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Spinner.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Spinner.js
deleted file mode 100644
index 9d3714e..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Spinner.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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','backbone','handlebars','communicator'],function(require,Backbone,Handlebars,Communicator){
-    'use strict';
-
-	var Spinner = Backbone.Marionette.Layout.extend(
-	/** @lends Spinner */
-	{
-		_viewName : 'Spinner',
-		
-		template  : Handlebars.compile("<span></span>"),
-
-		tagName	  : 'span',
-        
-    	/** ui selector cache */
-    	ui: {},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			return events;
-		},
-
-    	/**
-		* intialize a new Spinner Layout 
-		* @constructs
-		*/
-		initialize: function(options) {
-			console.log("initialized a Spinner ItemView");
-
-			_.extend(this, _.pick(options, 'collection'));
-
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-            this.listenTo(this.collection, 'request', this.displaySpinner);
-            this.listenTo(this.collection, 'sync error', this.removeSpinner);
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.initializePlugins();
-		},
-
-		/** all post render plugin initialization */
-		initializePlugins: function(){
-		},
-
-		displaySpinner: function () {
-            this.$el.empty().append('<i class="icon-spinner icon-spin icon-3x white spin-position"></i>');
-        },
-
-        removeSpinner: function () {
-            this.$el.empty();
-        },
-		
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return Spinner;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TableLayout.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TableLayout.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TableLayout.js
deleted file mode 100644
index b2f0871..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TableLayout.js
+++ /dev/null
@@ -1,405 +0,0 @@
-/**
- * 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.
- */
-/**
- * @file This is the common View file for displaying Table/Grid to be used overall in the application.
- */
-define(['require',
-	'backbone',
-	'hbs!tmpl/common/TableLayout_tmpl',
-	'backgrid-filter',
-	'backgrid-paginator',
-	'backgrid-columnmanager',
-	'backgrid-sizeable',
-	'backgrid-orderable'
-],function(require,Backbone,FSTablelayoutTmpl){
-    'use strict';
-	
-	var FSTableLayout = Backbone.Marionette.Layout.extend(
-	/** @lends FSTableLayout */
-	{
-		_viewName : 'FSTableLayout',
-
-    	template: FSTablelayoutTmpl,
-
-		/** Layout sub regions */
-    	regions: {
-			'rTableList'	: 'div[data-id="r_tableList"]',
-			'rTableSpinner'	: 'div[data-id="r_tableSpinner"]',
-			'rPagination'	: 'div[data-id="r_pagination"]',
-			'rFooterRecords': 'div[data-id="r_footerRecords"]'
-		},
-
-    	// /** ui selector cache */
-    	ui: {
-    		selectPageSize :'select[data-id="pageSize"]'
-    	},
-
-		gridOpts : {
-			className: 'table table-bordered table-hover table-condensed backgrid',
-			emptyText : 'No Records found!'
-		},
-
-		/**
-		 * Backgrid.Filter default options
-		 */
-		filterOpts : {
-			placeholder: 'plcHldr.searchByResourcePath',
-			wait: 150
-		},
-
-		/**
-		 * Paginator default options
-		 */
-		paginatorOpts : {
-			// If you anticipate a large number of pages, you can adjust
-			// the number of page handles to show. The sliding window
-			// will automatically show the next set of page handles when
-			// you click next at the end of a window.
-			windowSize: 10, // Default is 10
-
-			// Used to multiple windowSize to yield a number of pages to slide,
-			// in the case the number is 5
-			slideScale: 0.5, // Default is 0.5
-
-			// Whether sorting should go back to the first page
-			goBackFirstOnSort: false // Default is true
-		},
-
-		/**
-	       page handlers for pagination
-	    */
-		controlOpts : {
-			rewind: {
-				label: "&#12298;",
-				title: "First"
-			},
-			back: {
-				label: "&#12296;",
-				title: "Previous"
-			},
-			forward: {
-				label: "&#12297;",
-				title: "Next"
-			},
-			fastForward: {
-				label: "&#12299;",
-				title: "Last"
-			}
-	    },
-	    columnOpts : {
-	    	initialColumnsVisible: 4,
-		    // State settings
-		    saveState: false,
-		    loadStateOnInit: true
-	    },
-
-		includePagination : true,
-
-		includeFilter : false,
-
-		includeHeaderSearch : false,
-
-		includePageSize : false,
-
-		includeFooterRecords : true,
-		
-		includeColumnManager : false,
-		
-		//includeSizeAbleColumns : false,
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['change ' + this.ui.selectPageSize]  = 'onPageSizeChange';
-			return events;
-		},
-
-    	/**
-		* intialize a new HDFSTableLayout Layout
-		* @constructs
-		*/
-		initialize: function(options) {
-			_.extend(this, _.pick(options,	'collection', 'columns', 'includePagination',
-											'includeHeaderSearch', 'includeFilter', 'includePageSize',
-											'includeFooterRecords','includeColumnManager','includeSizeAbleColumns'));
-
-			_.extend(this.gridOpts, options.gridOpts, {collection : this.collection, columns : this.columns});
-			_.extend(this.filterOpts, options.filterOpts);
-			_.extend(this.paginatorOpts, options.paginatorOpts);
-			_.extend(this.controlOpts, options.controlOpts);
-			_.extend(this.columnOpts, options.columnOpts);
-			
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-            this.listenTo(this.collection, 'request', function(){
-				this.$('div[data-id="r_tableSpinner"]').addClass('loading');
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-				this.$('div[data-id="r_tableSpinner"]').removeClass('loading');
-			},this);
-
-			this.listenTo(this.collection, 'reset', function(collection, response){
-				if(this.includePagination) {
-					this.renderPagination();
-				}
-				if(this.includeFooterRecords){
-					this.renderFooterRecords(this.collection.state);
-				}
-			},this);
-
-			/*This "sort" trigger event is fired when clicked on
-			'sortable' header cell (backgrid).
-			Collection.trigger event was fired because backgrid has
-			removeCellDirection function (backgrid.js - line no: 2088)
-			which is invoked when "sort" event is triggered
-			on collection (backgrid.js - line no: 2081).
-			removeCellDirection function - removes "ascending" and "descending"
-			which in turn removes chevrons from every 'sortable' header-cells*/
-			this.listenTo(this.collection, "backgrid:sort", function(){
-				this.collection.trigger("sort");
-			});
-
-			/*this.listenTo(this.collection, 'remove', function(model, collection, response){
-				if (model.isNew() || !this.includePagination) {
-					return;
-				}
-				if (this.collection.state && this.collection.state.totalRecords>0) {
-					this.collection.state.totalRecords-=1;
-				}
-				if (this.collection.length===0 && this.collection.state && this.collection.state.totalRecords>0) {
-
-					if (this.collection.state.totalRecords>this.collection.state.currentPage*this.collection.state.pageSize) {
-						this.collection.fetch({reset:true});
-					} else {
-						if (this.collection.state.currentPage>0) {
-							this.collection.state.currentPage-=1;
-							this.collection.fetch({reset:true});
-						}
-					}
-
-				} else if (this.collection.length===0 && this.collection.state && this.collection.state.totalRecords===0) {
-					this.collection.state.currentPage=0;
-					this.collection.fetch({reset:true});
-				}
-			}, this);*/
-
-			// It will show tool tip when td has ellipsis  Property
-			this.listenTo(this.collection, "backgrid:refresh", function(){
-				/*this.$('.table td').bind('mouseenter', function() {
-		            var $this = $(this);
-					if (this.offsetWidth < this.scrollWidth && !$this.attr('title')) {
-		                $this.attr('title', $this.text());
-		            }
-				});*/
-			},this);
-
-		},
-
-		/** on render callback */
-		onRender: function() {
-			this.renderTable();
-			if(this.includePagination) {
-				this.renderPagination();
-			}
-			if(this.includeFilter){
-				this.renderFilter();
-			}
-			if(!this.includePageSize){
-				this.ui.selectPageSize.remove();
-			}
-			if(this.includeFooterRecords){
-				this.renderFooterRecords(this.collection.state);
-			}
-			if(this.includeColumnManager){
-				this.renderColumnManager();
-			}
-//			if(this.includeSizeAbleColumns){
-//				this.renderSizeAbleColumns();
-//			}
-			this.$('[data-id="pageSize"]').val(this.collection.state.pageSize);
-			
-						
-		},
-		renderOrder : function(){
-			// Setup sortable column collection
-			
-			var columns = this.columns;
-			//columns.setPositions().sort();
-			
-			// Add sizeable columns
-			var sizeAbleCol = new Backgrid.Extension.SizeAbleColumns({
-				grid: this.getGridObj(),
-				collection: this.collection,
-				columns: columns
-			});
-			this.$('thead').before(sizeAbleCol.render().el);
-
-			// Make columns reorderable
-			var orderHandler = new Backgrid.Extension.OrderableColumns({
-			  grid: this.getGridObj(),
-			  sizeAbleColumns: sizeAbleCol
-			});
-			this.$('thead').before(orderHandler.render().el);
-
-		},
-		
-		/**
-		 * show table
-		 */
-		renderTable : function(){
-			var that = this;
-			this.rTableList.show(new Backgrid.Grid(this.gridOpts));
-		},
-
-		/**
-		 * show pagination buttons(first, last, next, prev and numbers)
-		 */
-		renderPagination : function(){
-			var options = _.extend({
-				collection: this.collection,
-				controls: this.controlOpts
-			}, this.paginatorOpts);
-
-			// TODO - Debug this part
-			if(this.rPagination){
-				this.rPagination.show(new Backgrid.Extension.Paginator(options));
-			}
-			else if(this.regions.rPagination){
-				this.$('div[data-id="r_pagination"]').show(new Backgrid.Extension.Paginator(options));
-			}
-		},
-
-		/**
-		 * show/hide pagination buttons of the grid
-		 */
-		showHidePager : function(){
-
-			if(!this.includePagination) {
-				return;
-			}
-
-			if(this.collection.state && this.collection.state.totalRecords > this.collection.state.pageSize) {
-				this.$('div[data-id="r_pagination"]').show();
-			} else {
-				this.$('div[data-id="r_pagination"]').hide();
-			}
-		},
-
-		/**
-		 * show/hide filter of the grid
-		 */
-		renderFilter : function(){
-			this.rFilter.show(new Backgrid.Extension.ServerSideFilter({
-				  collection: this.collection,
-				  name: ['name'],
-				  placeholder: 'plcHldr.searchByResourcePath',
-				  wait: 150
-			}));
-
-			setTimeout(function(){
-				that.$('table').colResizable({liveDrag :true});
-			},0);
-		},
-
-		/**
-		 * show/hide footer details of the list/collection shown in the grid
-		 */
-		renderFooterRecords : function(collectionState){
-			var collState 		= collectionState;
-			var totalRecords 	= collState.totalRecords || 0;
-			var pageStartIndex 	= totalRecords ? (collState.currentPage*collState.pageSize) : 0;
-			var pageEndIndex 	= pageStartIndex+this.collection.length;
-
-			this.$('[data-id="r_footerRecords"]').html('Showing '+(totalRecords ? pageStartIndex+1 : 0)+' to '+pageEndIndex+' of '+totalRecords+' entries');
-			return this;
-		},
-		/**
-		 * ColumnManager for the table
-		 */
-		renderColumnManager : function(){
-			var $el = this.$("[data-id='control']");
-			var colManager = new Backgrid.Extension.ColumnManager(this.columns, this.columnOpts);
-			// Add control
-			var colVisibilityControl = new Backgrid.Extension.ColumnManagerVisibilityControl({
-			    columnManager: colManager
-			});
-
-			$el.append(colVisibilityControl.render().el);
-		},
-		
-		/*renderSizeAbleColumns : function(){
-			// Add sizeable columns
-			var sizeAbleCol = new Backgrid.Extension.SizeAbleColumns({
-			  collection: this.collection,
-			  columns: this.columns,
-			  grid :this.getGridObj() 
-			});
-			this.$('thead').before(sizeAbleCol.render().el);
-
-			// Add resize handlers
-			var sizeHandler = new Backgrid.Extension.SizeAbleColumnsHandlers({
-			  sizeAbleColumns: sizeAbleCol,
-			  grid: this.getGridObj(),
-			  saveModelWidth: true
-			});
-			this.$('thead').before(sizeHandler.render().el);
-
-			// Listen to resize events
-			this.columns.on('resize', function(columnModel, newWidth, oldWidth) {
-			  console.log('Resize event on column; name, model, new and old width: ', columnModel.get("name"), columnModel, newWidth, oldWidth);
-			});
-		},/*
-
-		/** on close */
-		onClose: function(){
-		},
-
-		/**
-		 * get the Backgrid object
-		 * @return {null}
-		 */
-		getGridObj : function(){
-			if (this.rTableList.currentView){
-				return this.rTableList.currentView;
-			}
-			return null;
-		},
-
-		/**
-		 * handle change event on page size select box
-		 * @param  {Object} e event
-		 */
-		onPageSizeChange : function(e){
-			var pagesize = $(e.currentTarget).val();
-			this.collection.state.pageSize = parseInt(pagesize,10);
-
-			this.collection.state.currentPage = this.collection.state.firstPage;
-			delete this.collection.queryParams.lastPage;
-			this.collection.fetch({
-				sort: false,
-				reset: true,
-				cache: false
-			});
-		}
-	});
-
-	return FSTableLayout;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TimerView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TimerView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TimerView.js
deleted file mode 100644
index 01dcf92..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TimerView.js
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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','backbone','hbs!tmpl/common/TimerView_tmpl'],function(require,Backbone,TimerViewTmpl){
-    'use strict';
-	
-	var TimerView = Backbone.Marionette.ItemView.extend(
-	/** @lends TimerView */
-	{
-		_viewName : "TimerView",
-		
-    	template: TimerViewTmpl,
-    	/** ui selector cache */
-    	ui: {
-    		container : "#container",
-    		timerBtn : "[data-id='timerBtn']"
-    	},
-    	//tagName : "span",
-    	className : "timer",
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			events['click ' + this.ui.timerBtn]  = 'onTimerBtnClick';
-			return events;
-		},
-
-    	/**
-		* intialize a new TimerView ItemView 
-		* @constructs
-		*/
-		initialize: function(options) {
-			_.extend(this, _.pick(options, 'vent', 'globalVent'));
-			this.bindEvents();
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-			/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
-			this.listenTo(this.vent,'start:timer', this.startTimer, this);
-		},
-
-		/** on render callback */
-		onRender: function() {
-			//this.startTimer();
-		},
-		onTimerBtnClick : function(e){
-			var $el = $(e.currentTarget).find("i");
-			if($el.hasClass("fa-play")){
-				$el.removeClass().addClass("fa fa-stop").attr("title","Stop auto-refresh");
-				this.startTimer();
-			}else{
-				$el.removeClass().addClass("fa fa-play").attr("title","Start auto-refresh");;
-				this.clearTimerInterval();
-			}
-		},
-		startTimer : function(){
-//			var today = new Date(),that=this;
-//		    today.setHours(0, 0, 10, 0);
-//		    var startTime = function(){
-//		    	var h = today.getHours();
-//			    var m = today.getMinutes();
-//			    today.setSeconds(today.getSeconds() - 1);
-//			    var s = today.getSeconds();
-//			    m = that.checkTime(m);
-//			    s = that.checkTime(s);
-//			    that.ui.container.text(m + ":" + s);
-//			    var t = setTimeout(startTime, 1000);
-//		    }
-//		    startTime();
-			var time = 10,that=this;
-		    var initialOffset = '56';
-		    var i = 1;
-		    clearInterval(that.timerInterval);
-		    this.$('h6').show();
-		    this.timerInterval = setInterval(function() {
-		        that.$('.circle_animation').css('stroke-dashoffset', initialOffset-(i*(initialOffset/time)));
-		        that.$('h6').text(i);
-		        if (i == time) {
-		        	clearInterval(that.timerInterval);
-		            setTimeout(function(){
-		            	if(! that.isTimerManuallyStopped()){
-		            		that.timerCallBack();
-		            	}
-		            },1000);
-		        }
-		        i++;  
-		    }, 1000);
-		},
-		timerCallBack : function(){
-			this.vent.trigger("timer:end");
-			//this.startTimer();
-		},
-		clearTimerInterval : function(){
-			this.$('h6').text(0).hide();
-			this.$('.circle_animation').css('stroke-dashoffset', "56.2px");
-			clearInterval(this.timerInterval);
-		},
-		isTimerManuallyStopped : function(){
-			return this.ui.timerBtn.find('i').hasClass("fa-play");
-		},
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return TimerView;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TopNav.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TopNav.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TopNav.js
deleted file mode 100644
index d126185..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/TopNav.js
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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','backbone','hbs!tmpl/common/TopNav_tmpl','jquery.cookie'],function(require,Backbone,TopNav_tmpl){
-    'use strict';
-
-	var TopNav = Backbone.Marionette.ItemView.extend(
-	/** @lends TopNav */
-	{
-		_viewName : TopNav,
-		
-    	template: TopNav_tmpl,
-    	templateHelpers : function(){
-    		
-    	},
-        
-    	/** ui selector cache */
-    	ui: {},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			//events['change ' + this.ui.input]  = 'onInputChange';
-			events['click li']  = 'onNavMenuClick';
-			return events;
-		},
-
-    	/**
-		* intialize a new TopNav ItemView 
-		* @constructs
-		*/
-		initialize: function(options) {
-			console.log("initialized a TopNav ItemView");
-			_.extend(this, _.pick(options, ''));
-			this.bindEvents();
-			this.appState = options.appState;
-        	this.appState.on('change:currentTab', this.highlightNav,this);
-		},
-
-		/** all events binding here */
-		bindEvents : function(){
-			/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
-			/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
-		},
-
-		/** on render callback */
-		onRender: function() {
-			var that = this;
-			this.initializePlugins();
-			$('.page-logo').on('click',function(){
-				that.$('ul li').removeClass('active');
-				that.$('ul li:first').addClass('active');
-			});
-			$.cookie('clientTimeOffset', new Date().getTimezoneOffset());
-		},
-
-		/** all post render plugin initialization */
-		initializePlugins: function(){
-		},
-		onNavMenuClick : function(e){
-			var ele = $(e.currentTarget);
-			this.$('ul li').removeClass('active');
-			ele.addClass('active');
-		},
-		highlightNav : function(e){
-			this.$('ul li').removeClass('active');
-        	this.$('#nav' + this.appState.get('currentTab')).parent().addClass('active');
-        },
-		/** on close */
-		onClose: function(){
-		}
-
-	});
-
-	return TopNav;
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
deleted file mode 100644
index e144ae9..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/dashboard/BubbleGraphTableLayoutView.js
+++ /dev/null
@@ -1,716 +0,0 @@
-/**
-* 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',
-	'backbone',
-	'moment',
-	'utils/Globals',
-	'utils/Utils',
-	'utils/ViewUtils',
-	'd3.tip',
-	'collections/VLogLevelList',
-	'collections/VLogList',
-	'models/VGraphInfo',
-	'hbs!tmpl/dashboard/BubbleGraphTableLayoutView_tmpl',
-	'views/common/JBDialog',
-	'select2'
-],function(require,Backbone,moment,Globals,Utils,ViewUtils,tip,VLogLevel,VLogList,VGraphInfo,BubbleGraphTableLayoutViewTmpl,JBDialog){
-	'use strict';
-
-	return Backbone.Marionette.Layout.extend(
-	/** @lends BubbleGraphTableLayoutView */
-	{
-		_viewName : 'BubbleGraphTableLayoutView',
-
-		template: BubbleGraphTableLayoutViewTmpl,
-
-		/** Layout sub regions */
-		regions: {
-			RLogTable : "#rLogTable",
-			RComponentList : "#componentList",
-			RHostList : "#hostList",
-			RTimer : "[data-id='timer']"
-		},
-
-		/** ui selector cache */
-		ui: {
-			graph : "#graphAgg",
-			viewType: "input[name='viewType']",
-			hostList : "#hostList",
-			componentList : "#componentList"
-		},
-
-		/** ui events hash */
-		events: function() {
-			var events = {};
-			events['click [data-id="refresh-tab"]']  = 'onTabRefresh';
-			events['change ' + this.ui.viewType]  = 'onViewTypeChange';
-			events['click .quickMenu li']  = 'onQuickMenuClick';
-			return events;
-		},
-
-		/**
-		 * intialize a new LogLevelView Layout
-		 * @constructs
-		 */
-		initialize: function(options) {
-			_.extend(this, _.pick(options,'vent','globalVent','params','quickHelp','columns'));
-			(_.isUndefined(this.quickHelp)) ? this.quickHelp = false : "";
-			this.collection = new VLogList([], {
-                state: {
-                    firstPage: 0,
-                    pageSize: 25
-                }
-            });
-			this.collection.url = Globals.baseURL + "service/logs";
-			this.graphModel = new VGraphInfo();
-			this.bindEvents();
-			this.graphParams = this.params;
-
-		},
-		bindEvents : function(){
-			this.listenTo(this.collection,"reset",function(collection){
-				//this.populateDetails();
-			},this);
-			this.listenTo(this.collection, "backgrid:refresh",function(){
-				$(".contextMenuBody [data-id='F']").show();
-            	$(".contextMenuBody").hide();
-				this.$(".loader").hide();
-            },this);
-			this.listenTo(this.collection, 'request', function(){
-				this.$("#loader").show();
-			},this);
-            this.listenTo(this.collection, 'sync error', function(){
-            	this.$("#loader").hide();
-			},this);
-            this.listenTo(this.vent,"main:search tree:search level:filter type:mustNot type:mustBe logtime:filter search:include:exclude " +
-            		Globals.eventName.serviceLogsIncludeColumns+" "+Globals.eventName.serviceLogsExcludeColumns,function(value){
-            	this.fetchAllTogether(value);
-            	this.selectionText="";
-            });
-//            });
-            this.listenTo(this.vent,"reinitialize:filter:bubbleTable",function(value){
-            	this.reinitializeBubbleTableFilter(value);
-            });
-            this.listenTo(this.globalVent, "globalExclusion:component:message", function(value) {
-                this.fetchAllTogether(value);
-            }, this);
-            this.listenTo(this.vent, "timer:end", function(value) {
-            	ViewUtils.setLatestTimeParams(this.params);
-            	this.vent.trigger("tab:refresh",this.params);
-            	var that = this;
-            	this.fetchTableCollection(this.params,{
-            		complete : function(){
-            			that.vent.trigger("start:timer");
-            		}
-            	});
-            }, this);
-            this.listenTo(this.vent, "tab:refresh", function(value) {
-            	this.fetchTableCollection(value);
-            },this);
-		},
-		fetchAllTogether : function(value){
-			//this.$("#loaderGraph").show();
-			this.fetchTableData(value);
-        	_.extend(this.graphParams,value);
-        	//this.fetchGraphData(this.graphParams);
-		},
-		onRender : function(){
-			var that = this;
-			this.fetchTableData((this.params) ? this.params : {q:"*:*"});
-			this.renderComponentList();
-      this.renderTable();
-      this.renderHostList();
-      this.renderTimer();
-      if(this.quickHelp){
-        this.initializeContextMenu();
-        this.bindContextMenuClick();
-      }
-		},
-		onShow : function(){
-			//this.fetchGraphData((this.params) ? this.params : {q:"*:*"});
-		},
-		onTabRefresh : function(){
-			ViewUtils.setLatestTimeParams(this.params);
-			this.vent.trigger("tab:refresh",this.params);
-		},
-		onNewTabIconClick : function($el){
-			var host,component,id,that=this;
-			if($el.data("host") && $el.data("node")){
-				host = $el.data("host");
-				component = $el.data("node");
-				id = $el.data("id");
-				that.globalVent.trigger("render:tab",{
-					params:_.extend({},{
-						host_name :  host,
-						component_name : component,
-						sourceLogId: id
-					},that.graphParams,{hostList:null}),
-					globalVent : that.globalVent
-				});
-			}
-		},
-		renderTable : function(){
-			var that = this;
-			var cols = new Backgrid.Columns(this.getColumns());
-			require(['views/common/TableLayout','views/common/CustomBackgrid'],function(TableLayout,CustomBackgrid){
-				var IdRow = Backgrid.Row.extend({
-				    render: function() {
-				        IdRow.__super__.render.apply(this, arguments);
-				        if (this.model.has("id")) {
-				            this.$el.attr("data-id", this.model.get('id'));
-				        }
-				        return this;
-				    }
-				});
-				that.RLogTable.show(new TableLayout({
-					columns: cols,
-					collection: that.collection,
-					includeFilter : false,
-					includePagination : true,
-					includePageSize : true,
-					includeFooterRecords : true,
-					includeColumnManager : true,
-					columnOpts : {
-				    	initialColumnsVisible: 3,
-				    	saveState : false
-					},
-					gridOpts : {
-						header : CustomBackgrid,
-						row: IdRow,
-						emptyText : 'No records found!',
-						className: 'table table-bordered table-hover table-condensed backgrid table-quickMenu'
-					},
-					filterOpts : {},
-					paginatorOpts : {}
-				}));
-			});
-		},
-		renderComponentList : function(){
-			var that = this;
-			require(['views/dashboard/ComponentListView'],function(ComponentListView){
-				that.RComponentList.show(new ComponentListView({
-					vent : that.vent,
-					globalVent : that.globalVent,
-					params : that.params
-				}));
-			})
-		},
-		renderHostList : function(){
-			var that = this;
-			require(['views/dashboard/HostListView'],function(HostListView){
-				that.RHostList.show(new HostListView({
-					vent : that.vent,
-					globalVent : that.globalVent,
-					params : that.params
-				}));
-			})
-		},
-		renderTimer : function(){
-			var that = this;
-			require(['views/common/TimerView'],function(TimerView){
-				that.RTimer.show(new TimerView({
-					vent : that.vent,
-					globalVent : that.globalVent
-				}));
-			});
-		},
-		getColumns : function(){
-			var timeZone = moment().zoneAbbr(),
-			 	cols = {},
-			 	that = this;
-			var columns = {
-					logtime : {
-            name: "logtime",
-						label: "Log Time "+(! _.isEmpty(timeZone) ? "("+timeZone+")":""),
-						cell: "html",
-						editable: false,
-						sortType: 'toggle',
-						direction: "descending",
-						orderable : true,
-						displayOrder :1,
-						width : 17,
-						className : "logTime",
-						formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-							fromRaw: function(rawValue, model){
-								var str="";
-								if(rawValue)
-									str += "<div style='position:relative'><p style='margin-left:20px'>"+moment(rawValue).format("YYYY-MM-DD HH:mm:ss,SSS")+"</p>";
-								if(model.get("type"))
-									str += "<p style='margin-left:20px'>"+(model.get("level") ? "<label class='label label-"+model.get("level")+"'>"+model.get("level")+"</label>" : "")+
-											"<strong>"+model.get("type")+"</strong>" +
-											"</p>";
-								str += '<div class="dropdown quickMenu">' +
-								  '<a class="btn btn-success btn-xs btn-quickMenu" data-toggle="dropdown">' +
-								  '<i class="fa fa-ellipsis-v"></i></span></a>' +
-								  '<ul class="dropdown-menu dropupright">' +
-								    '<li data-id="A_B"><a href="javascript:void(0)">Preview</a></li>' +
-								    "<li data-id='N_T'><a title='Open logs in new tab' data-type='C' data-host='"+model.get("host")+"' data-node='"+model.get("type")+"' data-id='"+model.get("id")+"' href='javascript:void(0)' class=''>Go To Log</a></li>" +
-								    "<li data-id='C_M'><a title='Add to compare' data-type='C' data-host='"+model.get("host")+"' data-node='"+model.get("type")+"' data-id='"+model.get("id")+"' href='javascript:void(0)' class=''>Add to Compare</a></li>" +
-								  '</ul>' +
-								'</div></div>';
-								return str;
-							}
-						})
-					},
-					log_message : {
-            name: "log_message",
-						label: "Message",
-						cell: "html",
-						editable: false,
-						sortType: 'toggle',
-						sortable : false,
-						orderable : true,
-						displayOrder :4,
-						className : "logMessage",
-						formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-							fromRaw: function(rawValue, model){
-								return (rawValue) ? "<pre>"+Utils.escapeHtmlChar(rawValue)+"</pre>" : "";
-							}
-						})
-					},
-					host : {
-						label: "Host",
-						cell: "String",
-						editable: false,
-						sortType: 'toggle',
-						sortable : false,
-						orderable : true,
-						displayOrder :5,
-						width : 10
-					},
-					thread_name : {
-						label: "Thread",
-						cell: "String",
-						editable: false,
-						sortType: 'toggle',
-						sortable : false,
-						orderable : true,
-						displayOrder :5,
-						width : 10
-					},
-					logger_name : {
-						label : "Logger",
-						cell: "String",
-						editable: false,
-						sortType: 'toggle',
-						sortable : false,
-						orderable : true,
-						displayOrder :6,
-						width : 13
-					},
-					bundle_id : {
-						label : "Bundle Id",
-						cell: "String",
-						editable: false,
-						sortType: 'toggle',
-						sortable : false,
-						orderable : true,
-						displayOrder :6,
-						width : 6
-					}
-
-			};
-      _.each(this.columns, function(value){
-        var name = Globals.invertedServiceLogMappings[value];
-        if (columns[name] === undefined) {
-          var columnObj = {
-            name: Globals.invertedServiceLogMappings[value],
-            label:value,
-            cell: "String",
-            sortType: 'toggle',
-            editable: false
-          };
-          columns[name] = columnObj;
-        } else {
-          if (columns[name] && columns[name].label) {
-            columns[name].label = value;
-          }
-        }
-      });
-			return this.collection.constructor.getTableCols(columns, this.collection);
-		},
-		fetchTableData : function(params){
-			var that = this;
-			$.extend(this.collection.queryParams,params);
-			this.collection.getFirstPage({
-				reset:true,
-				beforeSend : function(){
-        			that.$("#loaderGraph").show();
-        			that.$(".loader").show();
-        		},
-        		complete : function(){
-					that.$("#loaderGraph").hide();
-					that.$(".loader").hide();
-				}
-			});
-		},
-		fetchTableCollection : function(queryParams, param){
-			var that = this;
-			$.extend(this.collection.queryParams,queryParams);
-			this.collection.fetch(_.extend({
-				reset:true,
-				beforeSend : function(){
-        			that.$("#loaderGraph").show();
-        			that.$(".loader").show();
-        		},
-        		complete : function(){
-					that.$("#loaderGraph").hide();
-					that.$(".loader").hide();
-				}
-			},param));
-		},
-		fetchGraphData : function(params){
-			var that = this;
-			that.$(".loader").show();
-			this.graphModel.fetch({
-				dataType:"json",
-				data : params,
-				success : function(data,textStatus,jqXHR){
-					that.renderGraph();
-				},
-				error : function(){
-				},
-				complete : function(){
-					that.$(".loader").hide();
-				}
-			});
-		},
-		reinitializeBubbleTableFilter : function(values){
-			this.fetchTableData(values);
-			//this.fetchGraphData(values);
-		},
-		onViewTypeChange: function(e){
-			var that = this;
-			var val = that.$("[name='viewType']:checked").val();
-			this.toggleViewType(val);
-		},
-		toggleViewType : function(val){
-			this.$("[data-id='table']").hide();
-			this.ui.graph.hide();
-			this.ui.hostList.hide();
-			this.ui.componentList.hide();
-			this.$(".alert").hide();
-			if(val === "G"){
-				this.ui.graph.show();
-				this.$(".alert").show();
-			}else if(val === "T"){
-				this.$(".alert").hide();
-				this.$("[data-id='table']").show();
-			}else if(val === "H"){
-				this.ui.hostList.show();
-			}else
-				this.ui.componentList.show();
-
-		},
-		bindContextMenuClick : function(){
-			var that = this;
-			$("body").on("click",".contextMenuBody li a",function(e){
-				that.onDropDownMenuClick(e);
-			});
-		},
-		initializeContextMenu : function(){
-			var that = this;
-			$('body').on("mouseup.contextMenu",function(e){
-				var selection;
-				if (window.getSelection) {
-			          selection = window.getSelection();
-			        } else if (document.selection) {
-			          selection = document.selection.createRange();
-			        }
-				if(_.isEmpty(selection.toString()) && ($(".contextMenuBody").is(":hidden")) ){
-					that.selectionText ="";
-				}
-			});
-			this.$el.on('mouseup contextmenu', ".logMessage", function(e){
-		        var selection;
-		        e.stopPropagation();
-
-		        var range = window.getSelection().getRangeAt(0);
-				var selectionContents = range.cloneContents();
-				selection = selectionContents.textContent;
-
-		        setTimeout(function(){
-		        	that.selectionCallBack(selection,e)
-		        },1);
-
-
-		    });
-		},
-		selectionCallBack : function(selection,e){
-			this.RLogTable.currentView.$el.removeHighlight(true);
-			if(this.selectionText != selection.toString()){
-				this.selectionText = selection.toString();
-			}else{
-				$(".contextMenuBody [data-id='F']").show();
-				$(".contextMenuBody").hide();
-				return;
-			}
-			if(selection.toString() && selection && (! _.isEmpty(selection.toString().trim())) ){
-				this.RLogTable.currentView.$el.find(".logMessage").highlight(selection.toString().trim(),true,e.currentTarget);
-				$(".contextMenuBody [data-id='F']").hide();
-				$(".contextMenuBody").show();
-				$(".contextMenuBody").css({
-					'top':e.pageY - 40,
-					'left':e.pageX
-				});
-			}else{
-				this.RLogTable.currentView.$el.removeHighlight(true);
-				$(".contextMenuBody [data-id='F']").show();
-				$(".contextMenuBody").hide();
-			}
-		},
-		onDropDownMenuClick : function(e){
-			var $el = $(e.currentTarget),type=$el.data("id");
-			if(! _.isEmpty(this.selectionText)){
-				if(type === "I" || type === "E"){
-					this.vent.trigger("toggle:facet",{viewName:((type === "I") ? "include" : "exclude") +"ServiceColumns",
-						key:Globals.serviceLogsColumns["log_message"],value:this.selectionText});
-				}else if(type === "IA" || type === "EA"){
-					this.vent.trigger("toggle:facet",{viewName:((type === "IA") ? "include" : "exclude") +"ServiceColumns",
-						key:Globals.serviceLogsColumns["log_message"],value:"*"+this.selectionText+"*"});
-				}
-				$(".contextMenuBody [data-id='F']").show();
-				$(".contextMenuBody").hide();
-			}else{
-				$(".contextMenuBody").hide();
-			}
-		},
-		onQuickMenuClick : function(e){
-			var that = this,$el = $(e.currentTarget);
-			if($el.data("id") === "A_B"){
-				var model = this.collection.get($el.parents("tr").data("id"));
-				require(["views/dialog/DetailLogFileView"],function(view){
-					that.renderDetailLogFileView(new view({
-						model : model,
-						collection : that.collection
-					}));
-				});
-			}else if ($el.data("id") === "N_T"){
-				this.onNewTabIconClick($el.find('a'));
-			}else if ($el.data("id") === "C_M"){
-				this.globalVent.trigger("add:compare",$el.find('a'));
-			}
-
-		},
-		renderDetailLogFileView : function(view){
-			var that = this;
-			var opts = {
-                    title: view.model.get("host")+" -> "+view.model.get("type"),
-                    className : "ui-dialog-content ui-widget-content logFile",
-                    content: view,
-                    viewType: 'logfile',
-                    resizable: false,
-                    appendTo: "body",
-                    modal: true,
-                    width: 950,
-                    height: 572,
-                    buttons: [{
-                        id: "cancelBtn",
-                        text: "Close",
-                        "class": "btn btn-default",
-                        click: function() {
-                            that.onDialogClosed();
-                        }
-                    }]
-                };
-			var dialog = that.dialog = new JBDialog(opts).render();
-            dialog.open();
-            dialog.on("dialog:closing",function(){
-            	$('body').css('overflow', 'auto');
-            })
-            $('body').css('overflow', 'hidden');
-		},
-        onDialogClosed: function() {
-            if (this.dialog) {
-                this.dialog.close && this.dialog.close();
-                this.dialog.remove && this.dialog.remove();
-                this.dialog = null;
-            }
-        },
-		renderGraph : function() {
-			var that =this,diameter;
-			if(this.diameter)
-				diameter = this.diameter;
-			else
-				diameter =this.diameter = this.ui.graph.width() === 0 ? 935 : this.ui.graph.width(); /*880;*///this.ui.graph.width();//960;
-			if(! (_.isArray(this.graphModel.get("graphData")) && this.graphModel.get("graphData").length > 0)){
-				this.ui.graph.text("no data");
-				return
-			}
-
-			var root = {
-				name : "",
-				dataList : this.graphModel.get("graphData")
-			};
-
-			var margin = 20;
-			this.ui.graph.empty();
-			//		var color = d3.scale.linear()
-			//		    .domain([-1, 5])
-			//		    .range(["hsl(152,90%,90%)", "hsl(228,30%,40%)"])
-			//		    .interpolate(d3.interpolateHcl);
-			var color = d3.scale.ordinal().domain([ 0, 1 ])
-			//.range(["#ECFCBD","#ECFCBD","#ECE78F","#f4f4c8"]);
-			.range([ "#dddddd", "#cccccc", "#F5F5F5" ]);
-			var pack = d3.layout.pack().padding(2).size(
-					[ diameter - margin, diameter - margin ]).value(
-					function(d) {
-						return d.count;
-					}).children(function(d) {
-				return d.dataList;
-			})
-
-			var svg = d3.select(this.ui.graph[0]).append("svg")
-						.attr("width",diameter)
-						.attr("height", diameter)
-						.attr("class", "bubbleGraph")
-						.append("g")
-						.attr("transform","translate(" + diameter / 2 + "," + diameter / 2 + ")");
-
-			//d3.json("flare.json", function(error, root) {
-
-			var focus = root, nodes = pack.nodes(root), view;
-			/*
-			 * Tip
-			 */
-			var tipCirclePack = tip().attr('class', 'd3-tip')
-					.offset([ -10, 0 ]).html(function(d) {
-						var tempName = "<div>";
-						if (d.parent) {
-							if (d.depth > 1)
-								tempName += (d.parent.name.split(".")[0]) + " => ";
-							tempName += d.name;
-						}
-						return tempName + "</div>";
-					})
-			svg.call(tipCirclePack);
-			var circle = svg.selectAll("circle").data(nodes).enter().append(
-					"circle").attr(
-					"class",
-					function(d) {
-						return d.parent ? d.children ? "node"
-								: "node node--leaf " + d.name
-								: "node node--root";
-					}).style("fill", function(d) {
-				return d.children ? color(d.depth) : null;
-			}).on("click", function(d) {
-				if (d3.event.shiftKey && d.depth == 2) {
-					that.globalVent.trigger("render:tab",/*new LogFileView(*/{
-						params : _.extend({
-							host_name :  d.parent.name,
-							component_name : d.name,
-//							level : that.collection.queryParams.level,
-//							iMessage : that.collection.queryParams.iMessage,
-//							eMessage : that.collection.queryParams.eMessage,
-//							query : that.collection.queryParams.query
-						},that.collection.queryParams,{hostList:null}),
-						globalVent : that.globalVent
-					}/*)*/);
-				} else {
-					if (focus !== d)
-						zoom(d), d3.event.stopPropagation();
-				}
-
-			}).on('mouseover', function(d, i) {
-				if (d.x) {
-					tipCirclePack.show(d);
-				}
-			}).on('mouseout', function(d, i) {
-				if (d.x) {
-					tipCirclePack.hide(d);
-				}
-			});
-
-			var text = svg.selectAll("text").data(nodes).enter().append("text")
-					.attr("class", "label").style("fill-opacity", function(d) {
-						return d.parent === root ? 1 : 0;
-					}).style("display", function(d) {
-						return d.parent === root ? null : "none";
-					}).text(function(d) {
-						if (d.count) {
-							if (d.count > 0){
-								if(d.depth === 1){
-									return d.name.split(".")[0];
-								}else
-									return d.name;
-							}
-							else
-								return "";
-						} else
-							return d.name;
-
-					});
-
-			var node = svg.selectAll("circle,text");
-
-			d3.select(this.ui.graph[0]).style("background", color(-1)).on(
-					"click", function() {
-						zoom(root);
-					});
-
-			zoomTo([ root.x, root.y, root.r * 2 + margin ]);
-			function zoom(d) {
-				var focus0 = focus;
-				focus = d;
-
-				var transition = d3.transition().duration(
-						d3.event.altKey ? 7500 : 750).tween(
-						"zoom",
-						function(d) {
-							var i = d3.interpolateZoom(view, [ focus.x,
-									focus.y, focus.r * 2 + margin ]);
-							return function(t) {
-								zoomTo(i(t));
-							};
-						});
-
-				transition.selectAll("#"+that.ui.graph.attr("id")+" text").filter(
-						function(d) {
-							return d.parent === focus
-									|| this.style.display === "inline";
-						}).style("fill-opacity", function(d) {
-					return d.parent === focus ? 1 : 0;
-				}).each("start", function(d) {
-					if (d.parent === focus)
-						this.style.display = "inline";
-				}).each("end", function(d) {
-					if (d.parent !== focus)
-						this.style.display = "none";
-				});
-			}
-
-			function zoomTo(v) {
-				var k = diameter / v[2];
-				view = v;
-				node.attr("transform", function(d) {
-					return "translate(" + (d.x - v[0]) * k + "," + (d.y - v[1])
-							* k + ")";
-				});
-				circle.attr("r", function(d) {
-					return d.r * k;
-				});
-			}
-		},
-		onClose : function(){
-			$('body').unbind("mouseup.contextMenu");
-		}
-	});
-
-
-});


[29/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.ttf
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.ttf b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index d365924..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.ttf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff
deleted file mode 100644
index b9bd17e..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff2
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff2 b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff2
deleted file mode 100644
index 3311d58..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/fonts/fontawesome-webfont.woff2 and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/animated.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/animated.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/animated.less
deleted file mode 100644
index 66ad52a..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/animated.less
+++ /dev/null
@@ -1,34 +0,0 @@
-// Animated Icons
-// --------------------------
-
-.@{fa-css-prefix}-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-          animation: fa-spin 2s infinite linear;
-}
-
-.@{fa-css-prefix}-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-          animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
-
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/bordered-pulled.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/bordered-pulled.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/bordered-pulled.less
deleted file mode 100644
index 0c90eb5..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/bordered-pulled.less
+++ /dev/null
@@ -1,16 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.@{fa-css-prefix}-border {
-  padding: .2em .25em .15em;
-  border: solid .08em @fa-border-color;
-  border-radius: .1em;
-}
-
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.@{fa-css-prefix} {
-  &.pull-left { margin-right: .3em; }
-  &.pull-right { margin-left: .3em; }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/core.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/core.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/core.less
deleted file mode 100644
index f814f1e..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/core.less
+++ /dev/null
@@ -1,13 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.@{fa-css-prefix} {
-  display: inline-block;
-  font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  transform: translate(0, 0); // ensures no half-pixel rendering in firefox
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/fixed-width.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/fixed-width.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/fixed-width.less
deleted file mode 100644
index 110289f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/fixed-width.less
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.@{fa-css-prefix}-fw {
-  width: (18em / 14);
-  text-align: center;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/font-awesome.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/font-awesome.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/font-awesome.less
deleted file mode 100644
index 1f45c63..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/font-awesome.less
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
- *  Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-
-@import "variables.less";
-@import "mixins.less";
-@import "path.less";
-@import "core.less";
-@import "larger.less";
-@import "fixed-width.less";
-@import "list.less";
-@import "bordered-pulled.less";
-@import "animated.less";
-@import "rotated-flipped.less";
-@import "stacked.less";
-@import "icons.less";

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/icons.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/icons.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/icons.less
deleted file mode 100644
index c265de5..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/icons.less
+++ /dev/null
@@ -1,596 +0,0 @@
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-
-.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }
-.@{fa-css-prefix}-music:before { content: @fa-var-music; }
-.@{fa-css-prefix}-search:before { content: @fa-var-search; }
-.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }
-.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }
-.@{fa-css-prefix}-star:before { content: @fa-var-star; }
-.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }
-.@{fa-css-prefix}-user:before { content: @fa-var-user; }
-.@{fa-css-prefix}-film:before { content: @fa-var-film; }
-.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }
-.@{fa-css-prefix}-th:before { content: @fa-var-th; }
-.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }
-.@{fa-css-prefix}-check:before { content: @fa-var-check; }
-.@{fa-css-prefix}-remove:before,
-.@{fa-css-prefix}-close:before,
-.@{fa-css-prefix}-times:before { content: @fa-var-times; }
-.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }
-.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }
-.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }
-.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }
-.@{fa-css-prefix}-gear:before,
-.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }
-.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }
-.@{fa-css-prefix}-home:before { content: @fa-var-home; }
-.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }
-.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }
-.@{fa-css-prefix}-road:before { content: @fa-var-road; }
-.@{fa-css-prefix}-download:before { content: @fa-var-download; }
-.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }
-.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }
-.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }
-.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }
-.@{fa-css-prefix}-rotate-right:before,
-.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }
-.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }
-.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }
-.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }
-.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }
-.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }
-.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }
-.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }
-.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }
-.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }
-.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }
-.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }
-.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }
-.@{fa-css-prefix}-book:before { content: @fa-var-book; }
-.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }
-.@{fa-css-prefix}-print:before { content: @fa-var-print; }
-.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }
-.@{fa-css-prefix}-font:before { content: @fa-var-font; }
-.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }
-.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }
-.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }
-.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }
-.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }
-.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }
-.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }
-.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }
-.@{fa-css-prefix}-list:before { content: @fa-var-list; }
-.@{fa-css-prefix}-dedent:before,
-.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }
-.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }
-.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }
-.@{fa-css-prefix}-photo:before,
-.@{fa-css-prefix}-image:before,
-.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }
-.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }
-.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }
-.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }
-.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }
-.@{fa-css-prefix}-edit:before,
-.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }
-.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }
-.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }
-.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }
-.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }
-.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }
-.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }
-.@{fa-css-prefix}-play:before { content: @fa-var-play; }
-.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }
-.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }
-.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }
-.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }
-.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }
-.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }
-.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }
-.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }
-.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }
-.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }
-.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }
-.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }
-.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }
-.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }
-.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }
-.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }
-.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }
-.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }
-.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }
-.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }
-.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }
-.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }
-.@{fa-css-prefix}-mail-forward:before,
-.@{fa-css-prefix}-share:before { content: @fa-var-share; }
-.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }
-.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }
-.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }
-.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }
-.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }
-.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }
-.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }
-.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }
-.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }
-.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }
-.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }
-.@{fa-css-prefix}-warning:before,
-.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }
-.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }
-.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }
-.@{fa-css-prefix}-random:before { content: @fa-var-random; }
-.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }
-.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }
-.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }
-.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }
-.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }
-.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }
-.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }
-.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }
-.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }
-.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }
-.@{fa-css-prefix}-bar-chart-o:before,
-.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }
-.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }
-.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }
-.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }
-.@{fa-css-prefix}-key:before { content: @fa-var-key; }
-.@{fa-css-prefix}-gears:before,
-.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }
-.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }
-.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }
-.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }
-.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }
-.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }
-.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }
-.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }
-.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }
-.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }
-.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }
-.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }
-.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }
-.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }
-.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }
-.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }
-.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }
-.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }
-.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }
-.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }
-.@{fa-css-prefix}-facebook-f:before,
-.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }
-.@{fa-css-prefix}-github:before { content: @fa-var-github; }
-.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }
-.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }
-.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }
-.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }
-.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }
-.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }
-.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }
-.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }
-.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }
-.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }
-.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }
-.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }
-.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }
-.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }
-.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }
-.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }
-.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }
-.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }
-.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }
-.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }
-.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }
-.@{fa-css-prefix}-group:before,
-.@{fa-css-prefix}-users:before { content: @fa-var-users; }
-.@{fa-css-prefix}-chain:before,
-.@{fa-css-prefix}-link:before { content: @fa-var-link; }
-.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }
-.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }
-.@{fa-css-prefix}-cut:before,
-.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }
-.@{fa-css-prefix}-copy:before,
-.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }
-.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }
-.@{fa-css-prefix}-save:before,
-.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }
-.@{fa-css-prefix}-square:before { content: @fa-var-square; }
-.@{fa-css-prefix}-navicon:before,
-.@{fa-css-prefix}-reorder:before,
-.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }
-.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }
-.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }
-.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }
-.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }
-.@{fa-css-prefix}-table:before { content: @fa-var-table; }
-.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }
-.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }
-.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }
-.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }
-.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }
-.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }
-.@{fa-css-prefix}-money:before { content: @fa-var-money; }
-.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }
-.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }
-.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }
-.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }
-.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }
-.@{fa-css-prefix}-unsorted:before,
-.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }
-.@{fa-css-prefix}-sort-down:before,
-.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }
-.@{fa-css-prefix}-sort-up:before,
-.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }
-.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }
-.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }
-.@{fa-css-prefix}-rotate-left:before,
-.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }
-.@{fa-css-prefix}-legal:before,
-.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }
-.@{fa-css-prefix}-dashboard:before,
-.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }
-.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }
-.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }
-.@{fa-css-prefix}-flash:before,
-.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }
-.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }
-.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }
-.@{fa-css-prefix}-paste:before,
-.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }
-.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }
-.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }
-.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }
-.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }
-.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }
-.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }
-.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }
-.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }
-.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }
-.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }
-.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }
-.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }
-.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }
-.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }
-.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }
-.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }
-.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }
-.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }
-.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }
-.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }
-.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }
-.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }
-.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }
-.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }
-.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }
-.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }
-.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }
-.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }
-.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }
-.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }
-.@{fa-css-prefix}-mobile-phone:before,
-.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }
-.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }
-.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }
-.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }
-.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }
-.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }
-.@{fa-css-prefix}-mail-reply:before,
-.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }
-.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }
-.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }
-.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }
-.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }
-.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }
-.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }
-.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }
-.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }
-.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }
-.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }
-.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }
-.@{fa-css-prefix}-code:before { content: @fa-var-code; }
-.@{fa-css-prefix}-mail-reply-all:before,
-.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }
-.@{fa-css-prefix}-star-half-empty:before,
-.@{fa-css-prefix}-star-half-full:before,
-.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }
-.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }
-.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }
-.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }
-.@{fa-css-prefix}-unlink:before,
-.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }
-.@{fa-css-prefix}-question:before { content: @fa-var-question; }
-.@{fa-css-prefix}-info:before { content: @fa-var-info; }
-.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }
-.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }
-.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }
-.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }
-.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }
-.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }
-.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }
-.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }
-.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }
-.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }
-.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }
-.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }
-.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }
-.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }
-.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }
-.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }
-.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }
-.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }
-.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }
-.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }
-.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }
-.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }
-.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }
-.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }
-.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }
-.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }
-.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }
-.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }
-.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }
-.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }
-.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }
-.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }
-.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }
-.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }
-.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }
-.@{fa-css-prefix}-toggle-down:before,
-.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }
-.@{fa-css-prefix}-toggle-up:before,
-.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }
-.@{fa-css-prefix}-toggle-right:before,
-.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }
-.@{fa-css-prefix}-euro:before,
-.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }
-.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }
-.@{fa-css-prefix}-dollar:before,
-.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }
-.@{fa-css-prefix}-rupee:before,
-.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }
-.@{fa-css-prefix}-cny:before,
-.@{fa-css-prefix}-rmb:before,
-.@{fa-css-prefix}-yen:before,
-.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }
-.@{fa-css-prefix}-ruble:before,
-.@{fa-css-prefix}-rouble:before,
-.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }
-.@{fa-css-prefix}-won:before,
-.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }
-.@{fa-css-prefix}-bitcoin:before,
-.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }
-.@{fa-css-prefix}-file:before { content: @fa-var-file; }
-.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }
-.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }
-.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }
-.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }
-.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }
-.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }
-.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }
-.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }
-.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }
-.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }
-.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }
-.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }
-.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }
-.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }
-.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }
-.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }
-.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }
-.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }
-.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }
-.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }
-.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }
-.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }
-.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }
-.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }
-.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }
-.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }
-.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }
-.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }
-.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }
-.@{fa-css-prefix}-android:before { content: @fa-var-android; }
-.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }
-.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }
-.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }
-.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }
-.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }
-.@{fa-css-prefix}-female:before { content: @fa-var-female; }
-.@{fa-css-prefix}-male:before { content: @fa-var-male; }
-.@{fa-css-prefix}-gittip:before,
-.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }
-.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }
-.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }
-.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }
-.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }
-.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }
-.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }
-.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }
-.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }
-.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }
-.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }
-.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }
-.@{fa-css-prefix}-toggle-left:before,
-.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }
-.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }
-.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }
-.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }
-.@{fa-css-prefix}-turkish-lira:before,
-.@{fa-css-prefix}-try:before { content: @fa-var-try; }
-.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }
-.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }
-.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }
-.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }
-.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }
-.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }
-.@{fa-css-prefix}-institution:before,
-.@{fa-css-prefix}-bank:before,
-.@{fa-css-prefix}-university:before { content: @fa-var-university; }
-.@{fa-css-prefix}-mortar-board:before,
-.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }
-.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }
-.@{fa-css-prefix}-google:before { content: @fa-var-google; }
-.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }
-.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }
-.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }
-.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }
-.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }
-.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }
-.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }
-.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }
-.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }
-.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }
-.@{fa-css-prefix}-language:before { content: @fa-var-language; }
-.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }
-.@{fa-css-prefix}-building:before { content: @fa-var-building; }
-.@{fa-css-prefix}-child:before { content: @fa-var-child; }
-.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }
-.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }
-.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }
-.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }
-.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }
-.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }
-.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }
-.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }
-.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }
-.@{fa-css-prefix}-automobile:before,
-.@{fa-css-prefix}-car:before { content: @fa-var-car; }
-.@{fa-css-prefix}-cab:before,
-.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }
-.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }
-.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }
-.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }
-.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }
-.@{fa-css-prefix}-database:before { content: @fa-var-database; }
-.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }
-.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }
-.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }
-.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }
-.@{fa-css-prefix}-file-photo-o:before,
-.@{fa-css-prefix}-file-picture-o:before,
-.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }
-.@{fa-css-prefix}-file-zip-o:before,
-.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }
-.@{fa-css-prefix}-file-sound-o:before,
-.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }
-.@{fa-css-prefix}-file-movie-o:before,
-.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }
-.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }
-.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }
-.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }
-.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }
-.@{fa-css-prefix}-life-bouy:before,
-.@{fa-css-prefix}-life-buoy:before,
-.@{fa-css-prefix}-life-saver:before,
-.@{fa-css-prefix}-support:before,
-.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }
-.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }
-.@{fa-css-prefix}-ra:before,
-.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }
-.@{fa-css-prefix}-ge:before,
-.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }
-.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }
-.@{fa-css-prefix}-git:before { content: @fa-var-git; }
-.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }
-.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }
-.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }
-.@{fa-css-prefix}-wechat:before,
-.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }
-.@{fa-css-prefix}-send:before,
-.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }
-.@{fa-css-prefix}-send-o:before,
-.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }
-.@{fa-css-prefix}-history:before { content: @fa-var-history; }
-.@{fa-css-prefix}-genderless:before,
-.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }
-.@{fa-css-prefix}-header:before { content: @fa-var-header; }
-.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }
-.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }
-.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }
-.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }
-.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }
-.@{fa-css-prefix}-soccer-ball-o:before,
-.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }
-.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }
-.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }
-.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }
-.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }
-.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }
-.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }
-.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }
-.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }
-.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }
-.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }
-.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }
-.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }
-.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }
-.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }
-.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }
-.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }
-.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }
-.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }
-.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }
-.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }
-.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }
-.@{fa-css-prefix}-at:before { content: @fa-var-at; }
-.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }
-.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }
-.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }
-.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }
-.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }
-.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }
-.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }
-.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }
-.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }
-.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }
-.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }
-.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }
-.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }
-.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }
-.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }
-.@{fa-css-prefix}-shekel:before,
-.@{fa-css-prefix}-sheqel:before,
-.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }
-.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }
-.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }
-.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }
-.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }
-.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }
-.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }
-.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }
-.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }
-.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }
-.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }
-.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }
-.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }
-.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }
-.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }
-.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }
-.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }
-.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }
-.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }
-.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }
-.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }
-.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }
-.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }
-.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }
-.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }
-.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }
-.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }
-.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }
-.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }
-.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }
-.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }
-.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }
-.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }
-.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }
-.@{fa-css-prefix}-server:before { content: @fa-var-server; }
-.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }
-.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }
-.@{fa-css-prefix}-hotel:before,
-.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }
-.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }
-.@{fa-css-prefix}-train:before { content: @fa-var-train; }
-.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }
-.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/larger.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/larger.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/larger.less
deleted file mode 100644
index c9d6467..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/larger.less
+++ /dev/null
@@ -1,13 +0,0 @@
-// Icon Sizes
-// -------------------------
-
-/* makes the font 33% larger relative to the icon container */
-.@{fa-css-prefix}-lg {
-  font-size: (4em / 3);
-  line-height: (3em / 4);
-  vertical-align: -15%;
-}
-.@{fa-css-prefix}-2x { font-size: 2em; }
-.@{fa-css-prefix}-3x { font-size: 3em; }
-.@{fa-css-prefix}-4x { font-size: 4em; }
-.@{fa-css-prefix}-5x { font-size: 5em; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/list.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/list.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/list.less
deleted file mode 100644
index 0b44038..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/list.less
+++ /dev/null
@@ -1,19 +0,0 @@
-// List Icons
-// -------------------------
-
-.@{fa-css-prefix}-ul {
-  padding-left: 0;
-  margin-left: @fa-li-width;
-  list-style-type: none;
-  > li { position: relative; }
-}
-.@{fa-css-prefix}-li {
-  position: absolute;
-  left: -@fa-li-width;
-  width: @fa-li-width;
-  top: (2em / 14);
-  text-align: center;
-  &.@{fa-css-prefix}-lg {
-    left: (-@fa-li-width + (4em / 14));
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/mixins.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/mixins.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/mixins.less
deleted file mode 100644
index c97f460..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/mixins.less
+++ /dev/null
@@ -1,27 +0,0 @@
-// Mixins
-// --------------------------
-
-.fa-icon() {
-  display: inline-block;
-  font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  transform: translate(0, 0); // ensures no half-pixel rendering in firefox
-
-}
-
-.fa-icon-rotate(@degrees, @rotation) {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
-  -webkit-transform: rotate(@degrees);
-      -ms-transform: rotate(@degrees);
-          transform: rotate(@degrees);
-}
-
-.fa-icon-flip(@horiz, @vert, @rotation) {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
-  -webkit-transform: scale(@horiz, @vert);
-      -ms-transform: scale(@horiz, @vert);
-          transform: scale(@horiz, @vert);
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/path.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/path.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/path.less
deleted file mode 100644
index 9211e66..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/path.less
+++ /dev/null
@@ -1,15 +0,0 @@
-/* FONT PATH
- * -------------------------- */
-
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
-  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
-    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
-    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
-    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
-    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
-//  src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
-  font-weight: normal;
-  font-style: normal;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/rotated-flipped.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/rotated-flipped.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/rotated-flipped.less
deleted file mode 100644
index f6ba814..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/rotated-flipped.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Rotated & Flipped Icons
-// -------------------------
-
-.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }
-.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
-.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
-
-.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
-.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }
-
-// Hook for IE8-9
-// -------------------------
-
-:root .@{fa-css-prefix}-rotate-90,
-:root .@{fa-css-prefix}-rotate-180,
-:root .@{fa-css-prefix}-rotate-270,
-:root .@{fa-css-prefix}-flip-horizontal,
-:root .@{fa-css-prefix}-flip-vertical {
-  filter: none;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/stacked.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/stacked.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/stacked.less
deleted file mode 100644
index fc53fb0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/stacked.less
+++ /dev/null
@@ -1,20 +0,0 @@
-// Stacked Icons
-// -------------------------
-
-.@{fa-css-prefix}-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.@{fa-css-prefix}-stack-1x { line-height: inherit; }
-.@{fa-css-prefix}-stack-2x { font-size: 2em; }
-.@{fa-css-prefix}-inverse { color: @fa-inverse; }

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/variables.less
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/variables.less b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/variables.less
deleted file mode 100644
index d526064..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/less/variables.less
+++ /dev/null
@@ -1,606 +0,0 @@
-// Variables
-// --------------------------
-
-@fa-font-path:        "../fonts";
-@fa-font-size-base:   14px;
-//@fa-font-path:        "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts"; // for referencing Bootstrap CDN font files directly
-@fa-css-prefix:       fa;
-@fa-version:          "4.3.0";
-@fa-border-color:     #eee;
-@fa-inverse:          #fff;
-@fa-li-width:         (30em / 14);
-
-@fa-var-adjust: "\f042";
-@fa-var-adn: "\f170";
-@fa-var-align-center: "\f037";
-@fa-var-align-justify: "\f039";
-@fa-var-align-left: "\f036";
-@fa-var-align-right: "\f038";
-@fa-var-ambulance: "\f0f9";
-@fa-var-anchor: "\f13d";
-@fa-var-android: "\f17b";
-@fa-var-angellist: "\f209";
-@fa-var-angle-double-down: "\f103";
-@fa-var-angle-double-left: "\f100";
-@fa-var-angle-double-right: "\f101";
-@fa-var-angle-double-up: "\f102";
-@fa-var-angle-down: "\f107";
-@fa-var-angle-left: "\f104";
-@fa-var-angle-right: "\f105";
-@fa-var-angle-up: "\f106";
-@fa-var-apple: "\f179";
-@fa-var-archive: "\f187";
-@fa-var-area-chart: "\f1fe";
-@fa-var-arrow-circle-down: "\f0ab";
-@fa-var-arrow-circle-left: "\f0a8";
-@fa-var-arrow-circle-o-down: "\f01a";
-@fa-var-arrow-circle-o-left: "\f190";
-@fa-var-arrow-circle-o-right: "\f18e";
-@fa-var-arrow-circle-o-up: "\f01b";
-@fa-var-arrow-circle-right: "\f0a9";
-@fa-var-arrow-circle-up: "\f0aa";
-@fa-var-arrow-down: "\f063";
-@fa-var-arrow-left: "\f060";
-@fa-var-arrow-right: "\f061";
-@fa-var-arrow-up: "\f062";
-@fa-var-arrows: "\f047";
-@fa-var-arrows-alt: "\f0b2";
-@fa-var-arrows-h: "\f07e";
-@fa-var-arrows-v: "\f07d";
-@fa-var-asterisk: "\f069";
-@fa-var-at: "\f1fa";
-@fa-var-automobile: "\f1b9";
-@fa-var-backward: "\f04a";
-@fa-var-ban: "\f05e";
-@fa-var-bank: "\f19c";
-@fa-var-bar-chart: "\f080";
-@fa-var-bar-chart-o: "\f080";
-@fa-var-barcode: "\f02a";
-@fa-var-bars: "\f0c9";
-@fa-var-bed: "\f236";
-@fa-var-beer: "\f0fc";
-@fa-var-behance: "\f1b4";
-@fa-var-behance-square: "\f1b5";
-@fa-var-bell: "\f0f3";
-@fa-var-bell-o: "\f0a2";
-@fa-var-bell-slash: "\f1f6";
-@fa-var-bell-slash-o: "\f1f7";
-@fa-var-bicycle: "\f206";
-@fa-var-binoculars: "\f1e5";
-@fa-var-birthday-cake: "\f1fd";
-@fa-var-bitbucket: "\f171";
-@fa-var-bitbucket-square: "\f172";
-@fa-var-bitcoin: "\f15a";
-@fa-var-bold: "\f032";
-@fa-var-bolt: "\f0e7";
-@fa-var-bomb: "\f1e2";
-@fa-var-book: "\f02d";
-@fa-var-bookmark: "\f02e";
-@fa-var-bookmark-o: "\f097";
-@fa-var-briefcase: "\f0b1";
-@fa-var-btc: "\f15a";
-@fa-var-bug: "\f188";
-@fa-var-building: "\f1ad";
-@fa-var-building-o: "\f0f7";
-@fa-var-bullhorn: "\f0a1";
-@fa-var-bullseye: "\f140";
-@fa-var-bus: "\f207";
-@fa-var-buysellads: "\f20d";
-@fa-var-cab: "\f1ba";
-@fa-var-calculator: "\f1ec";
-@fa-var-calendar: "\f073";
-@fa-var-calendar-o: "\f133";
-@fa-var-camera: "\f030";
-@fa-var-camera-retro: "\f083";
-@fa-var-car: "\f1b9";
-@fa-var-caret-down: "\f0d7";
-@fa-var-caret-left: "\f0d9";
-@fa-var-caret-right: "\f0da";
-@fa-var-caret-square-o-down: "\f150";
-@fa-var-caret-square-o-left: "\f191";
-@fa-var-caret-square-o-right: "\f152";
-@fa-var-caret-square-o-up: "\f151";
-@fa-var-caret-up: "\f0d8";
-@fa-var-cart-arrow-down: "\f218";
-@fa-var-cart-plus: "\f217";
-@fa-var-cc: "\f20a";
-@fa-var-cc-amex: "\f1f3";
-@fa-var-cc-discover: "\f1f2";
-@fa-var-cc-mastercard: "\f1f1";
-@fa-var-cc-paypal: "\f1f4";
-@fa-var-cc-stripe: "\f1f5";
-@fa-var-cc-visa: "\f1f0";
-@fa-var-certificate: "\f0a3";
-@fa-var-chain: "\f0c1";
-@fa-var-chain-broken: "\f127";
-@fa-var-check: "\f00c";
-@fa-var-check-circle: "\f058";
-@fa-var-check-circle-o: "\f05d";
-@fa-var-check-square: "\f14a";
-@fa-var-check-square-o: "\f046";
-@fa-var-chevron-circle-down: "\f13a";
-@fa-var-chevron-circle-left: "\f137";
-@fa-var-chevron-circle-right: "\f138";
-@fa-var-chevron-circle-up: "\f139";
-@fa-var-chevron-down: "\f078";
-@fa-var-chevron-left: "\f053";
-@fa-var-chevron-right: "\f054";
-@fa-var-chevron-up: "\f077";
-@fa-var-child: "\f1ae";
-@fa-var-circle: "\f111";
-@fa-var-circle-o: "\f10c";
-@fa-var-circle-o-notch: "\f1ce";
-@fa-var-circle-thin: "\f1db";
-@fa-var-clipboard: "\f0ea";
-@fa-var-clock-o: "\f017";
-@fa-var-close: "\f00d";
-@fa-var-cloud: "\f0c2";
-@fa-var-cloud-download: "\f0ed";
-@fa-var-cloud-upload: "\f0ee";
-@fa-var-cny: "\f157";
-@fa-var-code: "\f121";
-@fa-var-code-fork: "\f126";
-@fa-var-codepen: "\f1cb";
-@fa-var-coffee: "\f0f4";
-@fa-var-cog: "\f013";
-@fa-var-cogs: "\f085";
-@fa-var-columns: "\f0db";
-@fa-var-comment: "\f075";
-@fa-var-comment-o: "\f0e5";
-@fa-var-comments: "\f086";
-@fa-var-comments-o: "\f0e6";
-@fa-var-compass: "\f14e";
-@fa-var-compress: "\f066";
-@fa-var-connectdevelop: "\f20e";
-@fa-var-copy: "\f0c5";
-@fa-var-copyright: "\f1f9";
-@fa-var-credit-card: "\f09d";
-@fa-var-crop: "\f125";
-@fa-var-crosshairs: "\f05b";
-@fa-var-css3: "\f13c";
-@fa-var-cube: "\f1b2";
-@fa-var-cubes: "\f1b3";
-@fa-var-cut: "\f0c4";
-@fa-var-cutlery: "\f0f5";
-@fa-var-dashboard: "\f0e4";
-@fa-var-dashcube: "\f210";
-@fa-var-database: "\f1c0";
-@fa-var-dedent: "\f03b";
-@fa-var-delicious: "\f1a5";
-@fa-var-desktop: "\f108";
-@fa-var-deviantart: "\f1bd";
-@fa-var-diamond: "\f219";
-@fa-var-digg: "\f1a6";
-@fa-var-dollar: "\f155";
-@fa-var-dot-circle-o: "\f192";
-@fa-var-download: "\f019";
-@fa-var-dribbble: "\f17d";
-@fa-var-dropbox: "\f16b";
-@fa-var-drupal: "\f1a9";
-@fa-var-edit: "\f044";
-@fa-var-eject: "\f052";
-@fa-var-ellipsis-h: "\f141";
-@fa-var-ellipsis-v: "\f142";
-@fa-var-empire: "\f1d1";
-@fa-var-envelope: "\f0e0";
-@fa-var-envelope-o: "\f003";
-@fa-var-envelope-square: "\f199";
-@fa-var-eraser: "\f12d";
-@fa-var-eur: "\f153";
-@fa-var-euro: "\f153";
-@fa-var-exchange: "\f0ec";
-@fa-var-exclamation: "\f12a";
-@fa-var-exclamation-circle: "\f06a";
-@fa-var-exclamation-triangle: "\f071";
-@fa-var-expand: "\f065";
-@fa-var-external-link: "\f08e";
-@fa-var-external-link-square: "\f14c";
-@fa-var-eye: "\f06e";
-@fa-var-eye-slash: "\f070";
-@fa-var-eyedropper: "\f1fb";
-@fa-var-facebook: "\f09a";
-@fa-var-facebook-f: "\f09a";
-@fa-var-facebook-official: "\f230";
-@fa-var-facebook-square: "\f082";
-@fa-var-fast-backward: "\f049";
-@fa-var-fast-forward: "\f050";
-@fa-var-fax: "\f1ac";
-@fa-var-female: "\f182";
-@fa-var-fighter-jet: "\f0fb";
-@fa-var-file: "\f15b";
-@fa-var-file-archive-o: "\f1c6";
-@fa-var-file-audio-o: "\f1c7";
-@fa-var-file-code-o: "\f1c9";
-@fa-var-file-excel-o: "\f1c3";
-@fa-var-file-image-o: "\f1c5";
-@fa-var-file-movie-o: "\f1c8";
-@fa-var-file-o: "\f016";
-@fa-var-file-pdf-o: "\f1c1";
-@fa-var-file-photo-o: "\f1c5";
-@fa-var-file-picture-o: "\f1c5";
-@fa-var-file-powerpoint-o: "\f1c4";
-@fa-var-file-sound-o: "\f1c7";
-@fa-var-file-text: "\f15c";
-@fa-var-file-text-o: "\f0f6";
-@fa-var-file-video-o: "\f1c8";
-@fa-var-file-word-o: "\f1c2";
-@fa-var-file-zip-o: "\f1c6";
-@fa-var-files-o: "\f0c5";
-@fa-var-film: "\f008";
-@fa-var-filter: "\f0b0";
-@fa-var-fire: "\f06d";
-@fa-var-fire-extinguisher: "\f134";
-@fa-var-flag: "\f024";
-@fa-var-flag-checkered: "\f11e";
-@fa-var-flag-o: "\f11d";
-@fa-var-flash: "\f0e7";
-@fa-var-flask: "\f0c3";
-@fa-var-flickr: "\f16e";
-@fa-var-floppy-o: "\f0c7";
-@fa-var-folder: "\f07b";
-@fa-var-folder-o: "\f114";
-@fa-var-folder-open: "\f07c";
-@fa-var-folder-open-o: "\f115";
-@fa-var-font: "\f031";
-@fa-var-forumbee: "\f211";
-@fa-var-forward: "\f04e";
-@fa-var-foursquare: "\f180";
-@fa-var-frown-o: "\f119";
-@fa-var-futbol-o: "\f1e3";
-@fa-var-gamepad: "\f11b";
-@fa-var-gavel: "\f0e3";
-@fa-var-gbp: "\f154";
-@fa-var-ge: "\f1d1";
-@fa-var-gear: "\f013";
-@fa-var-gears: "\f085";
-@fa-var-genderless: "\f1db";
-@fa-var-gift: "\f06b";
-@fa-var-git: "\f1d3";
-@fa-var-git-square: "\f1d2";
-@fa-var-github: "\f09b";
-@fa-var-github-alt: "\f113";
-@fa-var-github-square: "\f092";
-@fa-var-gittip: "\f184";
-@fa-var-glass: "\f000";
-@fa-var-globe: "\f0ac";
-@fa-var-google: "\f1a0";
-@fa-var-google-plus: "\f0d5";
-@fa-var-google-plus-square: "\f0d4";
-@fa-var-google-wallet: "\f1ee";
-@fa-var-graduation-cap: "\f19d";
-@fa-var-gratipay: "\f184";
-@fa-var-group: "\f0c0";
-@fa-var-h-square: "\f0fd";
-@fa-var-hacker-news: "\f1d4";
-@fa-var-hand-o-down: "\f0a7";
-@fa-var-hand-o-left: "\f0a5";
-@fa-var-hand-o-right: "\f0a4";
-@fa-var-hand-o-up: "\f0a6";
-@fa-var-hdd-o: "\f0a0";
-@fa-var-header: "\f1dc";
-@fa-var-headphones: "\f025";
-@fa-var-heart: "\f004";
-@fa-var-heart-o: "\f08a";
-@fa-var-heartbeat: "\f21e";
-@fa-var-history: "\f1da";
-@fa-var-home: "\f015";
-@fa-var-hospital-o: "\f0f8";
-@fa-var-hotel: "\f236";
-@fa-var-html5: "\f13b";
-@fa-var-ils: "\f20b";
-@fa-var-image: "\f03e";
-@fa-var-inbox: "\f01c";
-@fa-var-indent: "\f03c";
-@fa-var-info: "\f129";
-@fa-var-info-circle: "\f05a";
-@fa-var-inr: "\f156";
-@fa-var-instagram: "\f16d";
-@fa-var-institution: "\f19c";
-@fa-var-ioxhost: "\f208";
-@fa-var-italic: "\f033";
-@fa-var-joomla: "\f1aa";
-@fa-var-jpy: "\f157";
-@fa-var-jsfiddle: "\f1cc";
-@fa-var-key: "\f084";
-@fa-var-keyboard-o: "\f11c";
-@fa-var-krw: "\f159";
-@fa-var-language: "\f1ab";
-@fa-var-laptop: "\f109";
-@fa-var-lastfm: "\f202";
-@fa-var-lastfm-square: "\f203";
-@fa-var-leaf: "\f06c";
-@fa-var-leanpub: "\f212";
-@fa-var-legal: "\f0e3";
-@fa-var-lemon-o: "\f094";
-@fa-var-level-down: "\f149";
-@fa-var-level-up: "\f148";
-@fa-var-life-bouy: "\f1cd";
-@fa-var-life-buoy: "\f1cd";
-@fa-var-life-ring: "\f1cd";
-@fa-var-life-saver: "\f1cd";
-@fa-var-lightbulb-o: "\f0eb";
-@fa-var-line-chart: "\f201";
-@fa-var-link: "\f0c1";
-@fa-var-linkedin: "\f0e1";
-@fa-var-linkedin-square: "\f08c";
-@fa-var-linux: "\f17c";
-@fa-var-list: "\f03a";
-@fa-var-list-alt: "\f022";
-@fa-var-list-ol: "\f0cb";
-@fa-var-list-ul: "\f0ca";
-@fa-var-location-arrow: "\f124";
-@fa-var-lock: "\f023";
-@fa-var-long-arrow-down: "\f175";
-@fa-var-long-arrow-left: "\f177";
-@fa-var-long-arrow-right: "\f178";
-@fa-var-long-arrow-up: "\f176";
-@fa-var-magic: "\f0d0";
-@fa-var-magnet: "\f076";
-@fa-var-mail-forward: "\f064";
-@fa-var-mail-reply: "\f112";
-@fa-var-mail-reply-all: "\f122";
-@fa-var-male: "\f183";
-@fa-var-map-marker: "\f041";
-@fa-var-mars: "\f222";
-@fa-var-mars-double: "\f227";
-@fa-var-mars-stroke: "\f229";
-@fa-var-mars-stroke-h: "\f22b";
-@fa-var-mars-stroke-v: "\f22a";
-@fa-var-maxcdn: "\f136";
-@fa-var-meanpath: "\f20c";
-@fa-var-medium: "\f23a";
-@fa-var-medkit: "\f0fa";
-@fa-var-meh-o: "\f11a";
-@fa-var-mercury: "\f223";
-@fa-var-microphone: "\f130";
-@fa-var-microphone-slash: "\f131";
-@fa-var-minus: "\f068";
-@fa-var-minus-circle: "\f056";
-@fa-var-minus-square: "\f146";
-@fa-var-minus-square-o: "\f147";
-@fa-var-mobile: "\f10b";
-@fa-var-mobile-phone: "\f10b";
-@fa-var-money: "\f0d6";
-@fa-var-moon-o: "\f186";
-@fa-var-mortar-board: "\f19d";
-@fa-var-motorcycle: "\f21c";
-@fa-var-music: "\f001";
-@fa-var-navicon: "\f0c9";
-@fa-var-neuter: "\f22c";
-@fa-var-newspaper-o: "\f1ea";
-@fa-var-openid: "\f19b";
-@fa-var-outdent: "\f03b";
-@fa-var-pagelines: "\f18c";
-@fa-var-paint-brush: "\f1fc";
-@fa-var-paper-plane: "\f1d8";
-@fa-var-paper-plane-o: "\f1d9";
-@fa-var-paperclip: "\f0c6";
-@fa-var-paragraph: "\f1dd";
-@fa-var-paste: "\f0ea";
-@fa-var-pause: "\f04c";
-@fa-var-paw: "\f1b0";
-@fa-var-paypal: "\f1ed";
-@fa-var-pencil: "\f040";
-@fa-var-pencil-square: "\f14b";
-@fa-var-pencil-square-o: "\f044";
-@fa-var-phone: "\f095";
-@fa-var-phone-square: "\f098";
-@fa-var-photo: "\f03e";
-@fa-var-picture-o: "\f03e";
-@fa-var-pie-chart: "\f200";
-@fa-var-pied-piper: "\f1a7";
-@fa-var-pied-piper-alt: "\f1a8";
-@fa-var-pinterest: "\f0d2";
-@fa-var-pinterest-p: "\f231";
-@fa-var-pinterest-square: "\f0d3";
-@fa-var-plane: "\f072";
-@fa-var-play: "\f04b";
-@fa-var-play-circle: "\f144";
-@fa-var-play-circle-o: "\f01d";
-@fa-var-plug: "\f1e6";
-@fa-var-plus: "\f067";
-@fa-var-plus-circle: "\f055";
-@fa-var-plus-square: "\f0fe";
-@fa-var-plus-square-o: "\f196";
-@fa-var-power-off: "\f011";
-@fa-var-print: "\f02f";
-@fa-var-puzzle-piece: "\f12e";
-@fa-var-qq: "\f1d6";
-@fa-var-qrcode: "\f029";
-@fa-var-question: "\f128";
-@fa-var-question-circle: "\f059";
-@fa-var-quote-left: "\f10d";
-@fa-var-quote-right: "\f10e";
-@fa-var-ra: "\f1d0";
-@fa-var-random: "\f074";
-@fa-var-rebel: "\f1d0";
-@fa-var-recycle: "\f1b8";
-@fa-var-reddit: "\f1a1";
-@fa-var-reddit-square: "\f1a2";
-@fa-var-refresh: "\f021";
-@fa-var-remove: "\f00d";
-@fa-var-renren: "\f18b";
-@fa-var-reorder: "\f0c9";
-@fa-var-repeat: "\f01e";
-@fa-var-reply: "\f112";
-@fa-var-reply-all: "\f122";
-@fa-var-retweet: "\f079";
-@fa-var-rmb: "\f157";
-@fa-var-road: "\f018";
-@fa-var-rocket: "\f135";
-@fa-var-rotate-left: "\f0e2";
-@fa-var-rotate-right: "\f01e";
-@fa-var-rouble: "\f158";
-@fa-var-rss: "\f09e";
-@fa-var-rss-square: "\f143";
-@fa-var-rub: "\f158";
-@fa-var-ruble: "\f158";
-@fa-var-rupee: "\f156";
-@fa-var-save: "\f0c7";
-@fa-var-scissors: "\f0c4";
-@fa-var-search: "\f002";
-@fa-var-search-minus: "\f010";
-@fa-var-search-plus: "\f00e";
-@fa-var-sellsy: "\f213";
-@fa-var-send: "\f1d8";
-@fa-var-send-o: "\f1d9";
-@fa-var-server: "\f233";
-@fa-var-share: "\f064";
-@fa-var-share-alt: "\f1e0";
-@fa-var-share-alt-square: "\f1e1";
-@fa-var-share-square: "\f14d";
-@fa-var-share-square-o: "\f045";
-@fa-var-shekel: "\f20b";
-@fa-var-sheqel: "\f20b";
-@fa-var-shield: "\f132";
-@fa-var-ship: "\f21a";
-@fa-var-shirtsinbulk: "\f214";
-@fa-var-shopping-cart: "\f07a";
-@fa-var-sign-in: "\f090";
-@fa-var-sign-out: "\f08b";
-@fa-var-signal: "\f012";
-@fa-var-simplybuilt: "\f215";
-@fa-var-sitemap: "\f0e8";
-@fa-var-skyatlas: "\f216";
-@fa-var-skype: "\f17e";
-@fa-var-slack: "\f198";
-@fa-var-sliders: "\f1de";
-@fa-var-slideshare: "\f1e7";
-@fa-var-smile-o: "\f118";
-@fa-var-soccer-ball-o: "\f1e3";
-@fa-var-sort: "\f0dc";
-@fa-var-sort-alpha-asc: "\f15d";
-@fa-var-sort-alpha-desc: "\f15e";
-@fa-var-sort-amount-asc: "\f160";
-@fa-var-sort-amount-desc: "\f161";
-@fa-var-sort-asc: "\f0de";
-@fa-var-sort-desc: "\f0dd";
-@fa-var-sort-down: "\f0dd";
-@fa-var-sort-numeric-asc: "\f162";
-@fa-var-sort-numeric-desc: "\f163";
-@fa-var-sort-up: "\f0de";
-@fa-var-soundcloud: "\f1be";
-@fa-var-space-shuttle: "\f197";
-@fa-var-spinner: "\f110";
-@fa-var-spoon: "\f1b1";
-@fa-var-spotify: "\f1bc";
-@fa-var-square: "\f0c8";
-@fa-var-square-o: "\f096";
-@fa-var-stack-exchange: "\f18d";
-@fa-var-stack-overflow: "\f16c";
-@fa-var-star: "\f005";
-@fa-var-star-half: "\f089";
-@fa-var-star-half-empty: "\f123";
-@fa-var-star-half-full: "\f123";
-@fa-var-star-half-o: "\f123";
-@fa-var-star-o: "\f006";
-@fa-var-steam: "\f1b6";
-@fa-var-steam-square: "\f1b7";
-@fa-var-step-backward: "\f048";
-@fa-var-step-forward: "\f051";
-@fa-var-stethoscope: "\f0f1";
-@fa-var-stop: "\f04d";
-@fa-var-street-view: "\f21d";
-@fa-var-strikethrough: "\f0cc";
-@fa-var-stumbleupon: "\f1a4";
-@fa-var-stumbleupon-circle: "\f1a3";
-@fa-var-subscript: "\f12c";
-@fa-var-subway: "\f239";
-@fa-var-suitcase: "\f0f2";
-@fa-var-sun-o: "\f185";
-@fa-var-superscript: "\f12b";
-@fa-var-support: "\f1cd";
-@fa-var-table: "\f0ce";
-@fa-var-tablet: "\f10a";
-@fa-var-tachometer: "\f0e4";
-@fa-var-tag: "\f02b";
-@fa-var-tags: "\f02c";
-@fa-var-tasks: "\f0ae";
-@fa-var-taxi: "\f1ba";
-@fa-var-tencent-weibo: "\f1d5";
-@fa-var-terminal: "\f120";
-@fa-var-text-height: "\f034";
-@fa-var-text-width: "\f035";
-@fa-var-th: "\f00a";
-@fa-var-th-large: "\f009";
-@fa-var-th-list: "\f00b";
-@fa-var-thumb-tack: "\f08d";
-@fa-var-thumbs-down: "\f165";
-@fa-var-thumbs-o-down: "\f088";
-@fa-var-thumbs-o-up: "\f087";
-@fa-var-thumbs-up: "\f164";
-@fa-var-ticket: "\f145";
-@fa-var-times: "\f00d";
-@fa-var-times-circle: "\f057";
-@fa-var-times-circle-o: "\f05c";
-@fa-var-tint: "\f043";
-@fa-var-toggle-down: "\f150";
-@fa-var-toggle-left: "\f191";
-@fa-var-toggle-off: "\f204";
-@fa-var-toggle-on: "\f205";
-@fa-var-toggle-right: "\f152";
-@fa-var-toggle-up: "\f151";
-@fa-var-train: "\f238";
-@fa-var-transgender: "\f224";
-@fa-var-transgender-alt: "\f225";
-@fa-var-trash: "\f1f8";
-@fa-var-trash-o: "\f014";
-@fa-var-tree: "\f1bb";
-@fa-var-trello: "\f181";
-@fa-var-trophy: "\f091";
-@fa-var-truck: "\f0d1";
-@fa-var-try: "\f195";
-@fa-var-tty: "\f1e4";
-@fa-var-tumblr: "\f173";
-@fa-var-tumblr-square: "\f174";
-@fa-var-turkish-lira: "\f195";
-@fa-var-twitch: "\f1e8";
-@fa-var-twitter: "\f099";
-@fa-var-twitter-square: "\f081";
-@fa-var-umbrella: "\f0e9";
-@fa-var-underline: "\f0cd";
-@fa-var-undo: "\f0e2";
-@fa-var-university: "\f19c";
-@fa-var-unlink: "\f127";
-@fa-var-unlock: "\f09c";
-@fa-var-unlock-alt: "\f13e";
-@fa-var-unsorted: "\f0dc";
-@fa-var-upload: "\f093";
-@fa-var-usd: "\f155";
-@fa-var-user: "\f007";
-@fa-var-user-md: "\f0f0";
-@fa-var-user-plus: "\f234";
-@fa-var-user-secret: "\f21b";
-@fa-var-user-times: "\f235";
-@fa-var-users: "\f0c0";
-@fa-var-venus: "\f221";
-@fa-var-venus-double: "\f226";
-@fa-var-venus-mars: "\f228";
-@fa-var-viacoin: "\f237";
-@fa-var-video-camera: "\f03d";
-@fa-var-vimeo-square: "\f194";
-@fa-var-vine: "\f1ca";
-@fa-var-vk: "\f189";
-@fa-var-volume-down: "\f027";
-@fa-var-volume-off: "\f026";
-@fa-var-volume-up: "\f028";
-@fa-var-warning: "\f071";
-@fa-var-wechat: "\f1d7";
-@fa-var-weibo: "\f18a";
-@fa-var-weixin: "\f1d7";
-@fa-var-whatsapp: "\f232";
-@fa-var-wheelchair: "\f193";
-@fa-var-wifi: "\f1eb";
-@fa-var-windows: "\f17a";
-@fa-var-won: "\f159";
-@fa-var-wordpress: "\f19a";
-@fa-var-wrench: "\f0ad";
-@fa-var-xing: "\f168";
-@fa-var-xing-square: "\f169";
-@fa-var-yahoo: "\f19e";
-@fa-var-yelp: "\f1e9";
-@fa-var-yen: "\f157";
-@fa-var-youtube: "\f167";
-@fa-var-youtube-play: "\f16a";
-@fa-var-youtube-square: "\f166";
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_animated.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_animated.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_animated.scss
deleted file mode 100644
index 8a020db..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_animated.scss
+++ /dev/null
@@ -1,34 +0,0 @@
-// Spinning Icons
-// --------------------------
-
-.#{$fa-css-prefix}-spin {
-  -webkit-animation: fa-spin 2s infinite linear;
-          animation: fa-spin 2s infinite linear;
-}
-
-.#{$fa-css-prefix}-pulse {
-  -webkit-animation: fa-spin 1s infinite steps(8);
-          animation: fa-spin 1s infinite steps(8);
-}
-
-@-webkit-keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}
-
-@keyframes fa-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-            transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-            transform: rotate(359deg);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_bordered-pulled.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_bordered-pulled.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_bordered-pulled.scss
deleted file mode 100644
index 9d3fdf3..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_bordered-pulled.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-// Bordered & Pulled
-// -------------------------
-
-.#{$fa-css-prefix}-border {
-  padding: .2em .25em .15em;
-  border: solid .08em $fa-border-color;
-  border-radius: .1em;
-}
-
-.pull-right { float: right; }
-.pull-left { float: left; }
-
-.#{$fa-css-prefix} {
-  &.pull-left { margin-right: .3em; }
-  &.pull-right { margin-left: .3em; }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_core.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_core.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_core.scss
deleted file mode 100644
index 5a2db9d..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_core.scss
+++ /dev/null
@@ -1,13 +0,0 @@
-// Base Class Definition
-// -------------------------
-
-.#{$fa-css-prefix} {
-  display: inline-block;
-  font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
-  font-size: inherit; // can't have font-size inherit on line above, so need to override
-  text-rendering: auto; // optimizelegibility throws things off #1094
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  transform: translate(0, 0); // ensures no half-pixel rendering in firefox
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_fixed-width.scss
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_fixed-width.scss b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_fixed-width.scss
deleted file mode 100644
index b221c98..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/bower/font-awesome/scss/_fixed-width.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-// Fixed Width Icons
-// -------------------------
-.#{$fa-css-prefix}-fw {
-  width: (18em / 14);
-  text-align: center;
-}


[35/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.spec.ts
new file mode 100644
index 0000000..0d0c24c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.spec.ts
@@ -0,0 +1,26 @@
+/**
+ * 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.
+ */
+
+import {TimeZoneAbbrPipe} from './timezone-abbr.pipe';
+
+describe('TimeZoneAbbrPipe', () => {
+  it('create an instance', () => {
+    const pipe = new TimeZoneAbbrPipe();
+    expect(pipe).toBeTruthy();
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.ts b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.ts
new file mode 100644
index 0000000..f4aab0b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/pipes/timezone-abbr.pipe.ts
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+
+import {Pipe, PipeTransform} from '@angular/core';
+import * as moment from 'moment-timezone';
+
+@Pipe({
+  name: 'timeZoneAbbr'
+})
+export class TimeZoneAbbrPipe implements PipeTransform {
+
+  transform(value: string): string {
+    return moment.tz.zone(value).abbr(moment().valueOf());
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
new file mode 100644
index 0000000..ff0ee37
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.spec.ts
@@ -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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+
+import {ComponentActionsService} from './component-actions.service';
+
+describe('ComponentActionsService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        StoreModule.provideStore({
+          appSettings
+        })
+      ],
+      providers: [
+        AppSettingsService,
+        ComponentActionsService
+      ]
+    });
+  });
+
+  it('should create service', inject([ComponentActionsService], (service: ComponentActionsService) => {
+    expect(service).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
new file mode 100644
index 0000000..a8235fa
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-actions.service.ts
@@ -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.
+ */
+
+import {Injectable} from '@angular/core';
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
+import {CollectionModelService} from '@app/models/store.model';
+
+@Injectable()
+export class ComponentActionsService {
+
+  constructor(private appSettings: AppSettingsService) {
+  }
+
+  //TODO implement actions
+
+  undo() {
+  }
+
+  redo() {
+  }
+
+  refresh() {
+  }
+
+  openHistory() {
+  }
+
+  setTimeZone(timeZone: string): void {
+    this.appSettings.setParameter('timeZone', timeZone);
+  }
+
+  updateSelectedColumns(columnNames: string[], model: CollectionModelService): void {
+    model.mapCollection(item => Object.assign({}, item, {
+      isDisplayed: columnNames.indexOf(item.name) > -1
+    }));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
new file mode 100644
index 0000000..b6ec8d7
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.spec.ts
@@ -0,0 +1,84 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+
+import {ComponentGeneratorService} from './component-generator.service';
+
+describe('ComponentGeneratorService', () => {
+  beforeEach(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {
+          }
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      imports: [
+        StoreModule.provideStore({
+          hosts,
+          auditLogs,
+          serviceLogs,
+          auditLogsFields,
+          serviceLogsFields,
+          serviceLogsHistogramData,
+          appSettings,
+          clusters,
+          components
+        })
+      ],
+      providers: [
+        ComponentGeneratorService,
+        LogsContainerService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        FilteringService,
+        HostsService,
+        AuditLogsService,
+        ServiceLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
+        AppSettingsService,
+        ClustersService,
+        ComponentsService
+      ]
+    });
+  });
+
+  it('should create service', inject([ComponentGeneratorService], (service: ComponentGeneratorService) => {
+    expect(service).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts
new file mode 100644
index 0000000..c49f40f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/component-generator.service.ts
@@ -0,0 +1,57 @@
+/**
+ * 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.
+ */
+
+import {Injectable, ComponentFactoryResolver, ViewContainerRef} from '@angular/core';
+import {HostsService} from '@app/services/storage/hosts.service';
+import {LogsContainerService} from '@app/services/logs-container.service';
+import {NodeBarComponent} from '@app/components/node-bar/node-bar.component';
+
+@Injectable()
+export class ComponentGeneratorService {
+
+  constructor(private resolver: ComponentFactoryResolver, private hostsStorage: HostsService, private logsContainer: LogsContainerService) {
+  }
+
+  private createComponent(type: any, container: ViewContainerRef, properties?: any): void {
+    const factory = this.resolver.resolveComponentFactory(type);
+    container.clear();
+    let component = container.createComponent(factory);
+    Object.assign(component.instance, properties);
+  }
+
+  getDataForHostsNodeBar(hostName: string, container: ViewContainerRef): void {
+    let data;
+    this.hostsStorage.getAll().subscribe(hosts => {
+      if (container && hosts && hosts.length) {
+        const selectedHost = hosts.find(host => host.name === hostName);
+        data = selectedHost.logLevelCount.map(event => {
+          return {
+            color: this.logsContainer.colors[event.name],
+            value: event.value
+          };
+        });
+        if (data.length) {
+          this.createComponent(NodeBarComponent, container, {
+            data
+          });
+        }
+      }
+    });
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.spec.ts
new file mode 100644
index 0000000..e3f731e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.spec.ts
@@ -0,0 +1,67 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {UtilsService} from '@app/services/utils.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+import {FilteringService} from './filtering.service';
+
+describe('FilteringService', () => {
+  beforeEach(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {
+          }
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      imports: [
+        StoreModule.provideStore({
+          appSettings,
+          clusters,
+          components,
+          hosts
+        })
+      ],
+      providers: [
+        FilteringService,
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        UtilsService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        }
+      ]
+    });
+  });
+
+  it('should create service', inject([FilteringService], (service: FilteringService) => {
+    expect(service).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
new file mode 100644
index 0000000..5b9e90d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/filtering.service.ts
@@ -0,0 +1,352 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {FormControl, FormGroup} from '@angular/forms';
+import * as moment from 'moment-timezone';
+import {AppSettingsService} from '@app/services/storage/app-settings.service';
+import {ClustersService} from '@app/services/storage/clusters.service';
+import {ComponentsService} from '@app/services/storage/components.service';
+import {HostsService} from '@app/services/storage/hosts.service';
+import {HttpClientService} from '@app/services/http-client.service';
+
+@Injectable()
+export class FilteringService {
+
+  constructor(private httpClient: HttpClientService, private appSettings: AppSettingsService, private clustersStorage: ClustersService, private componentsStorage: ComponentsService, private hostsStorage: HostsService) {
+    appSettings.getParameter('timeZone').subscribe(value => this.timeZone = value || this.defaultTimeZone);
+    clustersStorage.getAll().subscribe(clusters => {
+      this.filters.clusters.options = [...this.filters.clusters.options, ...clusters.map(this.getListItem)];
+    });
+    componentsStorage.getAll().subscribe(components => {
+      this.filters.components.options = [...this.filters.components.options, ...components.map(this.getListItem)];
+    });
+    hostsStorage.getAll().subscribe(hosts => {
+      this.filters.hosts.options = [...this.filters.hosts.options, ...hosts.map(host => {
+        return {
+          label: `${host.name} (${host.value})`,
+          value: host.name
+        };
+      })];
+    });
+  }
+
+  private getListItem(name: string): any {
+    return {
+      label: name,
+      value: name
+    };
+  }
+
+  private readonly defaultTimeZone = moment.tz.guess();
+
+  private readonly paginationOptions = ['10', '25', '50', '100'];
+
+  timeZone: string = this.defaultTimeZone;
+
+  filters = {
+    clusters: {
+      label: 'filter.clusters',
+      options: [],
+      defaultValue: ''
+    },
+    text: {
+      label: 'filter.message',
+      defaultValue: ''
+    },
+    timeRange: {
+      options: [
+        {
+          label: 'filter.timeRange.1hr',
+          value: {
+            type: 'LAST',
+            unit: 'h',
+            interval: 1
+          }
+        },
+        {
+          label: 'filter.timeRange.24hr',
+          value: {
+            type: 'LAST',
+            unit: 'h',
+            interval: 24
+          }
+        },
+        {
+          label: 'filter.timeRange.today',
+          value: {
+            type: 'CURRENT',
+            unit: 'd'
+          }
+        },
+        {
+          label: 'filter.timeRange.yesterday',
+          value: {
+            type: 'PAST',
+            unit: 'd'
+          }
+        },
+        {
+          label: 'filter.timeRange.7d',
+          value: {
+            type: 'LAST',
+            unit: 'd',
+            interval: 7
+          }
+        },
+        {
+          label: 'filter.timeRange.30d',
+          value: {
+            type: 'LAST',
+            unit: 'd',
+            interval: 30
+          }
+        },
+        {
+          label: 'filter.timeRange.thisMonth',
+          value: {
+            type: 'CURRENT',
+            unit: 'M'
+          }
+        },
+        {
+          label: 'filter.timeRange.lastMonth',
+          value: {
+            type: 'PAST',
+            unit: 'M'
+          }
+        },
+        {
+          label: 'filter.timeRange.custom',
+          value: {
+            type: 'CUSTOM'
+          }
+        }
+      ],
+      defaultValue: {
+        type: 'LAST',
+        unit: 'h',
+        interval: 1
+      },
+      defaultLabel: 'filter.timeRange.1hr'
+    },
+    components: {
+      label: 'filter.components',
+      iconClass: 'fa fa-cubes',
+      options: [],
+      defaultValue: ''
+    },
+    levels: {
+      label: 'filter.levels',
+      iconClass: 'fa fa-sort-amount-asc',
+      options: [
+        {
+          label: 'levels.fatal',
+          value: 'FATAL'
+        },
+        {
+          label: 'levels.error',
+          value: 'ERROR'
+        },
+        {
+          label: 'levels.warn',
+          value: 'WARN'
+        },
+        {
+          label: 'levels.info',
+          value: 'INFO'
+        },
+        {
+          label: 'levels.debug',
+          value: 'DEBUG'
+        },
+        {
+          label: 'levels.trace',
+          value: 'TRACE'
+        },
+        {
+          label: 'levels.unknown',
+          value: 'UNKNOWN'
+        }
+      ],
+      defaultValue: ''
+    },
+    hosts: {
+      label: 'filter.hosts',
+      iconClass: 'fa fa-server',
+      options: [],
+      defaultValue: ''
+    },
+    sorting: {
+      label: 'sorting.title',
+      options: [
+        {
+          label: 'sorting.level.asc',
+          value: {
+            key: 'level',
+            type: 'asc'
+          }
+        },
+        {
+          label: 'sorting.level.desc',
+          value: {
+            key: 'level',
+            type: 'desc'
+          }
+        },
+        {
+          label: 'sorting.component.asc',
+          value: {
+            key: 'type',
+            type: 'asc'
+          }
+        },
+        {
+          label: 'sorting.component.desc',
+          value: {
+            key: 'type',
+            type: 'desc'
+          }
+        },
+        {
+          label: 'sorting.time.asc',
+          value: {
+            key: 'logtime',
+            type: 'asc'
+          }
+        },
+        {
+          label: 'sorting.time.desc',
+          value: {
+            key: 'logtime',
+            type: 'desc'
+          }
+        }
+      ],
+      defaultValue: '',
+      defaultLabel: ''
+    },
+    pageSize: {
+      label: 'pagination.title',
+      options: this.paginationOptions.map(option => {
+        return {
+          label: option,
+          value: option
+        }
+      }),
+      defaultValue: '10',
+      defaultLabel: '10'
+    },
+    page: {
+      defaultValue: 0
+    }
+  };
+
+  private filtersFormItems = Object.keys(this.filters).reduce((currentObject, key) => {
+    let formControl = new FormControl(),
+      item = {
+        [key]: formControl
+      };
+    formControl.setValue(this.filters[key].defaultValue);
+    return Object.assign(currentObject, item);
+  }, {});
+
+  filtersForm = new FormGroup(this.filtersFormItems);
+
+  loadClusters(): void {
+    this.httpClient.get('clusters').subscribe(response => {
+      const clusterNames = response.json();
+      if (clusterNames) {
+        this.clustersStorage.addInstances(clusterNames);
+      }
+    });
+  }
+
+  loadComponents(): void {
+    this.httpClient.get('components').subscribe(response => {
+      const jsonResponse = response.json(),
+        components = jsonResponse && jsonResponse.groupList;
+      if (components) {
+        const componentNames = components.map(component => component.type);
+        this.componentsStorage.addInstances(componentNames);
+      }
+    });
+  }
+
+  loadHosts(): void {
+    this.httpClient.get('hosts').subscribe(response => {
+      const jsonResponse = response.json(),
+        hosts = jsonResponse && jsonResponse.vNodeList;
+      if (hosts) {
+        this.hostsStorage.addInstances(hosts);
+      }
+    });
+  }
+
+  private getStartTime(value: any, current: string): string {
+    let time;
+    if (value) {
+      const endTime = moment(moment(current).valueOf());
+      switch (value.type) {
+        case 'LAST':
+          time = endTime.subtract(value.interval, value.unit);
+          break;
+        case 'CURRENT':
+          time = moment().tz(this.timeZone).startOf(value.unit);
+          break;
+        case 'PAST':
+          time = endTime.startOf(value.unit);
+          break;
+        default:
+          break;
+      }
+    }
+    return time ? time.toISOString() : '';
+  }
+
+  private getEndTime(value: any): string {
+    let time;
+    if (value) {
+      switch (value.type) {
+        case 'LAST':
+          time = moment();
+          break;
+        case 'CURRENT':
+          time = moment().tz(this.timeZone).endOf(value.unit);
+          break;
+        case 'PAST':
+          time = moment().tz(this.timeZone).startOf(value.unit).millisecond(-1);
+          break;
+        default:
+          break;
+      }
+    }
+    return time ? time.toISOString() : '';
+  }
+
+  readonly valueGetters = {
+    end_time: this.getEndTime.bind(this),
+    start_time: this.getStartTime.bind(this),
+    to: this.getEndTime.bind(this),
+    from: this.getStartTime.bind(this),
+    sortType: value => value && value.type,
+    sortBy: value => value && value.key,
+    page: value => value == null ? value : value.toString()
+  };
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.spec.ts
new file mode 100644
index 0000000..0dfb0f3
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.spec.ts
@@ -0,0 +1,67 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {HttpModule, Request} from '@angular/http';
+import {StoreModule} from '@ngrx/store';
+import {AppStateService, appState} from '@app/services/storage/app-state.service';
+import {HttpClientService} from './http-client.service';
+
+describe('HttpClientService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [
+        HttpModule,
+        StoreModule.provideStore({
+          appState
+        })
+      ],
+      providers: [
+        HttpClientService,
+        AppStateService
+      ]
+    });
+  });
+
+  it('should create service', inject([HttpClientService], (service: HttpClientService) => {
+    expect(service).toBeTruthy();
+  }));
+
+  describe('#generateUrlString()', () => {
+    it('should generate URL from presets', inject([HttpClientService], (service: HttpClientService) => {
+      expect(service.generateUrlString('status')).toEqual('api/v1/status');
+    }));
+
+    it('should return explicit URL', inject([HttpClientService], (service: HttpClientService) => {
+      expect(service.generateUrlString('login')).toEqual('login');
+    }));
+  });
+
+  describe('#generateUrl()', () => {
+    it('string parameter', inject([HttpClientService], (service: HttpClientService) => {
+      expect(service.generateUrl('status')).toEqual('api/v1/status');
+    }));
+
+    it('request object parameter', inject([HttpClientService], (service: HttpClientService) => {
+      let request = new Request({
+        url: 'status'
+      });
+      expect(service.generateUrl(request).url).toEqual('api/v1/status');
+    }));
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
new file mode 100644
index 0000000..8fed570
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/http-client.service.ts
@@ -0,0 +1,138 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Observable} from 'rxjs/Observable';
+import 'rxjs/add/operator/first';
+import {Http, XHRBackend, Request, RequestOptions, RequestOptionsArgs, Response, Headers, URLSearchParams} from '@angular/http';
+import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
+import {ServiceLogsQueryParams} from '@app/classes/queries/service-logs-query-params.class';
+import {ServiceLogsHistogramQueryParams} from '@app/classes/queries/service-logs-histogram-query-params.class';
+import {AppStateService} from '@app/services/storage/app-state.service';
+
+@Injectable()
+export class HttpClientService extends Http {
+
+  constructor(backend: XHRBackend, defaultOptions: RequestOptions, private appState: AppStateService) {
+    super(backend, defaultOptions);
+  }
+
+  private readonly apiPrefix = 'api/v1/';
+
+  private readonly endPoints = {
+    status: {
+      url: 'status'
+    },
+    auditLogs: {
+      url: 'audit/logs',
+      params: opts => new AuditLogsQueryParams(opts)
+    },
+    auditLogsFields: {
+      url: 'audit/logs/schema/fields'
+    },
+    serviceLogs: {
+      url: 'service/logs',
+      params: opts => new ServiceLogsQueryParams(opts)
+    },
+    serviceLogsHistogram: {
+      url: 'service/logs/histogram',
+      params: opts => new ServiceLogsHistogramQueryParams(opts)
+    },
+    serviceLogsFields: {
+      url: 'service/logs/schema/fields'
+    },
+    components: {
+      url: 'service/logs/components'
+    },
+    clusters: {
+      url: 'service/logs/clusters'
+    },
+    hosts: {
+      url: 'service/logs/tree'
+    }
+  };
+
+  private readonly unauthorizedStatuses = [401, 403, 419];
+
+  private generateUrlString(url: string): string {
+    const preset = this.endPoints[url];
+    return preset ? `${this.apiPrefix}${preset.url}` : url;
+  }
+
+  private generateUrl(request: string | Request): string | Request {
+    if (typeof request === 'string') {
+      return this.generateUrlString(request);
+    }
+    if (request instanceof Request) {
+      request.url = this.generateUrlString(request.url);
+      return request;
+    }
+  }
+
+  private generateOptions(url: string, params: {[key: string]: string}): RequestOptionsArgs {
+    const preset = this.endPoints[url],
+      rawParams = preset && preset.params ? preset.params(params) : params;
+    if (rawParams) {
+      const paramsString = Object.keys(rawParams).map(key => `${key}=${rawParams[key]}`).join('&'),
+        urlParams = new URLSearchParams(paramsString, {
+          encodeKey: key => key,
+          encodeValue: value => encodeURIComponent(value)
+        });
+      return {
+        params: urlParams
+      };
+    } else {
+      return {
+        params: rawParams
+      };
+    }
+  }
+
+  private handleError(request: Observable<Response>): void {
+    request.subscribe(null, (error: any) => {
+      if (this.unauthorizedStatuses.indexOf(error.status) > -1) {
+        this.appState.setParameter('isAuthorized', false);
+      }
+    });
+  }
+
+  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
+    let req = super.request(this.generateUrl(url), options).share().first();
+    this.handleError(req);
+    return req;
+  }
+
+  get(url, params?: {[key: string]: string}): Observable<Response> {
+    return super.get(this.generateUrlString(url), this.generateOptions(url, params));
+  }
+
+  postFormData(url: string, params: {[key: string]: string}, options?: RequestOptionsArgs): Observable<Response> {
+    const encodedParams = this.generateOptions(url, params).params;
+    let body;
+    if (encodedParams && encodedParams instanceof URLSearchParams) {
+      body = encodedParams.rawParams;
+    }
+    let requestOptions = Object.assign({}, options);
+    if (!requestOptions.headers) {
+      requestOptions.headers = new Headers();
+    }
+    requestOptions.headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
+    return super.post(url, body, requestOptions);
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
new file mode 100644
index 0000000..8ebbd72
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.spec.ts
@@ -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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {StoreModule} from '@ngrx/store';
+import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
+import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
+import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
+import {ClustersService, clusters} from '@app/services/storage/clusters.service';
+import {ComponentsService, components} from '@app/services/storage/components.service';
+import {HostsService, hosts} from '@app/services/storage/hosts.service';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+
+import {LogsContainerService} from './logs-container.service';
+
+describe('LogsContainerService', () => {
+  beforeEach(() => {
+    const httpClient = {
+      get: () => {
+        return {
+          subscribe: () => {
+          }
+        }
+      }
+    };
+    TestBed.configureTestingModule({
+      imports: [
+        StoreModule.provideStore({
+          auditLogs,
+          serviceLogs,
+          auditLogsFields,
+          serviceLogsFields,
+          serviceLogsHistogramData,
+          appSettings,
+          clusters,
+          components,
+          hosts
+        })
+      ],
+      providers: [
+        AuditLogsService,
+        ServiceLogsService,
+        AuditLogsFieldsService,
+        ServiceLogsFieldsService,
+        ServiceLogsHistogramDataService,
+        AppSettingsService,
+        ClustersService,
+        ComponentsService,
+        HostsService,
+        LogsContainerService,
+        {
+          provide: HttpClientService,
+          useValue: httpClient
+        },
+        FilteringService
+      ]
+    });
+  });
+
+  it('should create service', inject([LogsContainerService], (service: LogsContainerService) => {
+    expect(service).toBeTruthy();
+  }));
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
new file mode 100644
index 0000000..702deab
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/logs-container.service.ts
@@ -0,0 +1,148 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {HttpClientService} from '@app/services/http-client.service';
+import {FilteringService} from '@app/services/filtering.service';
+import {AuditLogsService} from '@app/services/storage/audit-logs.service';
+import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
+import {ServiceLogsService} from '@app/services/storage/service-logs.service';
+import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
+import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
+
+@Injectable()
+export class LogsContainerService {
+
+  constructor(private httpClient: HttpClientService, private auditLogsStorage: AuditLogsService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsStorage: ServiceLogsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService, private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private filtering: FilteringService) {
+  }
+
+  readonly colors = {
+    WARN: '#FF8916',
+    ERROR: '#E81D1D',
+    FATAL: '#830A0A',
+    INFO: '#2577B5',
+    DEBUG: '#65E8FF',
+    TRACE: '#888',
+    UNKNOWN: '#BDBDBD'
+  };
+
+  private readonly listFilters = {
+    clusters: ['clusters'],
+    text: ['iMessage'],
+    timeRange: ['end_time', 'start_time'],
+    components: ['mustBe'],
+    levels: ['level'],
+    hosts: ['host_name'],
+    sorting: ['sortType', 'sortBy'],
+    pageSize: ['pageSize'],
+    page: ['page']
+  };
+
+  private readonly histogramFilters = {
+    clusters: ['clusters'],
+    text: ['iMessage'],
+    timeRange: ['to', 'from'],
+    components: ['mustBe'],
+    levels: ['level']
+  };
+
+  readonly logsTypeMap = {
+    auditLogs: {
+      logsModel: this.auditLogsStorage,
+      fieldsModel: this.auditLogsFieldsStorage,
+      isSetFlag: 'isAuditLogsSet'
+    },
+    serviceLogs: {
+      logsModel: this.serviceLogsStorage,
+      fieldsModel: this.serviceLogsFieldsStorage,
+      isSetFlag: 'isServiceLogsSet'
+    }
+  };
+
+  totalCount: number = 0;
+
+  loadLogs(logsType: string): void {
+    this.httpClient.get(logsType, this.getParams('listFilters')).subscribe(response => {
+      const jsonResponse = response.json();
+      this.logsTypeMap[logsType].logsModel.clear();
+      if (jsonResponse) {
+        const logs = jsonResponse.logList,
+          count = jsonResponse.totalCount || 0;
+        if (logs) {
+          this.serviceLogsStorage.addInstances(logs);
+        }
+        this.totalCount = count;
+      }
+    });
+    this.httpClient.get('serviceLogsHistogram', this.getParams('histogramFilters')).subscribe(response => {
+      const jsonResponse = response.json();
+      this.serviceLogsHistogramStorage.clear();
+      if (jsonResponse) {
+        const histogramData = jsonResponse.graphData;
+        if (histogramData) {
+          this.serviceLogsHistogramStorage.addInstances(histogramData);
+        }
+      }
+    });
+  }
+
+  private getParams(filtersMapName: string): any {
+    let params = {};
+    Object.keys(this[filtersMapName]).forEach(key => {
+      const inputValue = this.filtering.filtersForm.getRawValue()[key],
+        paramNames = this[filtersMapName][key];
+      paramNames.forEach(paramName => {
+        let value;
+        const valueGetter = this.filtering.valueGetters[paramName];
+        if (valueGetter) {
+          if (paramName === 'start_time') {
+            value = valueGetter(inputValue, params['end_time']);
+          } else if (paramName === 'from') {
+            value = valueGetter(inputValue, params['to']);
+          } else {
+            value = valueGetter(inputValue);
+          }
+        } else {
+          value = inputValue;
+        }
+        if (value != null && value !== '') {
+          params[paramName] = value;
+        }
+      });
+    }, this);
+    return params;
+  }
+
+  getHistogramData(data: any[]): any {
+    let histogramData = {};
+    data.forEach(type => {
+      const name = type.name;
+      type.dataCount.forEach(entry => {
+        const timeStamp = new Date(entry.name).valueOf();
+        if (!histogramData[timeStamp]) {
+          let initialValue = {};
+          Object.keys(this.colors).forEach(key => initialValue[key] = 0);
+          histogramData[timeStamp] = initialValue;
+        }
+        histogramData[timeStamp][name] = Number(entry.value);
+      });
+    });
+    return histogramData;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.spec.ts
new file mode 100644
index 0000000..410f70d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.spec.ts
@@ -0,0 +1,81 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+import {mockApiDataService} from './mock-api-data.service';
+
+describe('mockApiDataService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [mockApiDataService]
+    });
+  });
+
+  it('should create service', inject([mockApiDataService], (service: mockApiDataService) => {
+    expect(service).toBeTruthy();
+  }));
+
+  describe('#parseUrl()', () => {
+    const cases = [
+      {
+        url: 'root',
+        base: '/',
+        collectionName: 'root',
+        query: '',
+        title: 'one-level depth url, no query params'
+      },
+      {
+        url: 'root?param0=1&param1=2',
+        base: '/',
+        collectionName: 'root',
+        query: 'param0=1&param1=2',
+        title: 'one-level depth url with query params'
+      },
+      {
+        url: 'root/resources/collection',
+        base: 'root/resources/',
+        collectionName: 'collection',
+        query: '',
+        title: 'more than one-level depth url, no query params'
+      },
+      {
+        url: 'root/resources/collection?param0=1&param1=2',
+        base: 'root/resources/',
+        collectionName: 'collection',
+        query: 'param0=1&param1=2',
+        title: 'more than one-level depth url with query params'
+      }
+    ];
+
+    cases.forEach(test => {
+      describe(test.title, () => {
+        it('base', inject([mockApiDataService], (service: mockApiDataService) => {
+          expect(service.parseUrl(test.url).base).toEqual(test.base);
+        }));
+
+        it('collectionName', inject([mockApiDataService], (service: mockApiDataService) => {
+          expect(service.parseUrl(test.url).collectionName).toEqual(test.collectionName);
+        }));
+
+        it('query', inject([mockApiDataService], (service: mockApiDataService) => {
+          expect(service.parseUrl(test.url).query.toString()).toEqual(test.query);
+        }));
+      });
+    });
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
new file mode 100644
index 0000000..ec89d9f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/mock-api-data.service.ts
@@ -0,0 +1,178 @@
+/**
+ * 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.
+ */
+
+import {URLSearchParams, Response, ResponseOptions} from '@angular/http';
+import {InMemoryDbService, InMemoryBackendService, createErrorResponse} from 'angular-in-memory-web-api';
+import {Observable} from 'rxjs/Observable';
+import {Subscriber} from 'rxjs/Subscriber';
+import * as moment from 'moment';
+import {mockData} from '@app/mock-data';
+
+export class mockBackendService extends InMemoryBackendService {
+  getLocation(url: string): any {
+    return super.getLocation(url);
+  }
+}
+
+export class mockApiDataService implements InMemoryDbService {
+
+  private readonly filterMap = {
+    'api/v1/service/logs': {
+      pathToCollection: 'logList',
+      totalCountKey: 'totalCount',
+      filters: {
+        clusters: {
+          key: 'cluster',
+          isValuesList: true
+        },
+        mustBe: {
+          key: 'type',
+          isValuesList: true
+        },
+        level: {
+          key: 'level',
+          isValuesList: true
+        },
+        iMessage: {
+          key: 'log_message',
+          filterFunction: (value, filterValue) => value.toLowerCase().indexOf(filterValue.toLowerCase()) > -1
+        },
+        start_time: {
+          key: 'logtime',
+          filterFunction: (value, filterValue) => value >= moment(filterValue).valueOf()
+        },
+        end_time: {
+          key: 'logtime',
+          filterFunction: (value, filterValue) => value < moment(filterValue).valueOf()
+        },
+        host_name: {
+          key: 'host',
+          isValuesList: true
+        }
+      }
+    }
+  };
+
+  parseUrl(url: string): any {
+    const urlLocation = mockBackendService.prototype.getLocation(url),
+      query = urlLocation.search && new URLSearchParams(urlLocation.search.substr(1), {
+          encodeKey: key => key,
+          encodeValue: value => value
+        }),
+      splitUrl = urlLocation.pathname.substr(1).split('/'),
+      urlPartsCount = splitUrl.length,
+      collectionName = splitUrl[urlPartsCount - 1],
+      base = splitUrl.slice(0, urlPartsCount - 1).join('/') + '/';
+    return {
+      base: base,
+      collectionName: collectionName,
+      query: query
+    };
+  }
+
+  get(interceptorArgs: any): Observable<Response> {
+    const query = interceptorArgs.requestInfo.query,
+      path = interceptorArgs.requestInfo.base + interceptorArgs.requestInfo.collectionName,
+      pathArray = path.split('/').filter(part => part !== '');
+    if (query && query.paramsMap.has('static') && interceptorArgs.passThruBackend) {
+      return interceptorArgs.passThruBackend.createConnection(interceptorArgs.requestInfo.req).response;
+    } else {
+      let is404 = false;
+      const allData = pathArray.reduce((currentObject, currentKey, index, array) => {
+        if (!currentObject && index < array.length - 1) {
+          return {};
+        } else if (currentObject.hasOwnProperty(currentKey)) {
+          return currentObject[currentKey];
+        } else {
+          is404 = true;
+          return {};
+        }
+      }, interceptorArgs.db);
+      if (is404) {
+        return new Observable<Response>((subscriber: Subscriber<Response>) => subscriber.error(new Response(createErrorResponse(
+          interceptorArgs.requestInfo.req, 404, 'Not found'
+        ))));
+      } else {
+        let filteredData;
+        const filterMapItem = this.filterMap[path];
+        if (query && filterMapItem) {
+          filteredData = {};
+          const pathToCollection = filterMapItem.pathToCollection,
+            collection = allData[pathToCollection];
+          let filteredCollection = collection.filter(item => {
+            let result = true;
+              query.paramsMap.forEach((value, key) => {
+              const paramValue = decodeURIComponent(value[0]),
+                paramFilter = filterMapItem.filters[key],
+                paramValuesList = paramFilter && paramFilter.isValuesList && paramValue ? paramValue.split(',') : [],
+                currentValue = paramFilter && item[paramFilter.key];
+              if (paramFilter &&
+                ((paramFilter.filterFunction && !paramFilter.filterFunction(currentValue, paramValue)) ||
+                (!paramFilter.filterFunction && !paramFilter.isValuesList && currentValue !== paramValue) ||
+                (!paramFilter.filterFunction && paramFilter.isValuesList && paramValuesList.indexOf(currentValue) === -1))) {
+                result = false;
+              }
+            });
+            return result;
+          });
+          if (query.paramsMap.has('sortBy') && query.paramsMap.has('sortType')) {
+            const sortKey = query.paramsMap.get('sortBy')[0],
+              sortType = query.paramsMap.get('sortType')[0];
+            filteredCollection.sort((a, b) => {
+              const itemA = a[sortKey],
+                itemB = b[sortKey];
+              let ascResult;
+              if (itemA > itemB) {
+                ascResult = 1;
+              } else if (itemA < itemB) {
+                ascResult = -1;
+              } else {
+                ascResult = 0;
+              }
+              return ascResult * Math.pow(-1, Number(sortType === 'desc'));
+            });
+          }
+          if (filterMapItem.totalCountKey) {
+            filteredData[filterMapItem.totalCountKey] = filteredCollection.length;
+          }
+          if (query && query.paramsMap.has('page') && query.paramsMap.has('pageSize')) {
+            const page = parseInt(query.paramsMap.get('page')[0]),
+              pageSize = parseInt(query.paramsMap.get('pageSize')[0]);
+            filteredCollection = filteredCollection.slice(page * pageSize, (page + 1) * pageSize);
+          }
+          filteredData[pathToCollection] = filteredCollection;
+        } else {
+          filteredData = allData;
+        }
+        return new Observable<Response>((subscriber: Subscriber<Response>) => subscriber.next(new Response(new ResponseOptions({
+          status: 200,
+          body: filteredData
+        }))));
+      }
+    }
+  }
+
+  post(interceptorArgs: any) {
+    // TODO implement posting data to mock object except login call
+    return this.get(interceptorArgs);
+  }
+
+  createDb() {
+    return mockData;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-settings.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-settings.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-settings.service.ts
new file mode 100644
index 0000000..6de9988
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-settings.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {defaultSettings} from '@app/models/app-settings.model';
+import {AppStore, ObjectModelService, getObjectReducer} from '@app/models/store.model';
+
+export const modelName = 'appSettings';
+
+@Injectable()
+export class AppSettingsService extends ObjectModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const appSettings = getObjectReducer(modelName, defaultSettings);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-state.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-state.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-state.service.ts
new file mode 100644
index 0000000..d77d80f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/app-state.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {initialState} from '@app/models/app-state.model';
+import {AppStore, ObjectModelService, getObjectReducer} from '@app/models/store.model';
+
+export const modelName = 'appState';
+
+@Injectable()
+export class AppStateService extends ObjectModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const appState = getObjectReducer(modelName, initialState);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts
new file mode 100644
index 0000000..bb8c661
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs-fields.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'auditLogsFields';
+
+@Injectable()
+export class AuditLogsFieldsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const auditLogsFields = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs.service.ts
new file mode 100644
index 0000000..bc33bd9
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/audit-logs.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'auditLogs';
+
+@Injectable()
+export class AuditLogsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const auditLogs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/clusters.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/clusters.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/clusters.service.ts
new file mode 100644
index 0000000..f21a8f9
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/clusters.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'clusters';
+
+@Injectable()
+export class ClustersService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const clusters = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/components.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/components.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/components.service.ts
new file mode 100644
index 0000000..6b2a0ba
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/components.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'components';
+
+@Injectable()
+export class ComponentsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const components = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/filters.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/filters.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/filters.service.ts
new file mode 100644
index 0000000..b850006
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/filters.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'filters';
+
+@Injectable()
+export class FiltersService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const filters = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/graphs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/graphs.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/graphs.service.ts
new file mode 100644
index 0000000..e541444
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/graphs.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'graphs';
+
+@Injectable()
+export class GraphsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const graphs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/hosts.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/hosts.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/hosts.service.ts
new file mode 100644
index 0000000..0cb0a74
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/hosts.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'hosts';
+
+@Injectable()
+export class HostsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const hosts = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
new file mode 100644
index 0000000..08f237d
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/reducers.service.ts
@@ -0,0 +1,52 @@
+/**
+ * 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.
+ */
+
+import {combineReducers} from '@ngrx/store';
+import {appSettings} from '@app/services/storage/app-settings.service';
+import {appState} from '@app/services/storage/app-state.service';
+import {auditLogs} from '@app/services/storage/audit-logs.service';
+import {clusters} from '@app/services/storage/clusters.service';
+import {components} from '@app/services/storage/components.service';
+import {filters} from '@app/services/storage/filters.service';
+import {graphs} from '@app/services/storage/graphs.service';
+import {hosts} from '@app/services/storage/hosts.service';
+import {serviceLogs} from '@app/services/storage/service-logs.service';
+import {serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
+import {serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
+import {auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
+import {userConfigs} from '@app/services/storage/user-configs.service';
+
+export const reducers = {
+  appSettings,
+  appState,
+  auditLogs,
+  serviceLogs,
+  serviceLogsHistogramData,
+  graphs,
+  hosts,
+  userConfigs,
+  filters,
+  clusters,
+  components,
+  serviceLogsFields,
+  auditLogsFields
+};
+
+export function reducer(state: any, action: any) {
+  return (combineReducers(reducers))(state, action);
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-fields.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-fields.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-fields.service.ts
new file mode 100644
index 0000000..0082cd6
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-fields.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'serviceLogsFields';
+
+@Injectable()
+export class ServiceLogsFieldsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const serviceLogsFields = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-histogram-data.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-histogram-data.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-histogram-data.service.ts
new file mode 100644
index 0000000..e680777
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs-histogram-data.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'serviceLogsHistogramData';
+
+@Injectable()
+export class ServiceLogsHistogramDataService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const serviceLogsHistogramData = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs.service.ts
new file mode 100644
index 0000000..f0ff0d7
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/service-logs.service.ts
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'serviceLogs';
+
+@Injectable()
+export class ServiceLogsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const serviceLogs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/user-configs.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/user-configs.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/user-configs.service.ts
new file mode 100644
index 0000000..1596e78
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/storage/user-configs.service.ts
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ */
+
+
+import {Injectable} from '@angular/core';
+import {Store} from '@ngrx/store';
+import {AppStore, CollectionModelService, getCollectionReducer} from '@app/models/store.model';
+
+export const modelName = 'userConfigs';
+
+@Injectable()
+export class UserConfigsService extends CollectionModelService {
+  constructor(store: Store<AppStore>) {
+    super(modelName, store);
+  }
+}
+
+export const userConfigs = getCollectionReducer(modelName);

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.spec.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.spec.ts
new file mode 100644
index 0000000..a4a0cf8
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.spec.ts
@@ -0,0 +1,86 @@
+/**
+ * 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.
+ */
+
+import {TestBed, inject} from '@angular/core/testing';
+
+import {UtilsService} from './utils.service';
+
+describe('UtilsService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [UtilsService]
+    });
+  });
+
+  it('should create service', inject([UtilsService], (service: UtilsService) => {
+    expect(service).toBeTruthy();
+  }));
+
+  describe('#updateMultiSelectValue()', () => {
+    const cases = [
+      {
+        currentValue: '',
+        value: 'v0',
+        isChecked: true,
+        result: 'v0',
+        title: 'check; no checked items before'
+      },
+      {
+        currentValue: 'v1,v2',
+        value: 'v3',
+        isChecked: true,
+        result: 'v1,v2,v3',
+        title: 'check'
+      },
+      {
+        currentValue: 'v4,v5',
+        value: 'v4',
+        isChecked: false,
+        result: 'v5',
+        title: 'uncheck'
+      },
+      {
+        currentValue: 'v6,v7',
+        value: 'v6',
+        isChecked: true,
+        result: 'v6,v7',
+        title: 'avoid repeating check action'
+      },
+      {
+        currentValue: 'v8,v9',
+        value: 'v10',
+        isChecked: false,
+        result: 'v8,v9',
+        title: 'avoid repeating uncheck action'
+      },
+      {
+        currentValue: 'v11',
+        value: 'v11',
+        isChecked: false,
+        result: '',
+        title: 'uncheck last item'
+      }
+    ];
+
+    cases.forEach(test => {
+      it(test.title, inject([UtilsService], (service: UtilsService) => {
+        expect(service.updateMultiSelectValue(test.currentValue, test.value, test.isChecked)).toEqual(test.result);
+      }));
+    });
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
new file mode 100644
index 0000000..9f6cacd
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-web/src/app/services/utils.service.ts
@@ -0,0 +1,46 @@
+/**
+ * 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.
+ */
+
+import {Injectable} from '@angular/core';
+
+@Injectable()
+export class UtilsService {
+
+  valueHasChanged(currentValue: any, newValue: any): boolean {
+    if (newValue == null) {
+      return false;
+    }
+    if (typeof newValue === 'object') {
+      return JSON.stringify(currentValue) !== JSON.stringify(newValue);
+    } else {
+      return currentValue !== newValue;
+    }
+  }
+
+  updateMultiSelectValue(currentValue: string, value: string, isChecked: boolean): string {
+    let valuesArray = currentValue ? currentValue.split(',') : [],
+      valuePosition = valuesArray.indexOf(value);
+    if (isChecked && valuePosition === -1) {
+      valuesArray.push(value);
+    } else if (!isChecked && valuePosition > -1) {
+      valuesArray.splice(valuePosition, 1);
+    }
+    return valuesArray.join(',');
+  }
+
+}


[47/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-settings.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-settings.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-settings.model.ts
deleted file mode 100644
index 11821a3..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-settings.model.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 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.
- */
-
-import * as moment from 'moment-timezone';
-
-export interface AppSettings {
-  timeZone: string;
-}
-
-export const defaultSettings: AppSettings = {
-  timeZone: moment.tz.guess()
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
deleted file mode 100644
index 2995002..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/app-state.model.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.
- */
-
-export interface AppState {
-  isAuthorized: boolean;
-  isInitialLoading: boolean;
-  isLoginInProgress: boolean;
-  isAuditLogsSet: boolean;
-  isServiceLogsSet: boolean;
-}
-
-export const initialState: AppState = {
-  isAuthorized: false,
-  isInitialLoading: false,
-  isLoginInProgress: false,
-  isAuditLogsSet: false,
-  isServiceLogsSet: false
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log-field.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log-field.model.ts
deleted file mode 100644
index 96372a1..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log-field.model.ts
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * 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.
- */
-
-import {LogField} from '@app/models/log-field.model';
-
-const columnsNamesMap = {
-  access: {
-    displayName: 'logs.accessType',
-    isDisplayed: true
-  },
-  action: {
-    displayName: 'logs.action'
-  },
-  agent: {
-    displayName: 'logs.agent'
-  },
-  agentHost: {
-    displayName: 'logs.agentHost'
-  },
-  authType: {
-    displayName: 'logs.authType'
-  },
-  bundle_id: {
-    displayName: 'logs.bundleId'
-  },
-  case_id: {
-    displayName: 'logs.caseId'
-  },
-  cliIP: {
-    displayName: 'logs.clientIp',
-    isDisplayed: true
-  },
-  cliType: {
-    displayName: 'logs.clientType'
-  },
-  cluster: {
-    displayName: 'logs.cluster'
-  },
-  dst: {
-    displayName: 'logs.dst'
-  },
-  evtTime: {
-    displayName: 'logs.eventTime',
-    isDisplayed: true
-  },
-  file: {
-    displayName: 'logs.file'
-  },
-  host: {
-    displayName: 'logs.host'
-  },
-  id: {
-    displayName: 'logs.id'
-  },
-  ip: {
-    displayName: 'logs.ip'
-  },
-  level: {
-    displayName: 'logs.level'
-  },
-  log_message: {
-    displayName: 'logs.message'
-  },
-  logType: {
-    displayName: 'logs.logType'
-  },
-  logfile_line_number: {
-    displayName: 'logs.logfileLineNumber'
-  },
-  logger_name: {
-    displayName: 'logs.loggerName'
-  },
-  logtime: {
-    displayName: 'logs.logTime'
-  },
-  path: {
-    displayName: 'logs.path'
-  },
-  perm: {
-    displayName: 'logs.perm'
-  },
-  policy: {
-    displayName: 'logs.policy'
-  },
-  proxyUsers: {
-    displayName: 'logs.proxyUsers'
-  },
-  reason: {
-    displayName: 'logs.reason'
-  },
-  repo: {
-    displayName: 'logs.repo',
-    isDisplayed: true
-  },
-  repoType: {
-    displayName: 'logs.repoType'
-  },
-  req_caller_id: {
-    displayName: 'logs.reqCallerId'
-  },
-  reqContext: {
-    displayName: 'logs.reqContext'
-  },
-  reqData: {
-    displayName: 'logs.reqData'
-  },
-  req_self_id: {
-    displayName: 'logs.reqSelfId'
-  },
-  resType: {
-    displayName: 'logs.resType'
-  },
-  resource: {
-    displayName: 'logs.resource',
-    isDisplayed: true
-  },
-  result: {
-    displayName: 'logs.result',
-    isDisplayed: true
-  },
-  sess: {
-    displayName: 'logs.session'
-  },
-  text: {
-    displayName: 'logs.text'
-  },
-  type: {
-    displayName: 'logs.type'
-  },
-  ugi: {
-    displayName: 'logs.ugi'
-  },
-  reqUser: {
-    displayName: 'logs.user',
-    isDisplayed: true
-  },
-  ws_base_url: {
-    displayName: 'logs.baseUrl'
-  },
-  ws_command: {
-    displayName: 'logs.command'
-  },
-  ws_component: {
-    displayName: 'logs.component'
-  },
-  ws_details: {
-    displayName: 'logs.details'
-  },
-  ws_display_name: {
-    displayName: 'logs.displayName'
-  },
-  ws_os: {
-    displayName: 'logs.os'
-  },
-  ws_repo_id: {
-    displayName: 'logs.repoId'
-  },
-  ws_repo_version: {
-    displayName: 'logs.repoVersion'
-  },
-  ws_repositories: {
-    displayName: 'logs.repositories'
-  },
-  ws_request_id: {
-    displayName: 'logs.requestId'
-  },
-  ws_result_status: {
-    displayName: 'logs.resultStatus'
-  },
-  ws_roles: {
-    displayName: 'logs.roles'
-  },
-  ws_stack_version: {
-    displayName: 'logs.stackVersion'
-  },
-  ws_stack: {
-    displayName: 'logs.stack'
-  },
-  ws_status: {
-    displayName: 'logs.status'
-  },
-  ws_task_id: {
-    displayName: 'logs.taskId'
-  },
-  ws_version_note: {
-    displayName: 'logs.versionNote'
-  },
-  ws_version_number: {
-    displayName: 'logs.versionNumber'
-  },
-  tags: {
-    isAvailable: false
-  },
-  tags_str: {
-    isAvailable: false
-  },
-  seq_num: {
-    isAvailable: false
-  }
-};
-
-export class AuditLogField extends LogField {
-  constructor(name: string) {
-    super(name);
-    const preset = columnsNamesMap[this.name];
-    if (preset) {
-      Object.assign(this, preset);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log.model.ts
deleted file mode 100644
index 2b34cd6..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/audit-log.model.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * 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.
- */
-
-import {Log} from '@app/models/log.model';
-
-export interface AuditLog extends Log {
-  policy?: string;
-  reason?: string;
-  result: number;
-  text?: string;
-  tags?: string[];
-  resource?: string;
-  sess?: string;
-  access?: string;
-  logType: string;
-  tags_str?: string;
-  resType?: string;
-  reqUser: string;
-  reqData?: string;
-  repoType: number;
-  repo: string;
-  proxyUsers?: string[];
-  evtTime: string;
-  enforcer: string;
-  reqContext?: string;
-  cliType?: string;
-  cliIP?: string;
-  agent?: string;
-  agentHost?: string;
-  action?: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/bar-graph.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/bar-graph.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/bar-graph.model.ts
deleted file mode 100644
index a197bf5..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/bar-graph.model.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.
- */
-
-import {CommonEntry} from '@app/models/common-entry.model';
-
-export interface BarGraph {
-  dataCount: CommonEntry[],
-  name: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/common-entry.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/common-entry.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/common-entry.model.ts
deleted file mode 100644
index dad82ab..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/common-entry.model.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 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.
- */
-
-export interface CommonEntry {
-  name: string;
-  value: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/count.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/count.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/count.model.ts
deleted file mode 100644
index 02fc41c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/count.model.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * 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.
- */
-
-export interface Count {
-  name: string;
-  count: number;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/filter.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/filter.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/filter.model.ts
deleted file mode 100644
index c7ff662..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/filter.model.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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.
- */
-
-export interface Filter {
-  label: string;
-  hosts: string[];
-  defaultLevels: string[];
-  overrideLevels: string[];
-  expiryTime: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/graph.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/graph.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/graph.model.ts
deleted file mode 100644
index 04966b2..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/graph.model.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.
- */
-
-export interface Graph {
-  name: string;
-  count: string;
-  dataList?: Graph[]
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log-field.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log-field.model.ts
deleted file mode 100644
index 0e738ab..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log-field.model.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 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.
- */
-
-export class LogField {
-  constructor(name: string) {
-    this.name = name;
-  }
-  name: string;
-  displayName: string = this.name;
-  isDisplayed: boolean = false;
-  isAvailable: boolean = true;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log.model.ts
deleted file mode 100644
index 188bbd2..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/log.model.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * 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.
- */
-
-export interface Log {
-  type: string;
-  _version_: number;
-  id: string;
-  file?: string;
-  seq_num: number;
-  bundle_id?: string;
-  case_id?: string;
-  log_message: string;
-  logfile_line_number: number;
-  message_md5: string;
-  cluster: string;
-  event_count: number;
-  event_md5: string;
-  event_dur_ms: number;
-  _ttl_: string;
-  _expire_at_: number;
-  _router_field_?: number;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/node.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/node.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/node.model.ts
deleted file mode 100644
index 2891d142..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/node.model.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * 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.
- */
-
-import {CommonEntry} from '@app/models/common-entry.model';
-
-export interface Node {
-  name: string;
-  type?: string;
-  value: string;
-  isParent: boolean;
-  isRoot: boolean;
-  childs?: Node[];
-  logLevelCount: CommonEntry[];
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log-field.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log-field.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log-field.model.ts
deleted file mode 100644
index 081eecf..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log-field.model.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * 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.
- */
-
-import {LogField} from '@app/models/log-field.model';
-
-const columnsNamesMap = {
-  log_message: {
-    displayName: 'logs.message',
-    isDisplayed: true
-  },
-  bundle_id: {
-    displayName: 'logs.bundleId'
-  },
-  case_id: {
-    displayName: 'logs.caseId'
-  },
-  cluster: {
-    displayName: 'logs.cluster'
-  },
-  event_count: {
-    displayName: 'logs.eventCount'
-  },
-  file: {
-    displayName: 'logs.file'
-  },
-  host: {
-    displayName: 'logs.host'
-  },
-  id: {
-    displayName: 'logs.id'
-  },
-  ip: {
-    displayName: 'logs.ip'
-  },
-  level: {
-    displayName: 'logs.level',
-    isDisplayed: true
-  },
-  line_number: {
-    displayName: 'logs.lineNumber'
-  },
-  logtype: {
-    displayName: 'logs.logType'
-  },
-  logfile_line_number: {
-    displayName: 'logs.logfileLineNumber'
-  },
-  logger_name: {
-    displayName: 'logs.loggerName'
-  },
-  logtime: {
-    isDisplayed: true
-  },
-  method: {
-    displayName: 'logs.method'
-  },
-  path: {
-    displayName: 'logs.path'
-  },
-  rowtype: {
-    displayName: 'logs.rowType'
-  },
-  thread_name: {
-    displayName: 'logs.threadName'
-  },
-  type: {
-    displayName: 'logs.type',
-    isDisplayed: true
-  },
-  tags: {
-    isAvailable: false
-  },
-  text: {
-    isAvailable: false
-  },
-  message: {
-    isAvailable: false
-  },
-  seq_num: {
-    isAvailable: false
-  }
-};
-
-export class ServiceLogField extends LogField {
-  constructor(name: string) {
-    super(name);
-    const preset = columnsNamesMap[this.name];
-    if (preset) {
-      Object.assign(this, preset);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log.model.ts
deleted file mode 100644
index ee27343..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/service-log.model.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 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.
- */
-
-import {Log} from '@app/models/log.model';
-
-export interface ServiceLog extends Log {
-  path: string;
-  host: string;
-  level: string;
-  logtime: number;
-  ip: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/solr-collection-state.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/solr-collection-state.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/solr-collection-state.model.ts
deleted file mode 100644
index 0824dda..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/solr-collection-state.model.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.
- */
-
-export interface SolrCollectionState {
-  znodeReady: boolean;
-  configurationUploaded: boolean;
-  solrCollectionReady: boolean;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
deleted file mode 100644
index 31d52b3..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/store.model.ts
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * 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.
- */
-
-import {Observable} from 'rxjs/Observable';
-import {Store, Action} from '@ngrx/store';
-import {AppSettings} from '@app/models/app-settings.model';
-import {AppState} from '@app/models/app-state.model';
-import {AuditLog} from '@app/models/audit-log.model';
-import {ServiceLog} from '@app/models/service-log.model';
-import {BarGraph} from '@app/models/bar-graph.model';
-import {Graph} from '@app/models/graph.model';
-import {Node} from '@app/models/node.model';
-import {UserConfig} from '@app/models/user-config.model';
-import {Filter} from '@app/models/filter.model';
-import {AuditLogField} from '@app/models/audit-log-field.model';
-import {ServiceLogField} from '@app/models/service-log-field.model';
-
-export const storeActions = {
-  'ARRAY.ADD': 'ADD',
-  'ARRAY.DELETE.PRIMITIVE': 'DELETE_PRIMITIVE',
-  'ARRAY.DELETE.OBJECT': 'DELETE_OBJECT',
-  'ARRAY.CLEAR': 'CLEAR',
-  'ARRAY.MAP': 'MAP',
-
-  'OBJECT.SET': 'SET'
-};
-
-export interface AppStore {
-  appSettings: AppSettings;
-  appState: AppState;
-  auditLogs: AuditLog[];
-  serviceLogs: ServiceLog[];
-  serviceLogsHistogramData: BarGraph[];
-  graphs: Graph[];
-  hosts: Node[];
-  userConfigs: UserConfig[];
-  filters: Filter[];
-  clusters: string[];
-  components: string[];
-  serviceLogsFields: ServiceLogField[];
-  auditLogsFields: AuditLogField[];
-}
-
-export class ModelService {
-
-  constructor(modelName: string, store: Store<AppStore>) {
-    this.modelName = modelName;
-    this.store = store;
-  }
-
-  protected modelName: string;
-
-  protected store: Store<AppStore>;
-
-  getAll(): Observable<any> {
-    return this.store.select(this.modelName);
-  }
-
-}
-
-export class CollectionModelService extends ModelService {
-
-  addInstance(instance: any): void {
-    this.addInstances([instance]);
-  }
-
-  addInstances(instances: any[]): void {
-    this.store.dispatch({
-      type: `${storeActions['ARRAY.ADD']}_${this.modelName}`,
-      payload: instances
-    });
-  }
-
-  deleteObjectInstance(instance: any): void {
-    this.store.dispatch({
-      type: `${storeActions['ARRAY.DELETE.OBJECT']}_${this.modelName}`,
-      payload: instance
-    });
-  }
-
-  deletePrimitiveInstance(instance: any): void {
-    this.store.dispatch({
-      type: `${storeActions['ARRAY.DELETE.PRIMITIVE']}_${this.modelName}`,
-      payload: instance
-    });
-  }
-
-  clear(): void {
-    this.store.dispatch({
-      type: `${storeActions['ARRAY.CLEAR']}_${this.modelName}`
-    });
-  }
-
-  mapCollection(modifier: (item: any) => {}): void {
-    this.store.dispatch({
-      type: `${storeActions['ARRAY.MAP']}_${this.modelName}`,
-      payload: {
-        modifier: modifier
-      }
-    });
-  }
-
-}
-
-export class ObjectModelService extends ModelService {
-
-  getParameter(key: string): Observable<any> {
-    return this.store.select(this.modelName, key);
-  }
-
-  setParameter(key: string, value: any): void {
-    let payload = {};
-    payload[key] = value;
-    this.setParameters(payload);
-  }
-
-  setParameters(params: any): void {
-    this.store.dispatch({
-      type: `${storeActions['OBJECT.SET']}_${this.modelName}`,
-      payload: params
-    });
-  }
-
-}
-
-export function getCollectionReducer(modelName: string, defaultState: any = []): any {
-  return (state: any = defaultState, action: Action) => {
-    switch (action.type) {
-      case `${storeActions['ARRAY.ADD']}_${modelName}`:
-        return [...state, ...action.payload];
-      case `${storeActions['ARRAY.DELETE.OBJECT']}_${modelName}`:
-        return state.filter(instance => instance.id !== action.payload.id);
-      case `${storeActions['ARRAY.DELETE.PRIMITIVE']}_${modelName}`:
-        return state.filter(item => item !== action.payload);
-      case `${storeActions['ARRAY.CLEAR']}_${modelName}`:
-        return [];
-      case `${storeActions['ARRAY.MAP']}_${modelName}`:
-        return state.map(action.payload.modifier);
-      default:
-        return state;
-    }
-  };
-}
-
-export function getObjectReducer(modelName: string, defaultState: any = {}) {
-  return (state: any = defaultState, action: Action): any => {
-    switch (action.type) {
-      case `${storeActions['OBJECT.SET']}_${modelName}`:
-        return Object.assign({}, state, action.payload);
-      default:
-        return state;
-    }
-  };
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/models/user-config.model.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/user-config.model.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/models/user-config.model.ts
deleted file mode 100644
index f52761c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/models/user-config.model.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * 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.
- */
-
-export interface UserConfig {
-  id: string;
-  userName: string;
-  filtername: string;
-  values: string;
-  shareNameList: string[];
-  rowType: string;
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.spec.ts
deleted file mode 100644
index 0d0c24c..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.spec.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * 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.
- */
-
-import {TimeZoneAbbrPipe} from './timezone-abbr.pipe';
-
-describe('TimeZoneAbbrPipe', () => {
-  it('create an instance', () => {
-    const pipe = new TimeZoneAbbrPipe();
-    expect(pipe).toBeTruthy();
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.ts
deleted file mode 100644
index f4aab0b..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/pipes/timezone-abbr.pipe.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 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.
- */
-
-import {Pipe, PipeTransform} from '@angular/core';
-import * as moment from 'moment-timezone';
-
-@Pipe({
-  name: 'timeZoneAbbr'
-})
-export class TimeZoneAbbrPipe implements PipeTransform {
-
-  transform(value: string): string {
-    return moment.tz.zone(value).abbr(moment().valueOf());
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
deleted file mode 100644
index ff0ee37..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.spec.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-
-import {ComponentActionsService} from './component-actions.service';
-
-describe('ComponentActionsService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [
-        StoreModule.provideStore({
-          appSettings
-        })
-      ],
-      providers: [
-        AppSettingsService,
-        ComponentActionsService
-      ]
-    });
-  });
-
-  it('should create service', inject([ComponentActionsService], (service: ComponentActionsService) => {
-    expect(service).toBeTruthy();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
deleted file mode 100644
index a8235fa..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-actions.service.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-import {CollectionModelService} from '@app/models/store.model';
-
-@Injectable()
-export class ComponentActionsService {
-
-  constructor(private appSettings: AppSettingsService) {
-  }
-
-  //TODO implement actions
-
-  undo() {
-  }
-
-  redo() {
-  }
-
-  refresh() {
-  }
-
-  openHistory() {
-  }
-
-  setTimeZone(timeZone: string): void {
-    this.appSettings.setParameter('timeZone', timeZone);
-  }
-
-  updateSelectedColumns(columnNames: string[], model: CollectionModelService): void {
-    model.mapCollection(item => Object.assign({}, item, {
-      isDisplayed: columnNames.indexOf(item.name) > -1
-    }));
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.spec.ts
deleted file mode 100644
index b6ec8d7..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.spec.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {StoreModule} from '@ngrx/store';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
-import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
-import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-
-import {ComponentGeneratorService} from './component-generator.service';
-
-describe('ComponentGeneratorService', () => {
-  beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      imports: [
-        StoreModule.provideStore({
-          hosts,
-          auditLogs,
-          serviceLogs,
-          auditLogsFields,
-          serviceLogsFields,
-          serviceLogsHistogramData,
-          appSettings,
-          clusters,
-          components
-        })
-      ],
-      providers: [
-        ComponentGeneratorService,
-        LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        FilteringService,
-        HostsService,
-        AuditLogsService,
-        ServiceLogsService,
-        AuditLogsFieldsService,
-        ServiceLogsFieldsService,
-        ServiceLogsHistogramDataService,
-        AppSettingsService,
-        ClustersService,
-        ComponentsService
-      ]
-    });
-  });
-
-  it('should create service', inject([ComponentGeneratorService], (service: ComponentGeneratorService) => {
-    expect(service).toBeTruthy();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.ts
deleted file mode 100644
index c49f40f..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/component-generator.service.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable, ComponentFactoryResolver, ViewContainerRef} from '@angular/core';
-import {HostsService} from '@app/services/storage/hosts.service';
-import {LogsContainerService} from '@app/services/logs-container.service';
-import {NodeBarComponent} from '@app/components/node-bar/node-bar.component';
-
-@Injectable()
-export class ComponentGeneratorService {
-
-  constructor(private resolver: ComponentFactoryResolver, private hostsStorage: HostsService, private logsContainer: LogsContainerService) {
-  }
-
-  private createComponent(type: any, container: ViewContainerRef, properties?: any): void {
-    const factory = this.resolver.resolveComponentFactory(type);
-    container.clear();
-    let component = container.createComponent(factory);
-    Object.assign(component.instance, properties);
-  }
-
-  getDataForHostsNodeBar(hostName: string, container: ViewContainerRef): void {
-    let data;
-    this.hostsStorage.getAll().subscribe(hosts => {
-      if (container && hosts && hosts.length) {
-        const selectedHost = hosts.find(host => host.name === hostName);
-        data = selectedHost.logLevelCount.map(event => {
-          return {
-            color: this.logsContainer.colors[event.name],
-            value: event.value
-          };
-        });
-        if (data.length) {
-          this.createComponent(NodeBarComponent, container, {
-            data
-          });
-        }
-      }
-    });
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.spec.ts
deleted file mode 100644
index e3f731e..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.spec.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {StoreModule} from '@ngrx/store';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {UtilsService} from '@app/services/utils.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-import {FilteringService} from './filtering.service';
-
-describe('FilteringService', () => {
-  beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      imports: [
-        StoreModule.provideStore({
-          appSettings,
-          clusters,
-          components,
-          hosts
-        })
-      ],
-      providers: [
-        FilteringService,
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        HostsService,
-        UtilsService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        }
-      ]
-    });
-  });
-
-  it('should create service', inject([FilteringService], (service: FilteringService) => {
-    expect(service).toBeTruthy();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
deleted file mode 100644
index 5b9e90d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/filtering.service.ts
+++ /dev/null
@@ -1,352 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {FormControl, FormGroup} from '@angular/forms';
-import * as moment from 'moment-timezone';
-import {AppSettingsService} from '@app/services/storage/app-settings.service';
-import {ClustersService} from '@app/services/storage/clusters.service';
-import {ComponentsService} from '@app/services/storage/components.service';
-import {HostsService} from '@app/services/storage/hosts.service';
-import {HttpClientService} from '@app/services/http-client.service';
-
-@Injectable()
-export class FilteringService {
-
-  constructor(private httpClient: HttpClientService, private appSettings: AppSettingsService, private clustersStorage: ClustersService, private componentsStorage: ComponentsService, private hostsStorage: HostsService) {
-    appSettings.getParameter('timeZone').subscribe(value => this.timeZone = value || this.defaultTimeZone);
-    clustersStorage.getAll().subscribe(clusters => {
-      this.filters.clusters.options = [...this.filters.clusters.options, ...clusters.map(this.getListItem)];
-    });
-    componentsStorage.getAll().subscribe(components => {
-      this.filters.components.options = [...this.filters.components.options, ...components.map(this.getListItem)];
-    });
-    hostsStorage.getAll().subscribe(hosts => {
-      this.filters.hosts.options = [...this.filters.hosts.options, ...hosts.map(host => {
-        return {
-          label: `${host.name} (${host.value})`,
-          value: host.name
-        };
-      })];
-    });
-  }
-
-  private getListItem(name: string): any {
-    return {
-      label: name,
-      value: name
-    };
-  }
-
-  private readonly defaultTimeZone = moment.tz.guess();
-
-  private readonly paginationOptions = ['10', '25', '50', '100'];
-
-  timeZone: string = this.defaultTimeZone;
-
-  filters = {
-    clusters: {
-      label: 'filter.clusters',
-      options: [],
-      defaultValue: ''
-    },
-    text: {
-      label: 'filter.message',
-      defaultValue: ''
-    },
-    timeRange: {
-      options: [
-        {
-          label: 'filter.timeRange.1hr',
-          value: {
-            type: 'LAST',
-            unit: 'h',
-            interval: 1
-          }
-        },
-        {
-          label: 'filter.timeRange.24hr',
-          value: {
-            type: 'LAST',
-            unit: 'h',
-            interval: 24
-          }
-        },
-        {
-          label: 'filter.timeRange.today',
-          value: {
-            type: 'CURRENT',
-            unit: 'd'
-          }
-        },
-        {
-          label: 'filter.timeRange.yesterday',
-          value: {
-            type: 'PAST',
-            unit: 'd'
-          }
-        },
-        {
-          label: 'filter.timeRange.7d',
-          value: {
-            type: 'LAST',
-            unit: 'd',
-            interval: 7
-          }
-        },
-        {
-          label: 'filter.timeRange.30d',
-          value: {
-            type: 'LAST',
-            unit: 'd',
-            interval: 30
-          }
-        },
-        {
-          label: 'filter.timeRange.thisMonth',
-          value: {
-            type: 'CURRENT',
-            unit: 'M'
-          }
-        },
-        {
-          label: 'filter.timeRange.lastMonth',
-          value: {
-            type: 'PAST',
-            unit: 'M'
-          }
-        },
-        {
-          label: 'filter.timeRange.custom',
-          value: {
-            type: 'CUSTOM'
-          }
-        }
-      ],
-      defaultValue: {
-        type: 'LAST',
-        unit: 'h',
-        interval: 1
-      },
-      defaultLabel: 'filter.timeRange.1hr'
-    },
-    components: {
-      label: 'filter.components',
-      iconClass: 'fa fa-cubes',
-      options: [],
-      defaultValue: ''
-    },
-    levels: {
-      label: 'filter.levels',
-      iconClass: 'fa fa-sort-amount-asc',
-      options: [
-        {
-          label: 'levels.fatal',
-          value: 'FATAL'
-        },
-        {
-          label: 'levels.error',
-          value: 'ERROR'
-        },
-        {
-          label: 'levels.warn',
-          value: 'WARN'
-        },
-        {
-          label: 'levels.info',
-          value: 'INFO'
-        },
-        {
-          label: 'levels.debug',
-          value: 'DEBUG'
-        },
-        {
-          label: 'levels.trace',
-          value: 'TRACE'
-        },
-        {
-          label: 'levels.unknown',
-          value: 'UNKNOWN'
-        }
-      ],
-      defaultValue: ''
-    },
-    hosts: {
-      label: 'filter.hosts',
-      iconClass: 'fa fa-server',
-      options: [],
-      defaultValue: ''
-    },
-    sorting: {
-      label: 'sorting.title',
-      options: [
-        {
-          label: 'sorting.level.asc',
-          value: {
-            key: 'level',
-            type: 'asc'
-          }
-        },
-        {
-          label: 'sorting.level.desc',
-          value: {
-            key: 'level',
-            type: 'desc'
-          }
-        },
-        {
-          label: 'sorting.component.asc',
-          value: {
-            key: 'type',
-            type: 'asc'
-          }
-        },
-        {
-          label: 'sorting.component.desc',
-          value: {
-            key: 'type',
-            type: 'desc'
-          }
-        },
-        {
-          label: 'sorting.time.asc',
-          value: {
-            key: 'logtime',
-            type: 'asc'
-          }
-        },
-        {
-          label: 'sorting.time.desc',
-          value: {
-            key: 'logtime',
-            type: 'desc'
-          }
-        }
-      ],
-      defaultValue: '',
-      defaultLabel: ''
-    },
-    pageSize: {
-      label: 'pagination.title',
-      options: this.paginationOptions.map(option => {
-        return {
-          label: option,
-          value: option
-        }
-      }),
-      defaultValue: '10',
-      defaultLabel: '10'
-    },
-    page: {
-      defaultValue: 0
-    }
-  };
-
-  private filtersFormItems = Object.keys(this.filters).reduce((currentObject, key) => {
-    let formControl = new FormControl(),
-      item = {
-        [key]: formControl
-      };
-    formControl.setValue(this.filters[key].defaultValue);
-    return Object.assign(currentObject, item);
-  }, {});
-
-  filtersForm = new FormGroup(this.filtersFormItems);
-
-  loadClusters(): void {
-    this.httpClient.get('clusters').subscribe(response => {
-      const clusterNames = response.json();
-      if (clusterNames) {
-        this.clustersStorage.addInstances(clusterNames);
-      }
-    });
-  }
-
-  loadComponents(): void {
-    this.httpClient.get('components').subscribe(response => {
-      const jsonResponse = response.json(),
-        components = jsonResponse && jsonResponse.groupList;
-      if (components) {
-        const componentNames = components.map(component => component.type);
-        this.componentsStorage.addInstances(componentNames);
-      }
-    });
-  }
-
-  loadHosts(): void {
-    this.httpClient.get('hosts').subscribe(response => {
-      const jsonResponse = response.json(),
-        hosts = jsonResponse && jsonResponse.vNodeList;
-      if (hosts) {
-        this.hostsStorage.addInstances(hosts);
-      }
-    });
-  }
-
-  private getStartTime(value: any, current: string): string {
-    let time;
-    if (value) {
-      const endTime = moment(moment(current).valueOf());
-      switch (value.type) {
-        case 'LAST':
-          time = endTime.subtract(value.interval, value.unit);
-          break;
-        case 'CURRENT':
-          time = moment().tz(this.timeZone).startOf(value.unit);
-          break;
-        case 'PAST':
-          time = endTime.startOf(value.unit);
-          break;
-        default:
-          break;
-      }
-    }
-    return time ? time.toISOString() : '';
-  }
-
-  private getEndTime(value: any): string {
-    let time;
-    if (value) {
-      switch (value.type) {
-        case 'LAST':
-          time = moment();
-          break;
-        case 'CURRENT':
-          time = moment().tz(this.timeZone).endOf(value.unit);
-          break;
-        case 'PAST':
-          time = moment().tz(this.timeZone).startOf(value.unit).millisecond(-1);
-          break;
-        default:
-          break;
-      }
-    }
-    return time ? time.toISOString() : '';
-  }
-
-  readonly valueGetters = {
-    end_time: this.getEndTime.bind(this),
-    start_time: this.getStartTime.bind(this),
-    to: this.getEndTime.bind(this),
-    from: this.getStartTime.bind(this),
-    sortType: value => value && value.type,
-    sortBy: value => value && value.key,
-    page: value => value == null ? value : value.toString()
-  };
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
deleted file mode 100644
index 0dfb0f3..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.spec.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {HttpModule, Request} from '@angular/http';
-import {StoreModule} from '@ngrx/store';
-import {AppStateService, appState} from '@app/services/storage/app-state.service';
-import {HttpClientService} from './http-client.service';
-
-describe('HttpClientService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [
-        HttpModule,
-        StoreModule.provideStore({
-          appState
-        })
-      ],
-      providers: [
-        HttpClientService,
-        AppStateService
-      ]
-    });
-  });
-
-  it('should create service', inject([HttpClientService], (service: HttpClientService) => {
-    expect(service).toBeTruthy();
-  }));
-
-  describe('#generateUrlString()', () => {
-    it('should generate URL from presets', inject([HttpClientService], (service: HttpClientService) => {
-      expect(service.generateUrlString('status')).toEqual('api/v1/status');
-    }));
-
-    it('should return explicit URL', inject([HttpClientService], (service: HttpClientService) => {
-      expect(service.generateUrlString('login')).toEqual('login');
-    }));
-  });
-
-  describe('#generateUrl()', () => {
-    it('string parameter', inject([HttpClientService], (service: HttpClientService) => {
-      expect(service.generateUrl('status')).toEqual('api/v1/status');
-    }));
-
-    it('request object parameter', inject([HttpClientService], (service: HttpClientService) => {
-      let request = new Request({
-        url: 'status'
-      });
-      expect(service.generateUrl(request).url).toEqual('api/v1/status');
-    }));
-  });
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
deleted file mode 100644
index 8fed570..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/http-client.service.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/first';
-import {Http, XHRBackend, Request, RequestOptions, RequestOptionsArgs, Response, Headers, URLSearchParams} from '@angular/http';
-import {AuditLogsQueryParams} from '@app/classes/queries/audit-logs-query-params.class';
-import {ServiceLogsQueryParams} from '@app/classes/queries/service-logs-query-params.class';
-import {ServiceLogsHistogramQueryParams} from '@app/classes/queries/service-logs-histogram-query-params.class';
-import {AppStateService} from '@app/services/storage/app-state.service';
-
-@Injectable()
-export class HttpClientService extends Http {
-
-  constructor(backend: XHRBackend, defaultOptions: RequestOptions, private appState: AppStateService) {
-    super(backend, defaultOptions);
-  }
-
-  private readonly apiPrefix = 'api/v1/';
-
-  private readonly endPoints = {
-    status: {
-      url: 'status'
-    },
-    auditLogs: {
-      url: 'audit/logs',
-      params: opts => new AuditLogsQueryParams(opts)
-    },
-    auditLogsFields: {
-      url: 'audit/logs/schema/fields'
-    },
-    serviceLogs: {
-      url: 'service/logs',
-      params: opts => new ServiceLogsQueryParams(opts)
-    },
-    serviceLogsHistogram: {
-      url: 'service/logs/histogram',
-      params: opts => new ServiceLogsHistogramQueryParams(opts)
-    },
-    serviceLogsFields: {
-      url: 'service/logs/schema/fields'
-    },
-    components: {
-      url: 'service/logs/components'
-    },
-    clusters: {
-      url: 'service/logs/clusters'
-    },
-    hosts: {
-      url: 'service/logs/tree'
-    }
-  };
-
-  private readonly unauthorizedStatuses = [401, 403, 419];
-
-  private generateUrlString(url: string): string {
-    const preset = this.endPoints[url];
-    return preset ? `${this.apiPrefix}${preset.url}` : url;
-  }
-
-  private generateUrl(request: string | Request): string | Request {
-    if (typeof request === 'string') {
-      return this.generateUrlString(request);
-    }
-    if (request instanceof Request) {
-      request.url = this.generateUrlString(request.url);
-      return request;
-    }
-  }
-
-  private generateOptions(url: string, params: {[key: string]: string}): RequestOptionsArgs {
-    const preset = this.endPoints[url],
-      rawParams = preset && preset.params ? preset.params(params) : params;
-    if (rawParams) {
-      const paramsString = Object.keys(rawParams).map(key => `${key}=${rawParams[key]}`).join('&'),
-        urlParams = new URLSearchParams(paramsString, {
-          encodeKey: key => key,
-          encodeValue: value => encodeURIComponent(value)
-        });
-      return {
-        params: urlParams
-      };
-    } else {
-      return {
-        params: rawParams
-      };
-    }
-  }
-
-  private handleError(request: Observable<Response>): void {
-    request.subscribe(null, (error: any) => {
-      if (this.unauthorizedStatuses.indexOf(error.status) > -1) {
-        this.appState.setParameter('isAuthorized', false);
-      }
-    });
-  }
-
-  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
-    let req = super.request(this.generateUrl(url), options).share().first();
-    this.handleError(req);
-    return req;
-  }
-
-  get(url, params?: {[key: string]: string}): Observable<Response> {
-    return super.get(this.generateUrlString(url), this.generateOptions(url, params));
-  }
-
-  postFormData(url: string, params: {[key: string]: string}, options?: RequestOptionsArgs): Observable<Response> {
-    const encodedParams = this.generateOptions(url, params).params;
-    let body;
-    if (encodedParams && encodedParams instanceof URLSearchParams) {
-      body = encodedParams.rawParams;
-    }
-    let requestOptions = Object.assign({}, options);
-    if (!requestOptions.headers) {
-      requestOptions.headers = new Headers();
-    }
-    requestOptions.headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
-    return super.post(url, body, requestOptions);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.spec.ts
deleted file mode 100644
index 8ebbd72..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.spec.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {StoreModule} from '@ngrx/store';
-import {AuditLogsService, auditLogs} from '@app/services/storage/audit-logs.service';
-import {ServiceLogsService, serviceLogs} from '@app/services/storage/service-logs.service';
-import {AuditLogsFieldsService, auditLogsFields} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsFieldsService, serviceLogsFields} from '@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService, serviceLogsHistogramData} from '@app/services/storage/service-logs-histogram-data.service';
-import {AppSettingsService, appSettings} from '@app/services/storage/app-settings.service';
-import {ClustersService, clusters} from '@app/services/storage/clusters.service';
-import {ComponentsService, components} from '@app/services/storage/components.service';
-import {HostsService, hosts} from '@app/services/storage/hosts.service';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-
-import {LogsContainerService} from './logs-container.service';
-
-describe('LogsContainerService', () => {
-  beforeEach(() => {
-    const httpClient = {
-      get: () => {
-        return {
-          subscribe: () => {
-          }
-        }
-      }
-    };
-    TestBed.configureTestingModule({
-      imports: [
-        StoreModule.provideStore({
-          auditLogs,
-          serviceLogs,
-          auditLogsFields,
-          serviceLogsFields,
-          serviceLogsHistogramData,
-          appSettings,
-          clusters,
-          components,
-          hosts
-        })
-      ],
-      providers: [
-        AuditLogsService,
-        ServiceLogsService,
-        AuditLogsFieldsService,
-        ServiceLogsFieldsService,
-        ServiceLogsHistogramDataService,
-        AppSettingsService,
-        ClustersService,
-        ComponentsService,
-        HostsService,
-        LogsContainerService,
-        {
-          provide: HttpClientService,
-          useValue: httpClient
-        },
-        FilteringService
-      ]
-    });
-  });
-
-  it('should create service', inject([LogsContainerService], (service: LogsContainerService) => {
-    expect(service).toBeTruthy();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.ts
deleted file mode 100644
index 702deab..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/logs-container.service.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * 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.
- */
-
-import {Injectable} from '@angular/core';
-import {HttpClientService} from '@app/services/http-client.service';
-import {FilteringService} from '@app/services/filtering.service';
-import {AuditLogsService} from '@app/services/storage/audit-logs.service';
-import {AuditLogsFieldsService} from '@app/services/storage/audit-logs-fields.service';
-import {ServiceLogsService} from '@app/services/storage/service-logs.service';
-import {ServiceLogsFieldsService} from '@app/services/storage/service-logs-fields.service';
-import {ServiceLogsHistogramDataService} from '@app/services/storage/service-logs-histogram-data.service';
-
-@Injectable()
-export class LogsContainerService {
-
-  constructor(private httpClient: HttpClientService, private auditLogsStorage: AuditLogsService, private auditLogsFieldsStorage: AuditLogsFieldsService, private serviceLogsStorage: ServiceLogsService, private serviceLogsFieldsStorage: ServiceLogsFieldsService, private serviceLogsHistogramStorage: ServiceLogsHistogramDataService, private filtering: FilteringService) {
-  }
-
-  readonly colors = {
-    WARN: '#FF8916',
-    ERROR: '#E81D1D',
-    FATAL: '#830A0A',
-    INFO: '#2577B5',
-    DEBUG: '#65E8FF',
-    TRACE: '#888',
-    UNKNOWN: '#BDBDBD'
-  };
-
-  private readonly listFilters = {
-    clusters: ['clusters'],
-    text: ['iMessage'],
-    timeRange: ['end_time', 'start_time'],
-    components: ['mustBe'],
-    levels: ['level'],
-    hosts: ['host_name'],
-    sorting: ['sortType', 'sortBy'],
-    pageSize: ['pageSize'],
-    page: ['page']
-  };
-
-  private readonly histogramFilters = {
-    clusters: ['clusters'],
-    text: ['iMessage'],
-    timeRange: ['to', 'from'],
-    components: ['mustBe'],
-    levels: ['level']
-  };
-
-  readonly logsTypeMap = {
-    auditLogs: {
-      logsModel: this.auditLogsStorage,
-      fieldsModel: this.auditLogsFieldsStorage,
-      isSetFlag: 'isAuditLogsSet'
-    },
-    serviceLogs: {
-      logsModel: this.serviceLogsStorage,
-      fieldsModel: this.serviceLogsFieldsStorage,
-      isSetFlag: 'isServiceLogsSet'
-    }
-  };
-
-  totalCount: number = 0;
-
-  loadLogs(logsType: string): void {
-    this.httpClient.get(logsType, this.getParams('listFilters')).subscribe(response => {
-      const jsonResponse = response.json();
-      this.logsTypeMap[logsType].logsModel.clear();
-      if (jsonResponse) {
-        const logs = jsonResponse.logList,
-          count = jsonResponse.totalCount || 0;
-        if (logs) {
-          this.serviceLogsStorage.addInstances(logs);
-        }
-        this.totalCount = count;
-      }
-    });
-    this.httpClient.get('serviceLogsHistogram', this.getParams('histogramFilters')).subscribe(response => {
-      const jsonResponse = response.json();
-      this.serviceLogsHistogramStorage.clear();
-      if (jsonResponse) {
-        const histogramData = jsonResponse.graphData;
-        if (histogramData) {
-          this.serviceLogsHistogramStorage.addInstances(histogramData);
-        }
-      }
-    });
-  }
-
-  private getParams(filtersMapName: string): any {
-    let params = {};
-    Object.keys(this[filtersMapName]).forEach(key => {
-      const inputValue = this.filtering.filtersForm.getRawValue()[key],
-        paramNames = this[filtersMapName][key];
-      paramNames.forEach(paramName => {
-        let value;
-        const valueGetter = this.filtering.valueGetters[paramName];
-        if (valueGetter) {
-          if (paramName === 'start_time') {
-            value = valueGetter(inputValue, params['end_time']);
-          } else if (paramName === 'from') {
-            value = valueGetter(inputValue, params['to']);
-          } else {
-            value = valueGetter(inputValue);
-          }
-        } else {
-          value = inputValue;
-        }
-        if (value != null && value !== '') {
-          params[paramName] = value;
-        }
-      });
-    }, this);
-    return params;
-  }
-
-  getHistogramData(data: any[]): any {
-    let histogramData = {};
-    data.forEach(type => {
-      const name = type.name;
-      type.dataCount.forEach(entry => {
-        const timeStamp = new Date(entry.name).valueOf();
-        if (!histogramData[timeStamp]) {
-          let initialValue = {};
-          Object.keys(this.colors).forEach(key => initialValue[key] = 0);
-          histogramData[timeStamp] = initialValue;
-        }
-        histogramData[timeStamp][name] = Number(entry.value);
-      });
-    });
-    return histogramData;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.spec.ts
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.spec.ts b/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.spec.ts
deleted file mode 100644
index 410f70d..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/src/app/services/mock-api-data.service.spec.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * 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.
- */
-
-import {TestBed, inject} from '@angular/core/testing';
-import {mockApiDataService} from './mock-api-data.service';
-
-describe('mockApiDataService', () => {
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      providers: [mockApiDataService]
-    });
-  });
-
-  it('should create service', inject([mockApiDataService], (service: mockApiDataService) => {
-    expect(service).toBeTruthy();
-  }));
-
-  describe('#parseUrl()', () => {
-    const cases = [
-      {
-        url: 'root',
-        base: '/',
-        collectionName: 'root',
-        query: '',
-        title: 'one-level depth url, no query params'
-      },
-      {
-        url: 'root?param0=1&param1=2',
-        base: '/',
-        collectionName: 'root',
-        query: 'param0=1&param1=2',
-        title: 'one-level depth url with query params'
-      },
-      {
-        url: 'root/resources/collection',
-        base: 'root/resources/',
-        collectionName: 'collection',
-        query: '',
-        title: 'more than one-level depth url, no query params'
-      },
-      {
-        url: 'root/resources/collection?param0=1&param1=2',
-        base: 'root/resources/',
-        collectionName: 'collection',
-        query: 'param0=1&param1=2',
-        title: 'more than one-level depth url with query params'
-      }
-    ];
-
-    cases.forEach(test => {
-      describe(test.title, () => {
-        it('base', inject([mockApiDataService], (service: mockApiDataService) => {
-          expect(service.parseUrl(test.url).base).toEqual(test.base);
-        }));
-
-        it('collectionName', inject([mockApiDataService], (service: mockApiDataService) => {
-          expect(service.parseUrl(test.url).collectionName).toEqual(test.collectionName);
-        }));
-
-        it('query', inject([mockApiDataService], (service: mockApiDataService) => {
-          expect(service.parseUrl(test.url).query.toString()).toEqual(test.query);
-        }));
-      });
-    });
-  });
-});


[18/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/js/daterangepicker.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/js/daterangepicker.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/js/daterangepicker.js
deleted file mode 100644
index e88b45f..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/daterangepicker/js/daterangepicker.js
+++ /dev/null
@@ -1,1560 +0,0 @@
-/**
-* @version: 2.1.24
-* @author: Dan Grossman http://www.dangrossman.info/
-* @copyright: Copyright (c) 2012-2016 Dan Grossman. All rights reserved.
-* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
-* @website: https://www.improvely.com/
-*/
-// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js
-(function (root, factory) {
-    if (typeof define === 'function' && define.amd) {
-        // AMD. Make globaly available as well
-        define(['moment', 'jquery'], function (moment, jquery) {
-            return (root.daterangepicker = factory(moment, jquery));
-        });
-    } else if (typeof module === 'object' && module.exports) {
-        // Node / Browserify
-        //isomorphic issue
-        var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;
-        if (!jQuery) {
-            jQuery = require('jquery');
-            if (!jQuery.fn) jQuery.fn = {};
-        }
-        module.exports = factory(require('moment'), jQuery);
-    } else {
-        // Browser globals
-        root.daterangepicker = factory(root.moment, root.jQuery);
-    }
-}(this, function(moment, $) {
-    var DateRangePicker = function(element, options, cb) {
-
-        //default settings for options
-        this.parentEl = 'body';
-        this.element = $(element);
-        this.startDate = moment().startOf('day');
-        this.endDate = moment().endOf('day');
-        this.minDate = false;
-        this.maxDate = false;
-        this.dateLimit = false;
-        this.autoApply = false;
-        this.singleDatePicker = false;
-        this.showDropdowns = false;
-        this.showWeekNumbers = false;
-        this.showISOWeekNumbers = false;
-        this.showCustomRangeLabel = true;
-        this.timePicker = false;
-        this.timePicker24Hour = false;
-        this.timePickerIncrement = 1;
-        this.timePickerSeconds = false;
-        this.linkedCalendars = true;
-        this.autoUpdateInput = true;
-        this.alwaysShowCalendars = false;
-
-        this.opens = 'right';
-        if (this.element.hasClass('pull-right'))
-            this.opens = 'left';
-
-        this.drops = 'down';
-        if (this.element.hasClass('dropup'))
-            this.drops = 'up';
-
-        this.buttonClasses = 'btn btn-sm';
-        this.applyClass = 'btn-success';
-        this.cancelClass = 'btn-default';
-
-        this.locale = {
-            direction: 'ltr',
-            format: 'MM/DD/YYYY',
-            separator: ' - ',
-            applyLabel: 'Apply',
-            cancelLabel: 'Cancel',
-            weekLabel: 'W',
-            customRangeLabel: 'Custom Range',
-            daysOfWeek: moment.weekdaysMin(),
-            monthNames: moment.monthsShort(),
-            firstDay: moment.localeData().firstDayOfWeek()
-        };
-
-        this.callback = function() { };
-
-        //some state information
-        this.isShowing = false;
-        this.leftCalendar = {};
-        this.rightCalendar = {};
-
-        //custom options from user
-        if (typeof options !== 'object' || options === null)
-            options = {};
-
-        //allow setting options with data attributes
-        //data-api options will be overwritten with custom javascript options
-        options = $.extend(this.element.data(), options);
-
-        //html template for the picker UI
-        if (typeof options.template !== 'string' && !(options.template instanceof $))
-            options.template = '<div class="daterangepicker dropdown-menu">' +
-                '<div class="calendar left">' +
-                    '<div class="daterangepicker_input">' +
-                      '<input class="input-mini form-control" type="text" name="daterangepicker_start" value="" />' +
-                      '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
-                      '<div class="calendar-time">' +
-                        '<div></div>' +
-                        '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
-                      '</div>' +
-                    '</div>' +
-                    '<div class="calendar-table"></div>' +
-                '</div>' +
-                '<div class="calendar right">' +
-                    '<div class="daterangepicker_input">' +
-                      '<input class="input-mini form-control" type="text" name="daterangepicker_end" value="" />' +
-                      '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
-                      '<div class="calendar-time">' +
-                        '<div></div>' +
-                        '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
-                      '</div>' +
-                    '</div>' +
-                    '<div class="calendar-table"></div>' +
-                '</div>' +
-                '<div class="ranges">' +
-                    '<div class="range_inputs">' +
-                        '<button class="applyBtn" disabled="disabled" type="button"></button> ' +
-                        '<button class="cancelBtn" type="button"></button>' +
-                    '</div>' +
-                '</div>' +
-            '</div>';
-
-        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);
-        this.container = $(options.template).appendTo(this.parentEl);
-
-        //
-        // handle all the possible options overriding defaults
-        //
-
-        if (typeof options.locale === 'object') {
-
-            if (typeof options.locale.direction === 'string')
-                this.locale.direction = options.locale.direction;
-
-            if (typeof options.locale.format === 'string')
-                this.locale.format = options.locale.format;
-
-            if (typeof options.locale.separator === 'string')
-                this.locale.separator = options.locale.separator;
-
-            if (typeof options.locale.daysOfWeek === 'object')
-                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();
-
-            if (typeof options.locale.monthNames === 'object')
-              this.locale.monthNames = options.locale.monthNames.slice();
-
-            if (typeof options.locale.firstDay === 'number')
-              this.locale.firstDay = options.locale.firstDay;
-
-            if (typeof options.locale.applyLabel === 'string')
-              this.locale.applyLabel = options.locale.applyLabel;
-
-            if (typeof options.locale.cancelLabel === 'string')
-              this.locale.cancelLabel = options.locale.cancelLabel;
-
-            if (typeof options.locale.weekLabel === 'string')
-              this.locale.weekLabel = options.locale.weekLabel;
-
-            if (typeof options.locale.customRangeLabel === 'string')
-              this.locale.customRangeLabel = options.locale.customRangeLabel;
-
-        }
-        this.container.addClass(this.locale.direction);
-
-        if (typeof options.startDate === 'string')
-            this.startDate = moment(options.startDate, this.locale.format);
-
-        if (typeof options.endDate === 'string')
-            this.endDate = moment(options.endDate, this.locale.format);
-
-        if (typeof options.minDate === 'string')
-            this.minDate = moment(options.minDate, this.locale.format);
-
-        if (typeof options.maxDate === 'string')
-            this.maxDate = moment(options.maxDate, this.locale.format);
-
-        if (typeof options.startDate === 'object')
-            this.startDate = moment(options.startDate);
-
-        if (typeof options.endDate === 'object')
-            this.endDate = moment(options.endDate);
-
-        if (typeof options.minDate === 'object')
-            this.minDate = moment(options.minDate);
-
-        if (typeof options.maxDate === 'object')
-            this.maxDate = moment(options.maxDate);
-
-        // sanity check for bad options
-        if (this.minDate && this.startDate.isBefore(this.minDate))
-            this.startDate = this.minDate.clone();
-
-        // sanity check for bad options
-        if (this.maxDate && this.endDate.isAfter(this.maxDate))
-            this.endDate = this.maxDate.clone();
-
-        if (typeof options.applyClass === 'string')
-            this.applyClass = options.applyClass;
-
-        if (typeof options.cancelClass === 'string')
-            this.cancelClass = options.cancelClass;
-
-        if (typeof options.dateLimit === 'object')
-            this.dateLimit = options.dateLimit;
-
-        if (typeof options.opens === 'string')
-            this.opens = options.opens;
-
-        if (typeof options.drops === 'string')
-            this.drops = options.drops;
-
-        if (typeof options.showWeekNumbers === 'boolean')
-            this.showWeekNumbers = options.showWeekNumbers;
-
-        if (typeof options.showISOWeekNumbers === 'boolean')
-            this.showISOWeekNumbers = options.showISOWeekNumbers;
-
-        if (typeof options.buttonClasses === 'string')
-            this.buttonClasses = options.buttonClasses;
-
-        if (typeof options.buttonClasses === 'object')
-            this.buttonClasses = options.buttonClasses.join(' ');
-
-        if (typeof options.showDropdowns === 'boolean')
-            this.showDropdowns = options.showDropdowns;
-
-        if (typeof options.showCustomRangeLabel === 'boolean')
-            this.showCustomRangeLabel = options.showCustomRangeLabel;
-
-        if (typeof options.singleDatePicker === 'boolean') {
-            this.singleDatePicker = options.singleDatePicker;
-            if (this.singleDatePicker)
-                this.endDate = this.startDate.clone();
-        }
-
-        if (typeof options.timePicker === 'boolean')
-            this.timePicker = options.timePicker;
-
-        if (typeof options.timePickerSeconds === 'boolean')
-            this.timePickerSeconds = options.timePickerSeconds;
-
-        if (typeof options.timePickerIncrement === 'number')
-            this.timePickerIncrement = options.timePickerIncrement;
-
-        if (typeof options.timePicker24Hour === 'boolean')
-            this.timePicker24Hour = options.timePicker24Hour;
-
-        if (typeof options.autoApply === 'boolean')
-            this.autoApply = options.autoApply;
-
-        if (typeof options.autoUpdateInput === 'boolean')
-            this.autoUpdateInput = options.autoUpdateInput;
-
-        if (typeof options.linkedCalendars === 'boolean')
-            this.linkedCalendars = options.linkedCalendars;
-
-        if (typeof options.isInvalidDate === 'function')
-            this.isInvalidDate = options.isInvalidDate;
-
-        if (typeof options.isCustomDate === 'function')
-            this.isCustomDate = options.isCustomDate;
-
-        if (typeof options.alwaysShowCalendars === 'boolean')
-            this.alwaysShowCalendars = options.alwaysShowCalendars;
-
-        // update day names order to firstDay
-        if (this.locale.firstDay != 0) {
-            var iterator = this.locale.firstDay;
-            while (iterator > 0) {
-                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());
-                iterator--;
-            }
-        }
-
-        var start, end, range;
-
-        //if no start/end dates set, check if an input element contains initial values
-        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {
-            if ($(this.element).is('input[type=text]')) {
-                var val = $(this.element).val(),
-                    split = val.split(this.locale.separator);
-
-                start = end = null;
-
-                if (split.length == 2) {
-                    start = moment(split[0], this.locale.format);
-                    end = moment(split[1], this.locale.format);
-                } else if (this.singleDatePicker && val !== "") {
-                    start = moment(val, this.locale.format);
-                    end = moment(val, this.locale.format);
-                }
-                if (start !== null && end !== null) {
-                    this.setStartDate(start);
-                    this.setEndDate(end);
-                }
-            }
-        }
-
-        if (typeof options.ranges === 'object') {
-            var list = '<ul>';
-            for (range of options.ranges) {
-                list += '<li data-range-key="' + range + '">' + range + '</li>';
-            }
-            if (this.showCustomRangeLabel) {
-                list += '<li data-range-key="' + this.locale.customRangeLabel + '">' + this.locale.customRangeLabel + '</li>';
-            }
-            list += '</ul>';
-            this.container.find('.ranges').prepend(list);
-        }
-
-        if (typeof cb === 'function') {
-            this.callback = cb;
-        }
-
-        if (!this.timePicker) {
-            this.startDate = this.startDate.startOf('day');
-            this.endDate = this.endDate.endOf('day');
-            this.container.find('.calendar-time').hide();
-        }
-
-        //can't be used together for now
-        if (this.timePicker && this.autoApply)
-            this.autoApply = false;
-
-        if (this.autoApply && typeof options.ranges !== 'object') {
-            this.container.find('.ranges').hide();
-        } else if (this.autoApply) {
-            this.container.find('.applyBtn, .cancelBtn').addClass('hide');
-        }
-
-        if (this.singleDatePicker) {
-            this.container.addClass('single');
-            this.container.find('.calendar.left').addClass('single');
-            this.container.find('.calendar.left').show();
-            this.container.find('.calendar.right').hide();
-            this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide();
-            if (this.timePicker) {
-                this.container.find('.ranges ul').hide();
-            } else {
-                this.container.find('.ranges').hide();
-            }
-        }
-
-        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {
-            this.container.addClass('show-calendar');
-        }
-
-        this.container.addClass('opens' + this.opens);
-
-        //swap the position of the predefined ranges if opens right
-        if (typeof options.ranges !== 'undefined' && this.opens == 'right') {
-            this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() );
-        }
-
-        //apply CSS classes and labels to buttons
-        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);
-        if (this.applyClass.length)
-            this.container.find('.applyBtn').addClass(this.applyClass);
-        if (this.cancelClass.length)
-            this.container.find('.cancelBtn').addClass(this.cancelClass);
-        this.container.find('.applyBtn').html(this.locale.applyLabel);
-        this.container.find('.cancelBtn').html(this.locale.cancelLabel);
-
-        //
-        // event listeners
-        //
-
-        this.container.find('.calendar')
-            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))
-            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))
-            .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))
-            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))
-            .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))
-            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))
-            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))
-            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))
-            .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))
-            .on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this))
-            .on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this))
-            .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this));
-
-        this.container.find('.ranges')
-            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))
-            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))
-            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))
-            .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))
-            .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));
-
-        if (this.element.is('input') || this.element.is('button')) {
-            this.element.on({
-                'click.daterangepicker': $.proxy(this.show, this),
-                'focus.daterangepicker': $.proxy(this.show, this),
-                'keyup.daterangepicker': $.proxy(this.elementChanged, this),
-                'keydown.daterangepicker': $.proxy(this.keydown, this)
-            });
-        } else {
-            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));
-        }
-
-        //
-        // if attached to a text input, set the initial value
-        //
-
-        if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
-            this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
-            this.element.trigger('change');
-        } else if (this.element.is('input') && this.autoUpdateInput) {
-            this.element.val(this.startDate.format(this.locale.format));
-            this.element.trigger('change');
-        }
-
-    };
-
-    DateRangePicker.prototype = {
-
-        constructor: DateRangePicker,
-
-        setStartDate: function(startDate) {
-            if (typeof startDate === 'string')
-                this.startDate = moment(startDate, this.locale.format);
-
-            if (typeof startDate === 'object')
-                this.startDate = moment(startDate);
-
-            if (!this.timePicker)
-                this.startDate = this.startDate.startOf('day');
-
-            if (this.timePicker && this.timePickerIncrement)
-                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
-
-            if (this.minDate && this.startDate.isBefore(this.minDate)) {
-                this.startDate = this.minDate;
-                if (this.timePicker && this.timePickerIncrement)
-                    this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
-            }
-
-            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {
-                this.startDate = this.maxDate;
-                if (this.timePicker && this.timePickerIncrement)
-                    this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
-            }
-
-            if (!this.isShowing)
-                this.updateElement();
-
-            this.updateMonthsInView();
-        },
-
-        setEndDate: function(endDate) {
-            if (typeof endDate === 'string')
-                this.endDate = moment(endDate, this.locale.format);
-
-            if (typeof endDate === 'object')
-                this.endDate = moment(endDate);
-
-            if (!this.timePicker)
-                this.endDate = this.endDate.endOf('day');
-
-            if (this.timePicker && this.timePickerIncrement)
-                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
-
-            if (this.endDate.isBefore(this.startDate))
-                this.endDate = this.startDate.clone();
-
-            if (this.maxDate && this.endDate.isAfter(this.maxDate))
-                this.endDate = this.maxDate;
-
-            if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))
-                this.endDate = this.startDate.clone().add(this.dateLimit);
-
-            this.previousRightTime = this.endDate.clone();
-
-            if (!this.isShowing)
-                this.updateElement();
-
-            this.updateMonthsInView();
-        },
-
-        isInvalidDate: function() {
-            return false;
-        },
-
-        isCustomDate: function() {
-            return false;
-        },
-
-        updateView: function() {
-            if (this.timePicker) {
-                this.renderTimePicker('left');
-                this.renderTimePicker('right');
-                if (!this.endDate) {
-                    this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');
-                } else {
-                    this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');
-                }
-            }
-            if (this.endDate) {
-                this.container.find('input[name="daterangepicker_end"]').removeClass('active');
-                this.container.find('input[name="daterangepicker_start"]').addClass('active');
-            } else {
-                this.container.find('input[name="daterangepicker_end"]').addClass('active');
-                this.container.find('input[name="daterangepicker_start"]').removeClass('active');
-            }
-            this.updateMonthsInView();
-            this.updateCalendars();
-            this.updateFormInputs();
-        },
-
-        updateMonthsInView: function() {
-            if (this.endDate) {
-
-                //if both dates are visible already, do nothing
-                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&
-                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
-                    &&
-                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
-                    ) {
-                    return;
-                }
-
-                this.leftCalendar.month = this.startDate.clone().date(2);
-                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {
-                    this.rightCalendar.month = this.endDate.clone().date(2);
-                } else {
-                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
-                }
-
-            } else {
-                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {
-                    this.leftCalendar.month = this.startDate.clone().date(2);
-                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
-                }
-            }
-            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {
-              this.rightCalendar.month = this.maxDate.clone().date(2);
-              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');
-            }
-        },
-
-        updateCalendars: function() {
-
-            if (this.timePicker) {
-                var hour, minute, second;
-                if (this.endDate) {
-                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);
-                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
-                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
-                    if (!this.timePicker24Hour) {
-                        var ampm = this.container.find('.left .ampmselect').val();
-                        if (ampm === 'PM' && hour < 12)
-                            hour += 12;
-                        if (ampm === 'AM' && hour === 12)
-                            hour = 0;
-                    }
-                } else {
-                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);
-                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
-                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
-                    if (!this.timePicker24Hour) {
-                        var ampm = this.container.find('.right .ampmselect').val();
-                        if (ampm === 'PM' && hour < 12)
-                            hour += 12;
-                        if (ampm === 'AM' && hour === 12)
-                            hour = 0;
-                    }
-                }
-                this.leftCalendar.month.hour(hour).minute(minute).second(second);
-                this.rightCalendar.month.hour(hour).minute(minute).second(second);
-            }
-
-            this.renderCalendar('left');
-            this.renderCalendar('right');
-
-            //highlight any predefined range matching the current start and end dates
-            this.container.find('.ranges li').removeClass('active');
-            this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();
-            if (this.endDate == null) return;
-            this.showCalendars();
-        },
-
-        renderCalendar: function(side) {
-
-            //
-            // Build the matrix of dates that will populate the calendar
-            //
-
-            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;
-            var month = calendar.month.month();
-            var year = calendar.month.year();
-            var hour = calendar.month.hour();
-            var minute = calendar.month.minute();
-            var second = calendar.month.second();
-            var daysInMonth = moment([year, month]).daysInMonth();
-            var firstDay = moment([year, month, 1]);
-            var lastDay = moment([year, month, daysInMonth]);
-            var lastMonth = moment(firstDay).subtract(1, 'month').month();
-            var lastYear = moment(firstDay).subtract(1, 'month').year();
-            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();
-            var dayOfWeek = firstDay.day();
-
-            //initialize a 6 rows x 7 columns array for the calendar
-            var calendar = [];
-            calendar.firstDay = firstDay;
-            calendar.lastDay = lastDay;
-
-            for (var i = 0; i < 6; i++) {
-                calendar[i] = [];
-            }
-
-            //populate the calendar with date objects
-            var curDate;
-            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
-            if (startDay == daysInLastMonth + 1)
-                curDate = moment([year, month, 1, 12, minute, second]);
-            else if (startDay > daysInLastMonth )
-                curDate = moment([lastYear, lastMonth, startDay-7, 12, minute, second]);
-            else
-                curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);
-
-            var col, row;
-            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {
-                if (i > 0 && col % 7 === 0) {
-                    col = 0;
-                    row++;
-                    if (curDate.month() != month)
-                        break
-                }
-                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);
-                curDate.hour(12);
-
-                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {
-                    calendar[row][col] = this.minDate.clone();
-                }
-
-                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {
-                    calendar[row][col] = this.maxDate.clone();
-                }
-
-            }
-
-            //make the calendar object available to hoverDate/clickDate
-            if (side == 'left') {
-                this.leftCalendar.calendar = calendar;
-            } else {
-                this.rightCalendar.calendar = calendar;
-            }
-
-            //
-            // Display the calendar
-            //
-
-            var minDate = side == 'left' ? this.minDate : this.startDate;
-            var maxDate = this.maxDate;
-            var selected = side == 'left' ? this.startDate : this.endDate;
-            var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};
-
-            var html = '<table class="table-condensed">';
-            html += '<thead>';
-            html += '<tr>';
-
-            // add empty cell for week number
-            if (this.showWeekNumbers || this.showISOWeekNumbers)
-                html += '<th></th>';
-
-            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {
-                html += '<th class="prev available"><i class="fa fa-' + arrow.left + ' glyphicon glyphicon-' + arrow.left + '"></i></th>';
-            } else {
-                html += '<th></th>';
-            }
-
-            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + " " + calendar[1][1].year();
-
-            if (this.showDropdowns) {
-                var currentMonth = calendar[1][1].month();
-                var currentYear = calendar[1][1].year();
-                var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);
-                var minYear = (minDate && minDate.year()) || (currentYear - 50);
-                var inMinYear = currentYear == minYear;
-                var inMaxYear = currentYear == maxYear;
-
-                var monthHtml = '<select class="monthselect">';
-                for (var m = 0; m < 12; m++) {
-                    if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {
-                        monthHtml += "<option value='" + m + "'" +
-                            (m === currentMonth ? " selected='selected'" : "") +
-                            ">" + this.locale.monthNames[m] + "</option>";
-                    } else {
-                        monthHtml += "<option value='" + m + "'" +
-                            (m === currentMonth ? " selected='selected'" : "") +
-                            " disabled='disabled'>" + this.locale.monthNames[m] + "</option>";
-                    }
-                }
-                monthHtml += "</select>";
-
-                var yearHtml = '<select class="yearselect">';
-                for (var y = minYear; y <= maxYear; y++) {
-                    yearHtml += '<option value="' + y + '"' +
-                        (y === currentYear ? ' selected="selected"' : '') +
-                        '>' + y + '</option>';
-                }
-                yearHtml += '</select>';
-
-                dateHtml = monthHtml + yearHtml;
-            }
-
-            html += '<th colspan="5" class="month">' + dateHtml + '</th>';
-            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {
-                html += '<th class="next available"><i class="fa fa-' + arrow.right + ' glyphicon glyphicon-' + arrow.right + '"></i></th>';
-            } else {
-                html += '<th></th>';
-            }
-
-            html += '</tr>';
-            html += '<tr>';
-
-            // add week number label
-            if (this.showWeekNumbers || this.showISOWeekNumbers)
-                html += '<th class="week">' + this.locale.weekLabel + '</th>';
-
-            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {
-                html += '<th>' + dayOfWeek + '</th>';
-            });
-
-            html += '</tr>';
-            html += '</thead>';
-            html += '<tbody>';
-
-            //adjust maxDate to reflect the dateLimit setting in order to
-            //grey out end dates beyond the dateLimit
-            if (this.endDate == null && this.dateLimit) {
-                var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');
-                if (!maxDate || maxLimit.isBefore(maxDate)) {
-                    maxDate = maxLimit;
-                }
-            }
-
-            for (var row = 0; row < 6; row++) {
-                if (calendar[row].length == 0)
-                    continue
-
-                html += '<tr>';
-
-                // add week number
-                if (this.showWeekNumbers)
-                    html += '<td class="week">' + calendar[row][0].week() + '</td>';
-                else if (this.showISOWeekNumbers)
-                    html += '<td class="week">' + calendar[row][0].isoWeek() + '</td>';
-
-                for (var col = 0; col < 7; col++) {
-
-                    var classes = [];
-
-                    //highlight today's date
-                    if (calendar[row][col].isSame(new Date(), "day"))
-                        classes.push('today');
-
-                    //highlight weekends
-                    if (calendar[row][col].isoWeekday() > 5)
-                        classes.push('weekend');
-
-                    //grey out the dates in other months displayed at beginning and end of this calendar
-                    if (calendar[row][col].month() != calendar[1][1].month())
-                        classes.push('off');
-
-                    //don't allow selection of dates before the minimum date
-                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))
-                        classes.push('off', 'disabled');
-
-                    //don't allow selection of dates after the maximum date
-                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))
-                        classes.push('off', 'disabled');
-
-                    //don't allow selection of date if a custom function decides it's invalid
-                    if (this.isInvalidDate(calendar[row][col]))
-                        classes.push('off', 'disabled');
-
-                    //highlight the currently selected start date
-                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))
-                        classes.push('active', 'start-date');
-
-                    //highlight the currently selected end date
-                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))
-                        classes.push('active', 'end-date');
-
-                    //highlight dates in-between the selected dates
-                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)
-                        classes.push('in-range');
-
-                    //apply custom classes for this date
-                    var isCustom = this.isCustomDate(calendar[row][col]);
-                    if (isCustom !== false) {
-                        if (typeof isCustom === 'string')
-                            classes.push(isCustom);
-                        else
-                            Array.prototype.push.apply(classes, isCustom);
-                    }
-
-                    var cname = '', disabled = false;
-                    for (var i = 0; i < classes.length; i++) {
-                        cname += classes[i] + ' ';
-                        if (classes[i] == 'disabled')
-                            disabled = true;
-                    }
-                    if (!disabled)
-                        cname += 'available';
-
-                    html += '<td class="' + cname.replace(/^\s+|\s+$/g, '') + '" data-title="' + 'r' + row + 'c' + col + '">' + calendar[row][col].date() + '</td>';
-
-                }
-                html += '</tr>';
-            }
-
-            html += '</tbody>';
-            html += '</table>';
-
-            this.container.find('.calendar.' + side + ' .calendar-table').html(html);
-
-        },
-
-        renderTimePicker: function(side) {
-
-            // Don't bother updating the time picker if it's currently disabled
-            // because an end date hasn't been clicked yet
-            if (side == 'right' && !this.endDate) return;
-
-            var html, selected, minDate, maxDate = this.maxDate;
-
-            if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))
-                maxDate = this.startDate.clone().add(this.dateLimit);
-
-            if (side == 'left') {
-                selected = this.startDate.clone();
-                minDate = this.minDate;
-            } else if (side == 'right') {
-                selected = this.endDate.clone();
-                minDate = this.startDate;
-
-                //Preserve the time already selected
-                var timeSelector = this.container.find('.calendar.right .calendar-time div');
-                if (!this.endDate && timeSelector.html() != '') {
-
-                    selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());
-                    selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());
-                    selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());
-
-                    if (!this.timePicker24Hour) {
-                        var ampm = timeSelector.find('.ampmselect option:selected').val();
-                        if (ampm === 'PM' && selected.hour() < 12)
-                            selected.hour(selected.hour() + 12);
-                        if (ampm === 'AM' && selected.hour() === 12)
-                            selected.hour(0);
-                    }
-
-                }
-
-                if (selected.isBefore(this.startDate))
-                    selected = this.startDate.clone();
-
-                if (maxDate && selected.isAfter(maxDate))
-                    selected = maxDate.clone();
-
-            }
-
-            //
-            // hours
-            //
-
-            html = '<select class="hourselect">';
-
-            var start = this.timePicker24Hour ? 0 : 1;
-            var end = this.timePicker24Hour ? 23 : 12;
-
-            for (var i = start; i <= end; i++) {
-                var i_in_24 = i;
-                if (!this.timePicker24Hour)
-                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);
-
-                var time = selected.clone().hour(i_in_24);
-                var disabled = false;
-                if (minDate && time.minute(59).isBefore(minDate))
-                    disabled = true;
-                if (maxDate && time.minute(0).isAfter(maxDate))
-                    disabled = true;
-
-                if (i_in_24 == selected.hour() && !disabled) {
-                    html += '<option value="' + i + '" selected="selected">' + i + '</option>';
-                } else if (disabled) {
-                    html += '<option value="' + i + '" disabled="disabled" class="disabled">' + i + '</option>';
-                } else {
-                    html += '<option value="' + i + '">' + i + '</option>';
-                }
-            }
-
-            html += '</select> ';
-
-            //
-            // minutes
-            //
-
-            html += ': <select class="minuteselect">';
-
-            for (var i = 0; i < 60; i += this.timePickerIncrement) {
-                var padded = i < 10 ? '0' + i : i;
-                var time = selected.clone().minute(i);
-
-                var disabled = false;
-                if (minDate && time.second(59).isBefore(minDate))
-                    disabled = true;
-                if (maxDate && time.second(0).isAfter(maxDate))
-                    disabled = true;
-
-                if (selected.minute() == i && !disabled) {
-                    html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
-                } else if (disabled) {
-                    html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
-                } else {
-                    html += '<option value="' + i + '">' + padded + '</option>';
-                }
-            }
-
-            html += '</select> ';
-
-            //
-            // seconds
-            //
-
-            if (this.timePickerSeconds) {
-                html += ': <select class="secondselect">';
-
-                for (var i = 0; i < 60; i++) {
-                    var padded = i < 10 ? '0' + i : i;
-                    var time = selected.clone().second(i);
-
-                    var disabled = false;
-                    if (minDate && time.isBefore(minDate))
-                        disabled = true;
-                    if (maxDate && time.isAfter(maxDate))
-                        disabled = true;
-
-                    if (selected.second() == i && !disabled) {
-                        html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
-                    } else if (disabled) {
-                        html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
-                    } else {
-                        html += '<option value="' + i + '">' + padded + '</option>';
-                    }
-                }
-
-                html += '</select> ';
-            }
-
-            //
-            // AM/PM
-            //
-
-            if (!this.timePicker24Hour) {
-                html += '<select class="ampmselect">';
-
-                var am_html = '';
-                var pm_html = '';
-
-                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))
-                    am_html = ' disabled="disabled" class="disabled"';
-
-                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))
-                    pm_html = ' disabled="disabled" class="disabled"';
-
-                if (selected.hour() >= 12) {
-                    html += '<option value="AM"' + am_html + '>AM</option><option value="PM" selected="selected"' + pm_html + '>PM</option>';
-                } else {
-                    html += '<option value="AM" selected="selected"' + am_html + '>AM</option><option value="PM"' + pm_html + '>PM</option>';
-                }
-
-                html += '</select>';
-            }
-
-            this.container.find('.calendar.' + side + ' .calendar-time div').html(html);
-
-        },
-
-        updateFormInputs: function() {
-
-            //ignore mouse movements while an above-calendar text input has focus
-            if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
-                return;
-
-            this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));
-            if (this.endDate)
-                this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));
-
-            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {
-                this.container.find('button.applyBtn').removeAttr('disabled');
-            } else {
-                this.container.find('button.applyBtn').attr('disabled', 'disabled');
-            }
-
-        },
-
-        move: function() {
-            var parentOffset = { top: 0, left: 0 },
-                containerTop;
-            var parentRightEdge = $(window).width();
-            if (!this.parentEl.is('body')) {
-                parentOffset = {
-                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),
-                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()
-                };
-                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;
-            }
-
-            if (this.drops == 'up')
-                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;
-            else
-                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;
-            this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');
-
-            if (this.opens == 'left') {
-                this.container.css({
-                    top: containerTop,
-                    right: parentRightEdge - this.element.offset().left - this.element.outerWidth(),
-                    left: 'auto'
-                });
-                if (this.container.offset().left < 0) {
-                    this.container.css({
-                        right: 'auto',
-                        left: 9
-                    });
-                }
-            } else if (this.opens == 'center') {
-                this.container.css({
-                    top: containerTop,
-                    left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2
-                            - this.container.outerWidth() / 2,
-                    right: 'auto'
-                });
-                if (this.container.offset().left < 0) {
-                    this.container.css({
-                        right: 'auto',
-                        left: 9
-                    });
-                }
-            } else {
-                this.container.css({
-                    top: containerTop,
-                    left: this.element.offset().left - parentOffset.left,
-                    right: 'auto'
-                });
-                if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {
-                    this.container.css({
-                        left: 'auto',
-                        right: 0
-                    });
-                }
-            }
-        },
-
-        show: function(e) {
-            if (this.isShowing) return;
-
-            // Create a click proxy that is private to this instance of datepicker, for unbinding
-            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);
-
-            // Bind global datepicker mousedown for hiding and
-            $(document)
-              .on('mousedown.daterangepicker', this._outsideClickProxy)
-              // also support mobile devices
-              .on('touchend.daterangepicker', this._outsideClickProxy)
-              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them
-              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)
-              // and also close when focus changes to outside the picker (eg. tabbing between controls)
-              .on('focusin.daterangepicker', this._outsideClickProxy);
-
-            // Reposition the picker if the window is resized while it's open
-            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));
-
-            this.oldStartDate = this.startDate.clone();
-            this.oldEndDate = this.endDate.clone();
-            this.previousRightTime = this.endDate.clone();
-
-            this.updateView();
-            this.container.show();
-            this.move();
-            this.element.trigger('show.daterangepicker', this);
-            this.isShowing = true;
-        },
-
-        hide: function(e) {
-            if (!this.isShowing) return;
-
-            //incomplete date selection, revert to last values
-            if (!this.endDate) {
-                this.startDate = this.oldStartDate.clone();
-                this.endDate = this.oldEndDate.clone();
-            }
-
-            //if a new date range was selected, invoke the user callback function
-            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
-                this.callback(this.startDate, this.endDate, this.chosenLabel);
-
-            //if picker is attached to a text input, update it
-            this.updateElement();
-
-            $(document).off('.daterangepicker');
-            $(window).off('.daterangepicker');
-            this.container.hide();
-            this.element.trigger('hide.daterangepicker', this);
-            this.isShowing = false;
-        },
-
-        toggle: function(e) {
-            if (this.isShowing) {
-                this.hide();
-            } else {
-                this.show();
-            }
-        },
-
-        outsideClick: function(e) {
-            var target = $(e.target);
-            // if the page is clicked anywhere except within the daterangerpicker/button
-            // itself then call this.hide()
-            if (
-                // ie modal dialog fix
-                e.type == "focusin" ||
-                target.closest(this.element).length ||
-                target.closest(this.container).length ||
-                target.closest('.calendar-table').length
-                ) return;
-            this.hide();
-            this.element.trigger('outsideClick.daterangepicker', this);
-        },
-
-        showCalendars: function() {
-            this.container.addClass('show-calendar');
-            this.move();
-            this.element.trigger('showCalendar.daterangepicker', this);
-        },
-
-        hideCalendars: function() {
-            this.container.removeClass('show-calendar');
-            this.element.trigger('hideCalendar.daterangepicker', this);
-        },
-
-        hoverRange: function(e) {
-            //ignore mouse movements while an above-calendar text input has focus
-            if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
-                return;
-
-            var label = e.target.getAttribute('data-range-key');
-
-            if (label == this.locale.customRangeLabel) {
-                this.updateView();
-            } else {
-                var Utils = require('utils/Utils');
-                var dates = Utils.dateUtil.getRelativeDateFromString(label);
-                this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));
-                this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));
-            }
-
-        },
-
-        clickRange: function(e) {
-            var label = e.target.getAttribute('data-range-key');
-            this.chosenLabel = label;
-            if (label == this.locale.customRangeLabel) {
-                this.showCalendars();
-            } else {
-                var Utils = require('utils/Utils');
-                var dates = Utils.dateUtil.getRelativeDateFromString(label);
-                this.startDate = dates[0];
-                this.endDate = dates[1];
-
-                if (!this.timePicker) {
-                    this.startDate.startOf('day');
-                    this.endDate.endOf('day');
-                }
-
-                if (!this.alwaysShowCalendars)
-                    this.hideCalendars();
-                this.clickApply();
-            }
-        },
-
-        clickPrev: function(e) {
-            var cal = $(e.target).parents('.calendar');
-            if (cal.hasClass('left')) {
-                this.leftCalendar.month.subtract(1, 'month');
-                if (this.linkedCalendars)
-                    this.rightCalendar.month.subtract(1, 'month');
-            } else {
-                this.rightCalendar.month.subtract(1, 'month');
-            }
-            this.updateCalendars();
-        },
-
-        clickNext: function(e) {
-            var cal = $(e.target).parents('.calendar');
-            if (cal.hasClass('left')) {
-                this.leftCalendar.month.add(1, 'month');
-            } else {
-                this.rightCalendar.month.add(1, 'month');
-                if (this.linkedCalendars)
-                    this.leftCalendar.month.add(1, 'month');
-            }
-            this.updateCalendars();
-        },
-
-        hoverDate: function(e) {
-
-            //ignore mouse movements while an above-calendar text input has focus
-            //if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
-            //    return;
-
-            //ignore dates that can't be selected
-            if (!$(e.target).hasClass('available')) return;
-
-            //have the text inputs above calendars reflect the date being hovered over
-            var title = $(e.target).attr('data-title');
-            var row = title.substr(1, 1);
-            var col = title.substr(3, 1);
-            var cal = $(e.target).parents('.calendar');
-            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
-
-            if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(":focus")) {
-                this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));
-            } else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(":focus")) {
-                this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));
-            }
-
-            //highlight the dates between the start date and the date being hovered as a potential end date
-            var leftCalendar = this.leftCalendar;
-            var rightCalendar = this.rightCalendar;
-            var startDate = this.startDate;
-            if (!this.endDate) {
-                this.container.find('.calendar td').each(function(index, el) {
-
-                    //skip week numbers, only look at dates
-                    if ($(el).hasClass('week')) return;
-
-                    var title = $(el).attr('data-title');
-                    var row = title.substr(1, 1);
-                    var col = title.substr(3, 1);
-                    var cal = $(el).parents('.calendar');
-                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];
-
-                    if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {
-                        $(el).addClass('in-range');
-                    } else {
-                        $(el).removeClass('in-range');
-                    }
-
-                });
-            }
-
-        },
-
-        clickDate: function(e) {
-
-            if (!$(e.target).hasClass('available')) return;
-
-            var title = $(e.target).attr('data-title');
-            var row = title.substr(1, 1);
-            var col = title.substr(3, 1);
-            var cal = $(e.target).parents('.calendar');
-            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
-
-            //
-            // this function needs to do a few things:
-            // * alternate between selecting a start and end date for the range,
-            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date
-            // * if autoapply is enabled, and an end date was chosen, apply the selection
-            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately
-            // * if one of the inputs above the calendars was focused, cancel that manual input
-            //
-
-            if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start
-                if (this.timePicker) {
-                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);
-                    if (!this.timePicker24Hour) {
-                        var ampm = this.container.find('.left .ampmselect').val();
-                        if (ampm === 'PM' && hour < 12)
-                            hour += 12;
-                        if (ampm === 'AM' && hour === 12)
-                            hour = 0;
-                    }
-                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
-                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
-                    date = date.clone().hour(hour).minute(minute).second(second);
-                }
-                this.endDate = null;
-                this.setStartDate(date.clone());
-            } else if (!this.endDate && date.isBefore(this.startDate)) {
-                //special case: clicking the same date for start/end,
-                //but the time of the end date is before the start date
-                this.setEndDate(this.startDate.clone());
-            } else { // picking end
-                if (this.timePicker) {
-                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);
-                    if (!this.timePicker24Hour) {
-                        var ampm = this.container.find('.right .ampmselect').val();
-                        if (ampm === 'PM' && hour < 12)
-                            hour += 12;
-                        if (ampm === 'AM' && hour === 12)
-                            hour = 0;
-                    }
-                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
-                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
-                    date = date.clone().hour(hour).minute(minute).second(second);
-                }
-                this.setEndDate(date.clone());
-                if (this.autoApply) {
-                  this.showCalendars();
-                  this.clickApply();
-                }
-            }
-
-            if (this.singleDatePicker) {
-                this.setEndDate(this.startDate);
-                if (!this.timePicker)
-                    this.clickApply();
-            }
-
-            this.updateView();
-
-            //This is to cancel the blur event handler if the mouse was in one of the inputs
-            e.stopPropagation();
-
-        },
-
-        clickApply: function(e) {
-            this.hide();
-            this.element.trigger('apply.daterangepicker', this);
-        },
-
-        clickCancel: function(e) {
-            this.startDate = this.oldStartDate;
-            this.endDate = this.oldEndDate;
-            this.hide();
-            this.element.trigger('cancel.daterangepicker', this);
-        },
-
-        monthOrYearChanged: function(e) {
-            var isLeft = $(e.target).closest('.calendar').hasClass('left'),
-                leftOrRight = isLeft ? 'left' : 'right',
-                cal = this.container.find('.calendar.'+leftOrRight);
-
-            // Month must be Number for new moment versions
-            var month = parseInt(cal.find('.monthselect').val(), 10);
-            var year = cal.find('.yearselect').val();
-
-            if (!isLeft) {
-                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {
-                    month = this.startDate.month();
-                    year = this.startDate.year();
-                }
-            }
-
-            if (this.minDate) {
-                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {
-                    month = this.minDate.month();
-                    year = this.minDate.year();
-                }
-            }
-
-            if (this.maxDate) {
-                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {
-                    month = this.maxDate.month();
-                    year = this.maxDate.year();
-                }
-            }
-
-            if (isLeft) {
-                this.leftCalendar.month.month(month).year(year);
-                if (this.linkedCalendars)
-                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');
-            } else {
-                this.rightCalendar.month.month(month).year(year);
-                if (this.linkedCalendars)
-                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');
-            }
-            this.updateCalendars();
-        },
-
-        timeChanged: function(e) {
-
-            var cal = $(e.target).closest('.calendar'),
-                isLeft = cal.hasClass('left');
-
-            var hour = parseInt(cal.find('.hourselect').val(), 10);
-            var minute = parseInt(cal.find('.minuteselect').val(), 10);
-            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;
-
-            if (!this.timePicker24Hour) {
-                var ampm = cal.find('.ampmselect').val();
-                if (ampm === 'PM' && hour < 12)
-                    hour += 12;
-                if (ampm === 'AM' && hour === 12)
-                    hour = 0;
-            }
-
-            if (isLeft) {
-                var start = this.startDate.clone();
-                start.hour(hour);
-                start.minute(minute);
-                start.second(second);
-                this.setStartDate(start);
-                if (this.singleDatePicker) {
-                    this.endDate = this.startDate.clone();
-                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {
-                    this.setEndDate(start.clone());
-                }
-            } else if (this.endDate) {
-                var end = this.endDate.clone();
-                end.hour(hour);
-                end.minute(minute);
-                end.second(second);
-                this.setEndDate(end);
-            }
-
-            //update the calendars so all clickable dates reflect the new time component
-            this.updateCalendars();
-
-            //update the form inputs above the calendars with the new time
-            this.updateFormInputs();
-
-            //re-render the time pickers because changing one selection can affect what's enabled in another
-            this.renderTimePicker('left');
-            this.renderTimePicker('right');
-
-        },
-
-        formInputsChanged: function(e) {
-            var isRight = $(e.target).closest('.calendar').hasClass('right');
-            var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format);
-            var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format);
-
-            if (start.isValid() && end.isValid()) {
-
-                if (isRight && end.isBefore(start))
-                    start = end.clone();
-
-                this.setStartDate(start);
-                this.setEndDate(end);
-
-                if (isRight) {
-                    this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format));
-                } else {
-                    this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format));
-                }
-
-            }
-
-            this.updateView();
-        },
-
-        formInputsFocused: function(e) {
-
-            // Highlight the focused input
-            this.container.find('input[name="daterangepicker_start"], input[name="daterangepicker_end"]').removeClass('active');
-            $(e.target).addClass('active');
-
-            // Set the state such that if the user goes back to using a mouse, 
-            // the calendars are aware we're selecting the end of the range, not
-            // the start. This allows someone to edit the end of a date range without
-            // re-selecting the beginning, by clicking on the end date input then
-            // using the calendar.
-            var isRight = $(e.target).closest('.calendar').hasClass('right');
-            if (isRight) {
-                this.endDate = null;
-                this.setStartDate(this.startDate.clone());
-                this.updateView();
-            }
-
-        },
-
-        formInputsBlurred: function(e) {
-
-            // this function has one purpose right now: if you tab from the first
-            // text input to the second in the UI, the endDate is nulled so that
-            // you can click another, but if you tab out without clicking anything
-            // or changing the input value, the old endDate should be retained
-
-            if (!this.endDate) {
-                var val = this.container.find('input[name="daterangepicker_end"]').val();
-                var end = moment(val, this.locale.format);
-                if (end.isValid()) {
-                    this.setEndDate(end);
-                    this.updateView();
-                }
-            }
-
-        },
-
-        elementChanged: function() {
-            if (!this.element.is('input')) return;
-            if (!this.element.val().length) return;
-            if (this.element.val().length < this.locale.format.length) return;
-
-            var dateString = this.element.val().split(this.locale.separator),
-                start = null,
-                end = null;
-
-            if (dateString.length === 2) {
-                start = moment(dateString[0], this.locale.format);
-                end = moment(dateString[1], this.locale.format);
-            }
-
-            if (this.singleDatePicker || start === null || end === null) {
-                start = moment(this.element.val(), this.locale.format);
-                end = start;
-            }
-
-            if (!start.isValid() || !end.isValid()) return;
-
-            this.setStartDate(start);
-            this.setEndDate(end);
-            this.updateView();
-        },
-
-        keydown: function(e) {
-            //hide on tab or enter
-            if ((e.keyCode === 9) || (e.keyCode === 13)) {
-                this.hide();
-            }
-        },
-
-        updateElement: function() {
-            if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
-                this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
-                this.element.trigger('change');
-            } else if (this.element.is('input') && this.autoUpdateInput) {
-                this.element.val(this.startDate.format(this.locale.format));
-                this.element.trigger('change');
-            }
-        },
-
-        remove: function() {
-            this.container.remove();
-            this.element.off('.daterangepicker');
-            this.element.removeData();
-        }
-
-    };
-
-    $.fn.daterangepicker = function(options, callback) {
-        this.each(function() {
-            var el = $(this);
-            if (el.data('daterangepicker'))
-                el.data('daterangepicker').remove();
-            el.data('daterangepicker', new DateRangePicker(el, options, callback));
-        });
-        return this;
-    };
-
-    return DateRangePicker;
-
-}));


[43/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.ttf
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.ttf b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.ttf
deleted file mode 100644
index 305f0d5..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.ttf and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.woff
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.woff b/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.woff
deleted file mode 100644
index ac7452a..0000000
Binary files a/ambari-logsearch/ambari-logsearch-web-new/src/vendor/css/fonts/Roboto-Regular-webfont.woff and /dev/null differ


[40/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web-new/yarn.lock
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web-new/yarn.lock b/ambari-logsearch/ambari-logsearch-web-new/yarn.lock
deleted file mode 100644
index 291b489..0000000
--- a/ambari-logsearch/ambari-logsearch-web-new/yarn.lock
+++ /dev/null
@@ -1,5766 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@angular/cli@1.0.0":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.0.0.tgz#7bfde1e7c5f28bf5bed4dda1352ee67ee887302f"
-  dependencies:
-    "@ngtools/json-schema" "1.0.5"
-    "@ngtools/webpack" "1.3.0"
-    autoprefixer "^6.5.3"
-    chalk "^1.1.3"
-    common-tags "^1.3.1"
-    css-loader "^0.26.1"
-    cssnano "^3.10.0"
-    debug "^2.1.3"
-    denodeify "^1.2.1"
-    diff "^3.1.0"
-    ember-cli-normalize-entity-name "^1.0.0"
-    ember-cli-string-utils "^1.0.0"
-    exports-loader "^0.6.3"
-    extract-text-webpack-plugin "~2.0.0"
-    file-loader "^0.10.0"
-    fs-extra "^2.0.0"
-    get-caller-file "^1.0.0"
-    glob "^7.0.3"
-    html-webpack-plugin "^2.19.0"
-    inflection "^1.7.0"
-    inquirer "^3.0.0"
-    isbinaryfile "^3.0.0"
-    istanbul-instrumenter-loader "^2.0.0"
-    json-loader "^0.5.4"
-    karma-sourcemap-loader "^0.3.7"
-    karma-webpack "^2.0.0"
-    less "^2.7.2"
-    less-loader "^2.2.3"
-    lodash "^4.11.1"
-    minimatch "^3.0.3"
-    node-modules-path "^1.0.0"
-    nopt "^4.0.1"
-    opn "4.0.2"
-    portfinder "~1.0.12"
-    postcss-loader "^0.13.0"
-    postcss-url "^5.1.2"
-    raw-loader "^0.5.1"
-    resolve "^1.1.7"
-    rimraf "^2.5.3"
-    rsvp "^3.0.17"
-    rxjs "^5.0.1"
-    sass-loader "^4.1.1"
-    script-loader "^0.7.0"
-    semver "^5.1.0"
-    silent-error "^1.0.0"
-    source-map-loader "^0.1.5"
-    style-loader "^0.13.1"
-    stylus "^0.54.5"
-    stylus-loader "^2.4.0"
-    temp "0.8.3"
-    typescript ">=2.0.0 <2.3.0"
-    url-loader "^0.5.7"
-    walk-sync "^0.3.1"
-    webpack "~2.2.0"
-    webpack-dev-server "~2.3.0"
-    webpack-merge "^2.4.0"
-    zone.js "^0.7.2"
-  optionalDependencies:
-    node-sass "^4.3.0"
-
-"@angular/common@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/common/-/common-4.1.3.tgz#e7c4791e32131cf74c239428c2a67daab2eef017"
-
-"@angular/compiler-cli@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-4.1.3.tgz#c2362ffdf65756471481f839fab675bcac213f96"
-  dependencies:
-    "@angular/tsc-wrapped" "4.1.3"
-    minimist "^1.2.0"
-    reflect-metadata "^0.1.2"
-
-"@angular/compiler@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-4.1.3.tgz#d2dd30853b0cf4a54758b4a314632c231f9c94c3"
-
-"@angular/core@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/core/-/core-4.1.3.tgz#285498eb86ab7d0b6f982f8f9f487ef610013b35"
-
-"@angular/forms@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-4.1.3.tgz#380ab4c3af84c5d1d748c2a7d04151c7dc8e4982"
-
-"@angular/http@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/http/-/http-4.1.3.tgz#eb9d1c302a0172815f9a573310d9be0bdeb845ae"
-
-"@angular/platform-browser-dynamic@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.1.3.tgz#3c13fdcf591d487f6efdc1d46913f280c6d8c2ec"
-
-"@angular/platform-browser@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-4.1.3.tgz#4fa1db5119dd178b315ddae5b329bee1a932a5bd"
-
-"@angular/router@^4.0.0":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/router/-/router-4.1.3.tgz#ddafd46ae7ccc8b1f74904ffb45f394e44625216"
-
-"@angular/tsc-wrapped@4.1.3":
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/@angular/tsc-wrapped/-/tsc-wrapped-4.1.3.tgz#2d6372c9187bf1621eacd960b94b39c4f95293cd"
-  dependencies:
-    tsickle "^0.21.0"
-
-"@ngrx/core@^1.2.0":
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/@ngrx/core/-/core-1.2.0.tgz#882b46abafa2e0e6d887cb71a1b2c2fa3e6d0dc6"
-
-"@ngrx/store@^2.2.2":
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-2.2.2.tgz#a00305a6452032a3385886a11ce529dce2dae65b"
-
-"@ngtools/json-schema@1.0.5":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.0.5.tgz#ad39037c70c88b245ac7267a71777646b6063d77"
-
-"@ngtools/webpack@1.3.0":
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.3.0.tgz#a1071230985358ecdf87b2fa9879ae6cc6355e83"
-  dependencies:
-    enhanced-resolve "^3.1.0"
-    loader-utils "^1.0.2"
-    magic-string "^0.19.0"
-    source-map "^0.5.6"
-
-"@ngx-translate/core@^6.0.1":
-  version "6.0.1"
-  resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-6.0.1.tgz#7c7a80077feb994fc815b67a72065af04d394efe"
-
-"@ngx-translate/http-loader@^0.0.3":
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/@ngx-translate/http-loader/-/http-loader-0.0.3.tgz#8346c8d2d6f630254601029668f17abe2afe8a9b"
-
-"@types/d3-array@*":
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-1.2.0.tgz#9b1fc3202fc1a9f7da0f2873bd38b443137a9d34"
-
-"@types/d3-axis@*":
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-1.0.9.tgz#62ce7bc8d04354298cda57f3f1d1f856ad69b89a"
-  dependencies:
-    "@types/d3-selection" "*"
-
-"@types/d3-brush@*":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-1.0.7.tgz#05c30440f4d537fd23f976b0e6c4ba223001ef45"
-  dependencies:
-    "@types/d3-selection" "*"
-
-"@types/d3-chord@*":
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-1.0.6.tgz#0589eb97a3191f4edaf17b7bde498462890ce1ec"
-
-"@types/d3-collection@*":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-collection/-/d3-collection-1.0.5.tgz#bb1f3aa97cdc8d881645541b9d6cf87edfee9bc3"
-
-"@types/d3-color@*":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.0.5.tgz#cad755f0fc6de7b70fa6e5e08afa81ef4c2248de"
-
-"@types/d3-dispatch@*":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-1.0.5.tgz#f1f9187b538ecb05157569d8dc2f70dfb04f1b52"
-
-"@types/d3-drag@*":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-1.1.0.tgz#9105e35ca58aa0c4783f3ce83082bcb24ccb6960"
-  dependencies:
-    "@types/d3-selection" "*"
-
-"@types/d3-dsv@*":
-  version "1.0.30"
-  resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-1.0.30.tgz#78e0dddde4283566f463e51551a97a63c170d5a8"
-
-"@types/d3-ease@*":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-1.0.7.tgz#93a301868be9e15061f3d44343b1ab3f8acb6f09"
-
-"@types/d3-force@*":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-1.0.7.tgz#8e3c533697143ebb70275d56840206e8ba789185"
-
-"@types/d3-format@*":
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.2.0.tgz#3e128efc9e6dd09df8fd21f1d981ab68e140a8a2"
-
-"@types/d3-geo@*":
-  version "1.6.3"
-  resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-1.6.3.tgz#21b501d1fe224d88877f39f84cb8c9dd8aa1bf28"
-  dependencies:
-    "@types/geojson" "*"
-
-"@types/d3-hierarchy@*":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-1.1.0.tgz#50f1ee052840638035cbdd4acab1fc3470905907"
-
-"@types/d3-interpolate@*":
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.1.6.tgz#64041b15c9c032c348da1b22baabc59fa4d16136"
-  dependencies:
-    "@types/d3-color" "*"
-
-"@types/d3-path@*":
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-1.0.6.tgz#c1a7d2dc07b295fdd1c84dabe4404df991b48693"
-
-"@types/d3-polygon@*":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-1.0.5.tgz#35ad54ed84c39d7e9f1252b6535be600be6cace2"
-
-"@types/d3-quadtree@*":
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-1.0.5.tgz#1ce1e659eae4530df0cb127f297f1741a367a82e"
-
-"@types/d3-queue@*":
-  version "3.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-queue/-/d3-queue-3.0.5.tgz#3e4cbe2aff61db6a0b2b8c4800299e4ec6acc850"
-
-"@types/d3-random@*":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-1.1.0.tgz#2dd08f1159c70719270e4a7c834af85c8b88d2c3"
-
-"@types/d3-request@*":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@types/d3-request/-/d3-request-1.0.2.tgz#db9db8154f47816584706c6e6f702be66f22f4be"
-  dependencies:
-    "@types/d3-dsv" "*"
-
-"@types/d3-scale@*":
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-1.0.10.tgz#8c5c1dca54a159eed042b46719dbb3bdb7e8c842"
-  dependencies:
-    "@types/d3-time" "*"
-
-"@types/d3-selection@*":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.1.0.tgz#59b88f10d2cff7d9ffd7fe986b3aaef3de048224"
-
-"@types/d3-shape@*":
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-1.2.1.tgz#cac2d9f0122f173220c32c8c152dc42ee9349df2"
-  dependencies:
-    "@types/d3-path" "*"
-
-"@types/d3-time-format@*":
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-2.0.5.tgz#1d4c5ba77ed5352b10c7fce062c883382f1e16e0"
-
-"@types/d3-time@*":
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-1.0.7.tgz#4266d7c9be15fa81256a88d1d052d61cd8dc572c"
-
-"@types/d3-timer@*":
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-1.0.6.tgz#786d4e20731adf03af2c5df6c86fe29667fe429b"
-
-"@types/d3-transition@*":
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-1.1.0.tgz#74475d4a8f8a0944a517d5ef861970cc30287e40"
-  dependencies:
-    "@types/d3-selection" "*"
-
-"@types/d3-voronoi@*":
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/@types/d3-voronoi/-/d3-voronoi-1.1.6.tgz#b52252c1d61972e7c751135890aea112d5dadc6d"
-
-"@types/d3-zoom@*":
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-1.5.0.tgz#21f690b25a8419fd1bcc95ac629cefdfb462c70f"
-  dependencies:
-    "@types/d3-interpolate" "*"
-    "@types/d3-selection" "*"
-
-"@types/d3@^4.10.0":
-  version "4.10.0"
-  resolved "https://registry.yarnpkg.com/@types/d3/-/d3-4.10.0.tgz#721d8f984ba4bc192b1c1aca3834b31cc31fa9d3"
-  dependencies:
-    "@types/d3-array" "*"
-    "@types/d3-axis" "*"
-    "@types/d3-brush" "*"
-    "@types/d3-chord" "*"
-    "@types/d3-collection" "*"
-    "@types/d3-color" "*"
-    "@types/d3-dispatch" "*"
-    "@types/d3-drag" "*"
-    "@types/d3-dsv" "*"
-    "@types/d3-ease" "*"
-    "@types/d3-force" "*"
-    "@types/d3-format" "*"
-    "@types/d3-geo" "*"
-    "@types/d3-hierarchy" "*"
-    "@types/d3-interpolate" "*"
-    "@types/d3-path" "*"
-    "@types/d3-polygon" "*"
-    "@types/d3-quadtree" "*"
-    "@types/d3-queue" "*"
-    "@types/d3-random" "*"
-    "@types/d3-request" "*"
-    "@types/d3-scale" "*"
-    "@types/d3-selection" "*"
-    "@types/d3-shape" "*"
-    "@types/d3-time" "*"
-    "@types/d3-time-format" "*"
-    "@types/d3-timer" "*"
-    "@types/d3-transition" "*"
-    "@types/d3-voronoi" "*"
-    "@types/d3-zoom" "*"
-
-"@types/geojson@*":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.2.tgz#b02d10ab028e2928ac592a051aaa4981a1941d03"
-
-"@types/jasmine@2.5.38":
-  version "2.5.38"
-  resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.38.tgz#a4379124c4921d4e21de54ec74669c9e9b356717"
-
-"@types/jquery@^1.10.33":
-  version "1.10.33"
-  resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-1.10.33.tgz#6c4c279f8d06839b184950432e880e0a469a64a1"
-
-"@types/moment-timezone@^0.2.34":
-  version "0.2.34"
-  resolved "https://registry.yarnpkg.com/@types/moment-timezone/-/moment-timezone-0.2.34.tgz#948e0aff82742a31dd63714d1aac9616bc375053"
-  dependencies:
-    moment ">=2.14.0"
-
-"@types/moment@^2.13.0":
-  version "2.13.0"
-  resolved "https://registry.yarnpkg.com/@types/moment/-/moment-2.13.0.tgz#604ebd189bc3bc34a1548689404e61a2a4aac896"
-  dependencies:
-    moment "*"
-
-"@types/node@^6.0.46", "@types/node@~6.0.60":
-  version "6.0.73"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.73.tgz#85dc4bb6f125377c75ddd2519a1eeb63f0a4ed70"
-
-"@types/q@^0.0.32":
-  version "0.0.32"
-  resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5"
-
-"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39":
-  version "2.53.42"
-  resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz#74cb77fb6052edaff2a8984ddafd88d419f25cac"
-
-abbrev@1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
-
-accepts@1.3.3, accepts@~1.3.3:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
-  dependencies:
-    mime-types "~2.1.11"
-    negotiator "0.6.1"
-
-acorn-dynamic-import@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
-  dependencies:
-    acorn "^4.0.3"
-
-acorn@^4.0.3, acorn@^4.0.4:
-  version "4.0.13"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-
-adm-zip@0.4.4:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736"
-
-adm-zip@^0.4.7:
-  version "0.4.7"
-  resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
-
-after@0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
-
-agent-base@2:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.0.tgz#193455e4347bca6b05847cb81e939bb325446da8"
-  dependencies:
-    extend "~3.0.0"
-    semver "~5.0.1"
-
-ajv-keywords@^1.1.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
-
-ajv@^4.11.2, ajv@^4.7.0, ajv@^4.9.1:
-  version "4.11.8"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
-  dependencies:
-    co "^4.6.0"
-    json-stable-stringify "^1.0.1"
-
-align-text@^0.1.1, align-text@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
-  dependencies:
-    kind-of "^3.0.2"
-    longest "^1.0.1"
-    repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-angular-in-memory-web-api@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/angular-in-memory-web-api/-/angular-in-memory-web-api-0.3.2.tgz#8836d9e2534d37b728f3cb5a1caf6fe1e7fbbecd"
-
-angular-moment-timezone@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/angular-moment-timezone/-/angular-moment-timezone-0.2.1.tgz#b2c1d9dd0e90558483b4da8db277bee4dbdbf6d1"
-  dependencies:
-    "@angular/common" "^4.0.0"
-    "@angular/compiler" "^4.0.0"
-    "@angular/core" "^4.0.0"
-    "@angular/forms" "^4.0.0"
-    "@angular/http" "^4.0.0"
-    "@angular/platform-browser" "^4.0.0"
-    "@angular/platform-browser-dynamic" "^4.0.0"
-    "@angular/router" "^4.0.0"
-    "@types/moment-timezone" "^0.2.34"
-    angular2-moment "^1.3.3"
-    core-js "^2.4.1"
-    moment "^2.18.1"
-    moment-timezone "^0.5.13"
-    rxjs "^5.1.0"
-    zone.js "^0.8.4"
-
-angular2-moment@^1.3.3, angular2-moment@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/angular2-moment/-/angular2-moment-1.4.0.tgz#3d59c1ebc28934fcfe9b888ab461e261724987e8"
-  dependencies:
-    moment "^2.16.0"
-
-ansi-align@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
-  dependencies:
-    string-width "^2.0.0"
-
-ansi-escapes@^1.1.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
-ansi-html@0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-styles@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-any-promise@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
-
-anymatch@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
-  dependencies:
-    arrify "^1.0.0"
-    micromatch "^2.1.5"
-
-app-root-path@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46"
-
-append-transform@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
-  dependencies:
-    default-require-extensions "^1.0.0"
-
-aproba@^1.0.3:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
-
-are-we-there-yet@~1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
-argparse@^1.0.7:
-  version "1.0.9"
-  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
-  dependencies:
-    sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
-  dependencies:
-    arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
-
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-
-array-flatten@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
-
-array-slice@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
-
-array-union@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
-  dependencies:
-    array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-arraybuffer.slice@0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
-
-arrify@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asap@~2.0.3:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
-
-asn1.js@^4.0.0:
-  version "4.9.1"
-  resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40"
-  dependencies:
-    bn.js "^4.0.0"
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert-plus@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-assert@^1.1.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
-  dependencies:
-    util "0.10.3"
-
-async-each@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async-foreach@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
-
-async@^0.9.0, async@~0.9.0:
-  version "0.9.2"
-  resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
-
-async@^1.4.0, async@^1.5.2:
-  version "1.5.2"
-  resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@^2.0.1, async@^2.1.2, async@^2.1.4:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
-  dependencies:
-    lodash "^4.14.0"
-
-async@~0.2.6:
-  version "0.2.10"
-  resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-autoprefixer@^6.3.1, autoprefixer@^6.5.3:
-  version "6.7.7"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
-  dependencies:
-    browserslist "^1.7.6"
-    caniuse-db "^1.0.30000634"
-    normalize-range "^0.1.2"
-    num2fraction "^1.2.2"
-    postcss "^5.2.16"
-    postcss-value-parser "^3.2.3"
-
-aws-sign2@~0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws4@^1.2.1:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-babel-code-frame@^6.11.0, babel-code-frame@^6.20.0, babel-code-frame@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
-  dependencies:
-    chalk "^1.1.0"
-    esutils "^2.0.2"
-    js-tokens "^3.0.0"
-
-babel-generator@^6.18.0:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497"
-  dependencies:
-    babel-messages "^6.23.0"
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-    detect-indent "^4.0.0"
-    jsesc "^1.3.0"
-    lodash "^4.2.0"
-    source-map "^0.5.0"
-    trim-right "^1.0.1"
-
-babel-messages@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-runtime@^6.18.0, babel-runtime@^6.22.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.10.0"
-
-babel-template@^6.16.0:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-    babylon "^6.11.0"
-    lodash "^4.2.0"
-
-babel-traverse@^6.18.0, babel-traverse@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695"
-  dependencies:
-    babel-code-frame "^6.22.0"
-    babel-messages "^6.23.0"
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-    babylon "^6.15.0"
-    debug "^2.2.0"
-    globals "^9.0.0"
-    invariant "^2.2.0"
-    lodash "^4.2.0"
-
-babel-types@^6.18.0, babel-types@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975"
-  dependencies:
-    babel-runtime "^6.22.0"
-    esutils "^2.0.2"
-    lodash "^4.2.0"
-    to-fast-properties "^1.0.1"
-
-babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
-  version "6.17.1"
-  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.1.tgz#17f14fddf361b695981fe679385e4f1c01ebd86f"
-
-backo2@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
-
-balanced-match@^0.4.1, balanced-match@^0.4.2:
-  version "0.4.2"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-base64-arraybuffer@0.1.5:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
-
-base64-js@^1.0.2:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
-
-base64id@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
-
-batch@0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
-
-bcrypt-pbkdf@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
-  dependencies:
-    tweetnacl "^0.14.3"
-
-better-assert@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
-  dependencies:
-    callsite "1.0.0"
-
-big.js@^3.1.3:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
-
-binary-extensions@^1.0.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
-
-blob@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
-
-block-stream@*:
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
-  dependencies:
-    inherits "~2.0.0"
-
-blocking-proxy@0.0.5:
-  version "0.0.5"
-  resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-0.0.5.tgz#462905e0dcfbea970f41aa37223dda9c07b1912b"
-  dependencies:
-    minimist "^1.2.0"
-
-bluebird@^3.3.0, bluebird@^3.4.7:
-  version "3.5.0"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
-  version "4.11.6"
-  resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
-
-body-parser@^1.12.4:
-  version "1.17.2"
-  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee"
-  dependencies:
-    bytes "2.4.0"
-    content-type "~1.0.2"
-    debug "2.6.7"
-    depd "~1.1.0"
-    http-errors "~1.6.1"
-    iconv-lite "0.4.15"
-    on-finished "~2.3.0"
-    qs "6.4.0"
-    raw-body "~2.2.0"
-    type-is "~1.6.15"
-
-boolbase@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-
-boom@2.x.x:
-  version "2.10.1"
-  resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
-  dependencies:
-    hoek "2.x.x"
-
-bootstrap@^3.3.7:
-  version "3.3.7"
-  resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.3.7.tgz#5a389394549f23330875a3b150656574f8a9eb71"
-
-boxen@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102"
-  dependencies:
-    ansi-align "^2.0.0"
-    camelcase "^4.0.0"
-    chalk "^1.1.1"
-    cli-boxes "^1.0.0"
-    string-width "^2.0.0"
-    term-size "^0.1.0"
-    widest-line "^1.0.0"
-
-brace-expansion@^1.1.7:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
-  dependencies:
-    balanced-match "^0.4.1"
-    concat-map "0.0.1"
-
-braces@^0.1.2:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
-  dependencies:
-    expand-range "^0.1.0"
-
-braces@^1.8.2:
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
-  dependencies:
-    expand-range "^1.8.1"
-    preserve "^0.2.0"
-    repeat-element "^1.1.2"
-
-brorand@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a"
-  dependencies:
-    buffer-xor "^1.0.2"
-    cipher-base "^1.0.0"
-    create-hash "^1.1.0"
-    evp_bytestokey "^1.0.0"
-    inherits "^2.0.1"
-
-browserify-cipher@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
-  dependencies:
-    browserify-aes "^1.0.4"
-    browserify-des "^1.0.0"
-    evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
-  dependencies:
-    cipher-base "^1.0.1"
-    des.js "^1.0.0"
-    inherits "^2.0.1"
-
-browserify-rsa@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
-  dependencies:
-    bn.js "^4.1.0"
-    randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
-  dependencies:
-    bn.js "^4.1.1"
-    browserify-rsa "^4.0.0"
-    create-hash "^1.1.0"
-    create-hmac "^1.1.2"
-    elliptic "^6.0.0"
-    inherits "^2.0.1"
-    parse-asn1 "^5.0.0"
-
-browserify-zlib@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
-  dependencies:
-    pako "~0.2.0"
-
-browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
-  version "1.7.7"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
-  dependencies:
-    caniuse-db "^1.0.30000639"
-    electron-to-chromium "^1.2.7"
-
-buffer-shims@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
-
-buffer-xor@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
-
-buffer@^4.3.0:
-  version "4.9.1"
-  resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
-  dependencies:
-    base64-js "^1.0.2"
-    ieee754 "^1.1.4"
-    isarray "^1.0.0"
-
-builtin-modules@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-builtin-status-codes@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
-
-bytes@2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070"
-
-bytes@2.4.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
-
-callsite@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
-
-camel-case@3.0.x:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
-  dependencies:
-    no-case "^2.2.0"
-    upper-case "^1.1.1"
-
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
-camelcase@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-
-camelcase@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-
-camelcase@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-
-caniuse-api@^1.5.2:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
-  dependencies:
-    browserslist "^1.3.6"
-    caniuse-db "^1.0.30000529"
-    lodash.memoize "^4.1.2"
-    lodash.uniq "^4.5.0"
-
-caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
-  version "1.0.30000676"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000676.tgz#82ea578237637c8ff34a28acaade373b624c4ea8"
-
-capture-stack-trace@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
-
-caseless@~0.12.0:
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
-  dependencies:
-    align-text "^0.1.3"
-    lazy-cache "^1.0.3"
-
-chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
-  dependencies:
-    ansi-styles "^2.2.1"
-    escape-string-regexp "^1.0.2"
-    has-ansi "^2.0.0"
-    strip-ansi "^3.0.0"
-    supports-color "^2.0.0"
-
-chokidar@^1.4.1, chokidar@^1.4.3, chokidar@^1.6.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
-  dependencies:
-    anymatch "^1.3.0"
-    async-each "^1.0.0"
-    glob-parent "^2.0.0"
-    inherits "^2.0.1"
-    is-binary-path "^1.0.0"
-    is-glob "^2.0.0"
-    path-is-absolute "^1.0.0"
-    readdirp "^2.0.0"
-  optionalDependencies:
-    fsevents "^1.0.0"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07"
-  dependencies:
-    inherits "^2.0.1"
-
-clap@^1.0.9:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b"
-  dependencies:
-    chalk "^1.1.3"
-
-clean-css@4.1.x:
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce"
-  dependencies:
-    source-map "0.5.x"
-
-cli-boxes@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
-
-cli-cursor@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
-  dependencies:
-    restore-cursor "^2.0.0"
-
-cli-width@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
-
-cliui@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
-  dependencies:
-    center-align "^0.1.1"
-    right-align "^0.1.1"
-    wordwrap "0.0.2"
-
-cliui@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wrap-ansi "^2.0.0"
-
-clone@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-coa@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.2.tgz#2ba9fec3b4aa43d7a49d7e6c3561e92061b6bcec"
-  dependencies:
-    q "^1.1.2"
-
-code-point-at@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-codelyzer@~2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-2.0.1.tgz#d0f7121f67a8424c92d21d3b31f3640b83def9ed"
-  dependencies:
-    app-root-path "^2.0.1"
-    css-selector-tokenizer "^0.7.0"
-    cssauron "^1.4.0"
-    semver-dsl "^1.0.1"
-    source-map "^0.5.6"
-    sprintf-js "^1.0.3"
-
-color-convert@^1.3.0:
-  version "1.9.0"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
-  dependencies:
-    color-name "^1.1.1"
-
-color-name@^1.0.0, color-name@^1.1.1:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d"
-
-color-string@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
-  dependencies:
-    color-name "^1.0.0"
-
-color@^0.11.0:
-  version "0.11.4"
-  resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
-  dependencies:
-    clone "^1.0.2"
-    color-convert "^1.3.0"
-    color-string "^0.3.0"
-
-colormin@^1.0.5:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
-  dependencies:
-    color "^0.11.0"
-    css-color-names "0.0.4"
-    has "^1.0.1"
-
-colors@1.1.2, colors@^1.1.0, colors@^1.1.2, colors@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
-combine-lists@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
-  dependencies:
-    lodash "^4.5.0"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
-  dependencies:
-    delayed-stream "~1.0.0"
-
-commander@2, commander@2.9.x, commander@~2.9.0:
-  version "2.9.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
-  dependencies:
-    graceful-readlink ">= 1.0.0"
-
-common-tags@^1.3.1:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0"
-  dependencies:
-    babel-runtime "^6.18.0"
-
-component-bind@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
-
-component-emitter@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
-
-component-emitter@1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-
-component-inherit@0.0.3:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
-
-compressible@~2.0.8:
-  version "2.0.10"
-  resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd"
-  dependencies:
-    mime-db ">= 1.27.0 < 2"
-
-compression@^1.5.2:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3"
-  dependencies:
-    accepts "~1.3.3"
-    bytes "2.3.0"
-    compressible "~2.0.8"
-    debug "~2.2.0"
-    on-headers "~1.0.1"
-    vary "~1.1.0"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-configstore@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1"
-  dependencies:
-    dot-prop "^4.1.0"
-    graceful-fs "^4.1.2"
-    make-dir "^1.0.0"
-    unique-string "^1.0.0"
-    write-file-atomic "^2.0.0"
-    xdg-basedir "^3.0.0"
-
-connect-history-api-fallback@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169"
-
-connect@^3.3.5:
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.2.tgz#694e8d20681bfe490282c8ab886be98f09f42fe7"
-  dependencies:
-    debug "2.6.7"
-    finalhandler "1.0.3"
-    parseurl "~1.3.1"
-    utils-merge "1.0.0"
-
-console-browserify@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
-  dependencies:
-    date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-constants-browserify@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-
-content-disposition@0.5.2:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
-
-content-type@~1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
-
-convert-source-map@^1.3.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
-
-cookie-signature@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
-
-cookie@0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-
-core-js@^2.2.0, core-js@^2.4.0, core-js@^2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
-
-core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-create-ecdh@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
-  dependencies:
-    bn.js "^4.1.0"
-    elliptic "^6.0.0"
-
-create-error-class@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
-  dependencies:
-    capture-stack-trace "^1.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
-  dependencies:
-    cipher-base "^1.0.1"
-    inherits "^2.0.1"
-    ripemd160 "^2.0.0"
-    sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
-  dependencies:
-    cipher-base "^1.0.3"
-    create-hash "^1.1.0"
-    inherits "^2.0.1"
-    ripemd160 "^2.0.0"
-    safe-buffer "^5.0.1"
-    sha.js "^2.4.8"
-
-cross-spawn-async@^2.1.1:
-  version "2.2.5"
-  resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc"
-  dependencies:
-    lru-cache "^4.0.0"
-    which "^1.2.8"
-
-cross-spawn@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
-  dependencies:
-    lru-cache "^4.0.1"
-    which "^1.2.9"
-
-cryptiles@2.x.x:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
-  dependencies:
-    boom "2.x.x"
-
-crypto-browserify@^3.11.0:
-  version "3.11.0"
-  resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522"
-  dependencies:
-    browserify-cipher "^1.0.0"
-    browserify-sign "^4.0.0"
-    create-ecdh "^4.0.0"
-    create-hash "^1.1.0"
-    create-hmac "^1.1.0"
-    diffie-hellman "^5.0.0"
-    inherits "^2.0.1"
-    pbkdf2 "^3.0.3"
-    public-encrypt "^4.0.0"
-    randombytes "^2.0.0"
-
-crypto-random-string@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
-
-css-color-names@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-
-css-loader@^0.26.1:
-  version "0.26.4"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz#b61e9e30db94303e6ffc892f10ecd09ad025a1fd"
-  dependencies:
-    babel-code-frame "^6.11.0"
-    css-selector-tokenizer "^0.7.0"
-    cssnano ">=2.6.1 <4"
-    loader-utils "^1.0.2"
-    lodash.camelcase "^4.3.0"
-    object-assign "^4.0.1"
-    postcss "^5.0.6"
-    postcss-modules-extract-imports "^1.0.0"
-    postcss-modules-local-by-default "^1.0.1"
-    postcss-modules-scope "^1.0.0"
-    postcss-modules-values "^1.1.0"
-    source-list-map "^0.1.7"
-
-css-parse@1.7.x:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
-
-css-select@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
-  dependencies:
-    boolbase "~1.0.0"
-    css-what "2.1"
-    domutils "1.5.1"
-    nth-check "~1.0.1"
-
-css-selector-tokenizer@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
-  dependencies:
-    cssesc "^0.1.0"
-    fastparse "^1.1.1"
-    regexpu-core "^1.0.0"
-
-css-what@2.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
-
-cssauron@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8"
-  dependencies:
-    through X.X.X
-
-cssesc@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-
-"cssnano@>=2.6.1 <4", cssnano@^3.10.0:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
-  dependencies:
-    autoprefixer "^6.3.1"
-    decamelize "^1.1.2"
-    defined "^1.0.0"
-    has "^1.0.1"
-    object-assign "^4.0.1"
-    postcss "^5.0.14"
-    postcss-calc "^5.2.0"
-    postcss-colormin "^2.1.8"
-    postcss-convert-values "^2.3.4"
-    postcss-discard-comments "^2.0.4"
-    postcss-discard-duplicates "^2.0.1"
-    postcss-discard-empty "^2.0.1"
-    postcss-discard-overridden "^0.1.1"
-    postcss-discard-unused "^2.2.1"
-    postcss-filter-plugins "^2.0.0"
-    postcss-merge-idents "^2.1.5"
-    postcss-merge-longhand "^2.0.1"
-    postcss-merge-rules "^2.0.3"
-    postcss-minify-font-values "^1.0.2"
-    postcss-minify-gradients "^1.0.1"
-    postcss-minify-params "^1.0.4"
-    postcss-minify-selectors "^2.0.4"
-    postcss-normalize-charset "^1.1.0"
-    postcss-normalize-url "^3.0.7"
-    postcss-ordered-values "^2.1.0"
-    postcss-reduce-idents "^2.2.2"
-    postcss-reduce-initial "^1.0.0"
-    postcss-reduce-transforms "^1.0.3"
-    postcss-svgo "^2.1.1"
-    postcss-unique-selectors "^2.0.2"
-    postcss-value-parser "^3.2.3"
-    postcss-zindex "^2.0.1"
-
-csso@~2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
-  dependencies:
-    clap "^1.0.9"
-    source-map "^0.5.3"
-
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  dependencies:
-    array-find-index "^1.0.1"
-
-custom-event@~1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
-
-d3-array@1, d3-array@1.2.0, d3-array@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.0.tgz#147d269720e174c4057a7f42be8b0f3f2ba53108"
-
-d3-axis@1.0.8:
-  version "1.0.8"
-  resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa"
-
-d3-brush@1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4"
-  dependencies:
-    d3-dispatch "1"
-    d3-drag "1"
-    d3-interpolate "1"
-    d3-selection "1"
-    d3-transition "1"
-
-d3-chord@1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c"
-  dependencies:
-    d3-array "1"
-    d3-path "1"
-
-d3-collection@1, d3-collection@1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2"
-
-d3-color@1, d3-color@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b"
-
-d3-dispatch@1, d3-dispatch@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8"
-
-d3-drag@1, d3-drag@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.1.1.tgz#b5155304433b18ba38726b2184d0098e820dc64b"
-  dependencies:
-    d3-dispatch "1"
-    d3-selection "1"
-
-d3-dsv@1, d3-dsv@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.5.tgz#419f7db47f628789fc3fdb636e678449d0821136"
-  dependencies:
-    commander "2"
-    iconv-lite "0.4"
-    rw "1"
-
-d3-ease@1, d3-ease@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e"
-
-d3-force@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.0.6.tgz#ea7e1b7730e2664cd314f594d6718c57cc132b79"
-  dependencies:
-    d3-collection "1"
-    d3-dispatch "1"
-    d3-quadtree "1"
-    d3-timer "1"
-
-d3-format@1, d3-format@1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.0.tgz#6b480baa886885d4651dc248a8f4ac9da16db07a"
-
-d3-geo@1.6.4:
-  version "1.6.4"
-  resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.6.4.tgz#f20e1e461cb1845f5a8be55ab6f876542a7e3199"
-  dependencies:
-    d3-array "1"
-
-d3-hierarchy@1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26"
-
-d3-interpolate@1, d3-interpolate@1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.5.tgz#69e099ff39214716e563c9aec3ea9d1ea4b8a79f"
-  dependencies:
-    d3-color "1"
-
-d3-path@1, d3-path@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764"
-
-d3-polygon@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62"
-
-d3-quadtree@1, d3-quadtree@1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438"
-
-d3-queue@3.0.7:
-  version "3.0.7"
-  resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618"
-
-d3-random@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3"
-
-d3-request@1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.5.tgz#4daae946d1dd0d57dfe01f022956354958d51f23"
-  dependencies:
-    d3-collection "1"
-    d3-dispatch "1"
-    d3-dsv "1"
-    xmlhttprequest "1"
-
-d3-scale@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed"
-  dependencies:
-    d3-array "^1.2.0"
-    d3-collection "1"
-    d3-color "1"
-    d3-format "1"
-    d3-interpolate "1"
-    d3-time "1"
-    d3-time-format "2"
-
-d3-selection@1, d3-selection@1.1.0, d3-selection@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.1.0.tgz#1998684896488f839ca0372123da34f1d318809c"
-
-d3-shape@1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777"
-  dependencies:
-    d3-path "1"
-
-d3-time-format@2, d3-time-format@2.0.5:
-  version "2.0.5"
-  resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.0.5.tgz#9d7780204f7c9119c9170b1a56db4de9a8af972e"
-  dependencies:
-    d3-time "1"
-
-d3-time@1, d3-time@1.0.7:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.7.tgz#94caf6edbb7879bb809d0d1f7572bc48482f7270"
-
-d3-timer@1, d3-timer@1.0.6:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.6.tgz#4044bf15d7025c06ce7d1149f73cd07b54dbd784"
-
-d3-transition@1, d3-transition@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.0.tgz#cfc85c74e5239324290546623572990560c3966f"
-  dependencies:
-    d3-color "1"
-    d3-dispatch "1"
-    d3-ease "1"
-    d3-interpolate "1"
-    d3-selection "^1.1.0"
-    d3-timer "1"
-
-d3-voronoi@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c"
-
-d3-zoom@1.5.0:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.5.0.tgz#8417de9a077f98f9ce83b1998efb8ee12b4db26e"
-  dependencies:
-    d3-dispatch "1"
-    d3-drag "1"
-    d3-interpolate "1"
-    d3-selection "1"
-    d3-transition "1"
-
-d3@^4.10.0:
-  version "4.10.0"
-  resolved "https://registry.yarnpkg.com/d3/-/d3-4.10.0.tgz#0bcca3a3b614e2fd45b1b5bd0b9164d57352a862"
-  dependencies:
-    d3-array "1.2.0"
-    d3-axis "1.0.8"
-    d3-brush "1.0.4"
-    d3-chord "1.0.4"
-    d3-collection "1.0.4"
-    d3-color "1.0.3"
-    d3-dispatch "1.0.3"
-    d3-drag "1.1.1"
-    d3-dsv "1.0.5"
-    d3-ease "1.0.3"
-    d3-force "1.0.6"
-    d3-format "1.2.0"
-    d3-geo "1.6.4"
-    d3-hierarchy "1.1.5"
-    d3-interpolate "1.1.5"
-    d3-path "1.0.5"
-    d3-polygon "1.0.3"
-    d3-quadtree "1.0.3"
-    d3-queue "3.0.7"
-    d3-random "1.1.0"
-    d3-request "1.0.5"
-    d3-scale "1.0.6"
-    d3-selection "1.1.0"
-    d3-shape "1.2.0"
-    d3-time "1.0.7"
-    d3-time-format "2.0.5"
-    d3-timer "1.0.6"
-    d3-transition "1.1.0"
-    d3-voronoi "1.1.2"
-    d3-zoom "1.5.0"
-
-dashdash@^1.12.0:
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
-  dependencies:
-    assert-plus "^1.0.0"
-
-date-now@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-debug@*, debug@2, debug@2.6.8, debug@^2.1.3, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8:
-  version "2.6.8"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
-  dependencies:
-    ms "2.0.0"
-
-debug@2.2.0, debug@~2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
-  dependencies:
-    ms "0.7.1"
-
-debug@2.3.3:
-  version "2.3.3"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
-  dependencies:
-    ms "0.7.2"
-
-debug@2.6.7:
-  version "2.6.7"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
-  dependencies:
-    ms "2.0.0"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-extend@~0.4.0:
-  version "0.4.2"
-  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
-
-default-require-extensions@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
-  dependencies:
-    strip-bom "^2.0.0"
-
-defined@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-del@^2.2.0:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
-  dependencies:
-    globby "^5.0.0"
-    is-path-cwd "^1.0.0"
-    is-path-in-cwd "^1.0.0"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-denodeify@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
-
-depd@1.1.0, depd@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
-
-des.js@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
-  dependencies:
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-
-destroy@~1.0.4:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-
-detect-indent@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
-  dependencies:
-    repeating "^2.0.0"
-
-detect-node@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
-
-di@^0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
-
-diff@^3.0.1, diff@^3.1.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
-
-diffie-hellman@^5.0.0:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
-  dependencies:
-    bn.js "^4.1.0"
-    miller-rabin "^4.0.0"
-    randombytes "^2.0.0"
-
-directory-encoder@^0.7.2:
-  version "0.7.2"
-  resolved "https://registry.yarnpkg.com/directory-encoder/-/directory-encoder-0.7.2.tgz#59b4e2aa4f25422f6c63b527b462f5e2d0dd2c58"
-  dependencies:
-    fs-extra "^0.23.1"
-    handlebars "^1.3.0"
-    img-stats "^0.5.2"
-
-dom-converter@~0.1:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
-  dependencies:
-    utila "~0.3"
-
-dom-serialize@^2.2.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
-  dependencies:
-    custom-event "~1.0.0"
-    ent "~2.2.0"
-    extend "^3.0.0"
-    void-elements "^2.0.0"
-
-dom-serializer@0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
-  dependencies:
-    domelementtype "~1.1.1"
-    entities "~1.1.1"
-
-domain-browser@^1.1.1:
-  version "1.1.7"
-  resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-
-domelementtype@1:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-
-domelementtype@~1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
-domhandler@2.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
-  dependencies:
-    domelementtype "1"
-
-domutils@1.1:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
-  dependencies:
-    domelementtype "1"
-
-domutils@1.5.1:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
-  dependencies:
-    dom-serializer "0"
-    domelementtype "1"
-
-dot-prop@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
-  dependencies:
-    is-obj "^1.0.0"
-
-duplexer3@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
-
-ecc-jsbn@~0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
-  dependencies:
-    jsbn "~0.1.0"
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-
-electron-to-chromium@^1.2.7:
-  version "1.3.13"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc"
-
-elliptic@^6.0.0:
-  version "6.4.0"
-  resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
-  dependencies:
-    bn.js "^4.4.0"
-    brorand "^1.0.1"
-    hash.js "^1.0.0"
-    hmac-drbg "^1.0.0"
-    inherits "^2.0.1"
-    minimalistic-assert "^1.0.0"
-    minimalistic-crypto-utils "^1.0.0"
-
-ember-cli-normalize-entity-name@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/ember-cli-normalize-entity-name/-/ember-cli-normalize-entity-name-1.0.0.tgz#0b14f7bcbc599aa117b5fddc81e4fd03c4bad5b7"
-  dependencies:
-    silent-error "^1.0.0"
-
-ember-cli-string-utils@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1"
-
-emojis-list@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-
-encodeurl@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
-
-engine.io-client@1.8.2:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.2.tgz#c38767547f2a7d184f5752f6f0ad501006703766"
-  dependencies:
-    component-emitter "1.2.1"
-    component-inherit "0.0.3"
-    debug "2.3.3"
-    engine.io-parser "1.3.2"
-    has-cors "1.1.0"
-    indexof "0.0.1"
-    parsejson "0.0.3"
-    parseqs "0.0.5"
-    parseuri "0.0.5"
-    ws "1.1.1"
-    xmlhttprequest-ssl "1.5.3"
-    yeast "0.1.2"
-
-engine.io-parser@1.3.2:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a"
-  dependencies:
-    after "0.8.2"
-    arraybuffer.slice "0.0.6"
-    base64-arraybuffer "0.1.5"
-    blob "0.0.4"
-    has-binary "0.1.7"
-    wtf-8 "1.0.0"
-
-engine.io@1.8.2:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.2.tgz#6b59be730b348c0125b0a4589de1c355abcf7a7e"
-  dependencies:
-    accepts "1.3.3"
-    base64id "1.0.0"
-    cookie "0.3.1"
-    debug "2.3.3"
-    engine.io-parser "1.3.2"
-    ws "1.1.1"
-
-enhanced-resolve@^3.0.0, enhanced-resolve@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec"
-  dependencies:
-    graceful-fs "^4.1.2"
-    memory-fs "^0.4.0"
-    object-assign "^4.0.1"
-    tapable "^0.2.5"
-
-ensure-posix-path@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz#a65b3e42d0b71cfc585eb774f9943c8d9b91b0c2"
-
-ent@~2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
-
-entities@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-errno@^0.1.1, errno@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
-  dependencies:
-    prr "~0.0.0"
-
-error-ex@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
-  dependencies:
-    is-arrayish "^0.2.1"
-
-escape-html@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-esprima@^2.6.0:
-  version "2.7.3"
-  resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@^3.1.1:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
-esutils@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-etag@~1.8.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
-
-eventemitter3@1.x.x:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
-
-events@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
-
-eventsource@~0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
-  dependencies:
-    original ">=0.0.5"
-
-evp_bytestokey@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53"
-  dependencies:
-    create-hash "^1.1.1"
-
-execa@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3"
-  dependencies:
-    cross-spawn-async "^2.1.1"
-    is-stream "^1.1.0"
-    npm-run-path "^1.0.0"
-    object-assign "^4.0.1"
-    path-key "^1.0.0"
-    strip-eof "^1.0.0"
-
-exit@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-
-expand-braces@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
-  dependencies:
-    array-slice "^0.2.3"
-    array-unique "^0.2.1"
-    braces "^0.1.2"
-
-expand-brackets@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
-  dependencies:
-    is-posix-bracket "^0.1.0"
-
-expand-range@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
-  dependencies:
-    is-number "^0.1.1"
-    repeat-string "^0.2.2"
-
-expand-range@^1.8.1:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
-  dependencies:
-    fill-range "^2.1.0"
-
-exports-loader@^0.6.3:
-  version "0.6.4"
-  resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886"
-  dependencies:
-    loader-utils "^1.0.2"
-    source-map "0.5.x"
-
-express@^4.13.3:
-  version "4.15.3"
-  resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662"
-  dependencies:
-    accepts "~1.3.3"
-    array-flatten "1.1.1"
-    content-disposition "0.5.2"
-    content-type "~1.0.2"
-    cookie "0.3.1"
-    cookie-signature "1.0.6"
-    debug "2.6.7"
-    depd "~1.1.0"
-    encodeurl "~1.0.1"
-    escape-html "~1.0.3"
-    etag "~1.8.0"
-    finalhandler "~1.0.3"
-    fresh "0.5.0"
-    merge-descriptors "1.0.1"
-    methods "~1.1.2"
-    on-finished "~2.3.0"
-    parseurl "~1.3.1"
-    path-to-regexp "0.1.7"
-    proxy-addr "~1.1.4"
-    qs "6.4.0"
-    range-parser "~1.2.0"
-    send "0.15.3"
-    serve-static "1.12.3"
-    setprototypeof "1.0.3"
-    statuses "~1.3.1"
-    type-is "~1.6.15"
-    utils-merge "1.0.0"
-    vary "~1.1.1"
-
-extend@3, extend@^3.0.0, extend@~3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-external-editor@^2.0.1:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972"
-  dependencies:
-    iconv-lite "^0.4.17"
-    jschardet "^1.4.2"
-    tmp "^0.0.31"
-
-extglob@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
-  dependencies:
-    is-extglob "^1.0.0"
-
-extract-text-webpack-plugin@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.0.0.tgz#8640f72609800a3528f13a2a9634d566a5c1ae60"
-  dependencies:
-    ajv "^4.11.2"
-    async "^2.1.2"
-    loader-utils "^1.0.2"
-    webpack-sources "^0.1.0"
-
-extsprintf@1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
-
-fastparse@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
-
-faye-websocket@^0.10.0:
-  version "0.10.0"
-  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
-  dependencies:
-    websocket-driver ">=0.5.1"
-
-faye-websocket@~0.11.0:
-  version "0.11.1"
-  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
-  dependencies:
-    websocket-driver ">=0.5.1"
-
-figures@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
-  dependencies:
-    escape-string-regexp "^1.0.5"
-
-file-loader@^0.10.0:
-  version "0.10.1"
-  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842"
-  dependencies:
-    loader-utils "^1.0.2"
-
-filename-regex@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-fileset@^2.0.2:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
-  dependencies:
-    glob "^7.0.3"
-    minimatch "^3.0.3"
-
-fill-range@^2.1.0:
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
-  dependencies:
-    is-number "^2.1.0"
-    isobject "^2.0.0"
-    randomatic "^1.1.3"
-    repeat-element "^1.1.2"
-    repeat-string "^1.5.2"
-
-finalhandler@1.0.3, finalhandler@~1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89"
-  dependencies:
-    debug "2.6.7"
-    encodeurl "~1.0.1"
-    escape-html "~1.0.3"
-    on-finished "~2.3.0"
-    parseurl "~1.3.1"
-    statuses "~1.3.1"
-    unpipe "~1.0.0"
-
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-findup-sync@~0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
-  dependencies:
-    glob "~5.0.0"
-
-flatten@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-
-font-awesome@^4.7.0:
-  version "4.7.0"
-  resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
-
-for-in@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
-  dependencies:
-    for-in "^1.0.1"
-
-forever-agent@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "^1.0.5"
-    mime-types "^2.1.12"
-
-forwarded@~0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
-
-fresh@0.5.0:
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
-
-fs-access@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
-  dependencies:
-    null-check "^1.0.0"
-
-fs-extra@^0.23.1:
-  version "0.23.1"
-  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.23.1.tgz#6611dba6adf2ab8dc9c69fab37cddf8818157e3d"
-  dependencies:
-    graceful-fs "^4.1.2"
-    jsonfile "^2.1.0"
-    path-is-absolute "^1.0.0"
-    rimraf "^2.2.8"
-
-fs-extra@^2.0.0:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
-  dependencies:
-    graceful-fs "^4.1.2"
-    jsonfile "^2.1.0"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
-  dependencies:
-    nan "^2.3.0"
-    node-pre-gyp "^0.6.29"
-
-fstream-ignore@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
-  dependencies:
-    fstream "^1.0.0"
-    inherits "2"
-    minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
-  version "1.0.11"
-  resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
-  dependencies:
-    graceful-fs "^4.1.2"
-    inherits "~2.0.0"
-    mkdirp ">=0.5 0"
-    rimraf "2"
-
-function-bind@^1.0.2:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
-
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-gaze@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105"
-  dependencies:
-    globule "^1.0.0"
-
-get-caller-file@^1.0.0, get-caller-file@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
-
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-
-get-stream@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-getpass@^0.1.1:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
-  dependencies:
-    assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
-  dependencies:
-    glob-parent "^2.0.0"
-    is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
-  dependencies:
-    is-glob "^2.0.0"
-
-glob@7.0.x:
-  version "7.0.6"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.2"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@~7.1.1:
-  version "7.1.2"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@~5.0.0:
-  version "5.0.15"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
-  dependencies:
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "2 || 3"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-globals@^9.0.0:
-  version "9.17.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
-
-globby@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
-  dependencies:
-    array-union "^1.0.1"
-    arrify "^1.0.0"
-    glob "^7.0.3"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-globule@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/globule/-/globule-1.1.0.tgz#c49352e4dc183d85893ee825385eb994bb6df45f"
-  dependencies:
-    glob "~7.1.1"
-    lodash "~4.16.4"
-    minimatch "~3.0.2"
-
-got@^6.7.1:
-  version "6.7.1"
-  resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
-  dependencies:
-    create-error-class "^3.0.0"
-    duplexer3 "^0.1.4"
-    get-stream "^3.0.0"
-    is-redirect "^1.0.0"
-    is-retry-allowed "^1.0.0"
-    is-stream "^1.0.0"
-    lowercase-keys "^1.0.0"
-    safe-buffer "^5.0.1"
-    timed-out "^4.0.0"
-    unzip-response "^2.0.1"
-    url-parse-lax "^1.0.0"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
-  version "4.1.11"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-"graceful-readlink@>= 1.0.0":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
-handle-thing@^1.2.5:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
-
-handlebars@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-1.3.0.tgz#9e9b130a93e389491322d975cf3ec1818c37ce34"
-  dependencies:
-    optimist "~0.3"
-  optionalDependencies:
-    uglify-js "~2.3"
-
-handlebars@^4.0.3:
-  version "4.0.10"
-  resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f"
-  dependencies:
-    async "^1.4.0"
-    optimist "^0.6.1"
-    source-map "^0.4.4"
-  optionalDependencies:
-    uglify-js "^2.6"
-
-har-schema@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
-
-har-validator@~4.2.1:
-  version "4.2.1"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
-  dependencies:
-    ajv "^4.9.1"
-    har-schema "^1.0.5"
-
-has-ansi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
-  dependencies:
-    ansi-regex "^2.0.0"
-
-has-binary@0.1.7:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
-  dependencies:
-    isarray "0.0.1"
-
-has-cors@1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
-
-has-flag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
-  dependencies:
-    function-bind "^1.0.2"
-
-hash-base@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
-  dependencies:
-    inherits "^2.0.1"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573"
-  dependencies:
-    inherits "^2.0.1"
-
-hawk@~3.1.3:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
-  dependencies:
-    boom "2.x.x"
-    cryptiles "2.x.x"
-    hoek "2.x.x"
-    sntp "1.x.x"
-
-he@1.1.x:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
-
-hmac-drbg@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
-  dependencies:
-    hash.js "^1.0.3"
-    minimalistic-assert "^1.0.0"
-    minimalistic-crypto-utils "^1.0.1"
-
-hoek@2.x.x:
-  version "2.16.3"
-  resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-hosted-git-info@^2.1.4:
-  version "2.4.2"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
-
-hpack.js@^2.1.6:
-  version "2.1.6"
-  resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
-  dependencies:
-    inherits "^2.0.1"
-    obuf "^1.0.0"
-    readable-stream "^2.0.1"
-    wbuf "^1.1.0"
-
-html-comment-regex@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
-
-html-entities@^1.2.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-
-html-minifier@^3.2.3:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7"
-  dependencies:
-    camel-case "3.0.x"
-    clean-css "4.1.x"
-    commander "2.9.x"
-    he "1.1.x"
-    ncname "1.0.x"
-    param-case "2.1.x"
-    relateurl "0.2.x"
-    uglify-js "3.0.x"
-
-html-webpack-plugin@^2.19.0:
-  version "2.28.0"
-  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.28.0.tgz#2e7863b57e5fd48fe263303e2ffc934c3064d009"
-  dependencies:
-    bluebird "^3.4.7"
-    html-minifier "^3.2.3"
-    loader-utils "^0.2.16"
-    lodash "^4.17.3"
-    pretty-error "^2.0.2"
-    toposort "

<TRUNCATED>

[15/51] [partial] ambari git commit: AMBARI-21870. Integrate LogSearch new UI with the server and get rid of the old one (oleewere)

Posted by ol...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/visualsearch.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/visualsearch.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/visualsearch.js
deleted file mode 100644
index c8fe317..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/libs/custom/visualsearch/visualsearch.js
+++ /dev/null
@@ -1,1984 +0,0 @@
-/*
- * 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.
- */
-
-
-// This is the annotated source code for
-// [VisualSearch.js](http://documentcloud.github.com/visualsearch/),
-// a rich search box for real data.
-// 
-// The annotated source HTML is generated by
-// [Docco](http://jashkenas.github.com/docco/).
-
-/** @license VisualSearch.js 0.4.0
- *  (c) 2011 Samuel Clay, @samuelclay, DocumentCloud Inc.
- *  VisualSearch.js may be freely distributed under the MIT license.
- *  For all details and documentation:
- *  http://documentcloud.github.com/visualsearch
- */
-
-(function() {
-
-  var $ = jQuery; // Handle namespaced jQuery
-
-  // Setting up VisualSearch globals. These will eventually be made instance-based.
-  if (!window.VS) window.VS = {};
-  if (!VS.app)    VS.app    = {};
-  if (!VS.ui)     VS.ui     = {};
-  if (!VS.model)  VS.model  = {};
-  if (!VS.utils)  VS.utils  = {};
-
-  // Sets the version for VisualSearch to be used programatically elsewhere.
-  VS.VERSION = '0.5.0';
-
-  VS.VisualSearch = function(options) {
-    var defaults = {
-      container   : '',
-      query       : '',
-      autosearch  : true,
-      unquotable  : [],
-      remainder   : 'text',
-      showFacets  : true,
-      readOnly    : false,
-      callbacks   : {
-        search          : $.noop,
-        focus           : $.noop,
-        blur            : $.noop,
-        facetMatches    : $.noop,
-        valueMatches    : $.noop,
-        clearSearch     : $.noop,
-        removedFacet    : $.noop
-      }
-    };
-    this.options           = _.extend({}, defaults, options);
-    this.options.callbacks = _.extend({}, defaults.callbacks, options.callbacks);
-    
-    VS.app.hotkeys.initialize();
-    this.searchQuery   = new VS.model.SearchQuery();
-    this.searchBox     = new VS.ui.SearchBox({
-        app: this, 
-        showFacets: this.options.showFacets
-    });
-
-    if (options.container) {
-      var searchBox = this.searchBox.render().el;
-      $(this.options.container).html(searchBox);
-    }
-    this.searchBox.value(this.options.query || '');
-
-    // Disable page caching for browsers that incorrectly cache the visual search inputs.
-    // This forces the browser to re-render the page when it is retrieved in its history.
-    $(window).bind('unload', function(e) {});
-
-    // Gives the user back a reference to the `searchBox` so they
-    // can use public methods.
-    return this;
-  };
-
-  // Entry-point used to tie all parts of VisualSearch together. It will either attach
-  // itself to `options.container`, or pass back the `searchBox` so it can be rendered
-  // at will.
-  VS.init = function(options) {
-    return new VS.VisualSearch(options);
-  };
-
-})();
-
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// The search box is responsible for managing the many facet views and input views.
-VS.ui.SearchBox = Backbone.View.extend({
-
-  id  : 'search',
-
-  events : {
-    'click .VS-cancel-search-box' : 'clearSearch',
-    'mousedown .VS-search-box'    : 'maybeFocusSearch',
-    'dblclick .VS-search-box'     : 'highlightSearch',
-    'click .VS-search-box'        : 'maybeTripleClick'
-  },
-
-  // Creating a new SearchBox registers handlers for re-rendering facets when necessary,
-  // as well as handling typing when a facet is selected.
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-
-    this.app = this.options.app;
-    this.flags = {
-      allSelected : false
-    };
-    this.facetViews = [];
-    this.inputViews = [];
-    _.bindAll(this, 'renderFacets', '_maybeDisableFacets', 'disableFacets',
-              'deselectAllFacets', 'addedFacet', 'removedFacet', 'changedFacet');
-    this.app.searchQuery
-            .bind('reset', this.renderFacets)
-            .bind('add', this.addedFacet)
-            .bind('remove', this.removedFacet)
-            .bind('change', this.changedFacet);
-    $(document).bind('keydown', this._maybeDisableFacets);
-  },
-
-  // Renders the search box, but requires placement on the page through `this.el`.
-  render : function() {
-    $(this.el).append(JST['search_box']({
-      readOnly: this.app.options.readOnly
-    }));
-    $(document.body).setMode('no', 'search');
-
-    return this;
-  },
-
-  // # Querying Facets #
-
-  // Either gets a serialized query string or sets the faceted query from a query string.
-  value : function(query) {
-    if (query == null) return this.serialize();
-    return this.setQuery(query);
-  },
-
-  // Uses the VS.app.searchQuery collection to serialize the current query from the various
-  // facets that are in the search box.
-  serialize : function() {
-    var query           = [];
-    var inputViewsCount = this.inputViews.length;
-
-    this.app.searchQuery.each(_.bind(function(facet, i) {
-      query.push(this.inputViews[i].value());
-      query.push(facet.serialize());
-    }, this));
-
-    if (inputViewsCount) {
-      query.push(this.inputViews[inputViewsCount-1].value());
-    }
-
-    return _.compact(query).join(' ');
-  },
-
-  // Returns any facet views that are currently selected. Useful for changing the value
-  // callbacks based on what else is in the search box and which facet is being edited.
-  selected: function() {
-    return _.select(this.facetViews, function(view) {
-      return view.modes.editing == 'is' || view.modes.selected == 'is';
-    });
-  },
-
-  // Similar to `this.selected`, returns any facet models that are currently selected.
-  selectedModels: function() {
-    return _.pluck(this.selected(), 'model');
-  },
-
-  // Takes a query string and uses the SearchParser to parse and render it. Note that
-  // `VS.app.SearchParser` refreshes the `VS.app.searchQuery` collection, which is bound
-  // here to call `this.renderFacets`.
-  setQuery : function(query) {
-    this.currentQuery = query;
-    VS.app.SearchParser.parse(this.app, query);
-  },
-
-  // Returns the position of a facet/input view. Useful when moving between facets.
-  viewPosition : function(view) {
-    var views    = view.type == 'facet' ? this.facetViews : this.inputViews;
-    var position = _.indexOf(views, view);
-    if (position == -1) position = 0;
-    return position;
-  },
-
-  // Used to launch a search. Hitting enter or clicking the search button.
-  searchEvent : function(e) {
-    var query = this.value();
-    this.focusSearch(e);
-    this.value(query);
-    this.app.options.callbacks.search(query, this.app.searchQuery);
-  },
-
-  // # Rendering Facets #
-
-  // Add a new facet. Facet will be focused and ready to accept a value. Can also
-  // specify position, in the case of adding facets from an inbetween input.
-  addFacet : function(category, initialQuery, position) {
-    category     = VS.utils.inflector.trim(category);
-    initialQuery = VS.utils.inflector.trim(initialQuery || '');
-    if (!category) return;
-
-    var model = new VS.model.SearchFacet({
-      category : category,
-      value    : initialQuery || '',
-      app      : this.app
-    });
-    this.app.searchQuery.add(model, {at: position});
-  },
-
-  // Renders a newly added facet, and selects it.
-  addedFacet : function (model) {
-    this.renderFacets();
-    var facetView = _.detect(this.facetViews, function(view) {
-      if (view.model == model) return true;
-    });
-
-    _.defer(function() {
-      facetView.enableEdit();
-    });
-  },
-
-  // Changing a facet programmatically re-renders it.
-  changedFacet: function () {
-    this.renderFacets();
-  },
-
-  // When removing a facet, potentially do something. For now, the adjacent
-  // remaining facet is selected, but this is handled by the facet's view,
-  // since its position is unknown by the time the collection triggers this
-  // remove callback.
-  removedFacet : function (facet, query, options) {
-    this.app.options.callbacks.removedFacet(facet, query, options);
-  },
-
-  // Renders each facet as a searchFacet view.
-  renderFacets : function() {
-    this.facetViews = [];
-    this.inputViews = [];
-
-    this.$('.VS-search-inner').empty();
-
-    this.app.searchQuery.each(_.bind(this.renderFacet, this));
-
-    // Add on an n+1 empty search input on the very end.
-    this.renderSearchInput();
-    this.renderPlaceholder();
-  },
-
-  // Render a single facet, using its category and query value.
-  renderFacet : function(facet, position) {
-    var view = new VS.ui.SearchFacet({
-      app   : this.app,
-      model : facet,
-      order : position
-    });
-
-    // Input first, facet second.
-    this.renderSearchInput();
-    this.facetViews.push(view);
-    this.$('.VS-search-inner').children().eq(position*2).after(view.render().el);
-    $('.search_input').children('textarea').css({'width':0,'height':0});
-    view.calculateSize();
-    _.defer(_.bind(view.calculateSize, view));
-    $('.search_facet_input_container').css({'width': ($('.search_facet').width() - ($('.category').width() + 10) )+'px'})
-    return view;
-  },
-
-  // Render a single input, used to create and autocomplete facets
-  renderSearchInput : function() {
-    var input = new VS.ui.SearchInput({
-      position: this.inputViews.length,
-      app: this.app,
-      showFacets: this.options.showFacets
-    });
-    this.$('.VS-search-inner').append(input.render().el);
-    this.inputViews.push(input);
-  },
-
-  // Handles showing/hiding the placeholder text
-  renderPlaceholder : function() {
-    var $placeholder = this.$('.VS-placeholder');
-    if (this.app.searchQuery.length) {
-      $placeholder.addClass("VS-hidden");
-    } else {
-      $placeholder.removeClass("VS-hidden")
-                  .text(this.app.options.placeholder);
-    }
-  },
-
-  // # Modifying Facets #
-
-  // Clears out the search box. Command+A + delete can trigger this, as can a cancel button.
-  //
-  // If a `clearSearch` callback was provided, the callback is invoked and
-  // provided with a function performs the actual removal of the data.  This
-  // allows third-party developers to either clear data asynchronously, or
-  // prior to performing their custom "clear" logic.
-  clearSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    var actualClearSearch = _.bind(function() {
-      this.disableFacets();
-      this.value('');
-      this.flags.allSelected = false;
-      this.searchEvent(e);
-      this.focusSearch(e);
-    }, this);
-
-    if (this.app.options.callbacks.clearSearch != $.noop) {
-      this.app.options.callbacks.clearSearch(actualClearSearch);
-    } else {
-      actualClearSearch();
-    }
-  },
-
-  // Command+A selects all facets.
-  selectAllFacets : function() {
-    this.flags.allSelected = true;
-
-    $(document).one('click.selectAllFacets', this.deselectAllFacets);
-
-    _.each(this.facetViews, function(facetView, i) {
-      facetView.selectFacet();
-    });
-    _.each(this.inputViews, function(inputView, i) {
-      inputView.selectText();
-    });
-  },
-
-  // Used by facets and input to see if all facets are currently selected.
-  allSelected : function(deselect) {
-    if (deselect) this.flags.allSelected = false;
-    return this.flags.allSelected;
-  },
-
-  // After `selectAllFacets` is engaged, this method is bound to the entire document.
-  // This immediate disables and deselects all facets, but it also checks if the user
-  // has clicked on either a facet or an input, and properly selects the view.
-  deselectAllFacets : function(e) {
-    this.disableFacets();
-
-    if (this.$(e.target).is('.category,textarea')) {
-      var el   = $(e.target).closest('.search_facet,.search_input');
-      var view = _.detect(this.facetViews.concat(this.inputViews), function(v) {
-        return v.el == el[0];
-      });
-      if (view.type == 'facet') {
-        view.selectFacet();
-      } else if (view.type == 'textarea') {
-        _.defer(function() {
-          view.enableEdit(true);
-        });
-      }
-    }
-  },
-
-  // Disables all facets except for the passed in view. Used when switching between
-  // facets, so as not to have to keep state of active facets.
-  disableFacets : function(keepView) {
-    _.each(this.inputViews, function(view) {
-      if (view && view != keepView &&
-          (view.modes.editing == 'is' || view.modes.selected == 'is')) {
-        view.disableEdit();
-      }
-    });
-    _.each(this.facetViews, function(view) {
-      if (view && view != keepView &&
-          (view.modes.editing == 'is' || view.modes.selected == 'is')) {
-        view.disableEdit();
-        view.deselectFacet();
-      }
-    });
-
-    this.flags.allSelected = false;
-    this.removeFocus();
-    $(document).unbind('click.selectAllFacets');
-  },
-
-  // Resize all inputs to account for extra keystrokes which may be changing the facet
-  // width incorrectly. This is a safety check to ensure inputs are correctly sized.
-  resizeFacets : function(view) {
-    _.each(this.facetViews, function(facetView, i) {
-      if (!view || facetView == view) {
-        facetView.resize();
-      }
-    });
-  },
-
-  // Handles keydown events on the document. Used to complete the Cmd+A deletion, and
-  // blurring focus.
-  _maybeDisableFacets : function(e) {
-    if (this.flags.allSelected && VS.app.hotkeys.key(e) == 'backspace') {
-      e.preventDefault();
-      this.clearSearch(e);
-      return false;
-    } else if (this.flags.allSelected && VS.app.hotkeys.printable(e)) {
-      this.clearSearch(e);
-    }
-  },
-
-  // # Focusing Facets #
-
-  // Move focus between facets and inputs. Takes a direction as well as many options
-  // for skipping over inputs and only to facets, placement of cursor position in facet
-  // (i.e. at the end), and selecting the text in the input/facet.
-  focusNextFacet : function(currentView, direction, options) {
-    options = options || {};
-    var viewCount    = this.facetViews.length;
-    var viewPosition = options.viewPosition || this.viewPosition(currentView);
-
-    if (!options.skipToFacet) {
-      // Correct for bouncing between matching text and facet arrays.
-      if (currentView.type == 'text'  && direction > 0) direction -= 1;
-      if (currentView.type == 'facet' && direction < 0) direction += 1;
-    } else if (options.skipToFacet && currentView.type == 'text' &&
-               viewCount == viewPosition && direction >= 0) {
-      // Special case of looping around to a facet from the last search input box.
-      return false;
-    }
-    var view, next = Math.min(viewCount, viewPosition + direction);
-
-    if (currentView.type == 'text') {
-      if (next >= 0 && next < viewCount) {
-        view = this.facetViews[next];
-      } else if (next == viewCount) {
-        view = this.inputViews[this.inputViews.length-1];
-      }
-      if (view && options.selectFacet && view.type == 'facet') {
-        view.selectFacet();
-      } else if (view) {
-        view.enableEdit();
-        view.setCursorAtEnd(direction || options.startAtEnd);
-      }
-    } else if (currentView.type == 'facet') {
-      if (options.skipToFacet) {
-        if (next >= viewCount || next < 0) {
-          view = _.last(this.inputViews);
-          view.enableEdit();
-        } else {
-          view = this.facetViews[next];
-          view.enableEdit();
-          view.setCursorAtEnd(direction || options.startAtEnd);
-        }
-      } else {
-        view = this.inputViews[next];
-        view.enableEdit();
-      }
-    }
-    if (options.selectText) view.selectText();
-    this.resizeFacets();
-
-    return true;
-  },
-
-  maybeFocusSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    if ($(e.target).is('.VS-search-box') ||
-        $(e.target).is('.VS-search-inner') ||
-        e.type == 'keydown') {
-      this.focusSearch(e);
-    }
-  },
-
-  // Bring focus to last input field.
-  focusSearch : function(e, selectText) {
-    if (this.app.options.readOnly) return;
-    var view = this.inputViews[this.inputViews.length-1];
-    view.enableEdit(selectText);
-    if (!selectText) view.setCursorAtEnd(-1);
-    if (e.type == 'keydown') {
-      view.keydown(e);
-      view.box.trigger('keydown');
-    }
-    _.defer(_.bind(function() {
-      if (!this.$('textarea:focus').length) {
-        view.enableEdit(selectText);
-      }
-    }, this));
-  },
-
-  // Double-clicking on the search wrapper should select the existing text in
-  // the last search input. Also start the triple-click timer.
-  highlightSearch : function(e) {
-    if (this.app.options.readOnly) return;
-    if ($(e.target).is('.VS-search-box') ||
-        $(e.target).is('.VS-search-inner') ||
-        e.type == 'keydown') {
-      var lastinput = this.inputViews[this.inputViews.length-1];
-      lastinput.startTripleClickTimer();
-      this.focusSearch(e, true);
-    }
-  },
-
-  maybeTripleClick : function(e) {
-    var lastinput = this.inputViews[this.inputViews.length-1];
-    return lastinput.maybeTripleClick(e);
-  },
-
-  // Used to show the user is focused on some input inside the search box.
-  addFocus : function() {
-    if (this.app.options.readOnly) return;
-    this.app.options.callbacks.focus();
-    this.$('.VS-search-box').addClass('VS-focus');
-  },
-
-  // User is no longer focused on anything in the search box.
-  removeFocus : function() {
-    this.app.options.callbacks.blur();
-    var focus = _.any(this.facetViews.concat(this.inputViews), function(view) {
-      return view.isFocused();
-    });
-    if (!focus) this.$('.VS-search-box').removeClass('VS-focus');
-  },
-
-  // Show a menu which adds pre-defined facets to the search box. This is unused for now.
-  showFacetCategoryMenu : function(e) {
-    e.preventDefault();
-    e.stopPropagation();
-    if (this.facetCategoryMenu && this.facetCategoryMenu.modes.open == 'is') {
-      return this.facetCategoryMenu.close();
-    }
-
-    var items = [
-      {title: 'Account', onClick: _.bind(this.addFacet, this, 'account', '')},
-      {title: 'Project', onClick: _.bind(this.addFacet, this, 'project', '')},
-      {title: 'Filter', onClick: _.bind(this.addFacet, this, 'filter', '')},
-      {title: 'Access', onClick: _.bind(this.addFacet, this, 'access', '')}
-    ];
-
-    var menu = this.facetCategoryMenu || (this.facetCategoryMenu = new dc.ui.Menu({
-      items       : items,
-      standalone  : true
-    }));
-
-    this.$('.VS-icon-search').after(menu.render().open().content);
-    return false;
-  }
-
-});
-
-})();
-
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// This is the visual search facet that holds the category and its autocompleted
-// input field.
-VS.ui.SearchFacet = Backbone.View.extend({
-
-  type : 'facet',
-
-  className : 'search_facet',
-
-  events : {
-    'click .category'           : 'selectFacet',
-    'keydown textarea'             : 'keydown',
-    'mousedown textarea'           : 'enableEdit',
-    'mouseover .VS-icon-cancel' : 'showDelete',
-    'mouseout .VS-icon-cancel'  : 'hideDelete',
-    'click .VS-icon-cancel'     : 'remove'
-  },
-
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-
-    this.flags = {
-      canClose : false
-    };
-    _.bindAll(this, 'set', 'keydown', 'deselectFacet', 'deferDisableEdit');
-    this.app = this.options.app;
-  },
-
-  // Rendering the facet sets up autocompletion, events on blur, and populates
-  // the facet's input with its starting value.
-  render : function() {
-    $(this.el).html(JST['search_facet']({
-      model : this.model,
-      readOnly: this.app.options.readOnly
-    }));
-
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.box = this.$('textarea');
-    this.box.val(this.model.label());
-    this.box.bind('blur', this.deferDisableEdit);
-    // Handle paste events with `propertychange`
-    this.box.bind('textarea propertychange', this.keydown);
-    this.setupAutocomplete();
-    return this;
-  },
-
-  // This method is used to setup the facet's input to auto-grow.
-  // This is defered in the searchBox so it can be attached to the
-  // DOM to get the correct font-size.
-  calculateSize : function() {
-    this.box.autoGrowInput();
-    //this.box.unbind('updated.autogrow');
-    this.box.bind('updated.autogrow', _.bind(this.moveAutocomplete, this));
-  },
-
-  // Forces a recalculation of this facet's input field's value. Called when
-  // the facet is focused, removed, or otherwise modified.
-  resize : function(e) {
-   // this.box.trigger('resize.autogrow', e);
-  },
-
-  // Watches the facet's input field to see if it matches the beginnings of
-  // words in `autocompleteValues`, which is different for every category.
-  // If the value, when selected from the autocompletion menu, is different
-  // than what it was, commit the facet and search for it.
-  setupAutocomplete : function() {
-    this.box.autocomplete({
-      source    : _.bind(this.autocompleteValues, this),
-      minLength : 0,
-      delay     : 0,
-      autoFocus : true,
-      position  : {offset : "0 5"},
-      create    : _.bind(function(e, ui) {
-        $(this.el).find('.ui-autocomplete-input').css('z-index','auto');
-      }, this),
-      select    : _.bind(function(e, ui) {
-        e.preventDefault();
-        var originalValue = this.model.get('value');
-        this.set(ui.item.value);
-        if (originalValue != ui.item.value || this.box.val() != ui.item.value) {
-          if (this.app.options.autosearch) {
-            this.search(e);
-          } else {
-              this.app.searchBox.renderFacets();
-              this.app.searchBox.focusNextFacet(this, 1, {viewPosition: this.options.order});
-          }
-        }
-        return false;
-      }, this),
-      open      : _.bind(function(e, ui) {
-        var box = this.box;
-        this.box.autocomplete('widget').find('.ui-menu-item').each(function() {
-          var $value = $(this),
-              autoCompleteData = $value.data('item.autocomplete') || $value.data('ui-autocomplete-item');
-
-          if (autoCompleteData['value'] == box.val() && box.data('ui-autocomplete').menu.activate) {
-            box.data('ui-autocomplete').menu.activate(new $.Event("mouseover"), $value);
-          }
-        });
-      }, this)
-    });
-    this.box.autocomplete('widget').addClass('VS-interface');
-  },
-
-  // As the facet's input field grows, it may move to the next line in the
-  // search box. `autoGrowInput` triggers an `updated` event on the input
-  // field, which is bound to this method to move the autocomplete menu.
-  moveAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      autocomplete.menu.element.position({
-        my        : "left top",
-        at        : "left bottom",
-        of        : this.box.data('ui-autocomplete').element,
-        collision : "flip",
-        offset    : "0 5"
-      });
-    }
-  },
-
-  // When a user enters a facet and it is being edited, immediately show
-  // the autocomplete menu and size it to match the contents.
-  searchAutocomplete : function(e) {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      var menu = autocomplete.menu.element;
-      autocomplete.search();
-
-      // Resize the menu based on the correctly measured width of what's bigger:
-      // the menu's original size or the menu items' new size.
-      menu.outerWidth(Math.max(
-        menu.width('').outerWidth(),
-        autocomplete.element.outerWidth()
-      ));
-    }
-  },
-
-  // Closes the autocomplete menu. Called on disabling, selecting, deselecting,
-  // and anything else that takes focus out of the facet's input field.
-  closeAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) autocomplete.close();
-  },
-
-  // Search terms used in the autocomplete menu. These are specific to the facet,
-  // and only match for the facet's category. The values are then matched on the
-  // first letter of any word in matches, and finally sorted according to the
-  // value's own category. You can pass `preserveOrder` as an option in the
-  // `facetMatches` callback to skip any further ordering done client-side.
-  autocompleteValues : function(req, resp) {
-    var category = this.model.get('category');
-    var value    = this.model.get('value');
-    var searchTerm = req.term;
-
-    this.app.options.callbacks.valueMatches(category, searchTerm, function(matches, options) {
-      options = options || {};
-      matches = matches || [];
-
-      if (searchTerm && value != searchTerm) {
-        if (options.preserveMatches) {
-          resp(matches);
-        } else {
-          var re = VS.utils.inflector.escapeRegExp(searchTerm || '');
-          var matcher = new RegExp('\\b' + re, 'i');
-          matches = $.grep(matches, function(item) {
-            return matcher.test(item) ||
-                   matcher.test(item.value) ||
-                   matcher.test(item.label);
-        });
-        }
-      }
-
-      if (options.preserveOrder) {
-        resp(matches);
-      } else {
-        resp(_.sortBy(matches, function(match) {
-          if (match == value || match.value == value) return '';
-          else return match;
-        }));
-      }
-    });
-
-  },
-
-  // Sets the facet's model's value.
-  set : function(value) {
-    if (!value) return;
-    this.model.set({'value': value});
-  },
-
-  // Before the searchBox performs a search, we need to close the
-  // autocomplete menu.
-  search : function(e, direction) {
-    if (!direction) direction = 1;
-    this.closeAutocomplete();
-    this.app.searchBox.searchEvent(e);
-    _.defer(_.bind(function() {
-      this.app.searchBox.focusNextFacet(this, direction, {viewPosition: this.options.order});
-    }, this));
-  },
-
-  // Begin editing the facet's input. This is called when the user enters
-  // the input either from another facet or directly clicking on it.
-  //
-  // This method tells all other facets and inputs to disable so it can have
-  // the sole focus. It also prepares the autocompletion menu.
-  enableEdit : function() {
-    if (this.app.options.readOnly) return;
-    if (this.modes.editing != 'is') {
-      this.setMode('is', 'editing');
-      this.deselectFacet();
-      if (this.box.val() == '') {
-        this.box.val(this.model.get('value'));
-      }
-    }
-
-    this.flags.canClose = false;
-    this.app.searchBox.disableFacets(this);
-    this.app.searchBox.addFocus();
-    _.defer(_.bind(function() {
-      this.app.searchBox.addFocus();
-    }, this));
-    this.resize();
-    this.searchAutocomplete();
-    this.box.focus();
-  },
-
-  // When the user blurs the input, they may either be going to another input
-  // or off the search box entirely. If they go to another input, this facet
-  // will be instantly disabled, and the canClose flag will be turned back off.
-  //
-  // However, if the user clicks elsewhere on the page, this method starts a timer
-  // that checks if any of the other inputs are selected or are being edited. If
-  // not, then it can finally close itself and its autocomplete menu.
-  deferDisableEdit : function() {
-    this.flags.canClose = true;
-    _.delay(_.bind(function() {
-      if (this.flags.canClose && !this.box.is(':focus') &&
-          this.modes.editing == 'is' && this.modes.selected != 'is') {
-        this.disableEdit();
-      }
-    }, this), 250);
-  },
-
-  // Called either by other facets receiving focus or by the timer in `deferDisableEdit`,
-  // this method will turn off the facet, remove any text selection, and close
-  // the autocomplete menu.
-  disableEdit : function() {
-    var newFacetQuery = VS.utils.inflector.trim(this.box.val());
-    if (newFacetQuery != this.model.get('value')) {
-      this.set(newFacetQuery);
-    }
-    this.flags.canClose = false;
-    this.box.selectRange(0, 0);
-    this.box.blur();
-    this.setMode('not', 'editing');
-    this.closeAutocomplete();
-    this.app.searchBox.removeFocus();
-  },
-
-  // Selects the facet, which blurs the facet's input and highlights the facet.
-  // If this is the only facet being selected (and not part of a select all event),
-  // we attach a mouse/keyboard watcher to check if the next action by the user
-  // should delete this facet or just deselect it.
-  selectFacet : function(e) {
-    if (e) e.preventDefault();
-    if (this.app.options.readOnly) return;
-    var allSelected = this.app.searchBox.allSelected();
-    if (this.modes.selected == 'is') return;
-
-    if (this.box.is(':focus')) {
-      this.box.setCursorPosition(0);
-      this.box.blur();
-    }
-
-    this.flags.canClose = false;
-    this.closeAutocomplete();
-    this.setMode('is', 'selected');
-    this.setMode('not', 'editing');
-    if (!allSelected || e) {
-      $(document).unbind('keydown.facet', this.keydown);
-      $(document).unbind('click.facet', this.deselectFacet);
-      _.defer(_.bind(function() {
-        $(document).unbind('keydown.facet').bind('keydown.facet', this.keydown);
-        $(document).unbind('click.facet').one('click.facet', this.deselectFacet);
-      }, this));
-      this.app.searchBox.disableFacets(this);
-      this.app.searchBox.addFocus();
-    }
-    return false;
-  },
-
-  // Turns off highlighting on the facet. Called in a variety of ways, this
-  // only deselects the facet if it is selected, and then cleans up the
-  // keyboard/mouse watchers that were created when the facet was first
-  // selected.
-  deselectFacet : function(e) {
-    if (e) e.preventDefault();
-    if (this.modes.selected == 'is') {
-      this.setMode('not', 'selected');
-      this.closeAutocomplete();
-      this.app.searchBox.removeFocus();
-    }
-    $(document).unbind('keydown.facet', this.keydown);
-    $(document).unbind('click.facet', this.deselectFacet);
-    return false;
-  },
-
-  // Is the user currently focused in this facet's input field?
-  isFocused : function() {
-    return this.box.is(':focus');
-  },
-
-  // Hovering over the delete button styles the facet so the user knows that
-  // the delete button will kill the entire facet.
-  showDelete : function() {
-    $(this.el).addClass('search_facet_maybe_delete');
-  },
-
-  // On `mouseout`, the user is no longer hovering on the delete button.
-  hideDelete : function() {
-    $(this.el).removeClass('search_facet_maybe_delete');
-  },
-
-  // When switching between facets, depending on the direction the cursor is
-  // coming from, the cursor in this facet's input field should match the original
-  // direction.
-  setCursorAtEnd : function(direction) {
-    if (direction == -1) {
-      this.box.setCursorPosition(this.box.val().length);
-    } else {
-      this.box.setCursorPosition(0);
-    }
-  },
-
-  // Deletes the facet and sends the cursor over to the nearest input field.
-  remove : function(e) {
-    var committed = this.model.get('value');
-    this.deselectFacet();
-    this.disableEdit();
-    this.app.searchQuery.remove(this.model);
-    if (committed && this.app.options.autosearch) {
-      this.search(e, -1);
-    } else {
-      this.app.searchBox.renderFacets();
-      this.app.searchBox.focusNextFacet(this, -1, {viewPosition: this.options.order});
-    }
-  },
-
-  // Selects the text in the facet's input field. When the user tabs between
-  // facets, convention is to highlight the entire field.
-  selectText: function() {
-    this.box.selectRange(0, this.box.val().length);
-  },
-
-  // Handles all keyboard inputs when in the facet's input field. This checks
-  // for movement between facets and inputs, entering a new value that needs
-  // to be autocompleted, as well as the removal of this facet.
-  keydown : function(e) {
-    var key = VS.app.hotkeys.key(e);
-
-    if (key == 'enter' && this.box.val()) {
-      this.disableEdit();
-      this.search(e);
-    } else if (key == 'left') {
-      if (this.modes.selected == 'is') {
-        this.deselectFacet();
-        this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      } else if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        this.selectFacet();
-      }
-    } else if (key == 'right') {
-      if (this.modes.selected == 'is') {
-        e.preventDefault();
-        this.deselectFacet();
-        this.setCursorAtEnd(0);
-        this.enableEdit();
-      } else if (this.box.getCursorPosition() == this.box.val().length) {
-        e.preventDefault();
-        this.disableEdit();
-        this.app.searchBox.focusNextFacet(this, 1);
-      }
-    } else if (VS.app.hotkeys.shift && key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, -1, {
-        startAtEnd  : -1,
-        skipToFacet : true,
-        selectText  : true
-      });
-    } else if (key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, 1, {
-        skipToFacet : true,
-        selectText  : true
-      });
-    } else if (VS.app.hotkeys.command && (e.which == 97 || e.which == 65)) {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    } else if (VS.app.hotkeys.printable(e) && this.modes.selected == 'is') {
-      this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      this.remove(e);
-    } else if (key == 'backspace') {
-       $(document).on('keydown.backspace', function(e) {
-          if (VS.app.hotkeys.key(e) === 'backspace') {
-             e.preventDefault();
-          }
-       });
-
-       $(document).on('keyup.backspace', function(e) {
-          $(document).off('.backspace');
-       });
-
-      if (this.modes.selected == 'is') {
-        e.preventDefault();
-        this.remove(e);
-      } else if (this.box.getCursorPosition() == 0 &&
-                 !this.box.getSelection().length) {
-        e.preventDefault();
-        this.selectFacet();
-      }
-       e.stopPropagation();
-    }
-
-    // Handle paste events
-    if (e.which == null) {
-        // this.searchAutocomplete(e);
-        _.defer(_.bind(this.resize, this, e));
-    } else {
-      this.resize(e);
-    }
-  }
-
-});
-
-})();
-
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// This is the visual search input that is responsible for creating new facets.
-// There is one input placed in between all facets.
-VS.ui.SearchInput = Backbone.View.extend({
-
-  type : 'text',
-
-  className : 'search_input ui-menu',
-
-  events : {
-    'keypress textarea'  : 'keypress',
-    'keydown textarea'   : 'keydown',
-    'keyup textarea'     : 'keyup',
-    'click textarea'     : 'maybeTripleClick',
-    'dblclick textarea'  : 'startTripleClickTimer'
-  },
-
-  initialize : function(options) {
-    this.options = _.extend({}, this.options, options);
-    
-    this.app = this.options.app;
-    this.flags = {
-      canClose : false
-    };
-    _.bindAll(this, 'removeFocus', 'addFocus', 'moveAutocomplete', 'deferDisableEdit');
-  },
-
-  // Rendering the input sets up autocomplete, events on focusing and blurring
-  // the input, and the auto-grow of the input.
-  render : function() {
-    $(this.el).html(JST['search_input']({
-      readOnly: this.app.options.readOnly
-    }));
-
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.box = this.$('textarea');
-    this.box.autoGrowInput();
-    this.box.bind('updated.autogrow', this.moveAutocomplete);
-    this.box.bind('blur',  this.deferDisableEdit);
-    this.box.bind('focus', this.addFocus);
-    this.setupAutocomplete();
-
-    return this;
-  },
-
-  // Watches the input and presents an autocompleted menu, taking the
-  // remainder of the input field and adding a separate facet for it.
-  //
-  // See `addTextFacetRemainder` for explanation on how the remainder works.
-  setupAutocomplete : function() {
-    this.box.autocomplete({
-      appendTo :(this.options.app.options.container) ? this.options.app.options.container : null,
-      minLength : this.options.showFacets ? 0 : 1,
-      delay     : 50,
-      autoFocus : true,
-      position  : {offset : "0 -1"},
-      source    : _.bind(this.autocompleteValues, this),
-      // Prevent changing the input value on focus of an option
-      focus     : function() { return false; },
-      create    : _.bind(function(e, ui) {
-        $(this.el).find('.ui-autocomplete-input').css('z-index','auto');
-      }, this),
-      select    : _.bind(function(e, ui) {
-        e.preventDefault();
-        // stopPropogation does weird things in jquery-ui 1.9
-        // e.stopPropagation();
-        var remainder = this.addTextFacetRemainder(ui.item.label || ui.item.value);
-        var position  = this.options.position + (remainder ? 1 : 0);
-        this.app.searchBox.addFacet(ui.item instanceof String ? ui.item : ui.item.value, '', position);
-        return false;
-      }, this)
-    });
-
-    // Renders the results grouped by the categories they belong to.
-    this.box.data('ui-autocomplete')._renderMenu = function(ul, items) {
-      var category = '';
-      _.each(items, _.bind(function(item, i) {
-        if (item.category && item.category != category) {
-          ul.append('<li class="ui-autocomplete-category">'+item.category+'</li>');
-          category = item.category;
-        }
-
-        if(this._renderItemData) {
-          this._renderItemData(ul, item);
-        } else {
-          this._renderItem(ul, item);
-        }
-
-      }, this));
-    };
-
-    this.box.autocomplete('widget').addClass('VS-interface');
-  },
-
-  // Search terms used in the autocomplete menu. The values are matched on the
-  // first letter of any word in matches, and finally sorted according to the
-  // value's own category. You can pass `preserveOrder` as an option in the
-  // `facetMatches` callback to skip any further ordering done client-side.
-  autocompleteValues : function(req, resp) {
-    var searchTerm = req.term;
-    var lastWord   = searchTerm.match(/\w+\*?$/); // Autocomplete only last word.
-    var re         = VS.utils.inflector.escapeRegExp(lastWord && lastWord[0] || '');
-    this.app.options.callbacks.facetMatches(function(prefixes, options) {
-      options = options || {};
-      prefixes = prefixes || [];
-
-      // Only match from the beginning of the word.
-      var matcher    = new RegExp('^' + re, 'i');
-      var matches    = $.grep(prefixes, function(item) {
-        return item && matcher.test(item.label || item);
-      });
-
-      if (options.preserveOrder) {
-        resp(matches);
-      } else {
-        resp(_.sortBy(matches, function(match) {
-          if (match.label) return match.category + '-' + match.label;
-          else             return match;
-        }));
-      }
-    });
-
-  },
-
-  // Closes the autocomplete menu. Called on disabling, selecting, deselecting,
-  // and anything else that takes focus out of the facet's input field.
-  closeAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) autocomplete.close();
-  },
-
-  // As the input field grows, it may move to the next line in the
-  // search box. `autoGrowInput` triggers an `updated` event on the input
-  // field, which is bound to this method to move the autocomplete menu.
-  moveAutocomplete : function() {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      autocomplete.menu.element.position({
-        my        : "left top",
-        at        : "left bottom",
-        of        : this.box.data('ui-autocomplete').element,
-        collision : "none",
-        offset    : '0 -1'
-      });
-    }
-  },
-
-  // When a user enters a facet and it is being edited, immediately show
-  // the autocomplete menu and size it to match the contents.
-  searchAutocomplete : function(e) {
-    var autocomplete = this.box.data('ui-autocomplete');
-    if (autocomplete) {
-      var menu = autocomplete.menu.element;
-      autocomplete.search();
-
-      // Resize the menu based on the correctly measured width of what's bigger:
-      // the menu's original size or the menu items' new size.
-      menu.outerWidth(Math.max(
-        menu.width('').outerWidth(),
-        autocomplete.element.outerWidth()
-      ));
-    }
-  },
-
-  // If a user searches for "word word category", the category would be
-  // matched and autocompleted, and when selected, the "word word" would
-  // also be caught as the remainder and then added in its own facet.
-  addTextFacetRemainder : function(facetValue) {
-    var boxValue = this.box.val();
-    var lastWord = boxValue.match(/\b(\w+)$/);
-
-    if (!lastWord) {
-      return '';
-    }
-
-    var matcher = new RegExp(lastWord[0], "i");
-    if (facetValue.search(matcher) == 0) {
-      boxValue = boxValue.replace(/\b(\w+)$/, '');
-    }
-    boxValue = boxValue.replace('^\s+|\s+$', '');
-
-    if (boxValue) {
-      this.app.searchBox.addFacet(this.app.options.remainder, boxValue, this.options.position);
-    }
-
-    return boxValue;
-  },
-
-  // Directly called to focus the input. This is different from `addFocus`
-  // because this is not called by a focus event. This instead calls a
-  // focus event causing the input to become focused.
-  enableEdit : function(selectText) {
-    this.addFocus();
-    if (selectText) {
-      this.selectText();
-    }
-    this.box.focus();
-  },
-
-  // Event called on user focus on the input. Tells all other input and facets
-  // to give up focus, and starts revving the autocomplete.
-  addFocus : function() {
-    this.flags.canClose = false;
-    if (!this.app.searchBox.allSelected()) {
-      this.app.searchBox.disableFacets(this);
-    }
-    this.app.searchBox.addFocus();
-    this.setMode('is', 'editing');
-    this.setMode('not', 'selected');
-    if (!this.app.searchBox.allSelected()) {
-        this.searchAutocomplete();
-    }
-  },
-
-  // Directly called to blur the input. This is different from `removeFocus`
-  // because this is not called by a blur event.
-  disableEdit : function() {
-    this.box.blur();
-    this.removeFocus();
-  },
-
-  // Event called when user blur's the input, either through the keyboard tabbing
-  // away or the mouse clicking off. Cleans up
-  removeFocus : function() {
-    this.flags.canClose = false;
-    this.app.searchBox.removeFocus();
-    this.setMode('not', 'editing');
-    this.setMode('not', 'selected');
-    this.closeAutocomplete();
-  },
-
-  // When the user blurs the input, they may either be going to another input
-  // or off the search box entirely. If they go to another input, this facet
-  // will be instantly disabled, and the canClose flag will be turned back off.
-  //
-  // However, if the user clicks elsewhere on the page, this method starts a timer
-  // that checks if any of the other inputs are selected or are being edited. If
-  // not, then it can finally close itself and its autocomplete menu.
-  deferDisableEdit : function() {
-    this.flags.canClose = true;
-    _.delay(_.bind(function() {
-      if (this.flags.canClose &&
-          !this.box.is(':focus') &&
-          this.modes.editing == 'is') {
-        this.disableEdit();
-      }
-    }, this), 250);
-  },
-
-  // Starts a timer that will cause a triple-click, which highlights all facets.
-  startTripleClickTimer : function() {
-    this.tripleClickTimer = setTimeout(_.bind(function() {
-      this.tripleClickTimer = null;
-    }, this), 500);
-  },
-
-  // Event on click that checks if a triple click is in play. The
-  // `tripleClickTimer` is counting down, ready to be engaged and intercept
-  // the click event to force a select all instead.
-  maybeTripleClick : function(e) {
-    if (this.app.options.readOnly) return;
-    if (!!this.tripleClickTimer) {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    }
-  },
-
-  // Is the user currently focused in the input field?
-  isFocused : function() {
-    return this.box.is(':focus');
-  },
-
-  // When serializing the facets, the inputs need to also have their values represented,
-  // in case they contain text that is not yet faceted (but will be once the search is
-  // completed).
-  value : function() {
-    return this.box.val();
-  },
-
-  // When switching between facets and inputs, depending on the direction the cursor
-  // is coming from, the cursor in this facet's input field should match the original
-  // direction.
-  setCursorAtEnd : function(direction) {
-    if (direction == -1) {
-      this.box.setCursorPosition(this.box.val().length);
-    } else {
-      this.box.setCursorPosition(0);
-    }
-  },
-
-  // Selects the entire range of text in the input. Useful when tabbing between inputs
-  // and facets.
-  selectText : function() {
-    this.box.selectRange(0, this.box.val().length);
-    if (!this.app.searchBox.allSelected()) {
-      this.box.focus();
-    } else {
-      this.setMode('is', 'selected');
-    }
-  },
-
-  // Before the searchBox performs a search, we need to close the
-  // autocomplete menu.
-  search : function(e, direction) {
-    if (!direction) direction = 0;
-    this.closeAutocomplete();
-    this.app.searchBox.searchEvent(e);
-    _.defer(_.bind(function() {
-      this.app.searchBox.focusNextFacet(this, direction);
-    }, this));
-  },
-
-  // Callback fired on key press in the search box. We search when they hit return.
-  keypress : function(e) {
-    var key = VS.app.hotkeys.key(e);
-    if (key == 'enter') {
-      return this.search(e, 100);
-    } else if (VS.app.hotkeys.colon(e)) {
-     // this.box.trigger('resize.autogrow', e);
-      var query    = this.box.val();
-      var prefixes = [];
-      this.app.options.callbacks.facetMatches(function(p) {
-          prefixes = p;
-      });
-      var labels   = _.map(prefixes, function(prefix) {
-        if (prefix.label) return prefix.label;
-        else              return prefix;
-      });
-      if (_.contains(labels, query)) {
-        e.preventDefault();
-        var remainder = this.addTextFacetRemainder(query);
-        var position  = this.options.position + (remainder?1:0);
-        this.app.searchBox.addFacet(query, '', position);
-        return false;
-      }
-    } else if (key == 'backspace') {
-      if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        e.preventDefault();
-        e.stopPropagation();
-        e.stopImmediatePropagation();
-        this.app.searchBox.resizeFacets();
-        return false;
-      }
-    }
-  },
-
-  // Handles all keyboard inputs when in the input field. This checks
-  // for movement between facets and inputs, entering a new value that needs
-  // to be autocompleted, as well as stepping between facets with backspace.
-  keydown : function(e) {
-    var key = VS.app.hotkeys.key(e);
-
-    if (key == 'left') {
-      if (this.box.getCursorPosition() == 0) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, -1, {startAtEnd: -1});
-      }
-    } else if (key == 'right') {
-      if (this.box.getCursorPosition() == this.box.val().length) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, 1, {selectFacet: true});
-      }
-    } else if (VS.app.hotkeys.shift && key == 'tab') {
-      e.preventDefault();
-      this.app.searchBox.focusNextFacet(this, -1, {selectText: true});
-    } else if (key == 'tab') {
-      var value = this.box.val();
-      if (value.length) {
-        e.preventDefault();
-        var remainder = this.addTextFacetRemainder(value);
-        var position  = this.options.position + (remainder?1:0);
-        if (value != remainder) {
-            this.app.searchBox.addFacet(value, '', position);
-        }
-      } else {
-        var foundFacet = this.app.searchBox.focusNextFacet(this, 0, {
-          skipToFacet: true,
-          selectText: true
-        });
-        if (foundFacet) {
-          e.preventDefault();
-        }
-      }
-    } else if (VS.app.hotkeys.command &&
-               String.fromCharCode(e.which).toLowerCase() == 'a') {
-      e.preventDefault();
-      this.app.searchBox.selectAllFacets();
-      return false;
-    } else if (key == 'backspace' && !this.app.searchBox.allSelected()) {
-      if (this.box.getCursorPosition() == 0 && !this.box.getSelection().length) {
-        e.preventDefault();
-        this.app.searchBox.focusNextFacet(this, -1, {backspace: true});
-        return false;
-      }
-    } else if (key == 'end') {
-      var view = this.app.searchBox.inputViews[this.app.searchBox.inputViews.length-1];
-      view.setCursorAtEnd(-1);
-    } else if (key == 'home') {
-      var view = this.app.searchBox.inputViews[0];
-      view.setCursorAtEnd(-1);
-    }
-
-  },
-
-  // We should get the value of an input should be done
-  // on keyup since keydown gets the previous value and not the current one
-  keyup : function(e) {
-    //this.box.trigger('resize.autogrow', e);
-  }
-
-});
-
-})();
-
-(function(){
-
-  var $ = jQuery; // Handle namespaced jQuery
-
-  // Makes the view enter a mode. Modes have both a 'mode' and a 'group',
-  // and are mutually exclusive with any other modes in the same group.
-  // Setting will update the view's modes hash, as well as set an HTML class
-  // of *[mode]_[group]* on the view's element. Convenient way to swap styles
-  // and behavior.
-  Backbone.View.prototype.setMode = function(mode, group) {
-    this.modes || (this.modes = {});
-    if (this.modes[group] === mode) return;
-    $(this.el).setMode(mode, group);
-    this.modes[group] = mode;
-  };
-
-})();
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// DocumentCloud workspace hotkeys. To tell if a key is currently being pressed,
-// just ask `VS.app.hotkeys.[key]` on `keypress`, or ask `VS.app.hotkeys.key(e)`
-// on `keydown`.
-//
-// For the most headache-free way to use this utility, check modifier keys,
-// like shift and command, with `VS.app.hotkeys.shift`, and check every other
-// key with `VS.app.hotkeys.key(e) == 'key_name'`.
-VS.app.hotkeys = {
-
-  // Keys that will be mapped to the `hotkeys` namespace.
-  KEYS: {
-    '16':  'shift',
-    '17':  'command',
-    '91':  'command',
-    '93':  'command',
-    '224': 'command',
-    '13':  'enter',
-    '37':  'left',
-    '38':  'upArrow',
-    '39':  'right',
-    '40':  'downArrow',
-    '46':  'delete',
-    '8':   'backspace',
-    '35':  'end',
-    '36':  'home',
-    '9':   'tab',
-    '188': 'comma'
-  },
-
-  // Binds global keydown and keyup events to listen for keys that match `this.KEYS`.
-  initialize : function() {
-    _.bindAll(this, 'down', 'up', 'blur');
-    $(document).bind('keydown', this.down);
-    $(document).bind('keyup', this.up);
-    $(window).bind('blur', this.blur);
-  },
-
-  // On `keydown`, turn on all keys that match.
-  down : function(e) {
-    var key = this.KEYS[e.which];
-    if (key) this[key] = true;
-  },
-
-  // On `keyup`, turn off all keys that match.
-  up : function(e) {
-    var key = this.KEYS[e.which];
-    if (key) this[key] = false;
-  },
-
-  // If an input is blurred, all keys need to be turned off, since they are no longer
-  // able to modify the document.
-  blur : function(e) {
-    for (var key in this.KEYS) this[this.KEYS[key]] = false;
-  },
-
-  // Check a key from an event and return the common english name.
-  key : function(e) {
-    return this.KEYS[e.which];
-  },
-
-  // Colon is special, since the value is different between browsers.
-  colon : function(e) {
-    var charCode = e.which;
-    return charCode && String.fromCharCode(charCode) == ":";
-  },
-
-  // Check a key from an event and match it against any known characters.
-  // The `keyCode` is different depending on the event type: `keydown` vs. `keypress`.
-  //
-  // These were determined by looping through every `keyCode` and `charCode` that
-  // resulted from `keydown` and `keypress` events and counting what was printable.
-  printable : function(e) {
-    var code = e.which;
-    if (e.type == 'keydown') {
-      if (code == 32 ||                      // space
-          (code >= 48 && code <= 90) ||      // 0-1a-z
-          (code >= 96 && code <= 111) ||     // 0-9+-/*.
-          (code >= 186 && code <= 192) ||    // ;=,-./^
-          (code >= 219 && code <= 222)) {    // (\)'
-        return true;
-      }
-    } else {
-      // [space]!"#$%&'()*+,-.0-9:;<=>?@A-Z[\]^_`a-z{|} and unicode characters
-      if ((code >= 32 && code <= 126)  ||
-          (code >= 160 && code <= 500) ||
-          (String.fromCharCode(code) == ":")) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-};
-
-})();
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Naive English transformations on words. Only used for a few transformations 
-// in VisualSearch.js.
-VS.utils.inflector = {
-
-  // Delegate to the ECMA5 String.prototype.trim function, if available.
-  trim : function(s) {
-    return s.trim ? s.trim() : s.replace(/^\s+|\s+$/g, '');
-  },
-  
-  // Escape strings that are going to be used in a regex. Escapes punctuation
-  // that would be incorrect in a regex.
-  escapeRegExp : function(s) {
-    return s.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1');
-  }
-};
-
-})();
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-$.fn.extend({
-
-  // Makes the selector enter a mode. Modes have both a 'mode' and a 'group',
-  // and are mutually exclusive with any other modes in the same group.
-  // Setting will update the view's modes hash, as well as set an HTML class
-  // of *[mode]_[group]* on the view's element. Convenient way to swap styles
-  // and behavior.
-  setMode : function(state, group) {
-    group    = group || 'mode';
-    var re   = new RegExp("\\w+_" + group + "(\\s|$)", 'g');
-    var mode = (state === null) ? "" : state + "_" + group;
-    this.each(function() {
-      this.className = (this.className.replace(re, '')+' '+mode)
-                       .replace(/\s\s/g, ' ');
-    });
-    return mode;
-  },
-
-  // When attached to an input element, this will cause the width of the input
-  // to match its contents. This calculates the width of the contents of the input
-  // by measuring a hidden shadow div that should match the styling of the input.
-  autoGrowInput: function() {
-    return this.each(function() {
-      var $input  = $(this);
-      var $tester = $('<div />').css({
-        opacity     : 0,
-        top         : -9999,
-        left        : -9999,
-        position    : 'absolute',
-        whiteSpace  : 'nowrap'
-      }).addClass('VS-input-width-tester').addClass('VS-interface');
-
-      // Watch for input value changes on all of these events. `resize`
-      // event is called explicitly when the input has been changed without
-      // a single keypress.
-      var events = {};
-      $input.next('.VS-input-width-tester').remove();
-      $input.after($tester);
-      $input.unbind(events).bind(events, function(e, realEvent) {
-        if (realEvent) e = realEvent;
-        var value = $input.val();
-
-        // Watching for the backspace key is tricky because it may not
-        // actually be deleting the character, but instead the key gets
-        // redirected to move the cursor from facet to facet.
-        if (VS.app.hotkeys.key(e) == 'backspace') {
-          var position = $input.getCursorPosition();
-          if (position > 0) value = value.slice(0, position-1) +
-                                    value.slice(position, value.length);
-        } else if (VS.app.hotkeys.printable(e) &&
-                   !VS.app.hotkeys.command) {
-          value += String.fromCharCode(e.which);
-        }
-        value = value.replace(/&/g, '&amp;')
-                     .replace(/\s/g,'&nbsp;')
-                     .replace(/</g, '&lt;')
-                     .replace(/>/g, '&gt;');
-
-        $tester.html(value);
-
-        $input.width($tester.width() + 10 + parseInt($input.css('min-width')));
-        //$input.trigger('updated.autogrow');
-      });
-
-      // Sets the width of the input on initialization.
-      //$input.trigger('resize.autogrow');
-    });
-  },
-
-
-  // Cross-browser method used for calculating where the cursor is in an
-  // input field.
-  getCursorPosition: function() {
-    var position = 0;
-    var input    = this.get(0);
-
-    if (document.selection) { // IE
-      input.focus();
-      var sel    = document.selection.createRange();
-      var selLen = document.selection.createRange().text.length;
-      sel.moveStart('character', -input.value.length);
-      position   = sel.text.length - selLen;
-    } else if (input && $(input).is(':visible') &&
-               input.selectionStart != null) { // Firefox/Safari
-      position = input.selectionStart;
-    }
-
-    return position;
-  },
-
-  // A simple proxy for `selectRange` that sets the cursor position in an
-  // input field.
-  setCursorPosition: function(position) {
-    return this.each(function() {
-      return $(this).selectRange(position, position);
-    });
-  },
-
-  // Cross-browser way to select text in an input field.
-  selectRange: function(start, end) {
-    return this.filter(':visible').each(function() {
-      if (this.setSelectionRange) { // FF/Webkit
-        this.focus();
-        this.setSelectionRange(start, end);
-      } else if (this.createTextRange) { // IE
-        var range = this.createTextRange();
-        range.collapse(true);
-        range.moveEnd('character', end);
-        range.moveStart('character', start);
-        if (end - start >= 0) range.select();
-      }
-    });
-  },
-
-  // Returns an object that contains the text selection range values for
-  // an input field.
-  getSelection: function() {
-    var input = this[0];
-
-    if (input.selectionStart != null) { // FF/Webkit
-      var start = input.selectionStart;
-      var end   = input.selectionEnd;
-      return {
-        start   : start,
-        end     : end,
-        length  : end-start,
-        text    : input.value.substr(start, end-start)
-      };
-    } else if (document.selection) { // IE
-      var range = document.selection.createRange();
-      if (range) {
-        var textRange = input.createTextRange();
-        var copyRange = textRange.duplicate();
-        textRange.moveToBookmark(range.getBookmark());
-        copyRange.setEndPoint('EndToStart', textRange);
-        var start = copyRange.text.length;
-        var end   = start + range.text.length;
-        return {
-          start   : start,
-          end     : end,
-          length  : end-start,
-          text    : range.text
-        };
-      }
-    }
-    return {start: 0, end: 0, length: 0};
-  }
-
-});
-
-// Debugging in Internet Explorer. This allows you to use 
-// `console.log(['message', var1, var2, ...])`. Just remove the `false` and
-// add your console.logs. This will automatically stringify objects using
-// `JSON.stringify', so you can read what's going out. Think of this as a
-// *Diet Firebug Lite Zero with Lemon*.
-if (false) {
-  window.console = {};
-  var _$ied;
-  window.console.log = function(msg) {
-    if (_.isArray(msg)) {
-      var message = msg[0];
-      var vars = _.map(msg.slice(1), function(arg) {
-        return JSON.stringify(arg);
-      }).join(' - ');
-    }
-    if(!_$ied){
-      _$ied = $('<div><ol></ol></div>').css({
-        'position': 'fixed',
-        'bottom': 10,
-        'left': 10,
-        'zIndex': 20000,
-        'width': $('body').width() - 80,
-        'border': '1px solid #000',
-        'padding': '10px',
-        'backgroundColor': '#fff',
-        'fontFamily': 'arial,helvetica,sans-serif',
-        'fontSize': '11px'
-      });
-      $('body').append(_$ied);
-    }
-    var $message = $('<li>'+message+' - '+vars+'</li>').css({
-      'borderBottom': '1px solid #999999'
-    });
-    _$ied.find('ol').append($message);
-    _.delay(function() {
-      $message.fadeOut(500);
-    }, 5000);
-  };
-
-}
-
-})();
-
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Used to extract keywords and facets from the free text search.
-var QUOTES_RE   = "('[^']+'|\"[^\"]+\")";
-var FREETEXT_RE = "('[^']+'|\"[^\"]+\"|[^'\"\\s]\\S*)";
-var CATEGORY_RE = FREETEXT_RE +                     ':\\s*';
-VS.app.SearchParser = {
-
-  // Matches `category: "free text"`, with and without quotes.
-  ALL_FIELDS : new RegExp(CATEGORY_RE + FREETEXT_RE, 'g'),
-
-  // Matches a single category without the text. Used to correctly extract facets.
-  CATEGORY   : new RegExp(CATEGORY_RE),
-
-  // Called to parse a query into a collection of `SearchFacet` models.
-  parse : function(instance, query) {
-    var searchFacets = this._extractAllFacets(instance, query);
-    instance.searchQuery.reset(searchFacets);
-    return searchFacets;
-  },
-
-  // Walks the query and extracts facets, categories, and free text.
-  _extractAllFacets : function(instance, query) {
-    var facets = [];
-    var originalQuery = query;
-    while (query) {
-      var category, value;
-      originalQuery = query;
-      var field = this._extractNextField(query);
-      if (!field) {
-        category = instance.options.remainder;
-        value    = this._extractSearchText(query);
-        query    = VS.utils.inflector.trim(query.replace(value, ''));
-      } else if (field.indexOf(':') != -1) {
-        category = field.match(this.CATEGORY)[1].replace(/(^['"]|['"]$)/g, '');
-        value    = field.replace(this.CATEGORY, '').replace(/(^['"]|['"]$)/g, '');
-        query    = VS.utils.inflector.trim(query.replace(field, ''));
-      } else if (field.indexOf(':') == -1) {
-        category = instance.options.remainder;
-        value    = field;
-        query    = VS.utils.inflector.trim(query.replace(value, ''));
-      }
-
-      if (category && value) {
-          var searchFacet = new VS.model.SearchFacet({
-            category : category,
-            value    : VS.utils.inflector.trim(value),
-            app      : instance
-          });
-          facets.push(searchFacet);
-      }
-      if (originalQuery == query) break;
-    }
-
-    return facets;
-  },
-
-  // Extracts the first field found, capturing any free text that comes
-  // before the category.
-  _extractNextField : function(query) {
-    var textRe = new RegExp('^\\s*(\\S+)\\s+(?=' + QUOTES_RE + FREETEXT_RE + ')');
-    var textMatch = query.match(textRe);
-    if (textMatch && textMatch.length >= 1) {
-      return textMatch[1];
-    } else {
-      return this._extractFirstField(query);
-    }
-  },
-
-  // If there is no free text before the facet, extract the category and value.
-  _extractFirstField : function(query) {
-    var fields = query.match(this.ALL_FIELDS);
-    return fields && fields.length && fields[0];
-  },
-
-  // If the found match is not a category and facet, extract the trimmed free text.
-  _extractSearchText : function(query) {
-    query = query || '';
-    var text = VS.utils.inflector.trim(query.replace(this.ALL_FIELDS, ''));
-    return text;
-  }
-
-};
-
-})();
-
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// The model that holds individual search facets and their categories.
-// Held in a collection by `VS.app.searchQuery`.
-VS.model.SearchFacet = Backbone.Model.extend({
-
-  // Extract the category and value and serialize it in preparation for
-  // turning the entire searchBox into a search query that can be sent
-  // to the server for parsing and searching.
-  serialize : function() {
-    var category = this.quoteCategory(this.get('category'));
-    var value    = VS.utils.inflector.trim(this.get('value'));
-    var remainder = this.get("app").options.remainder;
-
-    if (!value) return '';
-
-    if (!_.contains(this.get("app").options.unquotable || [], category) && category != remainder) {
-      value = this.quoteValue(value);
-    }
-
-    if (category != remainder) {
-      category = category + ': ';
-    } else {
-      category = "";
-    }
-    return category + value;
-  },
-  
-  // Wrap categories that have spaces or any kind of quote with opposite matching
-  // quotes to preserve the complex category during serialization.
-  quoteCategory : function(category) {
-    var hasDoubleQuote = (/"/).test(category);
-    var hasSingleQuote = (/'/).test(category);
-    var hasSpace       = (/\s/).test(category);
-    
-    if (hasDoubleQuote && !hasSingleQuote) {
-      return "'" + category + "'";
-    } else if (hasSpace || (hasSingleQuote && !hasDoubleQuote)) {
-      return '"' + category + '"';
-    } else {
-      return category;
-    }
-  },
-  
-  // Wrap values that have quotes in opposite matching quotes. If a value has
-  // both single and double quotes, just use the double quotes.
-  quoteValue : function(value) {
-    var hasDoubleQuote = (/"/).test(value);
-    var hasSingleQuote = (/'/).test(value);
-    
-    if (hasDoubleQuote && !hasSingleQuote) {
-      return "'" + value + "'";
-    } else {
-      return '"' + value + '"';
-    }
-  },
-  
-  // If provided, use a custom label instead of the raw value.
-  label : function() {
-      return this.get('label') || this.get('value');
-  }
-
-});
-
-})();
-(function() {
-
-var $ = jQuery; // Handle namespaced jQuery
-
-// Collection which holds all of the individual facets (category: value).
-// Used for finding and removing specific facets.
-VS.model.SearchQuery = Backbone.Collection.extend({
-
-  // Model holds the category and value of the facet.
-  model : VS.model.SearchFacet,
-  
-  // Turns all of the facets into a single serialized string.
-  serialize : function() {
-    return this.map(function(facet){ return facet.serialize(); }).join(' ');
-  },
-  
-  facets : function() {
-    return this.map(function(facet) {
-      var value = {};
-      value[facet.get('category')] = facet.get('value');
-      return value;
-    });
-  },
-
-  // Find a facet by its category. Multiple facets with the same category
-  // is fine, but only the first is returned.
-  find : function(category) {
-    var facet = this.detect(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    });
-    return facet && facet.get('value');
-  },
-
-  // Counts the number of times a specific category is in the search query.
-  count : function(category) {
-    return this.select(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    }).length;
-  },
-
-  // Returns an array of extracted values from each facet in a category.
-  values : function(category) {
-    var facets = this.select(function(facet) {
-      return facet.get('category').toLowerCase() == category.toLowerCase();
-    });
-    return _.map(facets, function(facet) { return facet.get('value'); });
-  },
-
-  // Checks all facets for matches of either a category or both category and value.
-  has : function(category, value) {
-    return this.any(function(facet) {
-      var categoryMatched = facet.get('category').toLowerCase() == category.toLowerCase();
-      if (!value) return categoryMatched;
-      return categoryMatched && facet.get('value') == value;
-    });
-  },
-
-  // Used to temporarily hide specific categories and serialize the search query.
-  withoutCategory : function() {
-    var categories = _.map(_.toArray(arguments), function(cat) { return cat.toLowerCase(); });
-    return this.map(function(facet) {
-      if (!_.include(categories, facet.get('category').toLowerCase())) { 
-        return facet.serialize();
-      };
-    }).join(' ');
-  }
-
-});
-
-})();
-(function(){
-window.JST = window.JST || {};
-
-window.JST['search_box'] = _.template('<div class="VS-search <% if (readOnly) { %>VS-readonly<% } %>">\n  <div class="VS-search-box-wrapper VS-search-box">\n    <div class="VS-icon VS-icon-search"></div>\n    <div class="VS-placeholder"></div>\n    <div class="VS-search-inner"></div>\n    <div class="VS-icon VS-icon-cancel VS-cancel-search-box" title="clear search"></div>\n  </div>\n</div>');
-window.JST['search_facet'] = _.template('<% if (model.has(\'category\')) { %>\n  <div class="category"><%= model.get(\'category\') %>:</div>\n<% } %>\n\n<div class="search_facet_input_container">\n  <textarea type="text" class="search_facet_input ui-menu VS-interface" value="" <% if (readOnly) { %>disabled="disabled"<% } %> />\n</div>\n\n<div class="search_facet_remove VS-icon VS-icon-cancel"></div>');
-window.JST['search_input'] = _.template('<textarea type="text" class="ui-menu" <% if (readOnly) { %>disabled="disabled"<% } %> />');
-})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/login.html
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/login.html b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/login.html
deleted file mode 100644
index 0f63d8b..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/login.html
+++ /dev/null
@@ -1,154 +0,0 @@
-<!--
-  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>
-
-<html lang="en">
-	<head>
-		<meta charset="utf-8">
-		<title>Log Search</title>
-		<meta name="description" content="description">
-		<meta name="author" content="Evgeniya">
-		<meta name="keyword" content="keywords">
-		<meta name="viewport" content="width=device-width, initial-scale=1">
-		<link href="libs/bower/bootstrap/bootstrap.min.css" rel="stylesheet">
-		<link href="libs/bower/font-awesome/css/font-awesome.min.css" rel="stylesheet">
-
-		<link href="styles/style_v2.css" rel="stylesheet">
-		<link href="styles/style.css" rel="stylesheet">
-		<script   src="libs/bower/jquery/jquery.min.js"></script>
-		<script type="text/javascript">
-			$(document).ready(function() {
-				var passDiv = $('#passCont');
-
-		        $.ajax({
-					url : "/api/v1/info/auth",
-					type: "GET",
-					async: true,
-					dataType: 'json',
-						success:function(result,status)
-						{
-                            if (result != null && result.simple == "true") {
-                                $("#password").val("");
-                                passDiv.hide();
-                            }
-                            if (passDiv.is(':hidden')) {
-                                $("#password").prop('required', false);
-                            }
-						},
-						error: function(errorThrown)
-						{
-						    passDiv.show();
-						},
-			            complete : function(){
-			                $('[data-id="loader"]').hide();
-			            }
-				});
-			});
-	</script>
-	</head>
-
-	<body>
-		<div class="container-fluid">
-				<header class="navbar">
-					<div class="container-fluid expanded-panel">
-						<div class="row top-panel-right">
-							<div id="logo" class="col-xs-12 col-sm-3">
-						        <div class="row">
-							          <div class="col-sm-2"><img title="Apache Ambari" alt="Apache Ambari" src="images/logo-white.png" height="32px"></div>
-							          <div class="col-sm-10"><a href="javascript:void(0);">Log Search</a></div>
-						        </div>
-							</div>
-						</div>
-					</div>
-				</header>
-					<div class="box-wrapper">
-						<div class="box">
-						<div class="box-content logBox">
-						<form id="login_form" name ="login_form" role="form" action='/login'>
-							<div class="text-left">
-								<h2 class="page-header custHeader">Ambari Log Search</h2>
-							</div>
-							<div class="errorBox">
-								<a href="javascript:void(0)" class="close" title="close"><i class="fa fa-times"></i></a>
-								<div class="alert alert-danger">
-								  	<strong>Error!</strong> Invalid User credentials.<br> Please try again.
-								</div>
-							</div>
-							<div class="form-group">
-								<label class="control-label custLabel">Username</label>
-								<input type="text" class="form-control custTxtInput" id="username" name="username" required="true" />
-							</div>
-							<div class="form-group" id="passCont">
-								<label class="control-label custLabel">Password</label>
-								<input type="password" class="form-control custTxtInput" id="password" name="password" required="true"/>
-							</div>
-							<div class="text-left">
-								<input name="submit" type="submit" class="btn btn-success custLogin" value="Sign In"/>
-							</div>
-							<div>&nbsp;</div>
-							</form>
-						</div>
-						<div data-id="loader" class="loading"></div>
-					</div>
-					</div>
-		</div>
-
-		<script type="text/javascript">
-
-		$(window).load(function() {
-		      $("#login_form").submit(function(e)
-				{
-				    var postData = {};
-				    var formURL = ($(this).attr("action")) ? $(this).attr("action") : "/login";
-				    postData = {"username" : $("#username").val() , "password" : $("#password").val()};
-
-					$.ajax({
-						url : formURL,
-						type: "POST",
-						data : postData,
-							success:function(results,status)
-							{
-							    window.location = 'index.html'+window.location.search;
-							},
-							error: function(errorThrown)
-							{
-							    showError(errorThrown);
-							}
-						});
-				 		return false;
-				});
-
-					$('.close').click(function(){
-						$('.errorBox').hide();
-					});
-
-				function showError(errorThrown){
-					var errorMsg = errorThrown.status;
-
-				    switch(errorMsg){
-		                case 401: $('.errorBox').show();
-		                        break;
-
-		                default: $('.errorBox').hide();
-				    }
-				}
-		});
-
-		</script>
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/robots.txt
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/robots.txt b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/robots.txt
deleted file mode 100644
index 9417495..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# robotstxt.org
-
-User-agent: *

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/App.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/App.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/App.js
deleted file mode 100644
index 6d3c9e0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/App.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
-* 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','utils/LangSupport', 'backbone.marionette'],function(Backbone,localization) {
-    'use strict';
-    /*
-     * Localization initialization
-     */
-    localization.setDefaultCulture(); // will take default that is en
-    
-	var App = new Backbone.Marionette.Application();
-
-	/* Add application regions here */
-	App.addRegions({
-    	rTopNav			: "#r_topNav",
-        rTopProfileBar	: "#r_topProfileBar",
-        rBreadcrumbs	: '#r_breadcrumbs',
-        rContent		: "#r_content",
-        rFooter			: "#r_footer",
-        rHeader         : "#r_header"
-	});
-
-	/* Add initializers here */
-	App.addInitializer( function () {
-	//	Communicator.mediator.trigger("Application:Start");
-        window._preventNavigation = false;
-        Backbone.history.start();
-	});
-     
-    //viewDeployFlag set to false for standalone
-    //viewDeployFlag set to true for ambariview
-    var viewDeployFlag = false;
-    if(viewDeployFlag) {
-
-        var serverUrl = location.pathname+'proxy?url=';
-        var urlParts = location.pathname.split('/');
-        var tempUrl = "/api/v1/views/"+urlParts[2]+"/versions/"+urlParts[3]+"/instances/"+urlParts[4]+"/resources/status";
-        $.ajax({
-            type: 'GET',
-            dataType: 'json',
-            async: false,
-            context: this,
-            url: tempUrl,
-            success: function(response){
-                    serverUrl += "http://" + response.parameters['logsearch.server.url']+"/api/v1/";
-            },
-            error: function(response){
-                    console.log("Error while getting log search server url");
-            }
-        });
-        
-    
-        App.baseUrl = serverUrl//Utils.getLogSearchHostDetails();
-    } else {
-        App.baseUrl = "api/v1/";
-    }
-
-    // Add initialize hooks
-    App.on("initialize:before", function() {
-    });
-	
-    App.on("initialize:after", function() {
-    });
-    
-    App.addInitializer(function(options) {
-        console.log('Creating new Router instance');
-    });
-    
-    return App;
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Init.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Init.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Init.js
deleted file mode 100644
index c318942..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Init.js
+++ /dev/null
@@ -1,196 +0,0 @@
- /**
-  * 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({
-
-    baseUrl: "/scripts",
-
-    /* starting point for application */ 
-    deps: ['backbone.marionette', 'bootstrap', 'Main', 'globalize', 'utils/LangSupport'],
-
-    waitSeconds: 30,
-
-    shim: {
-        'backbone': {
-            deps: ['underscore', 'jquery'],
-            exports: 'Backbone'
-        },
-        'underscore': {
-            exports: '_'
-        },
-        'backbone.marionette': {
-            deps: ['backbone']
-        },
-        'bootstrap': {
-            deps: ['jquery'],
-            exports: 'jquery'
-        },
-        'backgrid': {
-            deps: ['backbone', 'jquery'],
-            exports: 'Backgrid'
-        },
-        'backgrid-paginator': {
-            deps: ['backbone', 'backgrid']
-        },
-        'backgrid-filter': {
-            deps: ['backbone', 'backgrid']
-        },
-        'backgrid-select-all': {
-            deps: ['backbone', 'backgrid']
-        },
-        'backgrid-columnmanager': {
-            deps: ['backbone', 'backgrid']
-        },
-        'backgrid-sizeable': {
-            deps: ['backbone', 'backgrid']
-        },
-        'backgrid-orderable': {
-            deps: ['backbone', 'backgrid']
-        },
-        'Backbone.BootstrapModal': {
-            deps: ['jquery', 'underscore', 'backbone']
-        },
-        'bootstrap-editable': {
-            deps: ['bootstrap']
-        },
-        'jquery-ui': {
-            deps: ['jquery']
-        },
-        'globalize': {
-            exports: 'Globalize'
-        },
-        'bootstrap-daterangepicker': {
-            deps: ['bootstrap', 'jquery', 'moment'],
-            exports: 'daterangepicker'
-        },
-        'moment': {
-            deps: [],
-            exports: 'moment'
-        },
-        'moment-tz': {
-            deps: ['moment']
-        },
-        'localstorage': {
-            deps: ['backbone', 'underscore', 'jquery']
-        },
-        'visualsearch': {
-            deps: ['jquery', 'jquery-ui', 'backbone', 'underscore']
-        },
-        'select2': {
-            deps: ['jquery', 'bootstrap']
-        },
-        'bootbox': {
-            deps: ['jquery']
-        },
-        'd3.tip': {
-            deps: ['d3']
-        },
-        'nv': {
-            deps: ['d3'],
-            exports: 'nv'
-        },
-        'noty': {
-            deps: ['jquery']
-        },
-        'WorldMapGenerator': {
-            deps: ['jquery']
-        },
-        'jstimezonedetect': {
-            exports: 'jstz'
-        },
-        'sparkline': {
-            deps: ['jquery']
-        },
-        'gridster': {
-            deps: ['jquery']
-        },
-        'dashboard': {
-            deps: ['jquery', 'jquery-ui', 'gridster']
-        },
-        'tour' : {
-           exports : 'tour'
-        }
-    },
-
-    paths: {
-         // Workaround for exports
-        'jQuery' : '../libs/bower/jquery/jquery.min',
-        'Backbone': '../libs/bower/backbone/backbone',
-        '_' : '../libs/bower/underscore/underscore-min',
-        'Backgrid': '../libs/bower/backgrid/backgrid.min',
-
-
-        'jquery': '../libs/bower/jquery/jquery.min',
-        'jquery-ui': '../libs/bower/jquery-ui/js/jquery-ui-1.11.4.min',
-        'backbone': '../libs/bower/backbone/backbone',
-        'underscore': '../libs/bower/underscore/underscore-min',
-
-        /* alias all marionette libs */
-        'backbone.marionette': '../libs/bower/backbone.marionette/backbone.marionette.min',
-        'backbone.wreqr': '../libs/bower/backbone.wreqr/backbone.wreqr.min',
-        'backbone.babysitter': '../libs/bower/backbone.babysitter/backbone.babysitter.min',
-        //'backbone.paginator': '../libs/bower/backbone.paginator/js/backbone.paginator.min',
-
-        /* alias the bootstrap js lib */
-        'bootstrap': '../libs/bower/bootstrap/bootstrap.min',
-
-        /* BackGrid for Tables */
-        'backgrid': '../libs/bower/backgrid/backgrid.min',
-        'backgrid-filter': '../libs/bower/backgrid-filter/backgrid-filter.min',
-        'backgrid-select-all': '../libs/bower/backgrid-select-all/backgrid-select-all.min',
-        'backgrid-paginator': '../libs/bower/backgrid-paginator/backgrid-paginator.min',
-        'backgrid-columnmanager': '../libs/custom/backgrid-columnmanager/Backgrid.ColumnManager',
-        'backgrid-sizeable': '../libs/bower/backgrid-sizeable-columns/backgrid-sizeable-columns',
-        'backgrid-orderable': '../libs/bower/backgrid-orderable-columns/backgrid-orderable-columns',
-
-        'backbone-pageable': '../libs/bower/backbone-pageable/backbone-pageable.min',
-        'localstorage': '../libs/bower/backbone.localstorage/backbone.localStorage-min',
-        'bootstrap-daterangepicker': '../libs/custom/daterangepicker/js/daterangepicker',
-        'select2': '../libs/bower/select2/select2.min',
-        'bootbox': '../libs/bower/bootbox/bootbox',
-        'moment': '../libs/bower/moment/moment.min',
-        'moment-tz': '../libs/bower/moment/moment-timezone-with-data.min',
-        'visualsearch': '../libs/custom/visualsearch/visualsearch',
-        'globalize': '../libs/bower/globalize/globalize',
-        'handlebars': '../libs/bower/require-handlebars-plugin/Handlebars',
-        'i18nprecompile': '../libs/bower/require-handlebars-plugin/i18nprecompile',
-        'json2': '../libs/bower/require-handlebars-plugin/json2',
-        'hbs': '../libs/bower/require-handlebars-plugin/hbs',
-        'd3': "../libs/bower/d3/d3.min",
-        'd3.tip': "../libs/bower/d3/d3.tip",
-        'nv': "../libs/bower/nvd3/nv.d3.min",
-        'noty': '../libs/bower/noty/jquery.noty.packaged.min',
-        'tmpl': '../templates',
-        'WorldMapGenerator': '../libs/custom/timezone/WorldMapGenerator',
-        'jstimezonedetect': '../libs/custom/timezone/jstz-1.0.4.min',
-        'sparkline': '../libs/bower/sparkline/jquery.sparkline',
-        'gridster': '../libs/bower/gridster/jquery.gridster.min',
-        'dashboard': '../libs/bower/dashboard/dashboard',
-        'tour' : '../libs/bower/bootstrap-tour/bootstrap-tour.min'
-    },
-
-    hbs: {
-        disableI18n: true,
-        helperPathCallback: // Callback to determine the path to look for helpers
-            function(name) { // ('/template/helpers/'+name by default)
-            return "../helpers/Helpers";
-        },
-        templateExtension: "html",
-        compileOptions: {}
-    }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/02360dd5/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Main.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Main.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Main.js
deleted file mode 100644
index e080eb0..0000000
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/Main.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
-* 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([
-	'backbone',
-	'App',
-	'controllers/Controller',
-	'modules/Overrides',
-	'jquery-ui',
-	'visualsearch'
-],
-function ( Backbone, App, AppController, Overrides ) {
-    'use strict';
-    
-    App.appRouter = new AppController.Router({
-        controller: new AppController.Controller()
-      });
-    
-	App.start();
-});