You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@climate.apache.org by jo...@apache.org on 2014/08/28 05:08:09 UTC

[25/28] CLIMATE-512 - Replace frontend with new Yeoman/Grunt/Bower frontend

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/app/views/resultslist.html
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/app/views/resultslist.html b/ocw-ui/frontend-new/app/views/resultslist.html
deleted file mode 100644
index f4664c6..0000000
--- a/ocw-ui/frontend-new/app/views/resultslist.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.
--->
-
-<h4>Select one of your previous runs. If none are displayed, please return
-  to the main page and start one!</h4>

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/app/views/selectobservation.html
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/app/views/selectobservation.html b/ocw-ui/frontend-new/app/views/selectobservation.html
deleted file mode 100644
index fd10ff8..0000000
--- a/ocw-ui/frontend-new/app/views/selectobservation.html
+++ /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.
--->
-
-<div ng-controller="ObservationSelectCtrl">
-  <div class="row">
-    <div class="col-md-12">
-      <div class="row">
-        <!--<form class="form-inline" autocomplete="off">-->
-        <form class="form" autocomplete="off">
-          <div class="form-group">
-            <div class="col-md-9">
-              <input id="observationFileInput" predictive-file-browser-input ng-model="filePathInput" type="text" class="form-control" autocomplete="off" placeholder="Navigate to a .nc file. Start by typing '/'" />
-            </div>
-            <div class="col-md-2">
-              <button class="btn" ng-click="uploadLocalFile()" ng-disabled="shouldDisableLoadButton()">
-                <div ng-hide="loadingFile">Parse File</div>
-                <div ng-show="loadingFile"><i class="icon-spinner icon-spin"></i></div>
-              </button>
-            </div>
-          </div>
-        </form>
-      </div>
-      <hr />
-      <div class="row top3">
-        <div class="col-md-5 text-center">
-          Evaluation Variable
-        </div>
-        <div class="col-md-6">
-          <select class="form-control" ng-model="paramSelect" ng-options="param for param in params"></select>
-        </div>
-      </div>
-      <div class="row top3">
-        <div class="col-md-5 text-center">
-          Latitude Variable
-        </div>
-        <div class="col-md-6">
-          <select class="form-control" ng-model="latsSelect" ng-options="lat for lat in lats"></select>
-        </div>
-      </div>
-      <div class="row top3">
-        <div class="col-md-5 text-center">
-          Longitude Variable
-        </div>
-        <div class="col-md-6">
-          <select class="form-control" ng-model="lonsSelect" ng-options="lon for lon in lons"></select>
-        </div>
-      </div>
-      <div class="row top3">
-        <div class="col-md-5 text-center">
-          Date/Time Variable
-        </div>
-        <div class="col-md-6">
-          <select class="form-control" ng-model="timeSelect" ng-options="time for time in times"></select>
-        </div>
-      </div>
-    </div>
-  </div>
-  <div class="row top3">
-    <div class="col-md-3 col-md-offset-1">
-      <button class="btn btn-primary btn-block" ng-click="addDataSet()">Add Dataset</button>
-    </div>
-    <div class="pull-left small-alert" ng-show="fileAdded">Successfully added dataset...</div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/app/views/selectrcmed.html
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/app/views/selectrcmed.html b/ocw-ui/frontend-new/app/views/selectrcmed.html
deleted file mode 100644
index 6b09f48..0000000
--- a/ocw-ui/frontend-new/app/views/selectrcmed.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 ng-controller="RcmedSelectionCtrl">
-  <div class="row">
-    <div class="col-md-10 col-md-offset-1">
-      <div class="row top3">Select the RCMED dataset that you would like use.</div>
-      <div class="row top3">
-        <select ng-change="dataSelectUpdated()" class="form-control" ng-model="datasetSelection" ng-options="obs as obs.longname for obs in availableObs"></select>
-      </div>
-      <div class="row top3">Select the dataset parameter that you would like to test.</div>
-      <div class="row top3">
-        <select class="form-control" ng-model="parameterSelection" ng-options="param as param.shortname for param in retrievedObsParams"></select>
-      </div>
-
-      <div class="row top3">
-        <div class="col-md-3">
-          <button class="btn btn-primary btn-block-left" ng-click="addObservation()">Add Observation</button>
-        </div>
-        <div class="pull-left small-alert" ng-show="fileAdded">Successfully added dataset...</div>
-      </div>
-    </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/bower.json
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/bower.json b/ocw-ui/frontend-new/bower.json
deleted file mode 100644
index d288a19..0000000
--- a/ocw-ui/frontend-new/bower.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "name": "ocw-ui",
-  "version": "0.0.0",
-  "dependencies": {
-    "angular": "1.2.16",
-    "json3": "~3.3.1",
-    "es5-shim": "~3.1.0",
-    "bootstrap": "~3.2.0",
-    "angular-resource": "1.2.16",
-    "angular-cookies": "1.2.16",
-    "angular-animate": "1.2.16",
-    "angular-route": "1.2.16",
-    "angular-ui-router": "angular-ui/ui-router#~0.2.10",
-    "leaflet": "~0.7.3",
-    "chap-links-timeline": "~2.6.1",
-    "components-font-awesome": "~4.1.0",
-    "angular-bootstrap": "~0.11.0",
-    "angular-ui-date": "~0.0.3"
-  },
-  "devDependencies": {
-    "angular-mocks": "1.2.16",
-    "angular-scenario": "1.2.16"
-  },
-  "appPath": "app"
-}

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/package.json
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/package.json b/ocw-ui/frontend-new/package.json
deleted file mode 100644
index be2f597..0000000
--- a/ocw-ui/frontend-new/package.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "name": "ocwui",
-  "version": "0.0.0",
-  "dependencies": {},
-  "devDependencies": {
-    "grunt": "^0.4.1",
-    "grunt-autoprefixer": "^0.7.3",
-    "grunt-concurrent": "^0.5.0",
-    "grunt-contrib-clean": "^0.5.0",
-    "grunt-contrib-concat": "^0.4.0",
-    "grunt-contrib-connect": "^0.7.1",
-    "grunt-contrib-copy": "^0.5.0",
-    "grunt-contrib-cssmin": "^0.9.0",
-    "grunt-contrib-htmlmin": "^0.3.0",
-    "grunt-contrib-imagemin": "^0.7.0",
-    "grunt-contrib-jshint": "^0.10.0",
-    "grunt-contrib-uglify": "^0.4.0",
-    "grunt-contrib-watch": "^0.6.1",
-    "grunt-filerev": "^0.2.1",
-    "grunt-google-cdn": "^0.4.0",
-    "grunt-karma": "^0.8.3",
-    "grunt-newer": "^0.7.0",
-    "grunt-ngmin": "^0.0.3",
-    "grunt-svgmin": "^0.4.0",
-    "grunt-usemin": "^2.1.1",
-    "grunt-wiredep": "^1.8.0",
-    "jshint-stylish": "^0.2.0",
-    "karma": "^0.12.17",
-    "karma-jasmine": "^0.1.5",
-    "karma-phantomjs-launcher": "^0.1.4",
-    "load-grunt-tasks": "^0.4.0",
-    "time-grunt": "^0.3.1"
-  },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "scripts": {
-    "test": "grunt test"
-  }
-}

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/.jshintrc
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/.jshintrc b/ocw-ui/frontend-new/test/.jshintrc
deleted file mode 100644
index b1be025..0000000
--- a/ocw-ui/frontend-new/test/.jshintrc
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "node": true,
-  "browser": true,
-  "esnext": true,
-  "bitwise": true,
-  "camelcase": true,
-  "curly": true,
-  "eqeqeq": true,
-  "immed": true,
-  "indent": 2,
-  "latedef": true,
-  "newcap": true,
-  "noarg": true,
-  "quotmark": "single",
-  "regexp": true,
-  "undef": true,
-  "unused": true,
-  "strict": true,
-  "trailing": true,
-  "smarttabs": true,
-  "globals": {
-    "after": false,
-    "afterEach": false,
-    "angular": false,
-    "before": false,
-    "beforeEach": false,
-    "browser": false,
-    "describe": false,
-    "expect": false,
-    "inject": false,
-    "it": false,
-    "jasmine": false,
-    "spyOn": false
-  }
-}
-

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/karma.conf.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/karma.conf.js b/ocw-ui/frontend-new/test/karma.conf.js
deleted file mode 100644
index 744d927..0000000
--- a/ocw-ui/frontend-new/test/karma.conf.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// Karma configuration
-// http://karma-runner.github.io/0.12/config/configuration-file.html
-// Generated on 2014-07-15 using
-// generator-karma 0.8.3
-
-module.exports = function(config) {
-  'use strict';
-
-  config.set({
-    // enable / disable watching file and executing tests whenever any file changes
-    autoWatch: true,
-
-    // base path, that will be used to resolve files and exclude
-    basePath: '../',
-
-    // testing framework to use (jasmine/mocha/qunit/...)
-    frameworks: ['jasmine'],
-
-    // list of files / patterns to load in the browser
-    files: [
-      'bower_components/angular/angular.js',
-      'bower_components/angular-mocks/angular-mocks.js',
-      'bower_components/angular-animate/angular-animate.js',
-      'bower_components/angular-cookies/angular-cookies.js',
-      'bower_components/angular-resource/angular-resource.js',
-      'bower_components/angular-route/angular-route.js',
-      'bower_components/angular-animate/angular-animate.js',
-      'bower_components/angular-bootstrap/ui-bootstrap.js',
-      // For some reason this causes the tests to completely fail to run
-      // if it is uncommented.
-      //'bower_components/angular-scenario/angular-scenario.js',
-      'bower_components/angular-ui-date/src/date.js',
-      'bower_components/angular-ui-router/release/angular-ui-router.js',
-      'bower_components/chap-links-timeline/timeline.js',
-      'bower_components/jquery/dist/jquery.js',
-      'bower_components/jquery-ui/jquery-ui.js',
-      'bower_components/leaflet/dist/leaflet.js',
-      'app/scripts/**/*.js',
-      'test/mock/**/*.js',
-      'test/spec/**/*.js'
-    ],
-
-    // list of files / patterns to exclude
-    exclude: [],
-
-    // web server port
-    port: 8080,
-
-    // Start these browsers, currently available:
-    // - Chrome
-    // - ChromeCanary
-    // - Firefox
-    // - Opera
-    // - Safari (only Mac)
-    // - PhantomJS
-    // - IE (only Windows)
-    browsers: [
-      'PhantomJS',
-      //'Chrome'
-    ],
-
-    // Which plugins to enable
-    plugins: [
-      'karma-phantomjs-launcher',
-      'karma-chrome-launcher',
-      'karma-jasmine'
-    ],
-
-    // Continuous Integration mode
-    // if true, it capture browsers, run tests and exit
-    singleRun: false,
-
-    colors: true,
-
-    // level of logging
-    // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
-    logLevel: config.LOG_INFO,
-
-    // Uncomment the following lines if you are using grunt's server to run the tests
-    // proxies: {
-    //   '/': 'http://localhost:9000/'
-    // },
-    // URL root prevent conflicts with the site root
-    // urlRoot: '_karma_'
-  });
-};

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/datasetdisplay.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/datasetdisplay.js b/ocw-ui/frontend-new/test/spec/controllers/datasetdisplay.js
deleted file mode 100644
index 15a4a02..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/datasetdisplay.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: DatasetDisplayCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var DatasetdisplayctrlCtrl,
-      scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    DatasetdisplayctrlCtrl = $controller('DatasetDisplayCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should initialize the removeDataset function', function() {
-    scope.datasets.push(1);
-    scope.datasets.push(2);
-
-    expect(scope.datasets[0]).toBe(1);
-
-    scope.removeDataset(0);
-
-    expect(scope.datasets[0]).toBe(2);
-  });
-
-  it('should initialize the removeDataset function', function() {
-    scope.datasets.push(1);
-    scope.datasets.push(2);
-
-    expect(scope.datasets[0]).toBe(1);
-
-    scope.removeDataset(0);
-
-    expect(scope.datasets[0]).toBe(2);
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/datasetselect.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/datasetselect.js b/ocw-ui/frontend-new/test/spec/controllers/datasetselect.js
deleted file mode 100644
index abaeb43..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/datasetselect.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: DatasetSelectCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var DatasetselectCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    DatasetselectCtrl = $controller('DatasetSelectCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should initialize the disable clear button function', function() {
-    inject(function(selectedDatasetInformation) {
-      expect(scope.shouldDisableClearButton()).toBe(true);
-      selectedDatasetInformation.addDataset({});
-      expect(scope.shouldDisableClearButton()).toBe(false);
-    });
-  });
-
-  it('should initialize the clear datasets function', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset({});
-      expect(selectedDatasetInformation.getDatasetCount()).toBe(1);
-      scope.clearDatasets();
-      expect(selectedDatasetInformation.getDatasetCount()).toBe(0);
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/main.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/main.js b/ocw-ui/frontend-new/test/spec/controllers/main.js
deleted file mode 100644
index dad1469..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/main.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: MainCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var MainCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    MainCtrl = $controller('MainCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should attach a list of awesomeThings to the scope', function () {
-    expect(scope.awesomeThings.length).toBe(3);
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/observationselect.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/observationselect.js b/ocw-ui/frontend-new/test/spec/controllers/observationselect.js
deleted file mode 100644
index f544e22..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/observationselect.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: ObservationSelectCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var ObservationselectCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    ObservationselectCtrl = $controller('ObservationSelectCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should grab the default set of selected datasets from the service', function() {
-    expect(typeof scope.datasetCount).toBe('object');
-    expect(Object.keys(scope.datasetCount).length).toBe(0);
-  });
-
-  it('should initialize option arrays and default to the first element', function() {
-    expect(scope.params.length).toBe(1);
-    expect(scope.lats.length).toBe(1);
-    expect(scope.lons.length).toBe(1);
-    expect(scope.times.length).toBe(1);
-
-    expect(scope.params[0]).toEqual("Please select a file above");
-    expect(scope.lats[0]).toEqual("Please select a file above");
-    expect(scope.lons[0]).toEqual("Please select a file above");
-    expect(scope.times[0]).toEqual("Please select a file above");
-  });
-
-  it('should initialize scope attributes properly', function() {
-    inject(function($httpBackend, $rootScope, $controller) {
-      $rootScope.baseURL = "http://localhost:8082"
-      $httpBackend.expectJSONP($rootScope.baseURL + '/dir/path_leader/?callback=JSON_CALLBACK').
-        respond(200, {'leader': '/usr/local/ocw'});
-      $httpBackend.whenGET('views/main.html').respond(200);
-      $httpBackend.flush();
-
-      expect(scope.pathLeader).toEqual('/usr/local/ocw');
-      expect(scope.loadingFile).toBe(false);
-      expect(scope.fileAdded).toBe(false);
-      expect(typeof scope.latLonVals).toEqual('object');
-      expect(scope.latLonVals.length).toBe(0);
-      expect(typeof scope.timeVals).toEqual('object');
-      expect(scope.timeVals.length).toEqual(0);
-      expect(typeof scope.localSelectForm).toEqual('object');
-      expect(Object.keys(scope.localSelectForm).length).toEqual(0);
-    });
-  });
-
-  it('should initialize the uploadLocalFile function', function() {
-    inject(function($httpBackend, $rootScope, $controller) {
-      $rootScope.baseURL = "http://localhost:8082"
-      $httpBackend.expectJSONP($rootScope.baseURL + '/dir/path_leader/?callback=JSON_CALLBACK').
-        respond(200, {'leader': null});
-      $httpBackend.whenGET('views/main.html').respond(200);
-
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_vars/undefined?callback=JSON_CALLBACK').
-        respond(200, {"variables": ["lat", "lon", "prec", "time" ]});
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_latlon/undefined?callback=JSON_CALLBACK').
-        respond(200, {'latMax': '75.25', 'success': 1, 'lat_name': 'lat', 'lonMax': '-29.75', 'lonMin': '-159.75', 'lon_name': 'lon', 'latMin': '15.25'});
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_time/undefined?callback=JSON_CALLBACK').
-        respond(200, {"start_time": "1980-01-01 00:00:00", "time_name": "time", "success": 1, "end_time": "2004-12-01 00:00:00"});
-
-      scope.uploadLocalFile();
-      $httpBackend.flush();
-
-      expect(scope.latsSelect).toEqual("lat");
-      expect(scope.lonsSelect).toEqual("lon");
-      expect(scope.timeSelect).toEqual("time");
-      expect(scope.paramSelect).toEqual("prec");
-
-      // Simulate failure on one of the backend calls. Should
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_vars/undefined?callback=JSON_CALLBACK').
-        respond(200, {});
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_latlon/undefined?callback=JSON_CALLBACK').
-        respond(404, {});
-      $httpBackend.expectJSONP($rootScope.baseURL + '/lfme/list_time/undefined?callback=JSON_CALLBACK').
-        respond(200, {});
-
-      scope.uploadLocalFile();
-      $httpBackend.flush();
-
-      expect(scope.paramSelect).toEqual("Unable to load variable(s)");
-      expect(scope.params.length).toEqual(1);
-      expect(scope.latsSelect).toEqual("Unable to load variable(s)");
-      expect(scope.lats.length).toEqual(1);
-      expect(scope.lonsSelect).toEqual("Unable to load variable(s)");
-      expect(scope.lons.length).toEqual(1);
-      expect(scope.timeSelect).toEqual("Unable to load variable(s)");
-      expect(scope.times.length).toEqual(1);
-    });
-  });
-
-  it('should initialize the addDatasets function', function() {
-    expect(typeof(scope.addDataSet)).toBe("function");
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/parameterselect.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/parameterselect.js b/ocw-ui/frontend-new/test/spec/controllers/parameterselect.js
deleted file mode 100644
index aa4cbd8..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/parameterselect.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http: *www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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';
-
-describe('Controller: ParameterSelectCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var ParameterselectCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    ParameterselectCtrl = $controller('ParameterSelectCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should initialize spatial and temporal range default values properly', function() {
-    expect(scope.latMin).toBe(-90);
-    expect(scope.latMax).toBe(90);
-    expect(scope.lonMin).toBe(-180);
-    expect(scope.lonMax).toBe(180);
-    expect(scope.start).toBe("1900-01-01 00:00:00");
-    expect(scope.end).toBe("2030-01-01 00:00:00");
-  });
-
-  it('should grab the default set of selected datasets from the service', function() {
-    // We should get an object with no keys since the user hasn't selected any
-    // datasets by default. Object.keys returns an array of all the user defined
-    // keys in the object.
-    expect(typeof scope.datasets).toBe('object');
-    expect(Object.keys(scope.datasets).length).toBe(0);
-  });
-
-  it('should grab the default region select param object from the regionSelectParams service', function() {
-    // The default display values aren't going to be changing any time soon. This test 
-    // is a bit of a duplicate since this is really testing functionality of the service.
-    // Can't hurt to make sure that we're getting results though!
-    expect(typeof scope.displayParams).toBe('object');
-    expect(Object.keys(scope.displayParams).length).toBe(7);
-  });
-
-  it('should initialize misc. values properly', function() {
-    expect(scope.runningEval).toBe(false);
-    expect(scope.areInUserRegridState).toBe(false);
-    expect(scope.latSliderVal).toBe(0);
-    expect(scope.lonSliderVal).toBe(0);
-  });
-
-  it('should set the default datepicker settings', function() {
-    // This tests the default values that get passed to the datepicker objects that we
-    // initialize with a directive.
-    expect(Object.keys(scope.datepickerSettings).length).toBe(2);
-    expect(scope.datepickerSettings.changeMonth).toBe(true);
-    expect(scope.datepickerSettings.changeYear).toBe(true);
-  });
-
-  it('should initialize the control disable function', function() {
-    // Add to dummy values to datasets to make sure the disable function
-    // triggers properly.
-    scope.datasets.push(1);
-    scope.datasets.push(2);
-    expect(scope.shouldDisableControls()).toBe(false);
-  });
-
-  it('should initialize the disable evaluation button function', function() {
-    expect(scope.shouldDisableEvaluateButton()).toBe(true);
-    scope.datasets.push(1);
-    expect(scope.shouldDisableEvaluateButton()).toBe(true);
-    scope.datasets.push(2);
-    expect(scope.shouldDisableEvaluateButton()).toBe(false);
-    scope.runningEval = true;
-    expect(scope.shouldDisableEvaluateButton()).toBe(true);
-  });
-
-  it('should initialize the disable results view function', function() {
-    inject(function($rootScope) {
-      expect(scope.shouldDisableResultsView()).toBe(true);
-
-      // Set evalResults to something other than the default value
-      $rootScope.evalResults = "this is not an empty string";
-
-      expect(scope.shouldDisableResultsView()).toBe(false);
-    });
-  });
-
-  /*
-   * TODO: $scope.$apply() in the controller is breaking this test. Need to
-   * find a way to deal with that or rethink how we handle this test.
-   *
-   */
-  /*
-  it('should initialize the check parameters function', function() {
-      // Set the displayParams values to be "out of bounds" values so checkParams 
-      // adjusts them properly.
-      scope.displayParams.latMin = "-95";
-      scope.displayParams.latMax = "95";
-      scope.displayParams.lonMin = "-185";
-      scope.displayParams.lonMax = "185";
-      scope.displayParams.start = "1980-00-00 00:00:00";
-      scope.displayParams.end = "2031-01-01 00:00:00";
-
-      // If we don't remove the watch on datasets we end up with displayParam values 
-      // all being undefined (but only during testing, which is odd...)
-      scope.unwatchDatasets();
-      scope.checkParameters();
-
-      expect(scope.displayParams.latMin).toBe(-90);
-      expect(scope.displayParams.latMax).toBe(90);
-      expect(scope.displayParams.lonMin).toBe(-180);
-      expect(scope.displayParams.lonMax).toBe(180);
-      expect(scope.displayParams.start).toBe('1980-01-01 00:00:00');
-      expect(scope.displayParams.end).toBe('2030-01-01 00:00:00');
-  });
-  */
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/rcmedselection.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/rcmedselection.js b/ocw-ui/frontend-new/test/spec/controllers/rcmedselection.js
deleted file mode 100644
index 97011c7..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/rcmedselection.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http: *www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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';
-
-describe('Controller: RcmedSelectionCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var RcmedselectionCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    RcmedselectionCtrl = $controller('RcmedSelectionCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should automatically query RCMED on initialization', function() {
-    inject(function($rootScope, $httpBackend) {
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(200, [{longname: 1}, {longname: 2}]);
-      $httpBackend.expectGET($rootScope.baseURL + '/rcmed/parameters/bounds/').respond(503)
-      $httpBackend.expectGET('views/main.html').respond(200);
-      $httpBackend.flush();
-
-      expect(scope.availableObs.length).toBe(3);
-      expect(scope.availableObs[0]).toEqual({longname: "Please select an option"});
-      expect(scope.availableObs[1]).toEqual({longname: 1});
-    });
-  });
-
-  it('should initialize the getObservations function', function() {
-    inject(function($rootScope, $httpBackend) {
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(200, [{longname: 1}, {longname: 2}]);
-      $httpBackend.expectGET($rootScope.baseURL + '/rcmed/parameters/bounds/').respond(503)
-      $httpBackend.expectGET('views/main.html').respond(200);
-      $httpBackend.flush();
-
-      expect(scope.availableObs.length).toBe(3);
-      expect(scope.availableObs[0]).toEqual({longname: "Please select an option"});
-      expect(scope.availableObs[1]).toEqual({longname: 1});
-
-      // Set up a failed query
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(404);
-      scope.getObservations();
-      $httpBackend.flush();
-
-      expect(scope.availableObs.length).toBe(1);
-      expect(scope.availableObs[0]).toEqual('Unable to query RCMED');
-    });
-  });
-
-  it('should initialize dataSelectUpdated function', function() {
-    inject(function($rootScope, $controller, $httpBackend) {
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(200, [{longname: 1}, {longname: 2}]);
-      $httpBackend.expectGET($rootScope.baseURL + '/rcmed/parameters/bounds/').respond(503)
-      $httpBackend.expectGET('views/main.html').respond(200);
-      $httpBackend.flush();
-
-      // Add the test dataset to our scope
-      scope.datasetSelection = {shortname: 'TRMM'}
-
-      // Test return with only single parameter
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/parameters/?dataset=' +
-                  scope.datasetSelection['shortname'] +
-                  '&callback=JSON_CALLBACK').
-             respond(200, ['pcp']);
-      scope.dataSelectUpdated();
-      $httpBackend.flush();
-
-      expect(scope.parameterSelection).toEqual('pcp');
-
-      // Test return with multiple parameters
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/parameters/?dataset=' +
-                  scope.datasetSelection['shortname'] +
-                  '&callback=JSON_CALLBACK').
-             respond(200, ['pcp', 'pcp2']);
-      scope.dataSelectUpdated();
-      $httpBackend.flush();
-
-      expect(scope.parameterSelection).toEqual({shortname: 'Please select a parameter'});
-    });
-  });
-
-  it('should initialze the addObservation function', function() {
-    inject(function($rootScope, $controller, $httpBackend) {
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(200, [{longname: 1}, {longname: 2}]);
-      $httpBackend.expectGET($rootScope.baseURL + '/rcmed/parameters/bounds/').respond(503)
-      $httpBackend.expectGET('views/main.html').respond(200);
-      $httpBackend.flush();
-
-      scope.datasetSelection = {
-        "dataset_id" : "3",
-        "shortname"  : "TRMM",
-        "longname"   : "Tropical Rainfall Measuring Mission Dataset",
-        "source"     : "Readme for the Tropical Rainfall Measuring Mission (TRMM) Data Set"
-      };
-
-      scope.parameterSelection = {
-        "parameter_id":"36",
-        "shortname":"pcp",
-        "datasetshortname":"TRMM",
-        "longname":"TRMM v.6 Monthly Precipitation",
-        "units":"mm\/day"
-      };
-
-      // addObservations does a refresh of the selections with a re-query of the backend
-      // so we need to catch that call!
-      $httpBackend.expectJSONP($rootScope.baseURL + '/rcmed/datasets/?callback=JSON_CALLBACK').
-        respond(200, [{longname: 1}, {longname: 2}]);
-
-      scope.addObservation();
-      $httpBackend.flush();
-
-      expect(scope.datasetCount.length).toBe(1);
-      // The selection observation should be reset so we shouldn't have
-      // any selected observation parameters.
-      expect(scope.retrievedObsParams).toEqual([]);
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/result.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/result.js b/ocw-ui/frontend-new/test/spec/controllers/result.js
deleted file mode 100644
index 495a473..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/result.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: ResultCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var ResultCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    ResultCtrl = $controller('ResultCtrl', {
-      $scope: scope
-    });
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/resultdetail.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/resultdetail.js b/ocw-ui/frontend-new/test/spec/controllers/resultdetail.js
deleted file mode 100644
index a29e508..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/resultdetail.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: ResultdetailCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var ResultdetailCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    ResultdetailCtrl = $controller('ResultdetailCtrl', {
-      $scope: scope
-    });
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/settings.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/settings.js b/ocw-ui/frontend-new/test/spec/controllers/settings.js
deleted file mode 100644
index e45accd..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/settings.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: SettingsCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var SettingsCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    SettingsCtrl = $controller('SettingsCtrl', {
-      $scope: scope
-    });
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/timeline.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/timeline.js b/ocw-ui/frontend-new/test/spec/controllers/timeline.js
deleted file mode 100644
index 1f3580f..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/timeline.js
+++ /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.
- */
-
-'use strict';
-
-describe('Controller: TimelineCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var TimelineCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    TimelineCtrl = $controller('TimelineCtrl', {
-      $scope: scope
-    });
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/controllers/worldmap.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/controllers/worldmap.js b/ocw-ui/frontend-new/test/spec/controllers/worldmap.js
deleted file mode 100644
index 76c702b..0000000
--- a/ocw-ui/frontend-new/test/spec/controllers/worldmap.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.
- */
-
-'use strict';
-
-describe('Controller: WorldMapCtrl', function () {
-
-  // load the controller's module
-  beforeEach(module('ocwUiApp'));
-
-  var WorldmapCtrl,
-    scope;
-
-  // Initialize the controller and a mock scope
-  beforeEach(inject(function ($controller, $rootScope) {
-    scope = $rootScope.$new();
-    WorldmapCtrl = $controller('WorldMapCtrl', {
-      $scope: scope
-    });
-  }));
-
-  it('should initialize the updateMap function', function() {
-    inject(function($rootScope, $controller) {
-      var scope = $rootScope.$new();
-      var ctrl = $controller("WorldMapCtrl", {$scope: scope});
-
-      // Set the important attributes for a fake dataset
-      scope.datasets.push({shouldDisplay: true, latlonVals: {latMin: 0, latMax: 0, lonMin: 0, lonMax: 0}});
-      // Don't try to add the user defined region since we don't have one
-      scope.regionParams.areValid = false;
-      // We need to fake the map object. The only thing we care about is faking the "addLayer" function
-      // and the "fitBounds" functions which our map controllers makes use of.
-      $rootScope.map = {addLayer: function(){}, fitBounds: function(){}};
-      $rootScope.fillColors = ['#ff0000'];
-
-      expect("rectangleGroup" in $rootScope).toBe(false);
-      scope.updateMap();
-      expect("rectangleGroup" in $rootScope).toBe(true);
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/bootstrapmodal.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/bootstrapmodal.js b/ocw-ui/frontend-new/test/spec/directives/bootstrapmodal.js
deleted file mode 100644
index 465f65e..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/bootstrapmodal.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.
- */
-
-'use strict';
-
-describe('Directive: bootstrapModal', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/bootstrapmodalopen.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/bootstrapmodalopen.js b/ocw-ui/frontend-new/test/spec/directives/bootstrapmodalopen.js
deleted file mode 100644
index 699210c..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/bootstrapmodalopen.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.
- */
-
-'use strict';
-
-describe('Directive: bootstrapModalOpen', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/leafletmap.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/leafletmap.js b/ocw-ui/frontend-new/test/spec/directives/leafletmap.js
deleted file mode 100644
index 85ccc6d..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/leafletmap.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.
- */
-
-'use strict';
-
-describe('Directive: leafletMap', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/onblur.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/onblur.js b/ocw-ui/frontend-new/test/spec/directives/onblur.js
deleted file mode 100644
index 7e8b83a..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/onblur.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.
- */
-
-'use strict';
-
-describe('Directive: onBlur', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-
-  it('should call the supplied function on the blur event', function() {
-    inject(function($compile) {
-      // Set a scope variable to make sure that on-blur calls 
-      // the function that we pass to it.
-      scope.bogusFunction = function() {
-        scope.test = "hi"
-      }
-
-      var element = angular.element('<input on-blur="bogusFunction();" />')
-      element = $compile(element)(scope)
-
-      expect(scope.test).toNotBe('hi');
-      element.triggerHandler('blur');
-      expect(scope.test).toBe('hi');
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/predictivefilebrowserinput.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/predictivefilebrowserinput.js b/ocw-ui/frontend-new/test/spec/directives/predictivefilebrowserinput.js
deleted file mode 100644
index 162b361..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/predictivefilebrowserinput.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.
- */
-
-'use strict';
-
-describe('Directive: predictiveFileBrowserInput', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/previewmap.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/previewmap.js b/ocw-ui/frontend-new/test/spec/directives/previewmap.js
deleted file mode 100644
index 2a831c6..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/previewmap.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.
- */
-
-'use strict';
-
-describe('Directive: previewMap', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-
-  it('should set the proper class', function() {
-    inject(function($compile, $rootScope) {
-      $rootScope.dataset = {latlonVals: {latMax: 90, lonMax: 90, latMin: -90, lonMin: -90}, name: "TRMM"};
-
-      var element = $compile('<div preview-map="dataset"></div>')($rootScope);
-
-      expect(element.hasClass("preview-map")).toBeTruthy();
-    });
-  });
-  
-  it('should set the id of the template to the name of the dataset', function() {
-    inject(function($compile, $rootScope) {
-      $rootScope.dataset = {latlonVals: {latMax: 90, lonMax: 90, latMin: -90, lonMin: -90}, name: "TRMM"};
-
-      var element = $compile('<div preview-map="dataset"></div>')($rootScope);
-
-      expect(element.attr('id')).toEqual("{{dataset.name}}");
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/directives/timeline.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/directives/timeline.js b/ocw-ui/frontend-new/test/spec/directives/timeline.js
deleted file mode 100644
index 06c72e1..0000000
--- a/ocw-ui/frontend-new/test/spec/directives/timeline.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.
- */
-
-'use strict';
-
-describe('Directive: timeline', function () {
-
-  // load the directive's module
-  beforeEach(module('ocwUiApp'));
-
-  var element,
-    scope;
-
-  beforeEach(inject(function ($rootScope) {
-    scope = $rootScope.$new();
-  }));
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/filters/isodatetomiddleendian.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/filters/isodatetomiddleendian.js b/ocw-ui/frontend-new/test/spec/filters/isodatetomiddleendian.js
deleted file mode 100644
index 966b333..0000000
--- a/ocw-ui/frontend-new/test/spec/filters/isodatetomiddleendian.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *    http: *www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT 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';
-
-describe('Filter: ISODateToMiddleEndian', function () {
-
-  // load the filter's module
-  beforeEach(module('ocwUiApp'));
-
-  // initialize a new instance of the filter before each test
-  var ISODateToMiddleEndian;
-  beforeEach(inject(function ($filter) {
-    ISODateToMiddleEndian = $filter('ISODateToMiddleEndian');
-  }));
-
-	describe('ISODateToMiddleEndian', function() {
-		it('should replace the ISO Date/Time stamp', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('2012-01-02T00:00:00')).toEqual('01/02/2012');
-			});
-		});
-
-		it('should replace the modified ISO Date/Time stamp', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('2012-01-02 00:00:00')).toEqual('01/02/2012');
-			});
-		});
-
-		it('should replace the ISO Date stamp', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('2012-01-02')).toEqual('01/02/2012');
-			});
-		});
-
-		it('should replace leading and trailing whitespace', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('      2012-01-02T00:00:00    ')).toEqual('01/02/2012');
-			});
-		});
-
-		it('should do nothing when the date format has the incorrect number of hyphens', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('2012-234T234')).toEqual('2012-234T234')
-			});
-		});
-
-		it('should do nothing when the date format has no hyphens', function() {
-			inject(function($filter) {
-				var filter = $filter('ISODateToMiddleEndian');
-				expect(filter('2012234T234')).toEqual('2012234T234')
-			});
-		});
-	});
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/services/evaluationsettings.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/services/evaluationsettings.js b/ocw-ui/frontend-new/test/spec/services/evaluationsettings.js
deleted file mode 100644
index 01fa63b..0000000
--- a/ocw-ui/frontend-new/test/spec/services/evaluationsettings.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.
- */
-
-'use strict';
-
-describe('Service: evaluationSettings', function () {
-
-  // load the service's module
-  beforeEach(module('ocwUiApp'));
-
-  // instantiate service
-  var evaluationSettings;
-  beforeEach(inject(function (_evaluationSettings_) {
-    evaluationSettings = _evaluationSettings_;
-  }));
-
-  it('should initialize the evaluationSettings service', function() {
-    inject(function(evaluationSettings) {
-      expect(evaluationSettings).not.toEqual(null);
-    });
-  });
-
-  it('should provide a getSettings function', function() {
-    inject(function(evaluationSettings) {
-      expect(evaluationSettings.getSettings()).not.toEqual(null);
-    })
-  })
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/services/regionselectparams.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/services/regionselectparams.js b/ocw-ui/frontend-new/test/spec/services/regionselectparams.js
deleted file mode 100644
index 34cfe54..0000000
--- a/ocw-ui/frontend-new/test/spec/services/regionselectparams.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.
- */
-
-'use strict';
-
-describe('Service: regionSelectParams', function () {
-
-  // load the service's module
-  beforeEach(module('ocwUiApp'));
-
-  // instantiate service
-  var regionSelectParams;
-  beforeEach(inject(function (_regionSelectParams_) {
-    regionSelectParams = _regionSelectParams_;
-  }));
-
-  it('should initialize the regionSelectParams service', function() {
-    inject(function(regionSelectParams) {
-      expect(regionSelectParams).not.toEqual(null);
-    });
-  });
-
-  it('should provide the getParameters function', function() {
-    inject(function(regionSelectParams) {
-      expect(regionSelectParams.getParameters()).not.toEqual(null);
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend-new/test/spec/services/selecteddatasetinformation.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend-new/test/spec/services/selecteddatasetinformation.js b/ocw-ui/frontend-new/test/spec/services/selecteddatasetinformation.js
deleted file mode 100644
index 60c1ac2..0000000
--- a/ocw-ui/frontend-new/test/spec/services/selecteddatasetinformation.js
+++ /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.
- */
-
-'use strict';
-
-describe('Service: selectedDatasetInformation', function () {
-
-  // load the service's module
-  beforeEach(module('ocwUiApp'));
-
-  // instantiate service
-  var selectedDatasetInformation;
-  beforeEach(inject(function (_selectedDatasetInformation_) {
-    selectedDatasetInformation = _selectedDatasetInformation_;
-  }));
-
-  it('should initialize the selectedDatasetInformation service', function() {
-    inject(function(selectedDatasetInformation) {
-      expect(selectedDatasetInformation).not.toEqual(null);
-    });
-  });
-
-  it('should provide the getDatasets function', function() {
-    inject(function(selectedDatasetInformation) {
-      expect(selectedDatasetInformation.getDatasets()).not.toEqual(null);
-    });
-  });
-
-  it('should provide the getDatasetCount function', function() {
-    inject(function(selectedDatasetInformation) {
-      expect(selectedDatasetInformation.getDatasetCount()).toEqual(0);
-    });
-  });
-
-  it('should provide the addDataset function', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset({});
-      expect(selectedDatasetInformation.getDatasetCount()).toEqual(1);
-    });
-  });
-
-  it('should set the shouldDisplay attribute when adding a dataset', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset({});
-      expect(selectedDatasetInformation.getDatasets()[0].shouldDisplay).toBe(false);
-    });
-  });
-
-  it('should set the regrid attribute when adding a dataset', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset({});
-      expect(selectedDatasetInformation.getDatasets()[0].regrid).toBe(false);
-    });
-  });
-
-  it('should provide the removeDataset function', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset(1);
-      selectedDatasetInformation.addDataset(2);
-
-      expect(selectedDatasetInformation.getDatasets()[0]).toEqual(1);
-      selectedDatasetInformation.removeDataset(0);
-      expect(selectedDatasetInformation.getDatasets()[0]).toEqual(2);
-    });
-  });
-
-  it('should provide the clearDatasets function', function() {
-    inject(function(selectedDatasetInformation) {
-      selectedDatasetInformation.addDataset({});
-      expect(selectedDatasetInformation.getDatasetCount()).toEqual(1);
-
-      selectedDatasetInformation.clearDatasets();
-      expect(selectedDatasetInformation.getDatasetCount()).toEqual(0);
-    });
-  });
-});

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.bowerrc
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.bowerrc b/ocw-ui/frontend/.bowerrc
new file mode 100644
index 0000000..69fad35
--- /dev/null
+++ b/ocw-ui/frontend/.bowerrc
@@ -0,0 +1,3 @@
+{
+  "directory": "bower_components"
+}

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.editorconfig
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.editorconfig b/ocw-ui/frontend/.editorconfig
new file mode 100644
index 0000000..c2cdfb8
--- /dev/null
+++ b/ocw-ui/frontend/.editorconfig
@@ -0,0 +1,21 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+# editorconfig.org
+
+root = true
+
+
+[*]
+
+# Change these settings to your own preference
+indent_style = space
+indent_size = 2
+
+# We recommend you to keep these unchanged
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.gitattributes
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.gitattributes b/ocw-ui/frontend/.gitattributes
new file mode 100644
index 0000000..2125666
--- /dev/null
+++ b/ocw-ui/frontend/.gitattributes
@@ -0,0 +1 @@
+* text=auto
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.gitignore
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.gitignore b/ocw-ui/frontend/.gitignore
new file mode 100644
index 0000000..a22a458
--- /dev/null
+++ b/ocw-ui/frontend/.gitignore
@@ -0,0 +1,5 @@
+node_modules
+dist
+.tmp
+.sass-cache
+bower_components

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.jshintrc
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.jshintrc b/ocw-ui/frontend/.jshintrc
new file mode 100644
index 0000000..40377ba
--- /dev/null
+++ b/ocw-ui/frontend/.jshintrc
@@ -0,0 +1,24 @@
+{
+  "node": true,
+  "browser": true,
+  "esnext": true,
+  "bitwise": true,
+  "camelcase": true,
+  "curly": true,
+  "eqeqeq": true,
+  "immed": true,
+  "indent": 2,
+  "latedef": true,
+  "newcap": true,
+  "noarg": true,
+  "quotmark": "single",
+  "regexp": true,
+  "undef": true,
+  "unused": true,
+  "strict": true,
+  "trailing": true,
+  "smarttabs": true,
+  "globals": {
+    "angular": false
+  }
+}

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/.travis.yml
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/.travis.yml b/ocw-ui/frontend/.travis.yml
new file mode 100644
index 0000000..a80b6e0
--- /dev/null
+++ b/ocw-ui/frontend/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+  - '0.10'
+before_script:
+  - 'npm install -g bower grunt-cli'
+  - 'bower install'

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/Gruntfile.js
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/Gruntfile.js b/ocw-ui/frontend/Gruntfile.js
new file mode 100644
index 0000000..0efb4ae
--- /dev/null
+++ b/ocw-ui/frontend/Gruntfile.js
@@ -0,0 +1,412 @@
+// Generated on 2014-07-15 using generator-angular 0.9.5
+'use strict';
+
+// # Globbing
+// for performance reasons we're only matching one level down:
+// 'test/spec/{,*/}*.js'
+// use this if you want to recursively match all subfolders:
+// 'test/spec/**/*.js'
+
+module.exports = function (grunt) {
+
+  // Load grunt tasks automatically
+  require('load-grunt-tasks')(grunt);
+
+  // Time how long tasks take. Can help when optimizing build times
+  require('time-grunt')(grunt);
+
+  // Configurable paths for the application
+  var appConfig = {
+    app: require('./bower.json').appPath || 'app',
+    dist: 'dist'
+  };
+
+  // Define the configuration for all the tasks
+  grunt.initConfig({
+
+    // Project settings
+    yeoman: appConfig,
+
+    // Watches files for changes and runs tasks based on the changed files
+    watch: {
+      bower: {
+        files: ['bower.json'],
+        tasks: ['wiredep']
+      },
+      js: {
+        files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
+        tasks: ['newer:jshint:all'],
+        options: {
+          livereload: '<%= connect.options.livereload %>'
+        }
+      },
+      jsTest: {
+        files: ['test/spec/{,*/}*.js'],
+        tasks: ['newer:jshint:test', 'karma']
+      },
+      styles: {
+        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
+        tasks: ['newer:copy:styles', 'autoprefixer']
+      },
+      gruntfile: {
+        files: ['Gruntfile.js']
+      },
+      livereload: {
+        options: {
+          livereload: '<%= connect.options.livereload %>'
+        },
+        files: [
+          '<%= yeoman.app %>/{,*/}*.html',
+          '.tmp/styles/{,*/}*.css',
+          '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
+        ]
+      }
+    },
+
+    // The actual grunt server settings
+    connect: {
+      options: {
+        port: 9000,
+        // Change this to '0.0.0.0' to access the server from outside.
+        hostname: 'localhost',
+        livereload: 35729
+      },
+      livereload: {
+        options: {
+          open: true,
+          middleware: function (connect) {
+            return [
+              connect.static('.tmp'),
+              connect().use(
+                '/bower_components',
+                connect.static('./bower_components')
+              ),
+              connect.static(appConfig.app)
+            ];
+          }
+        }
+      },
+      test: {
+        options: {
+          port: 9001,
+          middleware: function (connect) {
+            return [
+              connect.static('.tmp'),
+              connect.static('test'),
+              connect().use(
+                '/bower_components',
+                connect.static('./bower_components')
+              ),
+              connect.static(appConfig.app)
+            ];
+          }
+        }
+      },
+      dist: {
+        options: {
+          open: true,
+          base: '<%= yeoman.dist %>'
+        }
+      }
+    },
+
+    // Make sure code styles are up to par and there are no obvious mistakes
+    jshint: {
+      options: {
+        jshintrc: '.jshintrc',
+        reporter: require('jshint-stylish')
+      },
+      all: {
+        src: [
+          'Gruntfile.js',
+          '<%= yeoman.app %>/scripts/{,*/}*.js'
+        ]
+      },
+      test: {
+        options: {
+          jshintrc: 'test/.jshintrc'
+        },
+        src: ['test/spec/{,*/}*.js']
+      }
+    },
+
+    // Empties folders to start fresh
+    clean: {
+      dist: {
+        files: [{
+          dot: true,
+          src: [
+            '.tmp',
+            '<%= yeoman.dist %>/{,*/}*',
+            '!<%= yeoman.dist %>/.git*'
+          ]
+        }]
+      },
+      server: '.tmp'
+    },
+
+    // Add vendor prefixed styles
+    autoprefixer: {
+      options: {
+        browsers: ['last 1 version']
+      },
+      dist: {
+        files: [{
+          expand: true,
+          cwd: '.tmp/styles/',
+          src: '{,*/}*.css',
+          dest: '.tmp/styles/'
+        }]
+      }
+    },
+
+    // Automatically inject Bower components into the app
+    wiredep: {
+      options: {
+        cwd: '<%= yeoman.app %>'
+      },
+      app: {
+        src: ['<%= yeoman.app %>/index.html'],
+        ignorePath:  /\.\.\//
+      }
+    },
+
+    // Renames files for browser caching purposes
+    filerev: {
+      dist: {
+        src: [
+          '<%= yeoman.dist %>/scripts/{,*/}*.js',
+          '<%= yeoman.dist %>/styles/{,*/}*.css',
+          '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
+          '<%= yeoman.dist %>/styles/fonts/*'
+        ]
+      }
+    },
+
+    // Reads HTML for usemin blocks to enable smart builds that automatically
+    // concat, minify and revision files. Creates configurations in memory so
+    // additional tasks can operate on them
+    useminPrepare: {
+      html: '<%= yeoman.app %>/index.html',
+      options: {
+        dest: '<%= yeoman.dist %>',
+        flow: {
+          html: {
+            steps: {
+              js: ['concat', 'uglifyjs'],
+              css: ['cssmin']
+            },
+            post: {}
+          }
+        }
+      }
+    },
+
+    // Performs rewrites based on filerev and the useminPrepare configuration
+    usemin: {
+      html: ['<%= yeoman.dist %>/{,*/}*.html'],
+      css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
+      options: {
+        assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images']
+      }
+    },
+
+    // The following *-min tasks will produce minified files in the dist folder
+    // By default, your `index.html`'s <!-- Usemin block --> will take care of
+    // minification. These next options are pre-configured if you do not wish
+    // to use the Usemin blocks.
+    // cssmin: {
+    //   dist: {
+    //     files: {
+    //       '<%= yeoman.dist %>/styles/main.css': [
+    //         '.tmp/styles/{,*/}*.css'
+    //       ]
+    //     }
+    //   }
+    // },
+    // uglify: {
+    //   dist: {
+    //     files: {
+    //       '<%= yeoman.dist %>/scripts/scripts.js': [
+    //         '<%= yeoman.dist %>/scripts/scripts.js'
+    //       ]
+    //     }
+    //   }
+    // },
+    // concat: {
+    //   dist: {}
+    // },
+
+    imagemin: {
+      dist: {
+        files: [{
+          expand: true,
+          cwd: '<%= yeoman.app %>/images',
+          src: '{,*/}*.{png,jpg,jpeg,gif}',
+          dest: '<%= yeoman.dist %>/images'
+        }]
+      }
+    },
+
+    svgmin: {
+      dist: {
+        files: [{
+          expand: true,
+          cwd: '<%= yeoman.app %>/images',
+          src: '{,*/}*.svg',
+          dest: '<%= yeoman.dist %>/images'
+        }]
+      }
+    },
+
+    htmlmin: {
+      dist: {
+        options: {
+          collapseWhitespace: true,
+          conservativeCollapse: true,
+          collapseBooleanAttributes: true,
+          removeCommentsFromCDATA: true,
+          removeOptionalTags: true
+        },
+        files: [{
+          expand: true,
+          cwd: '<%= yeoman.dist %>',
+          src: ['*.html', 'views/{,*/}*.html'],
+          dest: '<%= yeoman.dist %>'
+        }]
+      }
+    },
+
+    // ngmin tries to make the code safe for minification automatically by
+    // using the Angular long form for dependency injection. It doesn't work on
+    // things like resolve or inject so those have to be done manually.
+    ngmin: {
+      dist: {
+        files: [{
+          expand: true,
+          cwd: '.tmp/concat/scripts',
+          src: '*.js',
+          dest: '.tmp/concat/scripts'
+        }]
+      }
+    },
+
+    // Replace Google CDN references
+    cdnify: {
+      dist: {
+        html: ['<%= yeoman.dist %>/*.html']
+      }
+    },
+
+    // Copies remaining files to places other tasks can use
+    copy: {
+      dist: {
+        files: [{
+          expand: true,
+          dot: true,
+          cwd: '<%= yeoman.app %>',
+          dest: '<%= yeoman.dist %>',
+          src: [
+            '*.{ico,png,txt}',
+            '.htaccess',
+            '*.html',
+            'views/{,*/}*.html',
+            'images/{,*/}*.{webp}',
+            'fonts/*'
+          ]
+        }, {
+          expand: true,
+          cwd: '.tmp/images',
+          dest: '<%= yeoman.dist %>/images',
+          src: ['generated/*']
+        }, {
+          expand: true,
+          cwd: 'bower_components/bootstrap/dist',
+          src: 'fonts/*',
+          dest: '<%= yeoman.dist %>'
+        }]
+      },
+      styles: {
+        expand: true,
+        cwd: '<%= yeoman.app %>/styles',
+        dest: '.tmp/styles/',
+        src: '{,*/}*.css'
+      }
+    },
+
+    // Run some tasks in parallel to speed up the build process
+    concurrent: {
+      server: [
+        'copy:styles'
+      ],
+      test: [
+        'copy:styles'
+      ],
+      dist: [
+        'copy:styles',
+        'imagemin',
+        'svgmin'
+      ]
+    },
+
+    // Test settings
+    karma: {
+      unit: {
+        configFile: 'test/karma.conf.js',
+        singleRun: true
+      }
+    }
+  });
+
+
+  grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
+    if (target === 'dist') {
+      return grunt.task.run(['build', 'connect:dist:keepalive']);
+    }
+
+    grunt.task.run([
+      'clean:server',
+      'wiredep',
+      'concurrent:server',
+      'autoprefixer',
+      'connect:livereload',
+      'watch'
+    ]);
+  });
+
+  grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) {
+    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
+    grunt.task.run(['serve:' + target]);
+  });
+
+  grunt.registerTask('test', [
+    'clean:server',
+    'concurrent:test',
+    'autoprefixer',
+    'connect:test',
+    'karma'
+  ]);
+
+  grunt.registerTask('build', [
+    'clean:dist',
+    'wiredep',
+    'useminPrepare',
+    'concurrent:dist',
+    'autoprefixer',
+    'concat',
+    'ngmin',
+    'copy:dist',
+    'cdnify',
+    'cssmin',
+    'uglify',
+    'filerev',
+    'usemin',
+    'htmlmin'
+  ]);
+
+  grunt.registerTask('default', [
+    'newer:jshint',
+    'test',
+    'build'
+  ]);
+};

http://git-wip-us.apache.org/repos/asf/climate/blob/652ea657/ocw-ui/frontend/app/.buildignore
----------------------------------------------------------------------
diff --git a/ocw-ui/frontend/app/.buildignore b/ocw-ui/frontend/app/.buildignore
new file mode 100644
index 0000000..fc98b8e
--- /dev/null
+++ b/ocw-ui/frontend/app/.buildignore
@@ -0,0 +1 @@
+*.coffee
\ No newline at end of file