You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by on...@apache.org on 2014/07/11 13:15:47 UTC
git commit: AMBARI-6466. Create UI skeleton. (onechiporenko)
Repository: ambari
Updated Branches:
refs/heads/trunk 76ad10f4a -> f3c8c2856
AMBARI-6466. Create UI skeleton. (onechiporenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f3c8c285
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f3c8c285
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f3c8c285
Branch: refs/heads/trunk
Commit: f3c8c28562c6726733541b36b9a271d443aa0b16
Parents: 76ad10f
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Fri Jul 11 14:11:36 2014 +0300
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Fri Jul 11 14:11:36 2014 +0300
----------------------------------------------------------------------
.../views/jobs/src/main/resources/ui/.bowerrc | 3 +
.../jobs/src/main/resources/ui/.editorconfig | 22 ++
.../jobs/src/main/resources/ui/.gitattributes | 1 +
.../views/jobs/src/main/resources/ui/.gitignore | 8 +
.../views/jobs/src/main/resources/ui/.jshintrc | 24 ++
.../jobs/src/main/resources/ui/Gruntfile.js | 379 +++++++++++++++++++
.../jobs/src/main/resources/ui/app/index.html | 45 +++
.../src/main/resources/ui/app/scripts/app.js | 28 ++
.../src/main/resources/ui/app/scripts/router.js | 21 +
.../ui/app/scripts/routes/application_route.js | 25 ++
.../src/main/resources/ui/app/scripts/store.js | 19 +
.../src/main/resources/ui/app/styles/main.less | 19 +
.../resources/ui/app/templates/application.hbs | 21 +
.../main/resources/ui/app/templates/index.hbs | 19 +
.../views/jobs/src/main/resources/ui/bower.json | 15 +
.../jobs/src/main/resources/ui/package.json | 35 ++
.../jobs/src/main/resources/ui/test/.bowerrc | 3 +
.../jobs/src/main/resources/ui/test/bower.json | 9 +
.../jobs/src/main/resources/ui/test/index.html | 27 ++
.../src/main/resources/ui/test/spec/test.js | 29 ++
20 files changed, 752 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/.bowerrc
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/.bowerrc b/contrib/views/jobs/src/main/resources/ui/.bowerrc
new file mode 100644
index 0000000..ba0accc
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "app/bower_components"
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/.editorconfig
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/.editorconfig b/contrib/views/jobs/src/main/resources/ui/.editorconfig
new file mode 100644
index 0000000..d087eda
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/.editorconfig
@@ -0,0 +1,22 @@
+# EditorConfig helps developers define and maintain consistent
+# 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 = 4
+
+# 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/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/.gitattributes
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/.gitattributes b/contrib/views/jobs/src/main/resources/ui/.gitattributes
new file mode 100644
index 0000000..2125666
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/.gitattributes
@@ -0,0 +1 @@
+* text=auto
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/.gitignore
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/.gitignore b/contrib/views/jobs/src/main/resources/ui/.gitignore
new file mode 100644
index 0000000..503a8a9
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/.gitignore
@@ -0,0 +1,8 @@
+node_modules
+temp
+dist
+.sass-cache
+.tmp
+app/bower_components
+test/bower_components
+.editorconfig
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/.jshintrc
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/.jshintrc b/contrib/views/jobs/src/main/resources/ui/.jshintrc
new file mode 100644
index 0000000..780790d
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/.jshintrc
@@ -0,0 +1,24 @@
+{
+ "node": true,
+ "browser": true,
+ "esnext": true,
+ "bitwise": false,
+ "curly": false,
+ "eqeqeq": true,
+ "eqnull": true,
+ "immed": true,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "undef": true,
+ "strict": false,
+ "trailing": false,
+ "smarttabs": true,
+ "globals": {
+ "App": true,
+ "jQuery": true,
+ "Ember": true,
+ "Handlebars": true,
+ "DS": true
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/Gruntfile.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/Gruntfile.js b/contrib/views/jobs/src/main/resources/ui/Gruntfile.js
new file mode 100644
index 0000000..5ebf75d
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/Gruntfile.js
@@ -0,0 +1,379 @@
+// Generated on 2014-06-24 using generator-ember 0.8.4
+'use strict';
+var LIVERELOAD_PORT = 35729;
+var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT});
+var mountFolder = function (connect, dir) {
+ return connect.static(require('path').resolve(dir));
+};
+
+// # Globbing
+// for performance reasons we're only matching one level down:
+// 'test/spec/{,*/}*.js'
+// use this if you want to match all subfolders:
+// 'test/spec/**/*.js'
+
+module.exports = function (grunt) {
+ // show elapsed time at the end
+ require('time-grunt')(grunt);
+ // load all grunt tasks
+ require('load-grunt-tasks')(grunt);
+
+ // configurable paths
+ var yeomanConfig = {
+ app: 'app',
+ dist: 'dist'
+ };
+
+ grunt.initConfig({
+ yeoman: yeomanConfig,
+ watch: {
+ emberTemplates: {
+ files: '<%= yeoman.app %>/templates/**/*.hbs',
+ tasks: ['emberTemplates']
+ },
+ neuter: {
+ files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],
+ tasks: ['neuter']
+ },
+ less: {
+ files: '<%= yeoman.app %>/styles/**/*.less',
+ tasks: ['less:development']
+ },
+ livereload: {
+ options: {
+ livereload: LIVERELOAD_PORT
+ },
+ files: [
+ '.tmp/scripts/*.js',
+ '<%= yeoman.app %>/*.html',
+ '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css',
+ '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
+ ]
+ }
+ },
+ connect: {
+ options: {
+ port: 9000,
+ // change this to '0.0.0.0' to access the server from outside
+ hostname: 'localhost'
+ },
+ livereload: {
+ options: {
+ middleware: function (connect) {
+ return [
+ lrSnippet,
+ mountFolder(connect, '.tmp'),
+ mountFolder(connect, yeomanConfig.app)
+ ];
+ }
+ }
+ },
+ test: {
+ options: {
+ middleware: function (connect) {
+ return [
+ mountFolder(connect, 'test'),
+ mountFolder(connect, '.tmp')
+ ];
+ }
+ }
+ },
+ dist: {
+ options: {
+ middleware: function (connect) {
+ return [
+ mountFolder(connect, yeomanConfig.dist)
+ ];
+ }
+ }
+ }
+ },
+ open: {
+ server: {
+ path: 'http://localhost:<%= connect.options.port %>'
+ }
+ },
+ clean: {
+ dist: {
+ files: [
+ {
+ dot: true,
+ src: [
+ '.tmp',
+ '<%= yeoman.dist %>/*',
+ '!<%= yeoman.dist %>/.git*'
+ ]
+ }
+ ]
+ },
+ server: '.tmp'
+ },
+ jshint: {
+ options: {
+ jshintrc: '.jshintrc',
+ reporter: require('jshint-stylish')
+ },
+ all: [
+ 'Gruntfile.js',
+ '<%= yeoman.app %>/scripts/{,*/}*.js',
+ '!<%= yeoman.app %>/scripts/vendor/*',
+ 'test/spec/{,*/}*.js'
+ ]
+ },
+ mocha: {
+ all: {
+ options: {
+ run: true,
+ urls: ['http://localhost:<%= connect.options.port %>/index.html']
+ }
+ }
+ },
+ // not used since Uglify task does concat,
+ // but still available if needed
+ /*concat: {
+ dist: {}
+ },*/
+ // not enabled since usemin task does concat and uglify
+ // check index.html to edit your build targets
+ // enable this task if you prefer defining your build targets here
+ /*uglify: {
+ dist: {}
+ },*/
+ rev: {
+ dist: {
+ files: {
+ src: [
+ '<%= yeoman.dist %>/scripts/{,*/}*.js',
+ '<%= yeoman.dist %>/styles/{,*/}*.css',
+ '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}',
+ '<%= yeoman.dist %>/styles/fonts/*'
+ ]
+ }
+ }
+ },
+ useminPrepare: {
+ html: '.tmp/index.html',
+ options: {
+ dest: '<%= yeoman.dist %>'
+ }
+ },
+ usemin: {
+ html: ['<%= yeoman.dist %>/{,*/}*.html'],
+ css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
+ options: {
+ dirs: ['<%= yeoman.dist %>']
+ }
+ },
+ imagemin: {
+ dist: {
+ files: [
+ {
+ expand: true,
+ cwd: '<%= yeoman.app %>/images',
+ src: '{,*/}*.{png,jpg,jpeg}',
+ dest: '<%= yeoman.dist %>/images'
+ }
+ ]
+ }
+ },
+ svgmin: {
+ dist: {
+ files: [
+ {
+ expand: true,
+ cwd: '<%= yeoman.app %>/images',
+ src: '{,*/}*.svg',
+ dest: '<%= yeoman.dist %>/images'
+ }
+ ]
+ }
+ },
+ cssmin: {
+ dist: {
+ files: {
+ '<%= yeoman.dist %>/styles/main.css': [
+ '.tmp/styles/{,*/}*.css',
+ '<%= yeoman.app %>/styles/{,*/}*.css'
+ ]
+ }
+ }
+ },
+ htmlmin: {
+ dist: {
+ options: {
+ /*removeCommentsFromCDATA: true,
+ // https://github.com/yeoman/grunt-usemin/issues/44
+ //collapseWhitespace: true,
+ collapseBooleanAttributes: true,
+ removeAttributeQuotes: true,
+ removeRedundantAttributes: true,
+ useShortDoctype: true,
+ removeEmptyAttributes: true,
+ removeOptionalTags: true*/
+ },
+ files: [
+ {
+ expand: true,
+ cwd: '<%= yeoman.app %>',
+ src: '*.html',
+ dest: '<%= yeoman.dist %>'
+ }
+ ]
+ }
+ },
+ replace: {
+ app: {
+ options: {
+ variables: {
+ ember: 'bower_components/ember/ember.js',
+ ember_data: 'bower_components/ember-data/ember-data.js'
+ }
+ },
+ files: [
+ {src: '<%= yeoman.app %>/index.html', dest: '.tmp/index.html'}
+ ]
+ },
+ dist: {
+ options: {
+ variables: {
+ ember: 'bower_components/ember/ember.prod.js',
+ ember_data: 'bower_components/ember-data/ember-data.prod.js'
+ }
+ },
+ files: [
+ {src: '<%= yeoman.app %>/index.html', dest: '.tmp/index.html'}
+ ]
+ }
+ },
+ // Put files not handled in other tasks here
+ copy: {
+ dist: {
+ files: [
+ {
+ expand: true,
+ dot: true,
+ cwd: '<%= yeoman.app %>',
+ dest: '<%= yeoman.dist %>',
+ src: [
+ '*.{ico,txt,php}',
+ '.htaccess',
+ 'images/{,*/}*.{webp,gif}',
+ 'styles/fonts/*'
+ ]
+ }
+ ]
+ }
+ },
+ concurrent: {
+ server: [
+ 'emberTemplates'
+ ],
+ test: [
+ 'emberTemplates'
+ ],
+ dist: [
+ 'emberTemplates',
+ 'imagemin',
+ 'svgmin',
+ 'htmlmin'
+ ]
+ },
+ emberTemplates: {
+ options: {
+ templateName: function (sourceFile) {
+ var templatePath = yeomanConfig.app + '/templates/';
+ return sourceFile.replace(templatePath, '');
+ }
+ },
+ dist: {
+ files: {
+ '.tmp/scripts/compiled-templates.js': '<%= yeoman.app %>/templates/**/*.hbs'
+ }
+ }
+ },
+
+ less: {
+ development: {
+ options: {
+ paths: ["<%= yeoman.app %>/styles"]
+ },
+ files: {
+ ".tmp/styles/styles.css": "<%= yeoman.app %>/styles/**/*.less"
+ }
+ },
+ production: {
+ options: {
+ paths: ["<%= yeoman.app %>/styles"],
+ cleancss: true
+ },
+ files: {
+ ".tmp/styles/styles.css": "<%= yeoman.app %>/styles/**/*.less"
+ }
+ }
+ },
+
+ neuter: {
+ app: {
+ options: {
+ filepathTransform: function (filepath) {
+ return yeomanConfig.app + '/' + filepath;
+ }
+ },
+ src: '<%= yeoman.app %>/scripts/app.js',
+ dest: '.tmp/scripts/combined-scripts.js'
+ }
+ }
+ });
+
+ grunt.registerTask('server', 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('serve', function (target) {
+ if (target === 'dist') {
+ return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
+ }
+
+ grunt.task.run([
+ 'clean:server',
+ 'replace:app',
+ 'concurrent:server',
+ 'neuter:app',
+ 'less:development',
+ 'connect:livereload',
+ 'open',
+ 'watch'
+ ]);
+ });
+
+ grunt.registerTask('test', [
+ 'clean:server',
+ 'replace:app',
+ 'concurrent:test',
+ 'connect:test',
+ 'neuter:app',
+ 'mocha'
+ ]);
+
+ grunt.registerTask('build', [
+ 'clean:dist',
+ 'replace:app',
+ 'useminPrepare',
+ 'concurrent:dist',
+ 'neuter:app',
+ 'less:production',
+ 'concat',
+ 'cssmin',
+ //'uglify',
+ 'copy',
+ //'rev',
+ 'usemin'
+ ]);
+
+ grunt.registerTask('default', [
+ 'jshint',
+ 'test',
+ 'build'
+ ]);
+};
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/index.html
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/index.html b/contrib/views/jobs/src/main/resources/ui/app/index.html
new file mode 100644
index 0000000..850126e
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/index.html
@@ -0,0 +1,45 @@
+<!--
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+-->
+
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>Jobs</title>
+
+ <!-- build:css styles/main.css -->
+ <!-- endbuild -->
+ </head>
+ <body>
+ <!-- build:js(app) scripts/components.js -->
+ <script src="bower_components/jquery/dist/jquery.js"></script>
+ <script src="bower_components/handlebars/handlebars.runtime.js"></script>
+ <script src="@@ember"></script>
+ <script src="@@ember_data"></script>
+ <script src="bower_components/ember-json-mapper/ember-json-mapper.js"></script>
+ <!-- endbuild -->
+
+ <!-- build:js(.tmp) scripts/templates.js -->
+ <script src="scripts/compiled-templates.js"></script>
+ <!-- endbuild -->
+
+ <!-- build:js(.tmp) scripts/main.js -->
+ <script src="scripts/combined-scripts.js"></script>
+ <!-- endbuild -->
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/scripts/app.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/scripts/app.js b/contrib/views/jobs/src/main/resources/ui/app/scripts/app.js
new file mode 100644
index 0000000..4b83e74
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/scripts/app.js
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = window.App = Ember.Application.create();
+
+/* Order and include as you please. */
+require('scripts/controllers/*');
+require('scripts/store');
+require('scripts/models/*');
+require('scripts/routes/*');
+require('scripts/components/*');
+require('scripts/views/*');
+require('scripts/router');
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/scripts/router.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/scripts/router.js b/contrib/views/jobs/src/main/resources/ui/app/scripts/router.js
new file mode 100644
index 0000000..15bd8dc
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/scripts/router.js
@@ -0,0 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+App.Router.map(function () {
+ // Add your routes here
+});
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/scripts/routes/application_route.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/scripts/routes/application_route.js b/contrib/views/jobs/src/main/resources/ui/app/scripts/routes/application_route.js
new file mode 100644
index 0000000..f6b9ec1
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/scripts/routes/application_route.js
@@ -0,0 +1,25 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+App.ApplicationRoute = Ember.Route.extend({
+ // admittedly, this should be in IndexRoute and not in the
+ // top level ApplicationRoute; we're in transition... :-)
+ model: function () {
+ return ['red', 'yellow', 'blue'];
+ }
+});
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/scripts/store.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/scripts/store.js b/contrib/views/jobs/src/main/resources/ui/app/scripts/store.js
new file mode 100644
index 0000000..de7154b
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/scripts/store.js
@@ -0,0 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+App.ApplicationAdapter = DS.FixtureAdapter;
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/styles/main.less
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/styles/main.less b/contrib/views/jobs/src/main/resources/ui/app/styles/main.less
new file mode 100644
index 0000000..c1997c2
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/styles/main.less
@@ -0,0 +1,19 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+@import '../../app/bower_components/bootstrap/less/bootstrap';
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/templates/application.hbs b/contrib/views/jobs/src/main/resources/ui/app/templates/application.hbs
new file mode 100644
index 0000000..1a0b52e
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/templates/application.hbs
@@ -0,0 +1,21 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<div class="container">
+ {{outlet}}
+</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/app/templates/index.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/app/templates/index.hbs b/contrib/views/jobs/src/main/resources/ui/app/templates/index.hbs
new file mode 100644
index 0000000..7470eef
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/app/templates/index.hbs
@@ -0,0 +1,19 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+Jobs will be here
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/bower.json
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/bower.json b/contrib/views/jobs/src/main/resources/ui/bower.json
new file mode 100644
index 0000000..0619e51
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/bower.json
@@ -0,0 +1,15 @@
+{
+ "name": "jobs-ui",
+ "version": "0.0.1",
+ "dependencies": {
+ "ember": "1.5.0",
+ "handlebars": "1.2.1",
+ "ember-data": "1.0.0-beta.7",
+ "bootstrap": ">3.0",
+ "ember-addons.bs_for_ember": ">=0.7",
+ "ember-json-mapper": "master"
+ },
+ "devDependencies": {
+ "ember-mocha-adapter": "0.1.2"
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/package.json
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/package.json b/contrib/views/jobs/src/main/resources/ui/package.json
new file mode 100644
index 0000000..aeac669
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "jobs-ui",
+ "version": "0.0.1",
+ "dependencies": {},
+ "devDependencies": {
+ "grunt": "~0.4.1",
+ "grunt-contrib-copy": "~0.4.1",
+ "grunt-contrib-concat": "~0.3.0",
+ "grunt-contrib-uglify": "~0.2.0",
+ "grunt-contrib-jshint": "~0.6.3",
+ "grunt-contrib-cssmin": "~0.6.0",
+ "grunt-contrib-connect": "~0.3.0",
+ "grunt-contrib-clean": "~0.5.0",
+ "grunt-contrib-htmlmin": "~0.1.3",
+ "grunt-contrib-imagemin": "~0.2.0",
+ "grunt-contrib-watch": "~0.5.2",
+ "grunt-rev": "~0.1.0",
+ "grunt-usemin": "~0.1.12",
+ "grunt-mocha": "~0.4.1",
+ "grunt-open": "~0.2.0",
+ "grunt-svgmin": "~0.2.0",
+ "grunt-concurrent": "~0.3.0",
+ "load-grunt-tasks": "~0.1.0",
+ "connect-livereload": "~0.2.0",
+ "grunt-ember-templates": "0.4.14",
+ "time-grunt": "~0.1.1",
+ "grunt-replace": "~0.4.4",
+ "jshint-stylish": "~0.1.3",
+ "grunt-neuter": "~0.6.0",
+ "grunt-contrib-less": "~0.11"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/test/.bowerrc
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/test/.bowerrc b/contrib/views/jobs/src/main/resources/ui/test/.bowerrc
new file mode 100644
index 0000000..44491d3
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/test/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "bower_components"
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/test/bower.json
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/test/bower.json b/contrib/views/jobs/src/main/resources/ui/test/bower.json
new file mode 100644
index 0000000..5453ee2
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/test/bower.json
@@ -0,0 +1,9 @@
+{
+ "name": "ui",
+ "private": true,
+ "dependencies": {
+ "chai": "~1.8.0",
+ "mocha": "~1.14.0"
+ },
+ "devDependencies": {}
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/test/index.html
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/test/index.html b/contrib/views/jobs/src/main/resources/ui/test/index.html
new file mode 100644
index 0000000..bbc83a2
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/test/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <title>Mocha Spec Runner</title>
+ <link rel="stylesheet" href="bower_components/mocha/mocha.css">
+ </head>
+ <body>
+ <div id="mocha"></div>
+ <script src="bower_components/mocha/mocha.js"></script>
+ <script>mocha.setup('bdd')</script>
+ <script src="bower_components/chai/chai.js"></script>
+ <script>
+ var assert = chai.assert;
+ var expect = chai.expect;
+ var should = chai.should();
+ </script>
+
+ <!-- include source files here... -->
+
+ <!-- include spec files here... -->
+ <script src="spec/test.js"></script>
+
+ <script>mocha.run()</script>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f3c8c285/contrib/views/jobs/src/main/resources/ui/test/spec/test.js
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/src/main/resources/ui/test/spec/test.js b/contrib/views/jobs/src/main/resources/ui/test/spec/test.js
new file mode 100644
index 0000000..8a8c550
--- /dev/null
+++ b/contrib/views/jobs/src/main/resources/ui/test/spec/test.js
@@ -0,0 +1,29 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function () {
+ 'use strict';
+
+ describe('Give it some context', function () {
+ describe('maybe a bit more context here', function () {
+ it('should run here few assertions', function () {
+ expect(true).to.be.ok;
+ });
+ });
+ });
+})();