diff --git a/.gitignore b/.gitignore index 0b6f309d..bea61172 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ src/main/webapp/js/*dotci.js.map _book src/main/webapp/webcomponent-imports-vulcanized.html src/main/webapp/css/dotci.css +src/main/webapp/js/homepage.js diff --git a/bower.json b/bower.json index ac372381..0df4d953 100644 --- a/bower.json +++ b/bower.json @@ -21,11 +21,13 @@ "private": true, "dependencies": { "iron-component-page": "PolymerElements/iron-component-page#~1.0.5", + "iron-flex-layout": "PolymerElements/iron-flex-layout#~1.0.4", "iron-icon": "polymerelements/iron-icon#^1.0.0", "iron-icons": "polymerelements/iron-icons#^1.0.0", "iron-media-query": "polymerelements/iron-media-query#^1.0.2", "neon-animation": "polymerelements/neon-animation#^1.0.0", "paper-button": "polymerelements/paper-button#^1.0.0", + "paper-card": "PolymerElements/paper-card#~1.0.6", "paper-dialog": "polymerelements/paper-dialog#^1.0.0", "paper-dialog-scrollable": "polymerelements/paper-dialog-scrollable#^1.0.0", "paper-drawer-panel": "polymerelements/paper-drawer-panel#^1.0.0", diff --git a/make-webpack-config.js b/make-webpack-config.js index b4792ad0..4f61adaa 100644 --- a/make-webpack-config.js +++ b/make-webpack-config.js @@ -70,11 +70,11 @@ module.exports = function(config){ }, devtool: config.debug ? '#inline-source-map' : false, plugins: config.debug ? [ - new ExtractTextPlugin("dotci.css") + new ExtractTextPlugin("[name].css") ] : [ new webpack.EnvironmentPlugin('NODE_ENV'), new webpack.optimize.DedupePlugin(), - new ExtractTextPlugin("./../css/dotci.css"), + new ExtractTextPlugin("./../css/[name].css"), new webpack.optimize.UglifyJsPlugin( { compressor: { diff --git a/package.json b/package.json index fde33853..747510f5 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ }, "scripts": { "build": "npm install && npm run package && npm run vulcanize", - "package": "$(npm bin)/webpack --release=true --colors --progress src/main/jsx/app.jsx", + "package": "$(npm bin)/webpack --release=true --colors --progress", "lint": "eslint src/main/jsx/**/*", "watch": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.config.dev.js --colors --progress --hot --inline --port 3000", "test": "$(npm bin)/karma start", diff --git a/src/main/java/com/groupon/jenkins/mybuildsview/MyBuildsView.java b/src/main/java/com/groupon/jenkins/mybuildsview/MyBuildsView.java index 324c58da..50e3a186 100644 --- a/src/main/java/com/groupon/jenkins/mybuildsview/MyBuildsView.java +++ b/src/main/java/com/groupon/jenkins/mybuildsview/MyBuildsView.java @@ -23,20 +23,16 @@ of this software and associated documentation files (the "Software"), to deal */ package com.groupon.jenkins.mybuildsview; -import com.google.common.collect.Lists; +import com.google.common.base.*; +import com.google.common.collect.*; import com.groupon.jenkins.SetupConfig; import com.groupon.jenkins.dynamic.build.DynamicBuild; +import com.groupon.jenkins.dynamic.build.api.*; import com.groupon.jenkins.dynamic.build.repository.DynamicBuildRepository; import com.groupon.jenkins.views.AuthenticatedView; import hudson.Extension; -import hudson.model.Computer; +import hudson.model.*; import hudson.model.Descriptor.FormException; -import hudson.model.Item; -import hudson.model.ItemGroup; -import hudson.model.Job; -import hudson.model.ModifiableItemGroup; -import hudson.model.TopLevelItem; -import hudson.model.ViewDescriptor; import hudson.util.RunList; import java.io.IOException; import java.util.Collection; @@ -48,7 +44,9 @@ of this software and associated documentation files (the "Software"), to deal import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.export.*; +import javax.annotation.*; import javax.servlet.ServletException; public class MyBuildsView extends AuthenticatedView { @@ -72,6 +70,17 @@ public RunList getBuilds() { Iterable builds = makeDynamicBuildRepository().getLastBuildsForUser(getCurrentUser(), 20); return RunList.fromRuns(Lists.newArrayList(builds)); } + @Exported + public Iterable getUserBuilds(){ + Iterable builds = makeDynamicBuildRepository().getLastBuildsForUser(getCurrentUser(), 20); + Iterable processedBuilds = Iterables.transform(builds, new Function() { + @Override + public ProcessedBuild apply(DynamicBuild input) { + return new ProcessedBuild(input); + } + }); + return Lists.newArrayList(processedBuilds); + } private String getCurrentUser() { return Jenkins.getAuthentication().getName(); @@ -142,4 +151,9 @@ public String getViewType() { public boolean isEditable() { return false; } + + @Override + public Api getApi() { + return super.getApi(); + } } diff --git a/src/main/jsx/colors.css b/src/main/jsx/colors.css index 678739d1..47b8084f 100644 --- a/src/main/jsx/colors.css +++ b/src/main/jsx/colors.css @@ -1,7 +1,22 @@ :root { ---success: #038035; ---failure: #c00; ---aborted: #666; ---in_progress: #E7D100; -} + --success: #038035; + --failure: #c00; + --aborted: #666; + --in_progress: #E7D100; + + --paper-teal-50: #e0f2f1; + --paper-teal-100: #b2dfdb; + --paper-teal-200: #80cbc4; + --paper-teal-300: #4db6ac; + --paper-teal-400: #26a69a; + --paper-teal-500: #009688; + --paper-teal-600: #00897b; + --paper-teal-700: #00796b; + --paper-teal-800: #00695c; + --paper-teal-900: #004d40; + --paper-teal-a100: #a7ffeb; + --paper-teal-a200: #64ffda; + --paper-teal-a400: #1de9b6; + --paper-teal-a700: #00bfa5; +} diff --git a/src/main/jsx/homepage/homepage.css b/src/main/jsx/homepage/homepage.css new file mode 100644 index 00000000..008b9097 --- /dev/null +++ b/src/main/jsx/homepage/homepage.css @@ -0,0 +1,33 @@ +@import './../colors.css'; +#cards { + @apply(--layout-vertical); + @apply(--center-justified); + max-width: 400px; + margin-left: auto; + margin-right: auto; +} +paper-card { + width: 100%; + margin-bottom: 16px; +} +.fancy .title { + position: absolute; + top: 30px; + left: 100px; + color: var(--paper-teal-700); +} +.fancy img { + width: 100%; +} +.fancy .big { + font-size: 22px; + padding: 8px 0 16px; + color: var(--google-grey-500); +} +.fancy .medium { + font-size: 16px; + padding-bottom: 8px; +} +.pink { + --paper-card-header-color: var(--paper-pink-500); +} diff --git a/src/main/jsx/homepage/homepage.js b/src/main/jsx/homepage/homepage.js new file mode 100644 index 00000000..7d7bc140 --- /dev/null +++ b/src/main/jsx/homepage/homepage.js @@ -0,0 +1,31 @@ +import ReactDOM from 'react-dom'; +import React from 'react'; +import qwest from 'qwest'; +import {stringify} from 'qs'; +require('./homepage.css'); +var Build = ({build}) => { + return +
+
title
+
Title
+
subtitle
+
+ +
+ Some action +
+
; +} +var HomePage = ({builds}) => { + return
+ {builds.map(build => )} +
; +}; +window.addEventListener('WebComponentsReady', ()=>{ + const params = {tree:'*,userBuilds[*,commit[*]]'}; + const fetchUrl = `${rootURL}/${viewUrl}/api/json?${stringify(params)}`; + qwest.get(fetchUrl,{},{responseType: 'json'}).then((res)=>{ + ReactDOM.render(, document.getElementById("homepage")); + }); + // ReactDOM.render(, document.getElementById("homepage")); +}); diff --git a/src/main/resources/com/groupon/jenkins/mybuildsview/MyBuildsView/main.jelly b/src/main/resources/com/groupon/jenkins/mybuildsview/MyBuildsView/main.jelly index be6288fa..558c806d 100644 --- a/src/main/resources/com/groupon/jenkins/mybuildsview/MyBuildsView/main.jelly +++ b/src/main/resources/com/groupon/jenkins/mybuildsview/MyBuildsView/main.jelly @@ -21,10 +21,39 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - - -
-

Recent Builds

- -
-
+ + + + + + + + + + ${h.initPageVariables(context)} + ${it.displayName}${not empty it.parent.fullDisplayName?' ['+it.parent.fullDisplayName+']':''} + + + + + + + + +
+ + + diff --git a/src/main/webapp/webcomponent-imports.html b/src/main/webapp/webcomponent-imports.html index 6e75fa15..46d6801b 100644 --- a/src/main/webapp/webcomponent-imports.html +++ b/src/main/webapp/webcomponent-imports.html @@ -22,6 +22,8 @@ + + diff --git a/webpack.config.dev.js b/webpack.config.dev.js index ac8839e8..8697e335 100644 --- a/webpack.config.dev.js +++ b/webpack.config.dev.js @@ -27,14 +27,20 @@ module.exports = require('./make-webpack-config.js')( { debug: true , entry:{ - dotci: [ - 'webpack-dev-server/client?http://localhost:3000', - 'webpack/hot/only-dev-server', + dotci: [ + 'webpack-dev-server/client?http://localhost:3000', + 'webpack/hot/only-dev-server', "./src/main/jsx/app.jsx" - ]}, + ], + homepage: [ + 'webpack-dev-server/client?http://localhost:3000', + 'webpack/hot/only-dev-server', + "./src/main/jsx/homepage/homepage.js" + ] + }, output: { - filename: "dotci.js", - publicPath: "http://localhost:3000/assets/" + filename: "[name].js", + publicPath: "http://localhost:3000/assets/" } } ); diff --git a/webpack.config.js b/webpack.config.js index 1db977c2..16672af0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -25,10 +25,13 @@ module.exports = require('./make-webpack-config.js')( { debug: false , - entry:"./src/main/jsx/app.jsx", + entry:{ + "dotci": "./src/main/jsx/app.jsx", + "homepage": "./src/main/jsx/homepage/homepage.js" + }, output: { - path: "src/main/webapp/js", - filename: "dotci.js" + path: "src/main/webapp/js", + filename: "[name].js" } } );