cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mura...@apache.org
Subject [1/6] cordova-registry-web git commit: Extend grunt, add more structure, fix bugs
Date Thu, 16 Jul 2015 00:37:05 GMT
Repository: cordova-registry-web
Updated Branches:
  refs/heads/master a809ee569 -> 676d5b796


http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/css/flexboxgrid.css
----------------------------------------------------------------------
diff --git a/npm-search/src/css/flexboxgrid.css b/npm-search/src/css/flexboxgrid.css
new file mode 100644
index 0000000..68dace4
--- /dev/null
+++ b/npm-search/src/css/flexboxgrid.css
@@ -0,0 +1,1026 @@
+/*
+ * Copyright 2013 Kristofer Joseph
+ *
+ * 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.
+ */
+
+/*
+ *
+ * Uncomment and set these variables to customize the grid.
+ *
+ * :root {
+ *  --gutter-width: 1rem;
+ *  --outer-margin: 2rem;
+ *  --gutter-compensation: calc( var( --gutter-width / 2 ) * -1 );
+ *  --half-gutter-width: calc( var( --gutter-width / 2 ) );
+ *  --screen-xs-min: 30em;
+ *  --screen-sm-min: 48em;
+ *  --screen-md-min: 62em;
+ *  --screen-lg-min: 75em;
+ *  --container-sm: calc( 45rem + var( --gutter-width ) );
+ *  --container-md: calc( 60rem + var( --gutter-width ) );
+ *  --container-lg: calc( 70rem + var( --gutter-width ) );
+ * }
+ *
+*/
+
+.container-fluid {
+  margin-right: auto;
+  margin-left: auto;
+  padding-right: 2rem;
+  padding-left: 2rem;
+}
+
+.row {
+  box-sizing: border-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-flex: 0 1 auto;
+  -ms-flex: 0 1 auto;
+  flex: 0 1 auto;
+  -webkit-flex-direction: row;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-flex-wrap: wrap;
+  -ms-flex-wrap: wrap;
+  flex-wrap: wrap;
+  margin-right: -0.5rem;
+  margin-left: -0.5rem;
+}
+
+.row.reverse {
+  -webkit-flex-direction: row-reverse;
+  -ms-flex-direction: row-reverse;
+  flex-direction: row-reverse;
+}
+
+.col.reverse {
+  -webkit-flex-direction: column-reverse;
+  -ms-flex-direction: column-reverse;
+  flex-direction: column-reverse;
+}
+
+.col-xs,
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12,
+.col-xs-offset-1,
+.col-xs-offset-2,
+.col-xs-offset-3,
+.col-xs-offset-4,
+.col-xs-offset-5,
+.col-xs-offset-6,
+.col-xs-offset-7,
+.col-xs-offset-8,
+.col-xs-offset-9,
+.col-xs-offset-10,
+.col-xs-offset-11,
+.col-xs-offset-12 {
+  box-sizing: border-box;
+  -webkit-flex: 0 0 auto;
+  -ms-flex: 0 0 auto;
+  flex: 0 0 auto;
+  padding-right: 0.5rem;
+  padding-left: 0.5rem;
+}
+
+.col-xs {
+  -webkit-flex-grow: 1;
+  -ms-flex-positive: 1;
+  flex-grow: 1;
+  -webkit-flex-basis: 0;
+  -ms-flex-preferred-size: 0;
+  flex-basis: 0;
+  max-width: 100%;
+}
+
+.col-xs-1 {
+  -webkit-flex-basis: 8.333%;
+  -ms-flex-preferred-size: 8.333%;
+  flex-basis: 8.333%;
+  max-width: 8.333%;
+}
+
+.col-xs-2 {
+  -webkit-flex-basis: 16.667%;
+  -ms-flex-preferred-size: 16.667%;
+  flex-basis: 16.667%;
+  max-width: 16.667%;
+}
+
+.col-xs-3 {
+  -webkit-flex-basis: 25%;
+  -ms-flex-preferred-size: 25%;
+  flex-basis: 25%;
+  max-width: 25%;
+}
+
+.col-xs-4 {
+  -webkit-flex-basis: 33.333%;
+  -ms-flex-preferred-size: 33.333%;
+  flex-basis: 33.333%;
+  max-width: 33.333%;
+}
+
+.col-xs-5 {
+  -webkit-flex-basis: 41.667%;
+  -ms-flex-preferred-size: 41.667%;
+  flex-basis: 41.667%;
+  max-width: 41.667%;
+}
+
+.col-xs-6 {
+  -webkit-flex-basis: 50%;
+  -ms-flex-preferred-size: 50%;
+  flex-basis: 50%;
+  max-width: 50%;
+}
+
+.col-xs-7 {
+  -webkit-flex-basis: 58.333%;
+  -ms-flex-preferred-size: 58.333%;
+  flex-basis: 58.333%;
+  max-width: 58.333%;
+}
+
+.col-xs-8 {
+  -webkit-flex-basis: 66.667%;
+  -ms-flex-preferred-size: 66.667%;
+  flex-basis: 66.667%;
+  max-width: 66.667%;
+}
+
+.col-xs-9 {
+  -webkit-flex-basis: 75%;
+  -ms-flex-preferred-size: 75%;
+  flex-basis: 75%;
+  max-width: 75%;
+}
+
+.col-xs-10 {
+  -webkit-flex-basis: 83.333%;
+  -ms-flex-preferred-size: 83.333%;
+  flex-basis: 83.333%;
+  max-width: 83.333%;
+}
+
+.col-xs-11 {
+  -webkit-flex-basis: 91.667%;
+  -ms-flex-preferred-size: 91.667%;
+  flex-basis: 91.667%;
+  max-width: 91.667%;
+}
+
+.col-xs-12 {
+  -webkit-flex-basis: 100%;
+  -ms-flex-preferred-size: 100%;
+  flex-basis: 100%;
+  max-width: 100%;
+}
+
+.col-xs-offset-1 {
+  margin-left: 8.333%;
+}
+
+.col-xs-offset-2 {
+  margin-left: 16.667%;
+}
+
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+
+.col-xs-offset-4 {
+  margin-left: 33.333%;
+}
+
+.col-xs-offset-5 {
+  margin-left: 41.667%;
+}
+
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+
+.col-xs-offset-7 {
+  margin-left: 58.333%;
+}
+
+.col-xs-offset-8 {
+  margin-left: 66.667%;
+}
+
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+
+.col-xs-offset-10 {
+  margin-left: 83.333%;
+}
+
+.col-xs-offset-11 {
+  margin-left: 91.667%;
+}
+
+.start-xs {
+  -webkit-justify-content: flex-start;
+  -ms-flex-pack: start;
+  justify-content: flex-start;
+  text-align: start;
+}
+
+.center-xs {
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+  justify-content: center;
+  text-align: center;
+}
+
+.end-xs {
+  -webkit-justify-content: flex-end;
+  -ms-flex-pack: end;
+  justify-content: flex-end;
+  text-align: end;
+}
+
+.top-xs {
+  -webkit-align-items: flex-start;
+  -ms-flex-align: start;
+  align-items: flex-start;
+}
+
+.middle-xs {
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+}
+
+.bottom-xs {
+  -webkit-align-items: flex-end;
+  -ms-flex-align: end;
+  align-items: flex-end;
+}
+
+.around-xs {
+  -webkit-justify-content: space-around;
+  -ms-flex-pack: distribute;
+  justify-content: space-around;
+}
+
+.between-xs {
+  -webkit-justify-content: space-between;
+  -ms-flex-pack: justify;
+  justify-content: space-between;
+}
+
+.first-xs {
+  -webkit-order: -1;
+  -ms-flex-order: -1;
+  order: -1;
+}
+
+.last-xs {
+  -webkit-order: 1;
+  -ms-flex-order: 1;
+  order: 1;
+}
+
+@media only screen and (min-width: 48em) {
+  .container {
+    width: 46rem;
+  }
+
+  .col-sm,
+  .col-sm-1,
+  .col-sm-2,
+  .col-sm-3,
+  .col-sm-4,
+  .col-sm-5,
+  .col-sm-6,
+  .col-sm-7,
+  .col-sm-8,
+  .col-sm-9,
+  .col-sm-10,
+  .col-sm-11,
+  .col-sm-12,
+  .col-sm-offset-1,
+  .col-sm-offset-2,
+  .col-sm-offset-3,
+  .col-sm-offset-4,
+  .col-sm-offset-5,
+  .col-sm-offset-6,
+  .col-sm-offset-7,
+  .col-sm-offset-8,
+  .col-sm-offset-9,
+  .col-sm-offset-10,
+  .col-sm-offset-11,
+  .col-sm-offset-12 {
+    box-sizing: border-box;
+    -webkit-flex: 0 0 auto;
+    -ms-flex: 0 0 auto;
+    flex: 0 0 auto;
+    padding-right: 0.5rem;
+    padding-left: 0.5rem;
+  }
+
+  .col-sm {
+    -webkit-flex-grow: 1;
+    -ms-flex-positive: 1;
+    flex-grow: 1;
+    -webkit-flex-basis: 0;
+    -ms-flex-preferred-size: 0;
+    flex-basis: 0;
+    max-width: 100%;
+  }
+
+  .col-sm-1 {
+    -webkit-flex-basis: 8.333%;
+    -ms-flex-preferred-size: 8.333%;
+    flex-basis: 8.333%;
+    max-width: 8.333%;
+  }
+
+  .col-sm-2 {
+    -webkit-flex-basis: 16.667%;
+    -ms-flex-preferred-size: 16.667%;
+    flex-basis: 16.667%;
+    max-width: 16.667%;
+  }
+
+  .col-sm-3 {
+    -webkit-flex-basis: 25%;
+    -ms-flex-preferred-size: 25%;
+    flex-basis: 25%;
+    max-width: 25%;
+  }
+
+  .col-sm-4 {
+    -webkit-flex-basis: 33.333%;
+    -ms-flex-preferred-size: 33.333%;
+    flex-basis: 33.333%;
+    max-width: 33.333%;
+  }
+
+  .col-sm-5 {
+    -webkit-flex-basis: 41.667%;
+    -ms-flex-preferred-size: 41.667%;
+    flex-basis: 41.667%;
+    max-width: 41.667%;
+  }
+
+  .col-sm-6 {
+    -webkit-flex-basis: 50%;
+    -ms-flex-preferred-size: 50%;
+    flex-basis: 50%;
+    max-width: 50%;
+  }
+
+  .col-sm-7 {
+    -webkit-flex-basis: 58.333%;
+    -ms-flex-preferred-size: 58.333%;
+    flex-basis: 58.333%;
+    max-width: 58.333%;
+  }
+
+  .col-sm-8 {
+    -webkit-flex-basis: 66.667%;
+    -ms-flex-preferred-size: 66.667%;
+    flex-basis: 66.667%;
+    max-width: 66.667%;
+  }
+
+  .col-sm-9 {
+    -webkit-flex-basis: 75%;
+    -ms-flex-preferred-size: 75%;
+    flex-basis: 75%;
+    max-width: 75%;
+  }
+
+  .col-sm-10 {
+    -webkit-flex-basis: 83.333%;
+    -ms-flex-preferred-size: 83.333%;
+    flex-basis: 83.333%;
+    max-width: 83.333%;
+  }
+
+  .col-sm-11 {
+    -webkit-flex-basis: 91.667%;
+    -ms-flex-preferred-size: 91.667%;
+    flex-basis: 91.667%;
+    max-width: 91.667%;
+  }
+
+  .col-sm-12 {
+    -webkit-flex-basis: 100%;
+    -ms-flex-preferred-size: 100%;
+    flex-basis: 100%;
+    max-width: 100%;
+  }
+
+  .col-sm-offset-1 {
+    margin-left: 8.333%;
+  }
+
+  .col-sm-offset-2 {
+    margin-left: 16.667%;
+  }
+
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+
+  .col-sm-offset-4 {
+    margin-left: 33.333%;
+  }
+
+  .col-sm-offset-5 {
+    margin-left: 41.667%;
+  }
+
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+
+  .col-sm-offset-7 {
+    margin-left: 58.333%;
+  }
+
+  .col-sm-offset-8 {
+    margin-left: 66.667%;
+  }
+
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+
+  .col-sm-offset-10 {
+    margin-left: 83.333%;
+  }
+
+  .col-sm-offset-11 {
+    margin-left: 91.667%;
+  }
+
+  .start-sm {
+    -webkit-justify-content: flex-start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    text-align: start;
+  }
+
+  .center-sm {
+    -webkit-justify-content: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+    text-align: center;
+  }
+
+  .end-sm {
+    -webkit-justify-content: flex-end;
+    -ms-flex-pack: end;
+    justify-content: flex-end;
+    text-align: end;
+  }
+
+  .top-sm {
+    -webkit-align-items: flex-start;
+    -ms-flex-align: start;
+    align-items: flex-start;
+  }
+
+  .middle-sm {
+    -webkit-align-items: center;
+    -ms-flex-align: center;
+    align-items: center;
+  }
+
+  .bottom-sm {
+    -webkit-align-items: flex-end;
+    -ms-flex-align: end;
+    align-items: flex-end;
+  }
+
+  .around-sm {
+    -webkit-justify-content: space-around;
+    -ms-flex-pack: distribute;
+    justify-content: space-around;
+  }
+
+  .between-sm {
+    -webkit-justify-content: space-between;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+  }
+
+  .first-sm {
+    -webkit-order: -1;
+    -ms-flex-order: -1;
+    order: -1;
+  }
+
+  .last-sm {
+    -webkit-order: 1;
+    -ms-flex-order: 1;
+    order: 1;
+  }
+}
+
+@media only screen and (min-width: 62em) {
+  .container {
+    width: 61rem;
+  }
+
+  .col-md,
+  .col-md-1,
+  .col-md-2,
+  .col-md-3,
+  .col-md-4,
+  .col-md-5,
+  .col-md-6,
+  .col-md-7,
+  .col-md-8,
+  .col-md-9,
+  .col-md-10,
+  .col-md-11,
+  .col-md-12,
+  .col-md-offset-1,
+  .col-md-offset-2,
+  .col-md-offset-3,
+  .col-md-offset-4,
+  .col-md-offset-5,
+  .col-md-offset-6,
+  .col-md-offset-7,
+  .col-md-offset-8,
+  .col-md-offset-9,
+  .col-md-offset-10,
+  .col-md-offset-11,
+  .col-md-offset-12 {
+    box-sizing: border-box;
+    -webkit-flex: 0 0 auto;
+    -ms-flex: 0 0 auto;
+    flex: 0 0 auto;
+    padding-right: 0.5rem;
+    padding-left: 0.5rem;
+  }
+
+  .col-md {
+    -webkit-flex-grow: 1;
+    -ms-flex-positive: 1;
+    flex-grow: 1;
+    -webkit-flex-basis: 0;
+    -ms-flex-preferred-size: 0;
+    flex-basis: 0;
+    max-width: 100%;
+  }
+
+  .col-md-1 {
+    -webkit-flex-basis: 8.333%;
+    -ms-flex-preferred-size: 8.333%;
+    flex-basis: 8.333%;
+    max-width: 8.333%;
+  }
+
+  .col-md-2 {
+    -webkit-flex-basis: 16.667%;
+    -ms-flex-preferred-size: 16.667%;
+    flex-basis: 16.667%;
+    max-width: 16.667%;
+  }
+
+  .col-md-3 {
+    -webkit-flex-basis: 25%;
+    -ms-flex-preferred-size: 25%;
+    flex-basis: 25%;
+    max-width: 25%;
+  }
+
+  .col-md-4 {
+    -webkit-flex-basis: 33.333%;
+    -ms-flex-preferred-size: 33.333%;
+    flex-basis: 33.333%;
+    max-width: 33.333%;
+  }
+
+  .col-md-5 {
+    -webkit-flex-basis: 41.667%;
+    -ms-flex-preferred-size: 41.667%;
+    flex-basis: 41.667%;
+    max-width: 41.667%;
+  }
+
+  .col-md-6 {
+    -webkit-flex-basis: 50%;
+    -ms-flex-preferred-size: 50%;
+    flex-basis: 50%;
+    max-width: 50%;
+  }
+
+  .col-md-7 {
+    -webkit-flex-basis: 58.333%;
+    -ms-flex-preferred-size: 58.333%;
+    flex-basis: 58.333%;
+    max-width: 58.333%;
+  }
+
+  .col-md-8 {
+    -webkit-flex-basis: 66.667%;
+    -ms-flex-preferred-size: 66.667%;
+    flex-basis: 66.667%;
+    max-width: 66.667%;
+  }
+
+  .col-md-9 {
+    -webkit-flex-basis: 75%;
+    -ms-flex-preferred-size: 75%;
+    flex-basis: 75%;
+    max-width: 75%;
+  }
+
+  .col-md-10 {
+    -webkit-flex-basis: 83.333%;
+    -ms-flex-preferred-size: 83.333%;
+    flex-basis: 83.333%;
+    max-width: 83.333%;
+  }
+
+  .col-md-11 {
+    -webkit-flex-basis: 91.667%;
+    -ms-flex-preferred-size: 91.667%;
+    flex-basis: 91.667%;
+    max-width: 91.667%;
+  }
+
+  .col-md-12 {
+    -webkit-flex-basis: 100%;
+    -ms-flex-preferred-size: 100%;
+    flex-basis: 100%;
+    max-width: 100%;
+  }
+
+  .col-md-offset-1 {
+    margin-left: 8.333%;
+  }
+
+  .col-md-offset-2 {
+    margin-left: 16.667%;
+  }
+
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+
+  .col-md-offset-4 {
+    margin-left: 33.333%;
+  }
+
+  .col-md-offset-5 {
+    margin-left: 41.667%;
+  }
+
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+
+  .col-md-offset-7 {
+    margin-left: 58.333%;
+  }
+
+  .col-md-offset-8 {
+    margin-left: 66.667%;
+  }
+
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+
+  .col-md-offset-10 {
+    margin-left: 83.333%;
+  }
+
+  .col-md-offset-11 {
+    margin-left: 91.667%;
+  }
+
+  .start-md {
+    -webkit-justify-content: flex-start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    text-align: start;
+  }
+
+  .center-md {
+    -webkit-justify-content: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+    text-align: center;
+  }
+
+  .end-md {
+    -webkit-justify-content: flex-end;
+    -ms-flex-pack: end;
+    justify-content: flex-end;
+    text-align: end;
+  }
+
+  .top-md {
+    -webkit-align-items: flex-start;
+    -ms-flex-align: start;
+    align-items: flex-start;
+  }
+
+  .middle-md {
+    -webkit-align-items: center;
+    -ms-flex-align: center;
+    align-items: center;
+  }
+
+  .bottom-md {
+    -webkit-align-items: flex-end;
+    -ms-flex-align: end;
+    align-items: flex-end;
+  }
+
+  .around-md {
+    -webkit-justify-content: space-around;
+    -ms-flex-pack: distribute;
+    justify-content: space-around;
+  }
+
+  .between-md {
+    -webkit-justify-content: space-between;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+  }
+
+  .first-md {
+    -webkit-order: -1;
+    -ms-flex-order: -1;
+    order: -1;
+  }
+
+  .last-md {
+    -webkit-order: 1;
+    -ms-flex-order: 1;
+    order: 1;
+  }
+}
+
+@media only screen and (min-width: 75em) {
+  .container {
+    width: 71rem;
+  }
+
+  .col-lg,
+  .col-lg-1,
+  .col-lg-2,
+  .col-lg-3,
+  .col-lg-4,
+  .col-lg-5,
+  .col-lg-6,
+  .col-lg-7,
+  .col-lg-8,
+  .col-lg-9,
+  .col-lg-10,
+  .col-lg-11,
+  .col-lg-12,
+  .col-lg-offset-1,
+  .col-lg-offset-2,
+  .col-lg-offset-3,
+  .col-lg-offset-4,
+  .col-lg-offset-5,
+  .col-lg-offset-6,
+  .col-lg-offset-7,
+  .col-lg-offset-8,
+  .col-lg-offset-9,
+  .col-lg-offset-10,
+  .col-lg-offset-11,
+  .col-lg-offset-12 {
+    box-sizing: border-box;
+    -webkit-flex: 0 0 auto;
+    -ms-flex: 0 0 auto;
+    flex: 0 0 auto;
+    padding-right: 0.5rem;
+    padding-left: 0.5rem;
+  }
+
+  .col-lg {
+    -webkit-flex-grow: 1;
+    -ms-flex-positive: 1;
+    flex-grow: 1;
+    -webkit-flex-basis: 0;
+    -ms-flex-preferred-size: 0;
+    flex-basis: 0;
+    max-width: 100%;
+  }
+
+  .col-lg-1 {
+    -webkit-flex-basis: 8.333%;
+    -ms-flex-preferred-size: 8.333%;
+    flex-basis: 8.333%;
+    max-width: 8.333%;
+  }
+
+  .col-lg-2 {
+    -webkit-flex-basis: 16.667%;
+    -ms-flex-preferred-size: 16.667%;
+    flex-basis: 16.667%;
+    max-width: 16.667%;
+  }
+
+  .col-lg-3 {
+    -webkit-flex-basis: 25%;
+    -ms-flex-preferred-size: 25%;
+    flex-basis: 25%;
+    max-width: 25%;
+  }
+
+  .col-lg-4 {
+    -webkit-flex-basis: 33.333%;
+    -ms-flex-preferred-size: 33.333%;
+    flex-basis: 33.333%;
+    max-width: 33.333%;
+  }
+
+  .col-lg-5 {
+    -webkit-flex-basis: 41.667%;
+    -ms-flex-preferred-size: 41.667%;
+    flex-basis: 41.667%;
+    max-width: 41.667%;
+  }
+
+  .col-lg-6 {
+    -webkit-flex-basis: 50%;
+    -ms-flex-preferred-size: 50%;
+    flex-basis: 50%;
+    max-width: 50%;
+  }
+
+  .col-lg-7 {
+    -webkit-flex-basis: 58.333%;
+    -ms-flex-preferred-size: 58.333%;
+    flex-basis: 58.333%;
+    max-width: 58.333%;
+  }
+
+  .col-lg-8 {
+    -webkit-flex-basis: 66.667%;
+    -ms-flex-preferred-size: 66.667%;
+    flex-basis: 66.667%;
+    max-width: 66.667%;
+  }
+
+  .col-lg-9 {
+    -webkit-flex-basis: 75%;
+    -ms-flex-preferred-size: 75%;
+    flex-basis: 75%;
+    max-width: 75%;
+  }
+
+  .col-lg-10 {
+    -webkit-flex-basis: 83.333%;
+    -ms-flex-preferred-size: 83.333%;
+    flex-basis: 83.333%;
+    max-width: 83.333%;
+  }
+
+  .col-lg-11 {
+    -webkit-flex-basis: 91.667%;
+    -ms-flex-preferred-size: 91.667%;
+    flex-basis: 91.667%;
+    max-width: 91.667%;
+  }
+
+  .col-lg-12 {
+    -webkit-flex-basis: 100%;
+    -ms-flex-preferred-size: 100%;
+    flex-basis: 100%;
+    max-width: 100%;
+  }
+
+  .col-lg-offset-1 {
+    margin-left: 8.333%;
+  }
+
+  .col-lg-offset-2 {
+    margin-left: 16.667%;
+  }
+
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+
+  .col-lg-offset-4 {
+    margin-left: 33.333%;
+  }
+
+  .col-lg-offset-5 {
+    margin-left: 41.667%;
+  }
+
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+
+  .col-lg-offset-7 {
+    margin-left: 58.333%;
+  }
+
+  .col-lg-offset-8 {
+    margin-left: 66.667%;
+  }
+
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+
+  .col-lg-offset-10 {
+    margin-left: 83.333%;
+  }
+
+  .col-lg-offset-11 {
+    margin-left: 91.667%;
+  }
+
+  .start-lg {
+    -webkit-justify-content: flex-start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    text-align: start;
+  }
+
+  .center-lg {
+    -webkit-justify-content: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+    text-align: center;
+  }
+
+  .end-lg {
+    -webkit-justify-content: flex-end;
+    -ms-flex-pack: end;
+    justify-content: flex-end;
+    text-align: end;
+  }
+
+  .top-lg {
+    -webkit-align-items: flex-start;
+    -ms-flex-align: start;
+    align-items: flex-start;
+  }
+
+  .middle-lg {
+    -webkit-align-items: center;
+    -ms-flex-align: center;
+    align-items: center;
+  }
+
+  .bottom-lg {
+    -webkit-align-items: flex-end;
+    -ms-flex-align: end;
+    align-items: flex-end;
+  }
+
+  .around-lg {
+    -webkit-justify-content: space-around;
+    -ms-flex-pack: distribute;
+    justify-content: space-around;
+  }
+
+  .between-lg {
+    -webkit-justify-content: space-between;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+  }
+
+  .first-lg {
+    -webkit-order: -1;
+    -ms-flex-order: -1;
+    order: -1;
+  }
+
+  .last-lg {
+    -webkit-order: 1;
+    -ms-flex-order: 1;
+    order: 1;
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/developers.html
----------------------------------------------------------------------
diff --git a/npm-search/src/developers.html b/npm-search/src/developers.html
new file mode 100644
index 0000000..edb1762
--- /dev/null
+++ b/npm-search/src/developers.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv='Content-type' content='text/html; charset=utf-8'>
+    <title>Cordova Search Website</title>
+    <link rel="stylesheet" href="/css/styles.css" />
+  </head>
+
+  <body>
+    <div id="header">
+      <div class="wrap">
+          <a class="logo" href="//cordova.apache.org/"></a>
+          <div class="menu">
+              <a href="index.html">Home</a>
+              <a href="developers.html">Developers</a>
+              <a href="faq.html">FAQ</a>
+          </div>
+          <form class="menu-dropdown">
+              <select onchange="location = this.options[this.selectedIndex].value;">
+                  <option value="index.html">Home</option>
+                  <option value="developers.html">Developers</option>
+                  <option value="faq.html">FAQ</option>
+              </select>
+          </form>
+      </div>
+      <div class="shadow"></div>
+    </div>
+    <div class="header-placeholder"></div>
+    <div class="wrap">
+      <h2 class="icon icon-about">npm Plugin Search for Plugin Developers</h2>
+      <h4>How do I add a new plugin to Plugin Search?</h4>
+      <p>If you want your Cordova Plugin to show up in search, simply add <code>ecosystem:cordova</code> keyword to the <code>package.json</code> file of your plugin and publish it to npm registry.</p>
+      <h4>How can I tag supported platforms for my plugin?</h4>
+      <p>Similar to <code>ecosystem:cordova</code>, platform support too uses keywords. Just add the platform name prefixed with "<strong>cordova-</strong>" to plugins list of keywords. E.g.</p>
+      <pre><code>  "keywords": [
+          "ecosystem:cordova",
+          "cordova-android",
+          "cordova-ios",
+          "cordova-windows"
+        ]</code></pre>
+      <h4>My plugin is in plugins.cordova.io but I want to publish to npm. How do I do that?</h4>
+      <ol>
+        <li>
+          <strong>Optional</strong> Decide if you want to change your plugin’s id. If you decide to change it,
+          <ol>
+            <li>Update the id in plugin.xml and update your readme with the new id.</li>
+            <li>Send a pull request adding your new id and old id to Cordova Registry Mapper.</li>
+            <li>We integrate that module into the Cordova CLI to warn users to use the new id when adding plugins to their projects.</li>
+          </ol>
+        </li>
+        <li>Add a <code>package.json</code> to your plugins,
+          <ul>
+            <li>
+              <strong>Note</strong>: To keep things simple, please make sure your <code>id</code> in <code>plugin.xml</code> is the same as your <code>package-name</code> in <code>package.json</code>.</li>
+            <li>Use <code>plugman createpackagejson [PLUGIN DIRECTORY]</code> to create <code>package.json</code>.
+              <ul>
+                <li>This will create defaults based on existing values in your <code>plugin.xml</code>.</li>
+                <li>It will also automatically add the keyword <code>ecosystem:cordova</code> to your newly generated package.json file.</li>
+                <li>In addition, a cordova key will be added to your <code>package.json</code> which we plan to use in future updates of the tooling.</li>
+              </ul>
+            </li>
+            <li>View the <code>package.json</code> of <a href="https://github.com/apache/cordova-plugin-device/blob/master/package.json" target="_blank">cordova-plugin-device</a> to see an example of what your <code>package.json</code> should look like after running <code>plugman createpackagejson [PLUGIN DIRECTORY]</code> command.</li>
+            <li>Plugins still require a <code>plugin.xml</code> to be installed into <strong>Cordova</strong> projects.</li>
+          </ul>
+        </li>
+        <li>Publish your plugin to npm using the <code>npm publish [PLUGIN DIRECTORY]</code>.</li>
+      </ol>
+      <h4>Are there any additional documents to assist me with plugins?</h4>
+      <p>Yes there are. Please take a look at <a href="http://cordova.apache.org/docs/en/edge/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide" target="_blank">Plugin Development Guide</a> for a more detailed guide.</p>
+      <h4>I don't like X. How can I help improve the website?</h4>
+      <p>You can help improving this site by opening bugs on <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20%3D%20Open%20AND%20component%20%3D%20%22Registry%20Web%22" target="_blank">JIRA</a> or by sending PRs on <a href="https://github.com/apache/cordova-registry-web" target="_blank">GitHub</a>.</p>
+    </div>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/etc/browserconfig.xml
----------------------------------------------------------------------
diff --git a/npm-search/src/etc/browserconfig.xml b/npm-search/src/etc/browserconfig.xml
new file mode 100644
index 0000000..d92daea
--- /dev/null
+++ b/npm-search/src/etc/browserconfig.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+  <msapplication>
+    <tile>
+      <square70x70logo src="/img/mstile-70x70.png"/>
+      <square150x150logo src="/img/mstile-150x150.png"/>
+      <square310x310logo src="/img/mstile-310x310.png"/>
+      <wide310x150logo src="/img/mstile-310x150.png"/>
+      <TileColor>#da532c</TileColor>
+    </tile>
+  </msapplication>
+</browserconfig>

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/etc/favicon.ico
----------------------------------------------------------------------
diff --git a/npm-search/src/etc/favicon.ico b/npm-search/src/etc/favicon.ico
new file mode 100644
index 0000000..365e772
Binary files /dev/null and b/npm-search/src/etc/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/etc/manifest.json
----------------------------------------------------------------------
diff --git a/npm-search/src/etc/manifest.json b/npm-search/src/etc/manifest.json
new file mode 100644
index 0000000..c996156
--- /dev/null
+++ b/npm-search/src/etc/manifest.json
@@ -0,0 +1,41 @@
+{
+	"name": "Cordova npm Search",
+	"icons": [
+		{
+			"src": "\/img\/android-chrome-36x36.png",
+			"sizes": "36x36",
+			"type": "image\/png",
+			"density": "0.75"
+		},
+		{
+			"src": "\/img\/android-chrome-48x48.png",
+			"sizes": "48x48",
+			"type": "image\/png",
+			"density": "1.0"
+		},
+		{
+			"src": "\/img\/android-chrome-72x72.png",
+			"sizes": "72x72",
+			"type": "image\/png",
+			"density": "1.5"
+		},
+		{
+			"src": "\/img\/android-chrome-96x96.png",
+			"sizes": "96x96",
+			"type": "image\/png",
+			"density": "2.0"
+		},
+		{
+			"src": "\/img\/android-chrome-144x144.png",
+			"sizes": "144x144",
+			"type": "image\/png",
+			"density": "3.0"
+		},
+		{
+			"src": "\/img\/android-chrome-192x192.png",
+			"sizes": "192x192",
+			"type": "image\/png",
+			"density": "4.0"
+		}
+	]
+}

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/faq.html
----------------------------------------------------------------------
diff --git a/npm-search/src/faq.html b/npm-search/src/faq.html
new file mode 100644
index 0000000..53854f9
--- /dev/null
+++ b/npm-search/src/faq.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv='Content-type' content='text/html; charset=utf-8'>
+    <title>Cordova Search Website</title>
+    <link rel="stylesheet" href="/css/styles.css" />
+  </head>
+
+  <body>
+    <div id="header">
+      <div class="wrap">
+          <a class="logo" href="//cordova.apache.org/"></a>
+          <div class="menu">
+              <a href="index.html">Home</a>
+              <a href="developers.html">Developers</a>
+              <a href="faq.html">FAQ</a>
+          </div>
+          <form class="menu-dropdown">
+              <select onchange="location = this.options[this.selectedIndex].value;">
+                  <option value="index.html">Home</option>
+                  <option value="developers.html">Developers</option>
+                  <option value="faq.html">FAQ</option>
+              </select>
+          </form>
+      </div>
+      <div class="shadow"></div>
+    </div>
+    <div class="header-placeholder"></div>
+    <div class="wrap">
+      <h2 class="icon icon-about">npm Plugin Search FAQ</h2>
+      <h4>What is npm Plugin Search?</h4>
+      <p>On April 21 2015, Cordova team announced plans to move core and 3rd party plugins to npm ecosystem. npm Plugin Search page offers an easy and user friendly way to browse plugins that have completed this transition.</p>
+      <h4>What version of Cordova do I need to use npm?</h4>
+      <p>To start using plugins from npm, Cordova CLI version 5.0.0 or higher is required.</p>
+      <h4>How do I install plugins from npm?</h4>
+      <p>Cordova team decided to change official plugin IDs from org.apache.cordova.* to cordova-plugin-* to better fit within the npm ecosystem. Developers can install a plugin using the command <code>cordova plugin add cordova-plugin-device</code>.</p>
+      <h4>How do I know which platforms are supported for a plugin?</h4>
+      <p>Plugin Search displays plugins in form of cards. Each card contains important information about the plugin. Supported platforms is represented in form of platform tags. </p>
+      <h4>How can I identify official core plugins?</h4>
+      <p>Core plugins have a blue strip on the left side of their card.</p>
+      <h4>Can I still download plugins if I'm using Cordova CLI 4.3.0 or lower?</h4>
+      <p>Yes! You can use Cordova Plugins from the <a href="http://plugins.cordova.io/" target="_blank">old plugin registry</a>.</p>
+      <h4>What’s happening to the old plugin registry?</h4>
+      <p>See Cordova <a href="http://cordova.apache.org/announcements/2015/04/21/plugins-release-and-move-to-npm.html" target="_blank">blog</a> for more details. It’s being phased out:</p>
+      <ul>
+      <li>  Read-only after July 15th</li>
+      <li>  End of support after October 15th</li>
+      </ul>
+      <h4>Are there any additional documents to assist me with plugins?</h4>
+      <p>Yes there are. Please take a look at <a href="http://cordova.apache.org/docs/en/edge/guide_cli_index.md.html#The%20Command-Line%20Interface_add_plugin_features" target="_blank">Add Plugin Features</a> for a more detailed guide.</p>
+      <h4>I don't like X. How can I help improve the website?</h4>
+      <p>You can help improving this site by opening bugs on <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20%3D%20Open%20AND%20component%20%3D%20%22Registry%20Web%22" target="_blank">JIRA</a> or by sending PRs on <a href="https://github.com/apache/cordova-registry-web" target="_blank">GitHub</a>.</p>
+    </div>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-144x144.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-144x144.png b/npm-search/src/img/android-chrome-144x144.png
new file mode 100644
index 0000000..70826eb
Binary files /dev/null and b/npm-search/src/img/android-chrome-144x144.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-192x192.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-192x192.png b/npm-search/src/img/android-chrome-192x192.png
new file mode 100644
index 0000000..728f217
Binary files /dev/null and b/npm-search/src/img/android-chrome-192x192.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-36x36.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-36x36.png b/npm-search/src/img/android-chrome-36x36.png
new file mode 100644
index 0000000..277efed
Binary files /dev/null and b/npm-search/src/img/android-chrome-36x36.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-48x48.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-48x48.png b/npm-search/src/img/android-chrome-48x48.png
new file mode 100644
index 0000000..3a84506
Binary files /dev/null and b/npm-search/src/img/android-chrome-48x48.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-72x72.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-72x72.png b/npm-search/src/img/android-chrome-72x72.png
new file mode 100644
index 0000000..bc6a1fb
Binary files /dev/null and b/npm-search/src/img/android-chrome-72x72.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/android-chrome-96x96.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/android-chrome-96x96.png b/npm-search/src/img/android-chrome-96x96.png
new file mode 100644
index 0000000..961d0b4
Binary files /dev/null and b/npm-search/src/img/android-chrome-96x96.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-114x114.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-114x114.png b/npm-search/src/img/apple-touch-icon-114x114.png
new file mode 100644
index 0000000..68a5502
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-114x114.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-120x120.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-120x120.png b/npm-search/src/img/apple-touch-icon-120x120.png
new file mode 100644
index 0000000..85a0369
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-120x120.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-144x144.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-144x144.png b/npm-search/src/img/apple-touch-icon-144x144.png
new file mode 100644
index 0000000..70826eb
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-144x144.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-152x152.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-152x152.png b/npm-search/src/img/apple-touch-icon-152x152.png
new file mode 100644
index 0000000..92034ec
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-152x152.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-180x180.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-180x180.png b/npm-search/src/img/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..90032cf
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-180x180.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-57x57.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-57x57.png b/npm-search/src/img/apple-touch-icon-57x57.png
new file mode 100644
index 0000000..e2f87c3
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-57x57.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-60x60.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-60x60.png b/npm-search/src/img/apple-touch-icon-60x60.png
new file mode 100644
index 0000000..1055d9f
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-60x60.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-72x72.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-72x72.png b/npm-search/src/img/apple-touch-icon-72x72.png
new file mode 100644
index 0000000..bc6a1fb
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-72x72.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-76x76.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-76x76.png b/npm-search/src/img/apple-touch-icon-76x76.png
new file mode 100644
index 0000000..8404b3c
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-76x76.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon-precomposed.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon-precomposed.png b/npm-search/src/img/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000..4663c60
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon-precomposed.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/apple-touch-icon.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/apple-touch-icon.png b/npm-search/src/img/apple-touch-icon.png
new file mode 100644
index 0000000..90032cf
Binary files /dev/null and b/npm-search/src/img/apple-touch-icon.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/favicon-16x16.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/favicon-16x16.png b/npm-search/src/img/favicon-16x16.png
new file mode 100644
index 0000000..f7667c5
Binary files /dev/null and b/npm-search/src/img/favicon-16x16.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/favicon-32x32.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/favicon-32x32.png b/npm-search/src/img/favicon-32x32.png
new file mode 100644
index 0000000..249dbc1
Binary files /dev/null and b/npm-search/src/img/favicon-32x32.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/favicon-96x96.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/favicon-96x96.png b/npm-search/src/img/favicon-96x96.png
new file mode 100644
index 0000000..961d0b4
Binary files /dev/null and b/npm-search/src/img/favicon-96x96.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/grid.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/grid.png b/npm-search/src/img/grid.png
new file mode 100644
index 0000000..5d97586
Binary files /dev/null and b/npm-search/src/img/grid.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/mstile-144x144.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/mstile-144x144.png b/npm-search/src/img/mstile-144x144.png
new file mode 100644
index 0000000..d648b83
Binary files /dev/null and b/npm-search/src/img/mstile-144x144.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/mstile-150x150.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/mstile-150x150.png b/npm-search/src/img/mstile-150x150.png
new file mode 100644
index 0000000..3e2de8a
Binary files /dev/null and b/npm-search/src/img/mstile-150x150.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/mstile-310x150.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/mstile-310x150.png b/npm-search/src/img/mstile-310x150.png
new file mode 100644
index 0000000..636fa5e
Binary files /dev/null and b/npm-search/src/img/mstile-310x150.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/mstile-310x310.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/mstile-310x310.png b/npm-search/src/img/mstile-310x310.png
new file mode 100644
index 0000000..17bc907
Binary files /dev/null and b/npm-search/src/img/mstile-310x310.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/mstile-70x70.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/mstile-70x70.png b/npm-search/src/img/mstile-70x70.png
new file mode 100644
index 0000000..6b4314f
Binary files /dev/null and b/npm-search/src/img/mstile-70x70.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/pluggy.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/pluggy.png b/npm-search/src/img/pluggy.png
new file mode 100644
index 0000000..1317585
Binary files /dev/null and b/npm-search/src/img/pluggy.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/search.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/search.png b/npm-search/src/img/search.png
new file mode 100644
index 0000000..9fb799b
Binary files /dev/null and b/npm-search/src/img/search.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/shadow.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/shadow.png b/npm-search/src/img/shadow.png
new file mode 100644
index 0000000..8c5ba5f
Binary files /dev/null and b/npm-search/src/img/shadow.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/img/sprite.png
----------------------------------------------------------------------
diff --git a/npm-search/src/img/sprite.png b/npm-search/src/img/sprite.png
new file mode 100644
index 0000000..7195426
Binary files /dev/null and b/npm-search/src/img/sprite.png differ

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/index.html
----------------------------------------------------------------------
diff --git a/npm-search/src/index.html b/npm-search/src/index.html
new file mode 100644
index 0000000..7c62ca1
--- /dev/null
+++ b/npm-search/src/index.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv='Content-type' content='text/html; charset=utf-8'>
+    <meta name='description' content='This website is used to search the apache cordova plugins hosted on npm. The plugins can be searched across titles, descriptions, authors, platforms and licenses. You can also view the download counts for each plugin. The page also displays platforms supported, version and last updated day for the cordova plugins.'>
+    <title>Cordova Plugin NPM Search</title>
+    <link rel="stylesheet" href="/css/styles.css" />
+    <link rel="apple-touch-icon" sizes="57x57" href="/img/apple-touch-icon-57x57.png">
+    <link rel="apple-touch-icon" sizes="60x60" href="/img/apple-touch-icon-60x60.png">
+    <link rel="apple-touch-icon" sizes="72x72" href="/img/apple-touch-icon-72x72.png">
+    <link rel="apple-touch-icon" sizes="76x76" href="/img/apple-touch-icon-76x76.png">
+    <link rel="apple-touch-icon" sizes="114x114" href="/img/apple-touch-icon-114x114.png">
+    <link rel="apple-touch-icon" sizes="120x120" href="/img/apple-touch-icon-120x120.png">
+    <link rel="apple-touch-icon" sizes="144x144" href="/img/apple-touch-icon-144x144.png">
+    <link rel="apple-touch-icon" sizes="152x152" href="/img/apple-touch-icon-152x152.png">
+    <link rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon-180x180.png">
+    <link rel="icon" type="image/png" href="/img/favicon-32x32.png" sizes="32x32">
+    <link rel="icon" type="image/png" href="/img/android-chrome-192x192.png" sizes="192x192">
+    <link rel="icon" type="image/png" href="/img/favicon-96x96.png" sizes="96x96">
+    <link rel="icon" type="image/png" href="/img/favicon-16x16.png" sizes="16x16">
+    <link rel="manifest" href="/etc/manifest.json">
+    <link rel="shortcut icon" href="/etc/favicon.ico">
+    <meta name="msapplication-TileColor" content="#da532c">
+    <meta name="msapplication-TileImage" content="/img/mstile-144x144.png">
+    <meta name="msapplication-config" content="/etc/browserconfig.xml">
+    <meta name="theme-color" content="#ffffff">
+  </head>
+
+  <body>
+    <div id="header">
+      <div class="wrap">
+          <a class="logo" href="//cordova.apache.org/"></a>
+          <div class="menu">
+              <a href="index.html">Home</a>
+              <a href="developers.html">Developers</a>
+              <a href="faq.html">FAQ</a>
+          </div>
+          <form class="menu-dropdown">
+              <select onchange="location = this.options[this.selectedIndex].value;">
+                  <option value="index.html">Home</option>
+                  <option value="developers.html">Developers</option>
+                  <option value="faq.html">FAQ</option>
+              </select>
+          </form>
+      </div>
+      <div class="shadow"></div>
+    </div>
+    <div class="header-placeholder"></div>
+    <div id="container"></div>
+    <script src="/js/app.js"></script>
+    <script>
+      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+      ga('create', 'UA-64283057-2', 'auto');
+      ga('send', 'pageview');
+    </script>
+    <script>App.start();</script>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/js/app.js
----------------------------------------------------------------------
diff --git a/npm-search/src/js/app.js b/npm-search/src/js/app.js
new file mode 100644
index 0000000..278f5ef
--- /dev/null
+++ b/npm-search/src/js/app.js
@@ -0,0 +1,493 @@
+var React    = window.React = require('react'), // assign it to window for react chrome extension
+    classNames = require('classnames'),
+    App = {};
+
+var Constants = {
+    DownloadCountBatch: 100,
+    NpmSearchInitialSize: 500
+}
+
+var OfficialPlugin = React.createClass({
+    render: function() {
+        return (
+            <div id="featured"></div>
+        );
+    }
+});
+
+var PlatformButton = React.createClass({
+    onClick: function() {
+        var appInstance = React.render(<App />, document.getElementById('container'));
+        appInstance.addCondition("platform:" + this.props.platform);
+    },
+    render: function() {
+        return (
+            <li className = "clickable" onClick={this.onClick}> {this.props.platform} </li>
+        );
+    }
+});
+
+var SupportedPlatforms = React.createClass({
+    getInitialState: function() {
+        return {
+            moreClicked: false
+        };
+    },
+    onClick: function() {
+        this.setState({
+            moreClicked: true
+        });
+    },
+    render: function() {
+        var keywords = this.props.keywords;
+        var sortedMajorPlatforms = [{present:false, text: "Android"}, {present:false, text: "iOS"}, {present:false, text: "Windows"}, {present:false, text: "Blackberry10"}];
+        var majorPlatformsSupported = [];
+        var otherPlatformsSupported = [];
+        // remove windows8 & windows dupe
+        if (keywords.indexOf('cordova-windows') > -1 && keywords.indexOf('cordova-windows8') > -1) {
+            keywords.splice(keywords.indexOf('cordova-windows8'), 1);
+        }
+        keywords.forEach(function(keyword) {
+            switch (keyword) {
+                case 'cordova-firefoxos':
+                    otherPlatformsSupported.push(<PlatformButton platform="FirefoxOS" />);
+                    break;
+                case 'cordova-android':
+                    sortedMajorPlatforms[0].present = true;
+                    break;
+                case 'cordova-amazon-fireos':
+                    otherPlatformsSupported.push(<PlatformButton platform="FireOS" />);
+                    break;
+                case 'cordova-ubuntu':
+                    otherPlatformsSupported.push(<PlatformButton platform="Ubuntu" />);
+                    break;
+                case 'cordova-ios':
+                    sortedMajorPlatforms[1].present = true;
+                    break;
+                case 'cordova-blackberry10':
+                    sortedMajorPlatforms[3].present = true;
+                    break;
+                case 'cordova-wp8':
+                    otherPlatformsSupported.push(<PlatformButton platform="Windows Phone 8" />);
+                    break;
+                case 'cordova-windows8':
+                case 'cordova-windows':
+                    sortedMajorPlatforms[2].present = true;
+                    break;
+                case 'cordova-browser':
+                    otherPlatformsSupported.push(<PlatformButton platform="Browser" />);
+                    break;
+            }
+        });
+
+        sortedMajorPlatforms.forEach(function(platform) {
+            if(platform.present) {
+                majorPlatformsSupported.push(<PlatformButton platform={platform.text} />)
+            }
+        });
+        while(majorPlatformsSupported.length < 4 && otherPlatformsSupported.length > 0) {
+            majorPlatformsSupported.push(otherPlatformsSupported.shift());
+        }
+
+        var moreButton;
+        if(otherPlatformsSupported.length > 0 && !this.state.moreClicked) {
+            moreButton = <li className="clickable" onClick={this.onClick}>...</li>
+        }
+        if (!this.state.moreClicked) {
+            otherPlatformsSupported = null;
+        }
+        return (
+            <ul className="supportedPlatforms">
+                {majorPlatformsSupported}
+                {moreButton}
+                {otherPlatformsSupported}
+            </ul>
+        );
+    }
+});
+
+var SearchBar = React.createClass({
+    handleChange: function() {
+        this.props.onUserInput(
+            this.refs.filterTextInput.getDOMNode().value
+        )
+    },
+    render: function() {
+        return (
+            <div className="col-xs-offset-2 col-xs-8">
+                <div id="searchwrapper">
+                    <input
+                        className="searchBox"
+                        type="search"
+                        autoComplete="off"
+                        placeholder={this.props.placeHolderText}
+                        value={this.props.filterText}
+                        ref="filterTextInput"
+                        onChange={this.handleChange}
+                    />
+                </div>
+            </div>
+        );
+    }
+});
+
+var Plugin = React.createClass({
+    shouldComponentUpdate: function(nextProps, nextState) {
+        return this.props.plugin !== nextProps.plugin;
+    },
+    render: function() {
+        var license = this.props.plugin.license;
+        if (license && license.length > 1) {
+            license = license[0];
+        }
+        var downloadField;
+
+        var classes = classNames({
+            'pluginCard': true,
+            'featuredPlugin': this.props.plugin.isOfficial,
+            'row': true
+        });
+
+        if(this.props.plugin.downloadCount) {
+            var downloadCount = this.props.plugin.downloadCount.toLocaleString();
+            downloadField = <p><small> {downloadCount} downloads last month</small></p>;
+        }
+        return (
+            <li>
+                <div className={classes}>
+                    <div className="primaryContent col-xs-9">
+                        <div className="header">
+                            <h3><a href={'https://www.npmjs.com/package/' + this.props.plugin.name} target="_blank">{this.props.plugin.name}</a></h3>
+                            <small className="pluginVersion">v{this.props.plugin.version}</small>
+                            <small> by </small>
+                            <small className="pluginAuthor">{this.props.plugin.author}</small>
+                        </div>
+                        <div className="pluginDesc">{this.props.plugin.description}</div>
+                        <SupportedPlatforms keywords={this.props.plugin.keywords}/>
+                        </div>
+                        <div className="secondaryContent col-xs-3">
+                        <div className="download">
+                            <p></p>
+                        </div>
+                        <div className="extraInfo">
+                            <p><small><strong>License:</strong> {license}</small></p>
+                            {downloadField}
+                            <p><small><em>Last updated {this.props.plugin.modified} days ago</em></small></p>
+                        </div>
+                    </div>
+                </div>
+            </li>
+        )
+    }
+});
+
+var timer=null;
+
+window.addEventListener('popstate', function(e) {
+    if(e.state) {
+        var appInstance = React.render(<App />, document.getElementById('container'));
+        appInstance.loadFilterText(e.state.filterText);
+    }
+});
+
+var PluginList = React.createClass({
+    statics: {
+        contains: function(values, pluginInfo) {
+            var allValuesPresent = true;
+            if(values.length == 0) {
+                return allValuesPresent;
+            }
+            if(!pluginInfo) {
+                return false;
+            }
+            values.forEach(function(value) {
+                var valuePresent = false;
+                for(var index=0; index < pluginInfo.length; index++) {
+                    if(pluginInfo[index] && pluginInfo[index].toLowerCase().indexOf(value) > -1) {
+                        valuePresent = true;
+                    }
+                }
+                if(!valuePresent) {
+                    allValuesPresent = false;
+                }
+            });
+            return allValuesPresent;
+        },
+        populateFilters: function(filterText)
+        {
+            var searchStrings = filterText.split(" ");
+            var filters = [];
+            filters['platforms'] = [];
+            filters['authors'] = [];
+            filters['licenses'] = [];
+            filters['searchWords'] = [];
+
+            searchStrings.forEach(function(searchString) {
+                var keywords = searchString.split(":");
+                if(keywords.length == 1) {
+                    var param = keywords[0].trim();
+                    if(param) {
+                        filters['searchWords'].push(param);
+                    }
+                }
+                else if(keywords[1].trim()) {
+                    var param = keywords[1].trim();
+                    switch(keywords[0]) {
+                        case 'platform':
+                            filters['platforms'].push(param);
+                            break;
+                        case 'author':
+                            filters['authors'].push(param);
+                            break;
+                        case 'license':
+                            filters['licenses'].push(param);
+                            break;
+                        default:
+                            filters['searchWords'].push(searchString);
+                    }
+                }
+                else {
+                    filters['searchWords'].push(searchString);
+                }
+            });
+            return filters;
+        }
+    },
+    render: function() {
+        var plugins = [],
+            filterText = this.props.filterText.toLowerCase();
+
+        var delay = (function(){
+          return function(callback, ms){
+            clearTimeout (timer);
+            timer = setTimeout(callback, ms);
+          };
+        })();
+
+        delay(function(){
+                    window.history.pushState({"filterText":filterText}, "", "?q=" + filterText);
+            }, 2000 );
+
+        var filters = PluginList.populateFilters(filterText);
+
+        this.props.plugins.forEach(function(plugin) {
+            var fullPluginText = plugin.name.concat(plugin.author, plugin.keywords, plugin.license, plugin.description);
+            if(PluginList.contains(filters['platforms'], plugin.keywords)
+                && PluginList.contains(filters['authors'], plugin.author)
+                && PluginList.contains(filters['licenses'], plugin.license)
+                && PluginList.contains(filters['searchWords'], fullPluginText)) {
+                    plugins.push(<Plugin plugin={plugin} key={plugin.author + plugin.name}/>);
+            }
+        }.bind(this));
+        return (
+            <div className="col-xs-offset-2 col-xs-8">
+                <ul className="pluginList">
+                    {plugins}
+                </ul>
+            </div>
+        );
+    }
+});
+
+
+var App = React.createClass({
+    getInitialState: function() {
+        return {
+            plugins: [],
+            filterText: '',
+            placeHolderText: 'Loading...'
+        };
+    },
+    handleUserInput: function(filterText) {
+        this.setState({
+            filterText: filterText
+        });
+    },
+    addCondition: function(condition) {
+        this.setState(function(previousState, currentProps) {
+            if(previousState.filterText.indexOf(condition) > -1) {
+                return {
+                    filterText: previousState.filterText,
+                    plugins: previousState.plugins
+                };
+            }
+            else {
+                return {
+                    filterText: previousState.filterText.trim() + ' ' + condition + ' ',
+                    plugins: previousState.plugins
+                };
+            }
+        });
+    },
+    loadFilterText : function(filterText) {
+        this.setState(function(previousState, currentProps) {
+            return {
+                filterText: filterText,
+                plugins: previousState.plugins
+            };
+        });
+    },
+    statics: {
+        getURLParameter : function(name) {
+            return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)
+                ||[,""])[1].replace(/\+/g, '%20'))||null;
+        },
+        shallowCopy: function(src) {
+            var dst = {};
+            for(var i in src) {
+                if(src.hasOwnProperty(i)) {
+                    dst[i] = src[i];
+                }
+            }
+            return dst;
+        }
+    },
+    componentDidMount: function() {
+        var plugins = [],
+            officialPlugins = require('./official-plugins.json').plugins,
+            blacklistedPlugins = require('./blacklisted-plugins.json').plugins,
+            pluginCount = 0,
+            self = this,
+            queryHost = "http://npmsearch.com/query",
+            queryFields = "fields=name,keywords,license,description,author,modified,homepage,version",
+            queryKeywords = "q=keywords:%22ecosystem:cordova%22",
+            queryInitialSize = Constants.NpmSearchInitialSize;
+
+        xhrRequest(queryHost + "?" + queryFields + "&" + queryKeywords + "&size=" + queryInitialSize + "&start=0", function(xhrResult) {
+            plugins = xhrResult.results;
+            pluginCount = xhrResult.total;
+            if (pluginCount <= queryInitialSize) {
+                processPlugins.bind(self, officialPlugins, plugins)();
+            } else {
+                xhrRequest(queryHost + "?" + queryFields + "&" + queryKeywords + "&size=" + (pluginCount - queryInitialSize) + "&start=" + queryInitialSize, function(xhrResult) {
+                        plugins = [].concat(plugins, xhrResult.results);
+                        processPlugins.bind(self, officialPlugins, plugins)();
+                }, function() { console.log('xhr err'); });
+            }
+        }, function() { console.log('xhr err'); });
+
+        var getDownloadCount = function(plugins, that) {
+            var packageNames = "";
+            for(var index=0; index < plugins.length; index++) {
+                packageNames += plugins[index].name + ",";
+                if(index % Constants.DownloadCountBatch === 0 || index === plugins.length -1) {
+                    xhrRequest("https://api.npmjs.org/downloads/point/last-month/" + packageNames, function(xhrResult) {
+                        for(var j = 0; j < plugins.length; j++) {
+                            if(xhrResult[plugins[j].name]) {
+                                plugins[j] = App.shallowCopy(plugins[j]);
+                                plugins[j].downloadCount = xhrResult[plugins[j].name].downloads;
+                            }
+                        }
+                        that.setState({
+                            plugins: plugins
+                        });
+                    }.bind(self), function() { console.log('xhr err'); });
+                    packageNames = "";
+                }
+            }
+        }
+
+        function processPlugins(officialPlugins, plugins) {
+            var pluginCount = plugins.length,
+                dateNow = new Date(),
+                oneDay = 1000*60*60*24;
+
+            officialPlugins.forEach(function(plugin) {
+                for (var i = 0; i < plugins.length; i++) {
+                    // Check if plugin name is in official list
+                    if (plugins[i].name[0] === plugin) {
+                        plugins[i].isOfficial = true;
+                        return;
+                    }
+                };
+            });
+
+            for(var i = plugins.length -1; i >= 0 ; i--)
+            {
+                for(var j = 0; j < blacklistedPlugins.length; j++)
+                {
+                    if(plugins[i].name[0] === blacklistedPlugins[j])
+                    {
+                        plugins.splice(i, 1);
+                        break;
+                    }
+                }
+            }
+
+            for (var i = 0; i < plugins.length; i++) {
+                // Calculate last time plugin is modified (in days)
+                plugins[i].modified = Math.ceil((dateNow - new Date(plugins[i].modified)) / oneDay);
+            };
+
+            if (this.isMounted()) {
+                var q = App.getURLParameter('q');
+                if(q) {
+                    this.setState({
+                        plugins: plugins,
+                        filterText: q
+                    });
+                }
+                else {
+                    this.setState({
+                        plugins: plugins,
+                        placeHolderText: 'Search ' + pluginCount + ' plugins...'
+                    });
+                }
+                getDownloadCount(plugins,this);
+            }
+        }
+    },
+    render: function() {
+        return (
+            <div>
+                <div className="row" id="headerBackground">
+                    <div className="col-xs-offset-2 col-xs-8">
+                        <div id="topContent" className="row">
+                            <div className="col-xs-3">
+                                <div id="pluggy"></div>
+                            </div>
+                            <div className="col-xs-9">
+                                <h1><p className="discover-message">Search Cordova Plugins</p></h1>
+                            </div>
+                        </div>
+                    </div>
+                    <SearchBar
+                        filterText={this.state.filterText}
+                        placeHolderText={this.state.placeHolderText}
+                        onUserInput={this.handleUserInput}
+                    />
+                </div>
+                <div className="row">
+                    <PluginList
+                        plugins={this.state.plugins}
+                        filterText={this.state.filterText}
+                    />
+                </div>
+            </div>
+        );
+    }
+});
+
+App.start = function() {
+    React.render(<App />, document.getElementById('container'));
+};
+
+function xhrRequest(url, success, fail) {
+    var xhr = new XMLHttpRequest();
+    xhr.onreadystatechange = function() {
+        if (xhr.readyState == XMLHttpRequest.DONE ) {
+            if(xhr.status == 200){
+                success(JSON.parse(xhr.responseText));
+                return;
+            } else {
+                fail();
+                return;
+            }
+        }
+    }.bind(this)
+    xhr.open("GET", url, true);
+    xhr.send();
+}
+
+
+module.exports = window.App = App;

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/js/blacklisted-plugins.json
----------------------------------------------------------------------
diff --git a/npm-search/src/js/blacklisted-plugins.json b/npm-search/src/js/blacklisted-plugins.json
new file mode 100644
index 0000000..f0108ab
--- /dev/null
+++ b/npm-search/src/js/blacklisted-plugins.json
@@ -0,0 +1,7 @@
+{
+    "plugins" : [
+        "cordova-wp8",
+        "cordova-wp8-testtest",
+        "cordova-app-hello-world"
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/npm-search/src/js/official-plugins.json
----------------------------------------------------------------------
diff --git a/npm-search/src/js/official-plugins.json b/npm-search/src/js/official-plugins.json
new file mode 100644
index 0000000..d220cfb
--- /dev/null
+++ b/npm-search/src/js/official-plugins.json
@@ -0,0 +1,26 @@
+{
+    "plugins" : [
+        "cordova-plugin-battery-status",
+        "cordova-plugin-camera",
+        "cordova-plugin-console",
+        "cordova-plugin-contacts",
+        "cordova-plugin-device",
+        "cordova-plugin-device-motion",
+        "cordova-plugin-device-orientation",
+        "cordova-plugin-dialogs",
+        "cordova-plugin-file",
+        "cordova-plugin-file-transfer",
+        "cordova-plugin-geolocation",
+        "cordova-plugin-globalization",
+        "cordova-plugin-inappbrowser",
+        "cordova-plugin-legacy-whitelist",
+        "cordova-plugin-media",
+        "cordova-plugin-media-capture",
+        "cordova-plugin-ms-appinsights",
+        "cordova-plugin-network-information",
+        "cordova-plugin-splashscreen",
+        "cordova-plugin-statusbar",
+        "cordova-plugin-vibration",
+        "cordova-plugin-whitelist"
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-registry-web/blob/676d5b79/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index ab56fcc..e74e402 100644
--- a/package.json
+++ b/package.json
@@ -10,15 +10,16 @@
     "semver": "~2.0.10"
   },
   "devDependencies": {
-    "jsontool": "~4.0.0",
     "grunt": "~0.4.1",
-    "grunt-shell": "~0.6.2",
-    "grunt-contrib-watch": "~0.5.3",
-    "load-grunt-tasks": "~0.2.1",
-    "grunt-contrib-less": "~0.9.0",
     "grunt-connect-proxy": "~0.2.0",
+    "grunt-contrib-clean": "^0.6.0",
     "grunt-contrib-connect": "^0.7.1",
+    "grunt-contrib-copy": "~0.5.0",
+    "grunt-contrib-less": "~0.9.0",
+    "grunt-contrib-watch": "~0.5.3",
     "grunt-preprocess": "~4.0.0",
-    "grunt-contrib-copy": "~0.5.0"
+    "grunt-shell": "~0.6.2",
+    "jsontool": "~4.0.0",
+    "load-grunt-tasks": "~0.2.1"
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message