diff --git a/.README/feature-failed.png b/.README/feature-failed.png new file mode 100644 index 0000000..90e5e66 Binary files /dev/null and b/.README/feature-failed.png differ diff --git a/.README/feature-overview.png b/.README/feature-overview.png new file mode 100644 index 0000000..f7644c7 Binary files /dev/null and b/.README/feature-overview.png differ diff --git a/.README/feature-passed.png b/.README/feature-passed.png new file mode 100644 index 0000000..052923d Binary files /dev/null and b/.README/feature-passed.png differ diff --git a/.README/publish-box.png b/.README/publish-box.png new file mode 100644 index 0000000..67f68db Binary files /dev/null and b/.README/publish-box.png differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..00446a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +work +target +.DS_Store +.log diff --git a/README.md b/README.md index e69de29..2ac799f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,59 @@ +# Publish pretty [cucumber-jvm](https://github.com/cucumber/cucumber-jvm) reports on [Jenkins](http://jenkins-ci.org/) + +This is a Java Jenkins plugin which publishes pretty html reports showing the results of cucumber-jvm runs. + + +## Background + +Cucumber-JVM is a test automation tool following the principles of Behavioural Driven Design and living documentation. Specifications are written in a concise human readable form and executed in continuous integration. + +This plugin allows Jenkins to publish the results as pretty html reports hosted by the Jenkins build server. In order for this plugin to work you must be using the JUnit runner and generating a json report. The plugin converts the json report into an overview html linking to separate feature file htmls with stats and results. + +## Install + +1. [Get](https://jenkins-ci.org/) Jenkins. + +2. Install the [cucumber-jvm-reports-java] +(https://wiki.jenkins-ci.org/display/JENKINS) plugin. + +3. Restart Jenkins. + +## Use + +With the cucumber-jvm-reports plugin installed in Jenkins, you simply check the "Publish cucumber results as a report" box in the +publish section of the build config and enter the path to the json reports relative to the workspace: + +![check the publish cucumber-jvm-reports box] +(https://github.com/masterthought/jenkins-cucumber-jvm-reports-plugin/raw/master/.README/publish-box.png) + +When a build runs that publishes cucumber-jvm results it will put a link in the sidepanel to the cucumber reports. There is a feature overview page: + +![feature overview page] +(https://github.com/masterthought/jenkins-cucumber-jvm-reports-plugin/raw/master/.README/feature-overview.png) + +And there are also feature specific results pages: + +![feature specific page passing] +(https://github.com/masterthought/jenkins-cucumber-jvm-reports-plugin/raw/master/.README/feature-passed.png) + +And useful information for failures: + +![feature specific page passing] +(https://github.com/masterthought/jenkins-cucumber-jvm-reports-plugin/raw/master/.README/feature-failed.png) + +Make sure you have configured cucumber-jvm to run with the JUnit runner and to generate a json report: + + package net.masterthought.example; + + import cucumber.junit.Cucumber; + import org.junit.runner.RunWith; + + @RunWith(Cucumber.class) + @Cucumber.Options(format = {"pretty", "html:target/cucumber", "json:target/cucumber.json"}) + public class ATMTest { + } + +## Develop + +Interested in contributing to the Jenkins cucumber-jvm-reports plugin? Great! Start [here] +(https://github.com/jenkinsci/jenkins.rb/wiki/Getting-Started-With-Ruby-Plugins). diff --git a/cucumber-reports.iml b/cucumber-reports.iml new file mode 100644 index 0000000..80214fc --- /dev/null +++ b/cucumber-reports.iml @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..e436629 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + + org.jenkins-ci.plugins + plugin + 1.424 + + + + net.masterthought.jenkins + cucumber-reports + 1.0-SNAPSHOT + hpi + + + + + repo.jenkins-ci.org + http://repo.jenkins-ci.org/public/ + + + + sonatype-snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + + + + repo.jenkins-ci.org + http://repo.jenkins-ci.org/public/ + + + + + + com.google.code.gson + gson + 1.7.1 + + + maven + velocity + 1.5-20060721.044818 + + + com.jamesmurty.utils + java-xmlbuilder + 0.4 + + + diff --git a/src/main/java/net/masterthought/jenkins/CucumberReportBaseAction.java b/src/main/java/net/masterthought/jenkins/CucumberReportBaseAction.java new file mode 100644 index 0000000..f1be464 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/CucumberReportBaseAction.java @@ -0,0 +1,48 @@ +package net.masterthought.jenkins; + +import hudson.FilePath; +import hudson.model.AbstractItem; +import hudson.model.Action; +import hudson.model.DirectoryBrowserSupport; +import hudson.model.ProminentProjectAction; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +import javax.servlet.ServletException; +import java.io.File; +import java.io.IOException; + +public abstract class CucumberReportBaseAction implements Action { + + public String getUrlName(){ + return "cucumber-html-reports"; + } + + public String getDisplayName(){ + return "Cucumber Reports"; + } + + public String getIconFileName(){ + return dir().exists() ? "graph.gif" : null; + } + + public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + DirectoryBrowserSupport dbs = new DirectoryBrowserSupport(this, new FilePath(this.dir()), this.getTitle(), "graph.gif", false); + dbs.setIndexFileName("feature-overview.html"); + dbs.generateResponse(req, rsp, this); + } + + protected abstract String getTitle(); + + protected abstract File dir(); +} + + + + + + + + + + diff --git a/src/main/java/net/masterthought/jenkins/CucumberReportBuildAction.java b/src/main/java/net/masterthought/jenkins/CucumberReportBuildAction.java new file mode 100644 index 0000000..1e19eb2 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/CucumberReportBuildAction.java @@ -0,0 +1,26 @@ +package net.masterthought.jenkins; + +import hudson.model.AbstractBuild; +import hudson.model.Run; + +import java.io.File; + +public class CucumberReportBuildAction extends CucumberReportBaseAction { + private final AbstractBuild build; + + public CucumberReportBuildAction(AbstractBuild build) { + super(); + this.build = build; + } + + @Override + protected String getTitle() { + return this.build.getDisplayName() + " html3"; + } + + @Override + protected File dir() { + return new File(build.getRootDir(), "cucumber-html-reports"); + } + +} diff --git a/src/main/java/net/masterthought/jenkins/CucumberReportProjectAction.java b/src/main/java/net/masterthought/jenkins/CucumberReportProjectAction.java new file mode 100644 index 0000000..d2d3c6f --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/CucumberReportProjectAction.java @@ -0,0 +1,40 @@ +//package net.masterthought.jenkins; +// +//import hudson.model.AbstractItem; +//import hudson.model.AbstractProject; +//import hudson.model.ProminentProjectAction; +//import hudson.model.Run; +// +//import java.io.File; +// +//public class CucumberReportProjectAction extends CucumberReportBaseAction implements ProminentProjectAction { +// private final AbstractItem project; +// +// public CucumberReportProjectAction(AbstractItem project) { +// super(); +// this.project = project; +// } +// +// @Override +// protected File dir() { +// if (this.project instanceof AbstractProject) { +// AbstractProject abstractProject = (AbstractProject) this.project; +// +// Run run = abstractProject.getLastSuccessfulBuild(); +// if (run != null) { +// File javadocDir = getBuildArchiveDir(run); +// +// if (javadocDir.exists()) { +// return javadocDir; +// } +// } +// } +// +// return getProjectArchiveDir(this.project); +// } +// +// @Override +// protected String getTitle() { +// return this.project.getDisplayName() + " html2"; +// } +//} \ No newline at end of file diff --git a/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java b/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java new file mode 100644 index 0000000..8371ee6 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/CucumberReportPublisher.java @@ -0,0 +1,108 @@ +package net.masterthought.jenkins; + +import hudson.Extension; +import hudson.FilePath; +import hudson.Launcher; +import hudson.model.AbstractBuild; +import hudson.model.AbstractProject; +import hudson.model.BuildListener; +import hudson.tasks.BuildStepDescriptor; +import hudson.tasks.BuildStepMonitor; +import hudson.tasks.Publisher; +import hudson.tasks.Recorder; +import hudson.util.FormValidation; +import org.apache.commons.io.FileUtils; +import org.apache.tools.ant.DirectoryScanner; +import org.kohsuke.stapler.AncestorInPath; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.QueryParameter; + +import javax.servlet.ServletException; +import java.io.File; +import java.io.IOException; + +public class CucumberReportPublisher extends Recorder { + + private final String jsonReportDirectory; + + @DataBoundConstructor + public CucumberReportPublisher(String jsonReportDirectory) { + this.jsonReportDirectory = jsonReportDirectory; + } + + private String[] findJsonFiles(File targetDirectory) { + DirectoryScanner scanner = new DirectoryScanner(); + scanner.setIncludes(new String[]{"**/*.json"}); + scanner.setBasedir(targetDirectory); + scanner.scan(); + return scanner.getIncludedFiles(); + } + + @Override + public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) + throws InterruptedException, IOException { + + listener.getLogger().println("[CucumberReportPublisher] Compiling Cucumber Html Reports ..."); + + File workspaceJsonReportDirectory = new File(build.getWorkspace().toURI().getPath(), jsonReportDirectory); + File targetBuildDirectory = new File(build.getRootDir(), "cucumber-html-reports"); + + String buildNumber = Integer.toString(build.getNumber()); + String buildProject = build.getProject().getName(); + + if (!targetBuildDirectory.exists()) { + targetBuildDirectory.mkdirs(); + } + + String[] files = findJsonFiles(workspaceJsonReportDirectory); + + if (files.length != 0) { + listener.getLogger().println("[CucumberReportPublisher] copying json to reports directory: " + targetBuildDirectory); + for (String file : files) { + FileUtils.copyFile(new File(workspaceJsonReportDirectory.getPath() + "/" + file), new File(targetBuildDirectory, file)); + } + + String[] jsonReportFiles = findJsonFiles(targetBuildDirectory); + for (String file : jsonReportFiles) { + listener.getLogger().println("[CucumberReportPublisher] Generating HTML reports based on: " + file); + SingleResultParser singleResultParser = new SingleResultParser(new File(targetBuildDirectory, file).getAbsolutePath(), targetBuildDirectory, buildNumber, buildProject); + try { + singleResultParser.generateReports(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } else { + listener.getLogger().println("[CucumberReportPublisher] here were no json results found in: " + workspaceJsonReportDirectory); + } + + build.addAction(new CucumberReportBuildAction(build)); + return true; + } + + @Extension + public static class DescriptorImpl extends BuildStepDescriptor { + @Override + public String getDisplayName() { + return "Publish cucumber results as a report"; + } + + + // Performs on-the-fly validation on the file mask wildcard. + public FormValidation doCheck(@AncestorInPath AbstractProject project, + @QueryParameter String value) throws IOException, ServletException { + FilePath ws = project.getSomeWorkspace(); + return ws != null ? ws.validateRelativeDirectory(value) : FormValidation.ok(); + } + + @Override + public boolean isApplicable(Class jobType) { + return true; + } + } + + public BuildStepMonitor getRequiredMonitorService() { + return BuildStepMonitor.NONE; + } +} diff --git a/src/main/java/net/masterthought/jenkins/Runner.java b/src/main/java/net/masterthought/jenkins/Runner.java new file mode 100644 index 0000000..a04d108 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/Runner.java @@ -0,0 +1,15 @@ +package net.masterthought.jenkins; + + +import java.io.File; +import java.io.IOException; + +public class Runner { + + public static void main(String[] args) throws Exception { + File rd = new File("/Users/kings/visa/jenkins-plugin-development/jenkins-java-plugin/cucumber-reports/work/jobs/ssss/builds/10/cucumber-html-reports"); + SingleResultParser singleResultParser = new SingleResultParser("/Users/kings/visa/jenkins-plugin-development/jenkins-java-plugin/cucumber-reports/work/jobs/ssss/builds/10/cucumber-html-reports/cucumber.json",rd,"10","ssss"); + singleResultParser.generateReports(); + + } +} diff --git a/src/main/java/net/masterthought/jenkins/SingleResultParser.java b/src/main/java/net/masterthought/jenkins/SingleResultParser.java new file mode 100644 index 0000000..f0cafd4 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/SingleResultParser.java @@ -0,0 +1,141 @@ +package net.masterthought.jenkins; + +import com.google.gson.Gson; +import net.masterthought.jenkins.json.Element; +import net.masterthought.jenkins.json.Feature; +import net.masterthought.jenkins.json.Step; +import net.masterthought.jenkins.json.Util; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; + +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.*; + +public class SingleResultParser { + + private List featureList; + private File reportDirectory; + private String buildNumber; + private String buildProject; + private List totalSteps; + + public SingleResultParser(String jsonResultFile, File reportDirectory, String buildNumber, String buildProject) throws IOException { + this.featureList = parseJson(jsonResultFile); + this.totalSteps = getAllStepStatuses(); + this.reportDirectory = reportDirectory; + this.buildNumber = buildNumber; + this.buildProject = buildProject; + } + + public void generateReports() throws Exception { + generateFeatureReports(); + generateFeatureOverview(); + } + + public void generateFeatureOverview() throws Exception { + VelocityEngine ve = new VelocityEngine(); + ve.init(getProperties()); + Template featureOverview = ve.getTemplate("templates/featureOverview.vm"); + VelocityContext context = new VelocityContext(); + context.put("build_project", buildProject); + context.put("build_number", buildNumber); + context.put("features", featureList); + context.put("total_features", getTotalFeatures()); + context.put("total_scenarios", getTotalScenarios()); + context.put("total_steps", getTotalSteps()); + context.put("total_passes", getTotalPasses()); + context.put("total_fails", getTotalFails()); + context.put("total_skipped", getTotalSkipped()); + context.put("chart_data", XmlChartBuilder.donutChart(getTotalPasses(), getTotalFails(), getTotalSkipped())); + context.put("time_stamp", timeStamp()); + generateReport("feature-overview.html", featureOverview, context); + } + + + private int getTotalSteps() { + return totalSteps.size(); + } + + private int getTotalPasses() { + return Util.findStatusCount(totalSteps, Util.Status.PASSED); + } + + private int getTotalFails() { + return Util.findStatusCount(totalSteps, Util.Status.FAILED); + } + + private int getTotalSkipped() { + return Util.findStatusCount(totalSteps, Util.Status.SKIPPED); + } + + private List getAllStepStatuses() { + List steps = new ArrayList(); + for (Feature feature : featureList) { + for (Element scenario : feature.getElements()) { + for (Step step : scenario.getSteps()) { + steps.add(step.getStatus()); + } + } + } + return steps; + } + + private int getTotalFeatures() { + return featureList.size(); + } + + private int getTotalScenarios() { + int scenarios = 0; + for (Feature feature : featureList) { + scenarios = scenarios + feature.getNumberOfScenarios(); + } + return scenarios; + } + + public void generateFeatureReports() throws Exception { + for (Feature feature : featureList) { + VelocityEngine ve = new VelocityEngine(); + ve.init(getProperties()); + Template featureResult = ve.getTemplate("templates/featureReport.vm"); + VelocityContext context = new VelocityContext(); + context.put("feature", feature); + context.put("report_status_colour", getReportStatusColour(feature)); + context.put("build_project", buildProject); + context.put("build_number", buildNumber); + context.put("scenarios", feature.getElements()); + context.put("time_stamp", timeStamp()); + generateReport(feature.getFileName(), featureResult, context); + } + } + + private void generateReport(String fileName, Template featureResult, VelocityContext context) throws Exception { + Writer writer = new FileWriter(new File(reportDirectory, fileName)); + featureResult.merge(context, writer); + writer.flush(); + writer.close(); + } + + private Properties getProperties() { + Properties props = new Properties(); + props.setProperty("resource.loader", "class"); + props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + return props; + } + + private String getReportStatusColour(Feature feature) { + return feature.getStatus() == Util.Status.PASSED ? "#C5D88A" : "#D88A8A"; + } + + private List parseJson(String jsonResultFile) throws FileNotFoundException { + FileReader reader = new FileReader(jsonResultFile); + return Arrays.asList(new Gson().fromJson(reader, Feature[].class)); + } + + private String timeStamp() { + return new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date()); + } + +} + diff --git a/src/main/java/net/masterthought/jenkins/XmlChartBuilder.java b/src/main/java/net/masterthought/jenkins/XmlChartBuilder.java new file mode 100644 index 0000000..7089492 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/XmlChartBuilder.java @@ -0,0 +1,12 @@ +package net.masterthought.jenkins; + +public class XmlChartBuilder { + + public static String donutChart(int total_passed, int total_failed, int total_skipped){ + // I was going to use XMLBuilder to generate the chart - but it's so long and boring and I already have the xml so ..... + return "PassedFailedSkipped" + total_passed + "" + total_failed + "" + total_skipped + "donut88dd11cc113488aaff2500"; + } + + + +} diff --git a/src/main/java/net/masterthought/jenkins/json/Closure.java b/src/main/java/net/masterthought/jenkins/json/Closure.java new file mode 100644 index 0000000..baba7c2 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Closure.java @@ -0,0 +1,5 @@ +package net.masterthought.jenkins.json; + +public interface Closure { + public Util.Status call(T t); +} diff --git a/src/main/java/net/masterthought/jenkins/json/Element.java b/src/main/java/net/masterthought/jenkins/json/Element.java new file mode 100644 index 0000000..6c93d41 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Element.java @@ -0,0 +1,67 @@ +package net.masterthought.jenkins.json; + +import org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +public class Element { + + private String name; + private String description; + private String keyword; + private Step[] steps; + private Tag[] tags; + + public Element(String name, String description, String keyword) { + this.name = name; + this.description = description; + this.keyword = keyword; + } + + public Step[] getSteps() { + return steps; + } + + public Util.Status getStatus() { + Closure scenarioStatus = new Closure() { + public Util.Status call(Step step) { + return step.getStatus(); + } + }; + List results = Util.collectSteps(steps, scenarioStatus); + return results.contains(Util.Status.FAILED) ? Util.Status.FAILED : Util.Status.PASSED; + } + + public String getName() { + List contentString = new ArrayList(); + + if (Util.itemExists(keyword)) { + contentString.add("" + keyword + ": "); + } + + if (Util.itemExists(name)) { + contentString.add("" + name + ""); + } + + return Util.itemExists(contentString) ? Util.result(getStatus()) + StringUtils.join(contentString.toArray(), " ") + Util.closeDiv() : ""; + } + + public String getTags() { + String result = "
"; + + if (Util.itemExists(tags)) { + StringClosure scenarioTags = new StringClosure() { + public String call(Tag tag) { + return tag.getName(); + } + }; + List results = Util.collectTags(tags, scenarioTags); + String tagList = StringUtils.join(results.toArray(), ","); + result = "
" + tagList + "
"; + } + return result; + } + + +} diff --git a/src/main/java/net/masterthought/jenkins/json/Feature.java b/src/main/java/net/masterthought/jenkins/json/Feature.java new file mode 100644 index 0000000..2070a5f --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Feature.java @@ -0,0 +1,96 @@ +package net.masterthought.jenkins.json; + +import java.util.ArrayList; +import java.util.List; + +public class Feature { + + private String name; + private String uri; + private String description; + private String keyword; + private Element[] elements; + + public Feature(String name, String uri, String description, String keyword) { + this.name = name; + this.uri = uri; + this.description = description; + this.keyword = keyword; + } + + public Element[] getElements() { + return elements; + } + + public Util.Status getStatus() { + Closure scenarioStatus = new Closure() { + public Util.Status call(Element step) { + return step.getStatus(); + } + }; + List results = Util.collectScenarios(elements, scenarioStatus); + return results.contains(Util.Status.FAILED) ? Util.Status.FAILED : Util.Status.PASSED; + } + + private List lookUpSteps() { + List stepStatuses = new ArrayList(); + for(Element element : elements){ + for(Step step : element.getSteps()){ + stepStatuses.add(step.getStatus()); + } + } + return stepStatuses; + } + + public String getName() { + return Util.itemExists(name) ? Util.result(getStatus()) + "
Feature: " + name + "
" + Util.closeDiv() : ""; + } + + public String getRawName() { + return Util.itemExists(name) ? name : ""; + } + + public String getDescription() { + String result = ""; + if (Util.itemExists(description)) { + String content = description.replaceFirst("As an", "As an"); + content = content.replaceFirst("I want to", "I want to"); + content = content.replaceFirst("So that", "So that"); + content = content.replaceAll("\n", "
"); + result = "
" + content + "
"; + } + return result; + } + + public String getFileName() { + return uri.replaceAll("/", "-") + ".html"; + } + + public int getNumberOfScenarios() { + return elements.length; + } + + public int getNumberOfSteps() { + return lookUpSteps().size(); + } + + public int getNumberOfPasses() { + return Util.findStatusCount(lookUpSteps(), Util.Status.PASSED); + } + + public int getNumberOfFailures() { + return Util.findStatusCount(lookUpSteps(), Util.Status.FAILED); + } + + public int getNumberOfSkipped() { + return Util.findStatusCount(lookUpSteps(), Util.Status.SKIPPED); + } + + public String getRawStatus() { + return getStatus().toString().toLowerCase(); + } + +} + + + diff --git a/src/main/java/net/masterthought/jenkins/json/Result.java b/src/main/java/net/masterthought/jenkins/json/Result.java new file mode 100644 index 0000000..2ab24b8 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Result.java @@ -0,0 +1,23 @@ +package net.masterthought.jenkins.json; + +public class Result { + + private String status; + private String error_message; + private int duration; + + public Result(String status, String error_message, int duration){ + this.status = status; + this.error_message = error_message; + this.duration = duration; + } + + public String getStatus(){ + return status; + } + + public String getErrorMessage(){ + return error_message; + } + +} diff --git a/src/main/java/net/masterthought/jenkins/json/Step.java b/src/main/java/net/masterthought/jenkins/json/Step.java new file mode 100644 index 0000000..cc3df85 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Step.java @@ -0,0 +1,29 @@ +package net.masterthought.jenkins.json; + +public class Step { + + private String name; + private String keyword; + private Result result; + + public Step(String name, String keyword) { + this.name = name; + this.keyword = keyword; + + } + + public Util.Status getStatus() { + return Util.resultMap.get(result.getStatus()); + } + + public String getName(){ + String content = ""; + if(getStatus() == Util.Status.FAILED){ + content = Util.result(getStatus()) + "" + keyword + " " + name + "" + "
" + result.getErrorMessage() + "
" + Util.closeDiv(); + } else { + content = Util.result(getStatus()) + "" + keyword + " " + name + "" + Util.closeDiv(); + } + return content; + } + +} diff --git a/src/main/java/net/masterthought/jenkins/json/StringClosure.java b/src/main/java/net/masterthought/jenkins/json/StringClosure.java new file mode 100644 index 0000000..9bf6325 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/StringClosure.java @@ -0,0 +1,6 @@ +package net.masterthought.jenkins.json; + +public interface StringClosure { + public R call(T t); +} + diff --git a/src/main/java/net/masterthought/jenkins/json/Tag.java b/src/main/java/net/masterthought/jenkins/json/Tag.java new file mode 100644 index 0000000..75de9e1 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Tag.java @@ -0,0 +1,14 @@ +package net.masterthought.jenkins.json; + +public class Tag { + + private String name; + + public Tag(String name){ + this.name = name; + } + + public String getName(){ + return name; + } +} diff --git a/src/main/java/net/masterthought/jenkins/json/Util.java b/src/main/java/net/masterthought/jenkins/json/Util.java new file mode 100644 index 0000000..348e465 --- /dev/null +++ b/src/main/java/net/masterthought/jenkins/json/Util.java @@ -0,0 +1,93 @@ +package net.masterthought.jenkins.json; + +import net.masterthought.jenkins.json.Closure; +import net.masterthought.jenkins.json.Element; +import net.masterthought.jenkins.json.Step; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Util { + + public static boolean itemExists(List listItem) { + return listItem.size() != 0; + } + + public static boolean itemExists(Tag[] tags) { + boolean result = false; + if (tags != null) { + result = tags.length != 0; + } + return result; + } + + public static String passed(boolean value) { + return value ? "
" : "
"; + } + + public static String closeDiv() { + return ""; + } + + public static Map resultMap = new HashMap() {{ + put("passed", Util.Status.PASSED); + put("failed", Util.Status.FAILED); + put("skipped", Util.Status.SKIPPED); + }}; + + public static String result(Status status) { + String result = ""; + if (status == Status.PASSED) { + result = "
"; + } else if (status == Status.FAILED) { + result = "
"; + } else if (status == Status.SKIPPED) { + result = "
"; + } + return result; + } + + public static enum Status { + PASSED, FAILED, SKIPPED + } + + public static List collectScenarios(Element[] list, Closure clo) { + List res = new ArrayList(); + for (final Element t : list) { + res.add((R) clo.call(t)); + } + return res; + } + + public static List collectSteps(Step[] list, Closure clo) { + List res = new ArrayList(); + for (final Step t : list) { + res.add((R) clo.call(t)); + } + return res; + } + + public static List collectTags(Tag[] list, StringClosure clo) { + List res = new ArrayList(); + for (final Tag t : list) { + res.add((R) clo.call(t)); + } + return res; + } + + public static boolean itemExists(String item) { + return !(item.isEmpty() || item == null); + } + + public static int findStatusCount(List statuses, Status statusToFind) { + int occurrence = 0; + for(Util.Status status : statuses){ + if(status == statusToFind){ + occurrence++; + } + } + return occurrence; + } +} diff --git a/src/main/resources/index.jelly b/src/main/resources/index.jelly new file mode 100644 index 0000000..538998f --- /dev/null +++ b/src/main/resources/index.jelly @@ -0,0 +1,6 @@ + +
+ This plugin is a sample to explain how to write a Jenkins plugin. +
diff --git a/src/main/resources/net/masterthought/jenkins/CucumberReportPublisher/config.jelly b/src/main/resources/net/masterthought/jenkins/CucumberReportPublisher/config.jelly new file mode 100644 index 0000000..41ffbc5 --- /dev/null +++ b/src/main/resources/net/masterthought/jenkins/CucumberReportPublisher/config.jelly @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/src/main/resources/templates/featureOverview.vm b/src/main/resources/templates/featureOverview.vm new file mode 100644 index 0000000..41467ec --- /dev/null +++ b/src/main/resources/templates/featureOverview.vm @@ -0,0 +1,190 @@ + + + + + + + + + Cucumber-JVM Html Reports - Feature Overview + + + + + + + + + + +
+
+

Cucumber

+ +
+
+
+
+
+

Feature Overview for Build: $build_number

+ The following graph shows number of steps passing, failing and skipped for this build: +
+
+
+ +
+
+
+ +
+
+
+ +
+
+

Feature Statistics

+ + + + + + + + + + + + #foreach($feature in $features) + + #if($feature.getStatus().toString() == "PASSED") + #set($bgcolour = "#C5D88A") + #else + #set($bgcolour = "#D88A8A") + #end + + + + + + + + + + + #end + + + + + + + + + +
FeatureScenariosStepsPassedFailedSkippedStatus
$feature.getRawName()$feature.getNumberOfScenarios()$feature.getNumberOfSteps()$feature.getNumberOfPasses()$feature.getNumberOfFailures()$feature.getNumberOfSkipped()$feature.getRawStatus()
$total_features$total_scenarios$total_steps$total_passes$total_fails$total_skippedTotals
+
+ +
+
+ + +
+
+ +
+
+ + diff --git a/src/main/resources/templates/featureReport.vm b/src/main/resources/templates/featureReport.vm new file mode 100644 index 0000000..de535e1 --- /dev/null +++ b/src/main/resources/templates/featureReport.vm @@ -0,0 +1,135 @@ + + + + + Cucumber-JVM Html Reports - Feature: $feature.getRawName() + + + + + + + + + + + +
+
+
+

Feature Result for Build: $build_number

+ Below are the results for this feature: +
+
+
+ +
+
+
+ + $feature.getName() + $feature.getDescription() + + #foreach($scenario in $scenarios) + $scenario.getTags() + $scenario.getName() + #foreach($step in $scenario.getSteps()) + $step.getName() + #end + #end + + + + +
+
+

Feature Statistics

+ + + + + + + + + + + + + + + + + + + + +
FeatureScenariosStepsPassedFailedSkippedStatus
$feature.getRawName()$feature.getNumberOfScenarios()$feature.getNumberOfSteps()$feature.getNumberOfPasses()$feature.getNumberOfFailures()$feature.getNumberOfSkipped()$feature.getRawStatus()
+ +
+ +
+
+ + +
+
+ +
+
+ diff --git a/src/main/webapp/blue/css/960.css b/src/main/webapp/blue/css/960.css new file mode 100644 index 0000000..99034a4 --- /dev/null +++ b/src/main/webapp/blue/css/960.css @@ -0,0 +1,628 @@ +/* + 960 Grid System ~ Core CSS. + Learn more ~ http://960.gs/ + + Licensed under GPL and MIT. +*/ + +/* `Containers +----------------------------------------------------------------------------------------------------*/ + +.container_12, +.container_16 { + margin-left: auto; + margin-right: auto; + width: 960px; +} + +/* `Grid >> Global +----------------------------------------------------------------------------------------------------*/ + +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12, +.grid_13, +.grid_14, +.grid_15, +.grid_16 { + display: inline; + float: left; + margin-left: 10px; + margin-right: 10px; +} + +.push_1, .pull_1, +.push_2, .pull_2, +.push_3, .pull_3, +.push_4, .pull_4, +.push_5, .pull_5, +.push_6, .pull_6, +.push_7, .pull_7, +.push_8, .pull_8, +.push_9, .pull_9, +.push_10, .pull_10, +.push_11, .pull_11, +.push_12, .pull_12, +.push_13, .pull_13, +.push_14, .pull_14, +.push_15, .pull_15 { + position: relative; +} + +.container_12 .grid_3, +.container_16 .grid_4 { + width: 220px; +} + +.container_12 .grid_6, +.container_16 .grid_8 { + width: 460px; +} + +.container_12 .grid_9, +.container_16 .grid_12 { + width: 700px; +} + +.container_12 .grid_12, +.container_16 .grid_16 { + width: 940px; +} + +/* `Grid >> Children (Alpha ~ First, Omega ~ Last) +----------------------------------------------------------------------------------------------------*/ + +.alpha { + margin-left: 0; +} + +.omega { + margin-right: 0; +} + +/* `Grid >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .grid_1 { + width: 60px; +} + +.container_12 .grid_2 { + width: 140px; +} + +.container_12 .grid_4 { + width: 300px; +} + +.container_12 .grid_5 { + width: 380px; +} + +.container_12 .grid_7 { + width: 540px; +} + +.container_12 .grid_8 { + width: 620px; +} + +.container_12 .grid_10 { + width: 780px; +} + +.container_12 .grid_11 { + width: 860px; +} + +/* `Grid >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .grid_1 { + width: 40px; +} + +.container_16 .grid_2 { + width: 100px; +} + +.container_16 .grid_3 { + width: 160px; +} + +.container_16 .grid_5 { + width: 280px; +} + +.container_16 .grid_6 { + width: 340px; +} + +.container_16 .grid_7 { + width: 400px; +} + +.container_16 .grid_9 { + width: 520px; +} + +.container_16 .grid_10 { + width: 580px; +} + +.container_16 .grid_11 { + width: 640px; +} + +.container_16 .grid_13 { + width: 760px; +} + +.container_16 .grid_14 { + width: 820px; +} + +.container_16 .grid_15 { + width: 880px; +} + +/* `Prefix Extra Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .prefix_3, +.container_16 .prefix_4 { + padding-left: 240px; +} + +.container_12 .prefix_6, +.container_16 .prefix_8 { + padding-left: 480px; +} + +.container_12 .prefix_9, +.container_16 .prefix_12 { + padding-left: 720px; +} + +/* `Prefix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .prefix_1 { + padding-left: 80px; +} + +.container_12 .prefix_2 { + padding-left: 160px; +} + +.container_12 .prefix_4 { + padding-left: 320px; +} + +.container_12 .prefix_5 { + padding-left: 400px; +} + +.container_12 .prefix_7 { + padding-left: 560px; +} + +.container_12 .prefix_8 { + padding-left: 640px; +} + +.container_12 .prefix_10 { + padding-left: 800px; +} + +.container_12 .prefix_11 { + padding-left: 880px; +} + +/* `Prefix Extra Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .prefix_1 { + padding-left: 60px; +} + +.container_16 .prefix_2 { + padding-left: 120px; +} + +.container_16 .prefix_3 { + padding-left: 180px; +} + +.container_16 .prefix_5 { + padding-left: 300px; +} + +.container_16 .prefix_6 { + padding-left: 360px; +} + +.container_16 .prefix_7 { + padding-left: 420px; +} + +.container_16 .prefix_9 { + padding-left: 540px; +} + +.container_16 .prefix_10 { + padding-left: 600px; +} + +.container_16 .prefix_11 { + padding-left: 660px; +} + +.container_16 .prefix_13 { + padding-left: 780px; +} + +.container_16 .prefix_14 { + padding-left: 840px; +} + +.container_16 .prefix_15 { + padding-left: 900px; +} + +/* `Suffix Extra Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .suffix_3, +.container_16 .suffix_4 { + padding-right: 240px; +} + +.container_12 .suffix_6, +.container_16 .suffix_8 { + padding-right: 480px; +} + +.container_12 .suffix_9, +.container_16 .suffix_12 { + padding-right: 720px; +} + +/* `Suffix Extra Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .suffix_1 { + padding-right: 80px; +} + +.container_12 .suffix_2 { + padding-right: 160px; +} + +.container_12 .suffix_4 { + padding-right: 320px; +} + +.container_12 .suffix_5 { + padding-right: 400px; +} + +.container_12 .suffix_7 { + padding-right: 560px; +} + +.container_12 .suffix_8 { + padding-right: 640px; +} + +.container_12 .suffix_10 { + padding-right: 800px; +} + +.container_12 .suffix_11 { + padding-right: 880px; +} + +/* `Suffix Extra Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .suffix_1 { + padding-right: 60px; +} + +.container_16 .suffix_2 { + padding-right: 120px; +} + +.container_16 .suffix_3 { + padding-right: 180px; +} + +.container_16 .suffix_5 { + padding-right: 300px; +} + +.container_16 .suffix_6 { + padding-right: 360px; +} + +.container_16 .suffix_7 { + padding-right: 420px; +} + +.container_16 .suffix_9 { + padding-right: 540px; +} + +.container_16 .suffix_10 { + padding-right: 600px; +} + +.container_16 .suffix_11 { + padding-right: 660px; +} + +.container_16 .suffix_13 { + padding-right: 780px; +} + +.container_16 .suffix_14 { + padding-right: 840px; +} + +.container_16 .suffix_15 { + padding-right: 900px; +} + +/* `Push Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .push_3, +.container_16 .push_4 { + left: 240px; +} + +.container_12 .push_6, +.container_16 .push_8 { + left: 480px; +} + +.container_12 .push_9, +.container_16 .push_12 { + left: 720px; +} + +/* `Push Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .push_1 { + left: 80px; +} + +.container_12 .push_2 { + left: 160px; +} + +.container_12 .push_4 { + left: 320px; +} + +.container_12 .push_5 { + left: 400px; +} + +.container_12 .push_7 { + left: 560px; +} + +.container_12 .push_8 { + left: 640px; +} + +.container_12 .push_10 { + left: 800px; +} + +.container_12 .push_11 { + left: 880px; +} + +/* `Push Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .push_1 { + left: 60px; +} + +.container_16 .push_2 { + left: 120px; +} + +.container_16 .push_3 { + left: 180px; +} + +.container_16 .push_5 { + left: 300px; +} + +.container_16 .push_6 { + left: 360px; +} + +.container_16 .push_7 { + left: 420px; +} + +.container_16 .push_9 { + left: 540px; +} + +.container_16 .push_10 { + left: 600px; +} + +.container_16 .push_11 { + left: 660px; +} + +.container_16 .push_13 { + left: 780px; +} + +.container_16 .push_14 { + left: 840px; +} + +.container_16 .push_15 { + left: 900px; +} + +/* `Pull Space >> Global +----------------------------------------------------------------------------------------------------*/ + +.container_12 .pull_3, +.container_16 .pull_4 { + left: -240px; +} + +.container_12 .pull_6, +.container_16 .pull_8 { + left: -480px; +} + +.container_12 .pull_9, +.container_16 .pull_12 { + left: -720px; +} + +/* `Pull Space >> 12 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_12 .pull_1 { + left: -80px; +} + +.container_12 .pull_2 { + left: -160px; +} + +.container_12 .pull_4 { + left: -320px; +} + +.container_12 .pull_5 { + left: -400px; +} + +.container_12 .pull_7 { + left: -560px; +} + +.container_12 .pull_8 { + left: -640px; +} + +.container_12 .pull_10 { + left: -800px; +} + +.container_12 .pull_11 { + left: -880px; +} + +/* `Pull Space >> 16 Columns +----------------------------------------------------------------------------------------------------*/ + +.container_16 .pull_1 { + left: -60px; +} + +.container_16 .pull_2 { + left: -120px; +} + +.container_16 .pull_3 { + left: -180px; +} + +.container_16 .pull_5 { + left: -300px; +} + +.container_16 .pull_6 { + left: -360px; +} + +.container_16 .pull_7 { + left: -420px; +} + +.container_16 .pull_9 { + left: -540px; +} + +.container_16 .pull_10 { + left: -600px; +} + +.container_16 .pull_11 { + left: -660px; +} + +.container_16 .pull_13 { + left: -780px; +} + +.container_16 .pull_14 { + left: -840px; +} + +.container_16 .pull_15 { + left: -900px; +} + +/* `Clear Floated Elements +----------------------------------------------------------------------------------------------------*/ + +/* http://sonspring.com/journal/clearing-floats */ + +.clear { + clear: both; + display: block; + overflow: hidden; + visibility: hidden; + width: 0; + height: 0; +} + +/* http://perishablepress.com/press/2009/12/06/new-clearfix-hack */ + +.clearfix:after { + clear: both; + content: ' '; + display: block; + font-size: 0; + line-height: 0; + visibility: hidden; + width: 0; + height: 0; +} + +/* + The following zoom:1 rule is specifically for IE6 + IE7. + Move to separate stylesheet if invalid CSS is a problem. +*/ +* html .clearfix, +*:first-child+html .clearfix { + zoom: 1; +} \ No newline at end of file diff --git a/src/main/webapp/blue/css/ie7.css b/src/main/webapp/blue/css/ie7.css new file mode 100644 index 0000000..eb52811 --- /dev/null +++ b/src/main/webapp/blue/css/ie7.css @@ -0,0 +1,218 @@ + +.heading { + margin-top: 100px; +} + +.slider { + margin-top: 100px; +} + +.teaser { + margin-top: 180px; +} + +.heading h1 { + margin-bottom: 20px; +} + +.big_button { + min-height: 100px; +} + +h1 { + font-size: 62px; + letter-spacing: -0.05em; + line-height: 70px; + color: #151515; +} + + + +/************************************************************************ +-) COIN SLIDER +*************************************************************************/ + +#coin_holder{ + float:left; + width:925px; + height:280px; + background:#FFFFFF; + position:relative; + z-index:2; + margin-top:90px; + margin-bottom: 20px; + padding:7px; +} + +.slide_bg { + background: transparent url(../images/bg_image_slider.png) bottom center no-repeat; + margin-bottom: 120px; +} + +.cs-buttons { + font-size: 0px; + padding: 10px; + float: left; + margin-top: 7px; + margin-bottom: 20px; +} + + + +/************************************************************************ +-) BUTTONS +*************************************************************************/ + +a.btn-light { + margin-top: -23px; +} + +a.btn-light-preview { + margin-top: 0px; +} + +.next_button_first, .next_button_first a { + display:block; + height:50px; + width:50px; + position:relative; + left:50%; + top:-43px; + border: none; + padding: 0; + margin:0; +} + +.next_button_first a, .next_button_first a:hover { + top:0; + left:0; + text-indent:-9999px; + outline:none; + border: none; +} + +.next_button, .next_button a { + display:block; + height:50px; + width:50px; + position:relative; + left:50%; + top:-43px; + border: none; + padding: 0; + margin:0; +} + +.next_button a, .next_button a:hover { + top:0; + left:0; + text-indent:-9999px; + outline:none; + border: none; +} + + + +/************************************************************************ +-) CONTACT +*************************************************************************/ + +#contact { + margin-bottom: 50px; + margin-top: -20px; + margin-left: 8px; +} + +#message { + width: 480px; + margin: 10px 0 0 26px; + padding: 0; +} + +.error_message { + display: block; + height: 22px; + line-height: 22px; + margin: 40px 0; + background: #FBE3E4 url('../images/assets/error.gif') no-repeat 10px center; + padding: 3px 10px 3px 35px; + color:#8a1f11; + border: 1px solid #FBC2C4; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +.social_bookmarks_footer { + float: left; + height: 32px; + list-style-type: none; + z-index: 6; +} + +.social_bookmarks_footer li { + float:left; + margin:0; + width:32px; + padding:0 7px 0 0; +} + +.social_bookmarks_footer li a { + height:32px; + width:32px; + display: block; + float:left; + text-indent: -9999px; + border:none; + padding:0; + outline: none; +} + +.notice { + margin-top: -20px; + height: 30px; + line-height: 30px; + margin-left: 20px; + padding-left: 20px; + border-left: 1px solid #777777; +} + + + +/************************************************************************ +-) MISC +*************************************************************************/ + +.margin_footer_break { + margin: 15px 0 5px 0; +} + + +.margin_top { + margin-top: 10px; +} + +.margin_bottom { + margin-bottom: 10px; +} + +.margin_break { + margin-top: 80px; +} + +.padding_item_first { + padding-top: 10px; + margin-bottom: 50px; +} + +.padding_item { + padding-top: 150px; + margin-bottom: 80px; +} + +.padding_service { + padding-top: 70px; + margin-bottom: 80px; +} + + diff --git a/src/main/webapp/blue/css/prettyPhoto.css b/src/main/webapp/blue/css/prettyPhoto.css new file mode 100644 index 0000000..4b10ff0 --- /dev/null +++ b/src/main/webapp/blue/css/prettyPhoto.css @@ -0,0 +1 @@ + div.light_rounded .pp_top .pp_left{background: url(../images/prettyPhoto/light_rounded/sprite.png) -88px -53px no-repeat;}div.light_rounded .pp_top .pp_middle{background:#fff;}div.light_rounded .pp_top .pp_right{background: url(../images/prettyPhoto/light_rounded/sprite.png) -110px -53px no-repeat;}div.light_rounded .pp_content .ppt{color:#000;}div.light_rounded .pp_content_container .pp_left,div.light_rounded .pp_content_container .pp_right{background:#fff;}div.light_rounded .pp_content{background-color:#fff;}div.light_rounded .pp_next:hover{background: url(../images/prettyPhoto/light_rounded/btnNext.png) center right no-repeat;cursor: pointer;}div.light_rounded .pp_previous:hover{background: url(../images/prettyPhoto/light_rounded/btnPrevious.png) center left no-repeat;cursor: pointer;}div.light_rounded .pp_expand{background: url(../images/prettyPhoto/light_rounded/sprite.png) -31px -26px no-repeat;cursor: pointer;}div.light_rounded .pp_expand:hover{background: url(../images/prettyPhoto/light_rounded/sprite.png) -31px -47px no-repeat;cursor: pointer;}div.light_rounded .pp_contract{background: url(../images/prettyPhoto/light_rounded/sprite.png) 0 -26px no-repeat;cursor: pointer;}div.light_rounded .pp_contract:hover{background: url(../images/prettyPhoto/light_rounded/sprite.png) 0 -47px no-repeat;cursor: pointer;}div.light_rounded .pp_close{width:75px;height:22px;background: url(../images/prettyPhoto/light_rounded/sprite.png) -1px -1px no-repeat;cursor: pointer;}div.light_rounded #pp_full_res .pp_inline{color:#000;}div.light_rounded .pp_gallery a.pp_arrow_previous,div.light_rounded .pp_gallery a.pp_arrow_next{margin-top:12px !important;}div.light_rounded .pp_nav .pp_play{background: url(../images/prettyPhoto/light_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px;}div.light_rounded .pp_nav .pp_pause{background: url(../images/prettyPhoto/light_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px;}div.light_rounded .pp_arrow_previous{background: url(../images/prettyPhoto/light_rounded/sprite.png) 0 -71px no-repeat;}div.light_rounded .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default;}div.light_rounded .pp_arrow_next{background: url(../images/prettyPhoto/light_rounded/sprite.png) -22px -71px no-repeat;}div.light_rounded .pp_arrow_next.disabled{background-position: -22px -87px;cursor:default;}div.light_rounded .pp_bottom .pp_left{background: url(../images/prettyPhoto/light_rounded/sprite.png) -88px -80px no-repeat;}div.light_rounded .pp_bottom .pp_middle{background:#fff;}div.light_rounded .pp_bottom .pp_right{background: url(../images/prettyPhoto/light_rounded/sprite.png) -110px -80px no-repeat;}div.light_rounded .pp_loaderIcon{background: url(../images/prettyPhoto/light_rounded/loader.gif) center center no-repeat;}div.dark_rounded .pp_top .pp_left{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -53px no-repeat;}div.dark_rounded .pp_top .pp_middle{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat;}div.dark_rounded .pp_top .pp_right{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -53px no-repeat;}div.dark_rounded .pp_content_container .pp_left{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat-y;}div.dark_rounded .pp_content_container .pp_right{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top right repeat-y;}div.dark_rounded .pp_content{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat;}div.dark_rounded .pp_next:hover{background: url(../images/prettyPhoto/dark_rounded/btnNext.png) center right no-repeat;cursor: pointer;}div.dark_rounded .pp_previous:hover{background: url(../images/prettyPhoto/dark_rounded/btnPrevious.png) center left no-repeat;cursor: pointer;}div.dark_rounded .pp_expand{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -26px no-repeat;cursor: pointer;}div.dark_rounded .pp_expand:hover{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -31px -47px no-repeat;cursor: pointer;}div.dark_rounded .pp_contract{background: url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -26px no-repeat;cursor: pointer;}div.dark_rounded .pp_contract:hover{background: url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -47px no-repeat;cursor: pointer;}div.dark_rounded .pp_close{width:75px;height:22px;background: url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -1px no-repeat;cursor: pointer;}div.dark_rounded .currentTextHolder{color:#c4c4c4;}div.dark_rounded .pp_description{color:#fff;}div.dark_rounded #pp_full_res .pp_inline{color:#fff;}div.dark_rounded .pp_gallery a.pp_arrow_previous,div.dark_rounded .pp_gallery a.pp_arrow_next{margin-top:12px !important;}div.dark_rounded .pp_nav .pp_play{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -1px -100px no-repeat;height:15px;width:14px;}div.dark_rounded .pp_nav .pp_pause{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -24px -100px no-repeat;height:15px;width:14px;}div.dark_rounded .pp_arrow_previous{background: url(../images/prettyPhoto/dark_rounded/sprite.png) 0 -71px no-repeat;}div.dark_rounded .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default;}div.dark_rounded .pp_arrow_next{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -22px -71px no-repeat;}div.dark_rounded .pp_arrow_next.disabled{background-position: -22px -87px;cursor:default;}div.dark_rounded .pp_bottom .pp_left{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -88px -80px no-repeat;}div.dark_rounded .pp_bottom .pp_middle{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat;}div.dark_rounded .pp_bottom .pp_right{background: url(../images/prettyPhoto/dark_rounded/sprite.png) -110px -80px no-repeat;}div.dark_rounded .pp_loaderIcon{background: url(../images/prettyPhoto/dark_rounded/loader.gif) center center no-repeat;}div.dark_square .pp_left ,div.dark_square .pp_middle,div.dark_square .pp_right,div.dark_square .pp_content{background: url(../images/prettyPhoto/dark_square/contentPattern.png) top left repeat;}div.dark_square .currentTextHolder{color:#c4c4c4;}div.dark_square .pp_description{color:#fff;}div.dark_square .pp_loaderIcon{background: url(../images/prettyPhoto/dark_rounded/loader.gif) center center no-repeat;}div.dark_square .pp_content_container .pp_left{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top left repeat-y;}div.dark_square .pp_content_container .pp_right{background: url(../images/prettyPhoto/dark_rounded/contentPattern.png) top right repeat-y;}div.dark_square .pp_expand{background: url(../images/prettyPhoto/dark_square/sprite.png) -31px -26px no-repeat;cursor: pointer;}div.dark_square .pp_expand:hover{background: url(../images/prettyPhoto/dark_square/sprite.png) -31px -47px no-repeat;cursor: pointer;}div.dark_square .pp_contract{background: url(../images/prettyPhoto/dark_square/sprite.png) 0 -26px no-repeat;cursor: pointer;}div.dark_square .pp_contract:hover{background: url(../images/prettyPhoto/dark_square/sprite.png) 0 -47px no-repeat;cursor: pointer;}div.dark_square .pp_close{width:75px;height:22px;background: url(../images/prettyPhoto/dark_square/sprite.png) -1px -1px no-repeat;cursor: pointer;}div.dark_square #pp_full_res .pp_inline{color:#fff;}div.dark_square .pp_gallery a.pp_arrow_previous,div.dark_square .pp_gallery a.pp_arrow_next{margin-top:12px !important;}div.dark_square .pp_nav .pp_play{background: url(../images/prettyPhoto/dark_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px;}div.dark_square .pp_nav .pp_pause{background: url(../images/prettyPhoto/dark_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px;}div.dark_square .pp_arrow_previous{background: url(../images/prettyPhoto/dark_square/sprite.png) 0 -71px no-repeat;}div.dark_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default;}div.dark_square .pp_arrow_next{background: url(../images/prettyPhoto/dark_square/sprite.png) -22px -71px no-repeat;}div.dark_square .pp_arrow_next.disabled{background-position: -22px -87px;cursor:default;}div.dark_square .pp_next:hover{background: url(../images/prettyPhoto/dark_square/btnNext.png) center right no-repeat;cursor: pointer;}div.dark_square .pp_previous:hover{background: url(../images/prettyPhoto/dark_square/btnPrevious.png) center left no-repeat;cursor: pointer;}div.light_square .pp_left ,div.light_square .pp_middle,div.light_square .pp_right,div.light_square .pp_content{background:#fff;}div.light_square .pp_content .ppt{color:#000;}div.light_square .pp_expand{background: url(../images/prettyPhoto/light_square/sprite.png) -31px -26px no-repeat;cursor: pointer;}div.light_square .pp_expand:hover{background: url(../images/prettyPhoto/light_square/sprite.png) -31px -47px no-repeat;cursor: pointer;}div.light_square .pp_contract{background: url(../images/prettyPhoto/light_square/sprite.png) 0 -26px no-repeat;cursor: pointer;}div.light_square .pp_contract:hover{background: url(../images/prettyPhoto/light_square/sprite.png) 0 -47px no-repeat;cursor: pointer;}div.light_square .pp_close{width:75px;height:22px;background: url(../images/prettyPhoto/light_square/sprite.png) -1px -1px no-repeat;cursor: pointer;}div.light_square #pp_full_res .pp_inline{color:#000;}div.light_square .pp_gallery a.pp_arrow_previous,div.light_square .pp_gallery a.pp_arrow_next{margin-top:12px !important;}div.light_square .pp_nav .pp_play{background: url(../images/prettyPhoto/light_square/sprite.png) -1px -100px no-repeat;height:15px;width:14px;}div.light_square .pp_nav .pp_pause{background: url(../images/prettyPhoto/light_square/sprite.png) -24px -100px no-repeat;height:15px;width:14px;}div.light_square .pp_arrow_previous{background: url(../images/prettyPhoto/light_square/sprite.png) 0 -71px no-repeat;}div.light_square .pp_arrow_previous.disabled{background-position:0 -87px;cursor:default;}div.light_square .pp_arrow_next{background: url(../images/prettyPhoto/light_square/sprite.png) -22px -71px no-repeat;}div.light_square .pp_arrow_next.disabled{background-position: -22px -87px;cursor:default;}div.light_square .pp_next:hover{background: url(../images/prettyPhoto/light_square/btnNext.png) center right no-repeat;cursor: pointer;}div.light_square .pp_previous:hover{background: url(../images/prettyPhoto/light_square/btnPrevious.png) center left no-repeat;cursor: pointer;}div.facebook .pp_top .pp_left{background: url(../images/prettyPhoto/facebook/sprite.png) -88px -53px no-repeat;}div.facebook .pp_top .pp_middle{background: url(../images/prettyPhoto/facebook/contentPatternTop.png) top left repeat-x;}div.facebook .pp_top .pp_right{background: url(../images/prettyPhoto/facebook/sprite.png) -110px -53px no-repeat;}div.facebook .pp_content .ppt{color:#000;}div.facebook .pp_content_container .pp_left{background: url(../images/prettyPhoto/facebook/contentPatternLeft.png) top left repeat-y;}div.facebook .pp_content_container .pp_right{background: url(../images/prettyPhoto/facebook/contentPatternRight.png) top right repeat-y;}div.facebook .pp_content{background:#fff;}div.facebook .pp_expand{background: url(../images/prettyPhoto/facebook/sprite.png) -31px -26px no-repeat;cursor: pointer;}div.facebook .pp_expand:hover{background: url(../images/prettyPhoto/facebook/sprite.png) -31px -47px no-repeat;cursor: pointer;}div.facebook .pp_contract{background: url(../images/prettyPhoto/facebook/sprite.png) 0 -26px no-repeat;cursor: pointer;}div.facebook .pp_contract:hover{background: url(../images/prettyPhoto/facebook/sprite.png) 0 -47px no-repeat;cursor: pointer;}div.facebook .pp_close{width:22px;height:22px;background: url(../images/prettyPhoto/facebook/sprite.png) -1px -1px no-repeat;cursor: pointer;}div.facebook #pp_full_res .pp_inline{color:#000;}div.facebook .pp_loaderIcon{background: url(../images/prettyPhoto/facebook/loader.gif) center center no-repeat;}div.facebook .pp_arrow_previous{background: url(../images/prettyPhoto/facebook/sprite.png) 0 -71px no-repeat;height:22px;margin-top:0;width:22px;}div.facebook .pp_arrow_previous.disabled{background-position:0 -96px;cursor:default;}div.facebook .pp_arrow_next{background: url(../images/prettyPhoto/facebook/sprite.png) -32px -71px no-repeat;height:22px;margin-top:0;width:22px;}div.facebook .pp_arrow_next.disabled{background-position: -32px -96px;cursor:default;}div.facebook .pp_nav{margin-top:0;}div.facebook .pp_nav p{font-size:15px;padding:0 3px 0 4px;}div.facebook .pp_nav .pp_play{background: url(../images/prettyPhoto/facebook/sprite.png) -1px -123px no-repeat;height:22px;width:22px;}div.facebook .pp_nav .pp_pause{background: url(../images/prettyPhoto/facebook/sprite.png) -32px -123px no-repeat;height:22px;width:22px;}div.facebook .pp_next:hover{background: url(../images/prettyPhoto/facebook/btnNext.png) center right no-repeat;cursor: pointer;}div.facebook .pp_previous:hover{background: url(../images/prettyPhoto/facebook/btnPrevious.png) center left no-repeat;cursor: pointer;}div.facebook .pp_bottom .pp_left{background: url(../images/prettyPhoto/facebook/sprite.png) -88px -80px no-repeat;}div.facebook .pp_bottom .pp_middle{background: url(../images/prettyPhoto/facebook/contentPatternBottom.png) top left repeat-x;}div.facebook .pp_bottom .pp_right{background: url(../images/prettyPhoto/facebook/sprite.png) -110px -80px no-repeat;}div.pp_pic_holder a:focus{outline:none;}div.pp_overlay{background:#000;display: none;left:0;position:absolute;top:0;width:100%;z-index:9500;}div.pp_pic_holder{display: none;position:absolute;width:100px;z-index:10000;}.pp_top{height:20px;position: relative;}* html .pp_top{padding:0 20px;}.pp_top .pp_left{height:20px;left:0;position:absolute;width:20px;}.pp_top .pp_middle{height:20px;left:20px;position:absolute;right:20px;}* html .pp_top .pp_middle{left:0;position: static;}.pp_top .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px;}.pp_content{height:40px;}.pp_fade{display: none;}.pp_content_container{position: relative;text-align: left;width:100%;}.pp_content_container .pp_left{padding-left:20px;}.pp_content_container .pp_right{padding-right:20px;}.pp_content_container .pp_details{float: left;margin:10px 0 2px 0;}.pp_description{display: none;margin:0 0 5px 0;}.pp_nav{clear: left;float: left;margin:3px 0 0 0;}.pp_nav p{float: left;margin:2px 4px;}.pp_nav .pp_play,.pp_nav .pp_pause{float: left;margin-right:4px;text-indent: -10000px;}a.pp_arrow_previous,a.pp_arrow_next{display:block;float: left;height:15px;margin-top:3px;overflow: hidden;text-indent: -10000px;width:14px;}.pp_hoverContainer{position:absolute;top:0;width:100%;z-index:2000;}.pp_gallery{left:50%;margin-top: -50px;position:absolute;z-index:10000;}.pp_gallery ul{float: left;height:35px;margin:0 0 0 5px;overflow: hidden;position: relative;}.pp_gallery ul a{border:1px #000 solid;border:1px rgba(0,0,0,0.5) solid;display:block;float: left;height:33px;overflow: hidden;}.pp_gallery ul a:hover,.pp_gallery li.selected a{border-color:#fff;}.pp_gallery ul a img{border:0;}.pp_gallery li{display:block;float: left;margin:0 5px 0 0;}.pp_gallery li.default a{background: url(../images/prettyPhoto/facebook/default_thumbnail.gif) 0 0 no-repeat;display:block;height:33px;width:50px;}.pp_gallery li.default a img{display: none;}.pp_gallery .pp_arrow_previous,.pp_gallery .pp_arrow_next{margin-top:7px !important;}a.pp_next{background: url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float: right;height:100%;text-indent: -10000px;width:49%;}a.pp_previous{background: url(../images/prettyPhoto/light_rounded/btnNext.png) 10000px 10000px no-repeat;display:block;float: left;height:100%;text-indent: -10000px;width:49%;}a.pp_expand,a.pp_contract{cursor: pointer;display: none;height:20px;position:absolute;right:30px;text-indent: -10000px;top:10px;width:20px;z-index:20000;}a.pp_close{display:block;float: right;line-height:22px;text-indent: -10000px;}.pp_bottom{height:20px;position: relative;}* html .pp_bottom{padding:0 20px;}.pp_bottom .pp_left{height:20px;left:0;position:absolute;width:20px;}.pp_bottom .pp_middle{height:20px;left:20px;position:absolute;right:20px;}* html .pp_bottom .pp_middle{left:0;position: static;}.pp_bottom .pp_right{height:20px;left:auto;position:absolute;right:0;top:0;width:20px;}.pp_loaderIcon{display:block;height:24px;left:50%;margin: -12px 0 0 -12px;position:absolute;top:50%;width:24px;}#pp_full_res{line-height:1 !important;}#pp_full_res .pp_inline{text-align: left;}#pp_full_res .pp_inline p{margin:0 0 15px 0;}div.ppt{color:#fff;display: none;font-size:17px;margin:0 0 5px 15px;z-index:9999;}.clearfix:after{content: ".";display:block;height:0;clear:both;visibility: hidden;}.clearfix {display: inline-block;}* html .clearfix {height:1%;}.clearfix {display:block;} \ No newline at end of file diff --git a/src/main/webapp/blue/css/reset.css b/src/main/webapp/blue/css/reset.css new file mode 100644 index 0000000..204443b --- /dev/null +++ b/src/main/webapp/blue/css/reset.css @@ -0,0 +1,53 @@ +/* http://meyerweb.com/eric/tools/css/reset/ */ +/* v1.0 | 20080212 */ + +html, body, div, span, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/src/main/webapp/blue/css/skin/images/btn-big-left.jpg b/src/main/webapp/blue/css/skin/images/btn-big-left.jpg new file mode 100644 index 0000000..4ef9cf7 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-big-left.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-big-lefth.jpg b/src/main/webapp/blue/css/skin/images/btn-big-lefth.jpg new file mode 100644 index 0000000..cfd2de4 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-big-lefth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-big-right.jpg b/src/main/webapp/blue/css/skin/images/btn-big-right.jpg new file mode 100644 index 0000000..0010c2a Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-big-right.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-big-righth.jpg b/src/main/webapp/blue/css/skin/images/btn-big-righth.jpg new file mode 100644 index 0000000..03e4d5b Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-big-righth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-light-left.jpg b/src/main/webapp/blue/css/skin/images/btn-light-left.jpg new file mode 100644 index 0000000..6da1486 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-light-left.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-light-lefth.jpg b/src/main/webapp/blue/css/skin/images/btn-light-lefth.jpg new file mode 100644 index 0000000..9264b61 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-light-lefth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-light-right.jpg b/src/main/webapp/blue/css/skin/images/btn-light-right.jpg new file mode 100644 index 0000000..539ca7e Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-light-right.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-light-righth.jpg b/src/main/webapp/blue/css/skin/images/btn-light-righth.jpg new file mode 100644 index 0000000..01a4961 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-light-righth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-medium-left.jpg b/src/main/webapp/blue/css/skin/images/btn-medium-left.jpg new file mode 100644 index 0000000..5e45ae1 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-medium-left.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-medium-lefth.jpg b/src/main/webapp/blue/css/skin/images/btn-medium-lefth.jpg new file mode 100644 index 0000000..b4b78be Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-medium-lefth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-medium-right.jpg b/src/main/webapp/blue/css/skin/images/btn-medium-right.jpg new file mode 100644 index 0000000..13cea87 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-medium-right.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/btn-medium-righth.jpg b/src/main/webapp/blue/css/skin/images/btn-medium-righth.jpg new file mode 100644 index 0000000..f3112d7 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/btn-medium-righth.jpg differ diff --git a/src/main/webapp/blue/css/skin/images/icon_analytics.png b/src/main/webapp/blue/css/skin/images/icon_analytics.png new file mode 100644 index 0000000..ae97795 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_analytics.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_email.png b/src/main/webapp/blue/css/skin/images/icon_email.png new file mode 100644 index 0000000..46d208e Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_email.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_home.png b/src/main/webapp/blue/css/skin/images/icon_home.png new file mode 100644 index 0000000..88e9eb1 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_home.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_next.png b/src/main/webapp/blue/css/skin/images/icon_next.png new file mode 100644 index 0000000..86b18ee Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_next.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_next_hover.png b/src/main/webapp/blue/css/skin/images/icon_next_hover.png new file mode 100644 index 0000000..c6385fa Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_next_hover.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_print.png b/src/main/webapp/blue/css/skin/images/icon_print.png new file mode 100644 index 0000000..29d4dd7 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_print.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_search.png b/src/main/webapp/blue/css/skin/images/icon_search.png new file mode 100644 index 0000000..2d4ecf1 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_search.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_security.png b/src/main/webapp/blue/css/skin/images/icon_security.png new file mode 100644 index 0000000..ebc2a40 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_security.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_seo.png b/src/main/webapp/blue/css/skin/images/icon_seo.png new file mode 100644 index 0000000..d26b6f1 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_seo.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_shop.png b/src/main/webapp/blue/css/skin/images/icon_shop.png new file mode 100644 index 0000000..09073d2 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_shop.png differ diff --git a/src/main/webapp/blue/css/skin/images/icon_tag.png b/src/main/webapp/blue/css/skin/images/icon_tag.png new file mode 100644 index 0000000..1b9b647 Binary files /dev/null and b/src/main/webapp/blue/css/skin/images/icon_tag.png differ diff --git a/src/main/webapp/blue/css/skin/style.css b/src/main/webapp/blue/css/skin/style.css new file mode 100644 index 0000000..f3c4812 --- /dev/null +++ b/src/main/webapp/blue/css/skin/style.css @@ -0,0 +1,152 @@ + +a { + color: #0097da; +} + +a:hover { + color: #00587f; +} + +.category { + background: transparent url(images/icon_tag.png) 0px 2px no-repeat; +} + +.category a:hover { + color: #151515; +} + + + +/************************************************************************ +-) BUTTONS +*************************************************************************/ + +a.btn-light { + background: transparent url(images/btn-light-right.jpg) no-repeat scroll top right; + display: block; + float: right; + height: 28px; + margin-right: 6px; + margin-top: -5px; + padding-right: 18px; + text-decoration: none; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size:11px; + font-weight:normal; +} + +a.btn-light span { + background: transparent url(images/btn-light-left.jpg) no-repeat; + display: block; + line-height: 28px; + padding: 0px 0 5px 18px; + text-align:center; +} + +a.btn-light:hover { + background: transparent url(images/btn-light-righth.jpg) no-repeat scroll top right; +} + +a.btn-light:hover span { + background: transparent url(images/btn-light-lefth.jpg) no-repeat; + color:#fff !important; + text-align:center; +} + +a.btn-light-preview { + background: transparent url(images/btn-light-right.jpg) no-repeat scroll top right; + display: block; + float: right; + height: 28px; + margin-right: 6px; + margin-top: -5px; + padding-right: 18px; + text-decoration: none; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size:11px; + font-weight:normal; +} + +a.btn-light-preview span { + background: transparent url(images/btn-light-left.jpg) no-repeat; + display: block; + line-height: 28px; + padding: 0px 0 5px 18px; + text-align:center; +} + +a.btn-light-preview:hover { + background: transparent url(images/btn-light-righth.jpg) no-repeat scroll top right; +} + +a.btn-light-preview:hover span { + background: transparent url(images/btn-light-lefth.jpg) no-repeat; + color:#fff !important; + text-align:center; +} + +a.btn-medium { + background: transparent url(images/btn-medium-right.jpg) no-repeat scroll top right; + display: block; + float: left; + height: 39px; + margin-right: 6px; + padding-right: 18px; + text-decoration: none; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size:14px; + font-weight:bold; +} + +a.btn-medium span { + background: transparent url(images/btn-medium-left.jpg) no-repeat; + display: block; + line-height: 39px; + padding: 0px 0 5px 18px; + text-align:center; +} + +a.btn-medium:hover { + background: transparent url(images/btn-medium-righth.jpg) no-repeat scroll top right; +} + +a.btn-medium:hover span { + background: transparent url(images/btn-medium-lefth.jpg) no-repeat; + color:#fff !important; + text-align:center; +} + +a.btn-big { + background: transparent url(images/btn-big-right.jpg) no-repeat scroll top right; + display: block; + float: left; + height: 59px; + margin-right: 6px; + padding-right: 18px; + text-decoration: none; + color: #fff; + font-family: Arial, Helvetica, sans-serif; + font-size:18px; + font-weight:bold; +} + +a.btn-big span { + background: transparent url(images/btn-big-left.jpg) no-repeat; + display: block; + line-height: 59px; + padding: 0px 0 5px 18px; + text-align:center; +} + +a.btn-big:hover { + background: transparent url(images/btn-big-righth.jpg) no-repeat scroll top right; +} + +a.btn-big:hover span { + background: transparent url(images/btn-big-lefth.jpg) no-repeat; + color:#fff !important; + text-align:center; +} diff --git a/src/main/webapp/blue/css/style.css b/src/main/webapp/blue/css/style.css new file mode 100644 index 0000000..62151fe --- /dev/null +++ b/src/main/webapp/blue/css/style.css @@ -0,0 +1,912 @@ +/************************************************************************ +-) BASIC CONTAINERS +*************************************************************************/ + +body { + font-size:13px; + font-family: Arial, Helevtica, Verdana, san-serif; + color: #777777; +} + +a { + text-decoration: none; +} + +#fullwidth_header { + width: 100%; + height: 80px; + background: url(../images/header_bg.png) repeat-x; + position: fixed; + top: 0; + z-index: 9999; +} + +#fullwidth_gradient { + width: 100%; + height: 180px; + background: url(../images/gradient_bg.png) repeat-x; + margin-top: 80px; +} + +.iframe { + z-index: 1px; +} + + +/************************************************************************ +-) HEADER +*************************************************************************/ + + +.heading { + margin-top: 40px; +} + +.heading h1 { + margin-bottom: 20px; +} + +.subhead { + display: block; + font-family: Helvetica; + font-size: 14px; + font-weight: bold; + color: #555555; +} + +.slider { + margin-top: 40px; +} + +#monitor { + height: 298px; + background: url(../images/monitor.png) no-repeat; +} + +#cycle { + width:322px; + height:185px; + position:absolute; + z-index:1; + margin:22px 0 0 45px; +} + +.heading, .slider { + margin-bottom: 20px; +} + + +/*** LOGO ***/ + +.logo, .logo a { + display:block; + height:70px; + width:320px; + position:relative; + left:0px; + top:7px; + border: none; + padding: 0; + margin:0; +} + +.logo a, .logo a:hover { + top:0; + left:0; + text-indent:-9999px; + outline:none; + border: none; +} + +.logo a { + background: transparent url('../images/logo.png') no-repeat top left; +} + + + +/************************************************************************ +-) NAVIGATION +*************************************************************************/ + +#nav ul { + float:right; + margin:23px 0 0 0; + font-size:13px; + text-transform:none; +} + +#nav li { + display:block; + float:left; + margin-left:5px; +} + +#nav a { + display:block; + padding:8px 10px 8px 10px; + float:left; + color:#a5a5a5; + text-decoration:none; +} + +#nav a:hover, #nav .current_page_item a { + text-decoration:none; + background: #777777; + color: #fff; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +#nav ul ul { + margin:20px 0 0 0; + width:180px; + text-transform:none; +} + +#nav ul ul ul { + margin:-1px 0 0 40px; + text-transform:none; + border-bottom:none; +} + +#nav ul ul li { + margin-left:0px; +} + +#nav ul ul li a { + margin-left:0px; + background:none; + width:160px; + padding:10px 10px 8px 10px; +} + +#nav ul ul li a:hover { + background:#e2e2e2; +} + +#nav ul ul { + background:#161519; + border-left:1px solid #909090; + border-right:1px solid #909090; +} + +#nav ul ul ul { + border:1px solid #909090; +} + +#nav ul ul li { + border-bottom:1px solid #909090; +} + +/*** SOCIAL BUTTONS ***/ + +.social_bookmarks { + float: right; + height: 24px; + list-style-type: none; + z-index: 6; + margin: 27px 0 0 0; +} + +.social_bookmarks li { + float:right; + margin:0; + width:24px; + padding:0 0 0 7px; +} + +.social_bookmarks li a { + height:24px; + width:24px; + display: block; + float:left; + text-indent: -9999px; + border:none; + padding:0; + outline: none; +} + +.social_bookmarks .linkedin a { + background: transparent url(../images/linkedin.png) 0 0 no-repeat; +} + +.social_bookmarks .facebook a { + background: transparent url(../images/facebook.png) 0 0 no-repeat; +} + +.social_bookmarks .twitter a { + background: transparent url(../images/twitter.png) 0 0 no-repeat; +} + + + +/************************************************************************ +-) TEASER +*************************************************************************/ + +.teasertext { + font-family: Helvetica; + font-size: 24px; + font-weight: bold; + color: #555555; +} +.teasertext p { + line-height: 28px; + margin-bottom: 10px; +} + + +/************************************************************************ +-) COIN SLIDER +*************************************************************************/ + + +#coin_holder{ + float:left; + width:925px; + height:280px; + background:#FFFFFF; + position:relative; + z-index:2; + margin-top:25px; + margin-bottom: 10px; + padding:7px; +} + +#coin_holder .item{ + width:925px; + height:280px; + background:#CCCCCC; + padding-bottom: 30px; +} + +.coin-slider { + overflow: hidden; + zoom: 1; + position: relative; + margin-bottom: 50px; +} +.coin-slider a { + text-decoration: none; + outline: none; + border: none; +} + +.slide_border { + background: #fff; + border:1px solid #d0d0d0; + padding: 0; +} + +.slide_bg { + background: transparent url(../images/bg_image_slider.png) bottom center no-repeat; + margin-bottom: 40px; +} + +.cs-buttons { + font-size: 0px; + padding: 10px; + float: left; + margin-top: 12px; +} + +.cs-buttons a { + margin-left: 5px; + height: 10px; + width: 10px; + float: left; + color: #fff; + border: 1px solid #555555; + text-indent: -1000px; + -moz-border-radius: 100px; + -webkit-border-radius:100px; + border-radius:100px; +} + +.cs-buttons a:hover { + background: #555555; +} + +.cs-active { + background: #555555; + color: #fff; +} + +.cs-title { + width: 920px; + padding: 10px; + background-color: #000000; + color: #FFFFFF; +} + +.cs-prev, .cs-next { + background-color: #fff; + color: #555555; + padding: 0px 10px; +} + +/************************************************************************ +-) BUTTONS +*************************************************************************/ + +#call_to_action { + margin-top: 0px; + margin-bottom: 13px; +} + +/************************************************************************ +-) BOXES +*************************************************************************/ + +.box h3 { + font-family: Arial; + font-size: 14px; + font-weight: bold; + text-transform: uppercase; + color: #555555; + margin-bottom: -2px; + margin-top: 20px; + padding-top: 30px; +} + +.box p { + font-family: Arial; + font-size: 13px; + color: #777777; + margin-bottom: 20px; + padding-top: 30px; + padding-right: 10px; +} + +.box { + margin-top: 10px; + padding-bottom: 20px; +} + + + +/************************************************************************ +-) PORTFOLIO +*************************************************************************/ + +.portfolio_left h2 { + font-size: 36px; + letter-spacing: -0.05em; + color: #151515; + margin-bottom: 7px; +} + +.item_border_big { + background: #fff; + border:1px solid #d0d0d0; + height: 482px; +} + +.item_border_small { + background: #fff; + border:1px solid #d0d0d0; + height: 234px; +} + +.item { + background: transparent url(../images/bg_image_big.png) bottom center no-repeat; + padding-bottom: 10px; +} + +.item_small { + background: transparent url(../images/bg_image.png) bottom center no-repeat; + padding-bottom: 20px; +} + +.portfolio_left, .portfolio_right { + max-height: 481px; +} + +.next_button_first, .next_button_first a { + display:block; + height:50px; + width:50px; + position:relative; + left:50%; + top:500px; + border: none; + padding: 0; + margin:0; +} + +.next_button_first a, .next_button_first a:hover { + top:0; + left:0; + text-indent:-9999px; + outline:none; + border: none; +} + +.next_button_first a { + background: transparent url('../css/skin/images/icon_next.png') no-repeat; +} + +.next_button_first a:hover { + background: transparent url('../css/skin/images/icon_next_hover.png') no-repeat; +} + +.next_button, .next_button a { + display:block; + height:50px; + width:50px; + position:relative; + left:50%; + top:500px; + border: none; + padding: 0; + margin:0; +} + +.next_button a, .next_button a:hover { + top:0; + left:0; + text-indent:-9999px; + outline:none; + border: none; +} + +.next_button a { + background: transparent url('../css/skin/images/icon_next.png') no-repeat; +} + +.next_button a:hover { + background: transparent url('../css/skin/images/icon_next_hover.png') no-repeat; +} + +/************************************************************************ +-) SERVICES +*************************************************************************/ + +.service_item { + margin-bottom: 20px; +} + +.service_item h3 { + border-bottom: 1px solid #d0d0d0; + padding-bottom: 5px; +} + + + +/************************************************************************ +-) CONTACT +*************************************************************************/ + +.black { + background: #000; + margin-bottom: 50px; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +#contact { + margin-bottom: 50px; + margin-top: -20px; + margin-left: 12px; +} + + +/* Form style */ + +#contact label { + display: inline; + float: left; + color: #a5a5a5; + height: 26px; + line-height: 26px; + font-size: 14px; + margin: 6px 0; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + + +#contact input, textarea, select { + margin: 0; + padding: 5px; + color: #666; + font-size: 14px; + background: #f5f5f5; + border: 1px solid #ccc; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +#contact input, select { + height: 26px; + line-height: 26px; + font-size: 14px; +} + +#contact textarea { + line-height: 26px; + font-size: 14px; +} + +#contact select { + width: 482px; +} + +#contact input:focus, textarea:focus, select:focus { + border: 1px solid #999; + background-color: #fff; + color:#333; +} + +#contact input.submit { + font-size: 11px; + text-transform: uppercase; + font-weight: bold; + cursor: pointer; + border: 1px solid #dcff68; + background:#a6c71a; + color:#fff; + height: 35px; + padding: 5px 20px 5px 20px; + line-height: 15px; +} + +#contact input.submit:hover { + background:#afcd22; +} + +#contact input[type="submit"][disabled] { + background:#888; +} + +#contact fieldset { + padding: 20px 0px 0px 15px; +} + +#contact span.required { + font-size: 13px; + color: #ff0000; +} /* Select the colour of the * if the field is required. */ + +#message { + width: 480px; + margin: 10px 0 0 14px; + padding: 0; +} + +.error_message { + display: block; + height: 22px; + line-height: 22px; + margin: 50px 0; + background: #FBE3E4 url('../images/assets/error.gif') no-repeat 10px center; + padding: 3px 10px 3px 35px; + color:#8a1f11; + border: 1px solid #FBC2C4; + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +.loader { + padding: 0 10px; +} + +#contact #success_page h3 { + background: url('../images/assets/success.gif') left no-repeat; + padding-left:22px; + color: #fff; +} + +.notice { + height: 35px; + line-height: 35px; + margin-left: 20px; + padding-left: 20px; + border-left: 1px solid #777777; +} + + +/*** SOCIAL BUTTONS ***/ + +.social_bookmarks_footer { + float: left; + height: 32px; + list-style-type: none; + z-index: 6; +} + +.social_bookmarks_footer li { + float:right; + margin:0; + width:32px; + padding:0 7px 0 0; +} + +.social_bookmarks_footer li a { + height:32px; + width:32px; + display: block; + float:left; + text-indent: -9999px; + border:none; + padding:0; + outline: none; +} + +.social_bookmarks_footer .linkedin a { + background: transparent url(../images/social/linkedin.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .facebook a { + background: transparent url(../images/social/facebook.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .twitter a { + background: transparent url(../images/social/twitter.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .delicious a { + background: transparent url(../images/social/delicious.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .vimeo a { + background: transparent url(../images/social/vimeo.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .flickr a { + background: transparent url(../images/social/flickr-2.png) 0 0 no-repeat; +} + +.social_bookmarks_footer .deviantart a { + background: transparent url(../images/social/deviantart.png) 0 0 no-repeat; +} + + +/************************************************************************ +-) FOOTER +*************************************************************************/ + + +.footer { + margin-bottom: 80px; +} + +/************************************************************************ +-) MISC +*************************************************************************/ + + +/*** CHECKLIST ***/ + +ul.checklist { + list-style:none !important; + margin-left:0px; + } + +ul.checklist li { + background: url(../images/check.png) 0 1px no-repeat; + padding-left:30px; + line-height: 22px; +} + + +.left { + float: left; +} + +.right { + float: right; +} + +.bottom { + margin-top: 40px; +} + +.category { + padding: 6px 7px 7px 35px; +} + +.category a { + font-size: 11px; + font-weight: bold; + color: #555555; + text-decoration: none +} + +.hire_me { + font-family: Arial; + font-size: 13px; + font-weight: bold; + color: #555555; + margin-top: 20px; +} + +.rounded { + -moz-border-radius: 3px; + -webkit-border-radius:3px; + border-radius:3px; +} + +.big_rounded { + -moz-border-radius: 5px; + -webkit-border-radius:5px; + border-radius:5px; +} + +body .alignleft { + float:left; + margin:10px 20px 0 0; + display: block; +} + +.alignleft img, .alignright img{ + display:block; +} + +.hr { + clear: both; + padding: 0; + margin: 0 0 1em; + height: 5px; + background: transparent url("../images/hr-bg.gif") repeat-x 0 0; +} + +.padding_item_first { + padding-top: 30px; + margin-bottom: 80px; +} + +.padding_item { + padding-top: 150px; + margin-bottom: 80px; +} + +.padding_service { + padding-top: 95px; + margin-bottom: 80px; +} + +.margin_top { + margin-top: 40px; +} + +.margin_bottom { + margin-bottom: 40px; +} + +.margin_break { + margin-top: 110px; +} + +.margin_footer_break { + margin: 20px 0 20px 0; +} + + +/* +======================================================================= + Floating Box for color choices in live preview only +======================================================================= +*/ + +#box { + position: absolute; + right: 10px; + top: 80px; +} + +#box div { + margin: 10px 0; +} + +.highlight_box3 { + display: block; + float: left; + border: 1px solid #d0d0d0; + margin: 0px; + background-color: #fff; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius:3px; +} + +.highlight_box3 p { + display: block; + font-size:12px; + padding: 10px 10px 10px 15px; + } + +.highlight_box3 h4 { + display: block; + margin: 0px; + padding: 10px 10px 10px 10px; + color:#555555; + font-size:14px; + background: #f2f2f2; +} + +.blue { + color: #0097da; +} + +.blue:hover { + color: #00587f; +} + +.green { + color: #2fae2b; +} + +.green:hover { + color: #238020; +} + +.orange { + color: #da6700; +} + +.orange:hover { + color: #a64d00; +} + +.yellow { + color: #dac100; +} + +.yellow:hover { + color: #a59200; +} + +.red { + color: #da0006; +} + +.red:hover { + color: #a50005; +} + +.brown { + color: #ae7e2b; +} + +.brown:hover { + color: #815d20; +} + +.cyan { + color: #10bfca; +} + +.cyan:hover { + color: #0b848c; +} + +.purple { + color: #8b00da; +} + +.purple:hover { + color: #6900a6; +} + +.pink { + color: #c100da; +} + +.pink:hover { + color: #9200a6; +} + +.oliv { + color: #92ae2b; +} + +.oliv:hover { + color: #6b8020; +} + diff --git a/src/main/webapp/blue/css/text.css b/src/main/webapp/blue/css/text.css new file mode 100644 index 0000000..5712ae1 --- /dev/null +++ b/src/main/webapp/blue/css/text.css @@ -0,0 +1,94 @@ +/* + 960 Grid System ~ Text CSS. + Learn more ~ http://960.gs/ + + Licensed under GPL and MIT. +*/ + +/* `Basic HTML +----------------------------------------------------------------------------------------------------*/ + +body { + font: 13px/1.5 'Helvetica Neue', Arial, 'Liberation Sans', FreeSans, sans-serif; +} + +a:focus { + outline: 1px dotted; +} + +hr { + border: 0 #ccc solid; + border-top-width: 1px; + clear: both; + height: 0; +} + +/* `Headings +----------------------------------------------------------------------------------------------------*/ + +h1 { + font-size: 70px; + letter-spacing: -0.05em; + line-height: 70px; + color: #151515; +} + +h2 { + font-size: 36px; + letter-spacing: -0.05em; + color: #151515; +} + +h3 { + font-size: 16px; + color: #555555; + text-transform: uppercase; + margin-bottom: 10px; +} + +h4 { + font-size: 19px; +} + +h5 { + font-size: 17px; +} + +h6 { + font-size: 15px; +} + +/* `Spacing +----------------------------------------------------------------------------------------------------*/ + +ol { + list-style: decimal; +} + +ul { + list-style: disc; +} + +li { + margin-left: 0px; +} + +dl, +hr, +h1, +h2, +h4, +h5, +h6, +ol, +ul, +pre, +table, +address, +fieldset { + margin-bottom: 30px; +} + +p { + margin-bottom: 15px; +} \ No newline at end of file diff --git a/src/main/webapp/blue/favicon.ico b/src/main/webapp/blue/favicon.ico new file mode 100644 index 0000000..68ff270 Binary files /dev/null and b/src/main/webapp/blue/favicon.ico differ diff --git a/src/main/webapp/blue/images/assets/ajax-loader.gif b/src/main/webapp/blue/images/assets/ajax-loader.gif new file mode 100644 index 0000000..d93974f Binary files /dev/null and b/src/main/webapp/blue/images/assets/ajax-loader.gif differ diff --git a/src/main/webapp/blue/images/assets/error.gif b/src/main/webapp/blue/images/assets/error.gif new file mode 100644 index 0000000..ea0e139 Binary files /dev/null and b/src/main/webapp/blue/images/assets/error.gif differ diff --git a/src/main/webapp/blue/images/assets/success.gif b/src/main/webapp/blue/images/assets/success.gif new file mode 100644 index 0000000..bcdbad1 Binary files /dev/null and b/src/main/webapp/blue/images/assets/success.gif differ diff --git a/src/main/webapp/blue/images/bg_image.png b/src/main/webapp/blue/images/bg_image.png new file mode 100644 index 0000000..5b0c311 Binary files /dev/null and b/src/main/webapp/blue/images/bg_image.png differ diff --git a/src/main/webapp/blue/images/bg_image_big.png b/src/main/webapp/blue/images/bg_image_big.png new file mode 100644 index 0000000..bb00da3 Binary files /dev/null and b/src/main/webapp/blue/images/bg_image_big.png differ diff --git a/src/main/webapp/blue/images/bg_image_slider.png b/src/main/webapp/blue/images/bg_image_slider.png new file mode 100644 index 0000000..5d492ac Binary files /dev/null and b/src/main/webapp/blue/images/bg_image_slider.png differ diff --git a/src/main/webapp/blue/images/check.png b/src/main/webapp/blue/images/check.png new file mode 100644 index 0000000..3cdcf57 Binary files /dev/null and b/src/main/webapp/blue/images/check.png differ diff --git a/src/main/webapp/blue/images/facebook.png b/src/main/webapp/blue/images/facebook.png new file mode 100644 index 0000000..ac5bd5a Binary files /dev/null and b/src/main/webapp/blue/images/facebook.png differ diff --git a/src/main/webapp/blue/images/gradient.png b/src/main/webapp/blue/images/gradient.png new file mode 100644 index 0000000..770e5f8 Binary files /dev/null and b/src/main/webapp/blue/images/gradient.png differ diff --git a/src/main/webapp/blue/images/gradient_bg.png b/src/main/webapp/blue/images/gradient_bg.png new file mode 100644 index 0000000..6a09c13 Binary files /dev/null and b/src/main/webapp/blue/images/gradient_bg.png differ diff --git a/src/main/webapp/blue/images/header_bg.png b/src/main/webapp/blue/images/header_bg.png new file mode 100644 index 0000000..c42561b Binary files /dev/null and b/src/main/webapp/blue/images/header_bg.png differ diff --git a/src/main/webapp/blue/images/hr-bg.gif b/src/main/webapp/blue/images/hr-bg.gif new file mode 100644 index 0000000..97a8023 Binary files /dev/null and b/src/main/webapp/blue/images/hr-bg.gif differ diff --git a/src/main/webapp/blue/images/img1.jpg b/src/main/webapp/blue/images/img1.jpg new file mode 100644 index 0000000..a3edbaa Binary files /dev/null and b/src/main/webapp/blue/images/img1.jpg differ diff --git a/src/main/webapp/blue/images/img_1.jpg b/src/main/webapp/blue/images/img_1.jpg new file mode 100644 index 0000000..26d322c Binary files /dev/null and b/src/main/webapp/blue/images/img_1.jpg differ diff --git a/src/main/webapp/blue/images/img_2.jpg b/src/main/webapp/blue/images/img_2.jpg new file mode 100644 index 0000000..f3c58e8 Binary files /dev/null and b/src/main/webapp/blue/images/img_2.jpg differ diff --git a/src/main/webapp/blue/images/img_3.jpg b/src/main/webapp/blue/images/img_3.jpg new file mode 100644 index 0000000..e862cc2 Binary files /dev/null and b/src/main/webapp/blue/images/img_3.jpg differ diff --git a/src/main/webapp/blue/images/linkedin.png b/src/main/webapp/blue/images/linkedin.png new file mode 100644 index 0000000..7465895 Binary files /dev/null and b/src/main/webapp/blue/images/linkedin.png differ diff --git a/src/main/webapp/blue/images/logo.png b/src/main/webapp/blue/images/logo.png new file mode 100644 index 0000000..05afe3d Binary files /dev/null and b/src/main/webapp/blue/images/logo.png differ diff --git a/src/main/webapp/blue/images/monitor-img1.jpg b/src/main/webapp/blue/images/monitor-img1.jpg new file mode 100644 index 0000000..f968af2 Binary files /dev/null and b/src/main/webapp/blue/images/monitor-img1.jpg differ diff --git a/src/main/webapp/blue/images/monitor-img2.jpg b/src/main/webapp/blue/images/monitor-img2.jpg new file mode 100644 index 0000000..72551a9 Binary files /dev/null and b/src/main/webapp/blue/images/monitor-img2.jpg differ diff --git a/src/main/webapp/blue/images/monitor-img3.jpg b/src/main/webapp/blue/images/monitor-img3.jpg new file mode 100644 index 0000000..94d3199 Binary files /dev/null and b/src/main/webapp/blue/images/monitor-img3.jpg differ diff --git a/src/main/webapp/blue/images/monitor.png b/src/main/webapp/blue/images/monitor.png new file mode 100644 index 0000000..c768202 Binary files /dev/null and b/src/main/webapp/blue/images/monitor.png differ diff --git a/src/main/webapp/blue/images/portfolio/big_image.jpg b/src/main/webapp/blue/images/portfolio/big_image.jpg new file mode 100644 index 0000000..cd8ab27 Binary files /dev/null and b/src/main/webapp/blue/images/portfolio/big_image.jpg differ diff --git a/src/main/webapp/blue/images/portfolio/portfolio_item_big.jpg b/src/main/webapp/blue/images/portfolio/portfolio_item_big.jpg new file mode 100644 index 0000000..a46452f Binary files /dev/null and b/src/main/webapp/blue/images/portfolio/portfolio_item_big.jpg differ diff --git a/src/main/webapp/blue/images/portfolio/portfolio_item_moo.jpg b/src/main/webapp/blue/images/portfolio/portfolio_item_moo.jpg new file mode 100644 index 0000000..2735b6a Binary files /dev/null and b/src/main/webapp/blue/images/portfolio/portfolio_item_moo.jpg differ diff --git a/src/main/webapp/blue/images/portfolio/portfolio_item_moo_small.jpg b/src/main/webapp/blue/images/portfolio/portfolio_item_moo_small.jpg new file mode 100644 index 0000000..cdc236c Binary files /dev/null and b/src/main/webapp/blue/images/portfolio/portfolio_item_moo_small.jpg differ diff --git a/src/main/webapp/blue/images/portfolio/portfolio_item_small.jpg b/src/main/webapp/blue/images/portfolio/portfolio_item_small.jpg new file mode 100644 index 0000000..238a681 Binary files /dev/null and b/src/main/webapp/blue/images/portfolio/portfolio_item_small.jpg differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnNext.png b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnNext.png new file mode 100644 index 0000000..b28c1ef Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnNext.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnPrevious.png b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnPrevious.png new file mode 100644 index 0000000..e0cd9c4 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/btnPrevious.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/contentPattern.png b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/contentPattern.png new file mode 100644 index 0000000..e5a047c Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/contentPattern.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/default_thumbnail.gif b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/default_thumbnail.gif new file mode 100644 index 0000000..2b1280f Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/default_thumbnail.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/loader.gif b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/loader.gif new file mode 100644 index 0000000..50820ee Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/loader.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_rounded/sprite.png b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/sprite.png new file mode 100644 index 0000000..fb8c0f8 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_rounded/sprite.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/btnNext.png b/src/main/webapp/blue/images/prettyPhoto/dark_square/btnNext.png new file mode 100644 index 0000000..b28c1ef Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/btnNext.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/btnPrevious.png b/src/main/webapp/blue/images/prettyPhoto/dark_square/btnPrevious.png new file mode 100644 index 0000000..e0cd9c4 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/btnPrevious.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/contentPattern.png b/src/main/webapp/blue/images/prettyPhoto/dark_square/contentPattern.png new file mode 100644 index 0000000..7b50aff Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/contentPattern.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/default_thumbnail.gif b/src/main/webapp/blue/images/prettyPhoto/dark_square/default_thumbnail.gif new file mode 100644 index 0000000..2b1280f Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/default_thumbnail.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/loader.gif b/src/main/webapp/blue/images/prettyPhoto/dark_square/loader.gif new file mode 100644 index 0000000..50820ee Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/loader.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/dark_square/sprite.png b/src/main/webapp/blue/images/prettyPhoto/dark_square/sprite.png new file mode 100644 index 0000000..4fe3547 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/dark_square/sprite.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/btnNext.png b/src/main/webapp/blue/images/prettyPhoto/facebook/btnNext.png new file mode 100644 index 0000000..e809c3b Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/btnNext.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/btnPrevious.png b/src/main/webapp/blue/images/prettyPhoto/facebook/btnPrevious.png new file mode 100644 index 0000000..0812542 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/btnPrevious.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternBottom.png b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternBottom.png new file mode 100644 index 0000000..a9be3b2 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternBottom.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternLeft.png b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternLeft.png new file mode 100644 index 0000000..277c87a Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternLeft.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternRight.png b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternRight.png new file mode 100644 index 0000000..76e50d0 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternRight.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternTop.png b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternTop.png new file mode 100644 index 0000000..8b110ba Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/contentPatternTop.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/default_thumbnail.gif b/src/main/webapp/blue/images/prettyPhoto/facebook/default_thumbnail.gif new file mode 100644 index 0000000..2b1280f Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/default_thumbnail.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/loader.gif b/src/main/webapp/blue/images/prettyPhoto/facebook/loader.gif new file mode 100644 index 0000000..7ac990c Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/loader.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/facebook/sprite.png b/src/main/webapp/blue/images/prettyPhoto/facebook/sprite.png new file mode 100644 index 0000000..660a254 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/facebook/sprite.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnNext.png b/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnNext.png new file mode 100644 index 0000000..b28c1ef Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnNext.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnPrevious.png b/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnPrevious.png new file mode 100644 index 0000000..e0cd9c4 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_rounded/btnPrevious.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_rounded/default_thumbnail.gif b/src/main/webapp/blue/images/prettyPhoto/light_rounded/default_thumbnail.gif new file mode 100644 index 0000000..2b1280f Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_rounded/default_thumbnail.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_rounded/loader.gif b/src/main/webapp/blue/images/prettyPhoto/light_rounded/loader.gif new file mode 100644 index 0000000..7ac990c Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_rounded/loader.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_rounded/sprite.png b/src/main/webapp/blue/images/prettyPhoto/light_rounded/sprite.png new file mode 100644 index 0000000..7f28379 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_rounded/sprite.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_square/btnNext.png b/src/main/webapp/blue/images/prettyPhoto/light_square/btnNext.png new file mode 100644 index 0000000..b28c1ef Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_square/btnNext.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_square/btnPrevious.png b/src/main/webapp/blue/images/prettyPhoto/light_square/btnPrevious.png new file mode 100644 index 0000000..e0cd9c4 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_square/btnPrevious.png differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_square/default_thumbnail.gif b/src/main/webapp/blue/images/prettyPhoto/light_square/default_thumbnail.gif new file mode 100644 index 0000000..2b1280f Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_square/default_thumbnail.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_square/loader.gif b/src/main/webapp/blue/images/prettyPhoto/light_square/loader.gif new file mode 100644 index 0000000..7ac990c Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_square/loader.gif differ diff --git a/src/main/webapp/blue/images/prettyPhoto/light_square/sprite.png b/src/main/webapp/blue/images/prettyPhoto/light_square/sprite.png new file mode 100644 index 0000000..4fe3547 Binary files /dev/null and b/src/main/webapp/blue/images/prettyPhoto/light_square/sprite.png differ diff --git a/src/main/webapp/blue/images/slider/1.jpg b/src/main/webapp/blue/images/slider/1.jpg new file mode 100644 index 0000000..a6427ce Binary files /dev/null and b/src/main/webapp/blue/images/slider/1.jpg differ diff --git a/src/main/webapp/blue/images/slider/2.jpg b/src/main/webapp/blue/images/slider/2.jpg new file mode 100644 index 0000000..8360c42 Binary files /dev/null and b/src/main/webapp/blue/images/slider/2.jpg differ diff --git a/src/main/webapp/blue/images/slider/3.jpg b/src/main/webapp/blue/images/slider/3.jpg new file mode 100644 index 0000000..3167f7a Binary files /dev/null and b/src/main/webapp/blue/images/slider/3.jpg differ diff --git a/src/main/webapp/blue/images/social/delicious.png b/src/main/webapp/blue/images/social/delicious.png new file mode 100644 index 0000000..33d7986 Binary files /dev/null and b/src/main/webapp/blue/images/social/delicious.png differ diff --git a/src/main/webapp/blue/images/social/deviantart.png b/src/main/webapp/blue/images/social/deviantart.png new file mode 100644 index 0000000..51caa35 Binary files /dev/null and b/src/main/webapp/blue/images/social/deviantart.png differ diff --git a/src/main/webapp/blue/images/social/facebook.png b/src/main/webapp/blue/images/social/facebook.png new file mode 100644 index 0000000..77906a4 Binary files /dev/null and b/src/main/webapp/blue/images/social/facebook.png differ diff --git a/src/main/webapp/blue/images/social/flickr-2.png b/src/main/webapp/blue/images/social/flickr-2.png new file mode 100644 index 0000000..4b91e09 Binary files /dev/null and b/src/main/webapp/blue/images/social/flickr-2.png differ diff --git a/src/main/webapp/blue/images/social/linkedin.png b/src/main/webapp/blue/images/social/linkedin.png new file mode 100644 index 0000000..2b7c501 Binary files /dev/null and b/src/main/webapp/blue/images/social/linkedin.png differ diff --git a/src/main/webapp/blue/images/social/twitter.png b/src/main/webapp/blue/images/social/twitter.png new file mode 100644 index 0000000..eddeec8 Binary files /dev/null and b/src/main/webapp/blue/images/social/twitter.png differ diff --git a/src/main/webapp/blue/images/social/vimeo.png b/src/main/webapp/blue/images/social/vimeo.png new file mode 100644 index 0000000..bd89ec5 Binary files /dev/null and b/src/main/webapp/blue/images/social/vimeo.png differ diff --git a/src/main/webapp/blue/images/twitter.png b/src/main/webapp/blue/images/twitter.png new file mode 100644 index 0000000..4a7ac7c Binary files /dev/null and b/src/main/webapp/blue/images/twitter.png differ diff --git a/src/main/webapp/charts/.svn/all-wcprops b/src/main/webapp/charts/.svn/all-wcprops new file mode 100644 index 0000000..2b0caea --- /dev/null +++ b/src/main/webapp/charts/.svn/all-wcprops @@ -0,0 +1,77 @@ +K 25 +svn:wc:ra_dav:version-url +V 75 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts +END +sample.xml +K 25 +svn:wc:ra_dav:version-url +V 86 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/sample.xml +END +charts.swf +K 25 +svn:wc:ra_dav:version-url +V 86 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/charts.swf +END +sample.html +K 25 +svn:wc:ra_dav:version-url +V 87 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/sample.html +END +chart-Branch-3.2.6-Build-Deploy.xml +K 25 +svn:wc:ra_dav:version-url +V 111 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-Branch-3.2.6-Build-Deploy.xml +END +sample_HTTPS.html +K 25 +svn:wc:ra_dav:version-url +V 93 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/sample_HTTPS.html +END +chart-hudson-ci-trunk.xml +K 25 +svn:wc:ra_dav:version-url +V 101 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-hudson-ci-trunk.xml +END +AC_RunActiveContent.js +K 25 +svn:wc:ra_dav:version-url +V 98 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/AC_RunActiveContent.js +END +chart-Branch-3.2.6-Build-Deploy.xml.html +K 25 +svn:wc:ra_dav:version-url +V 116 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-Branch-3.2.6-Build-Deploy.xml.html +END +chart-hudson-ci-branch-3.3.9.xml +K 25 +svn:wc:ra_dav:version-url +V 108 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-hudson-ci-branch-3.3.9.xml +END +chart-hudson-ci-trunk.xml.html +K 25 +svn:wc:ra_dav:version-url +V 106 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-hudson-ci-trunk.xml.html +END +gen_graph.rb +K 25 +svn:wc:ra_dav:version-url +V 88 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/gen_graph.rb +END +chart-hudson-ci-branch-3.3.9.xml.html +K 25 +svn:wc:ra_dav:version-url +V 113 +/repos/prime-services/!svn/ver/20464/automated-test-dashboard/public/charts/chart-hudson-ci-branch-3.3.9.xml.html +END diff --git a/src/main/webapp/charts/.svn/entries b/src/main/webapp/charts/.svn/entries new file mode 100644 index 0000000..7fd3981 --- /dev/null +++ b/src/main/webapp/charts/.svn/entries @@ -0,0 +1,442 @@ +10 + +dir +20468 +http://dssubvsn.it.global.hsbc:95/repos/prime-services/automated-test-dashboard/public/charts +http://dssubvsn.it.global.hsbc:95/repos/prime-services + + + +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE + + + + + + + + + + + + + + +ff5fb0dc-8917-11df-bb16-5548c8022300 + +sample.xml +file + + + + +2011-07-25T16:54:31.643562Z +d64d1061afd5790c0a7a4a10da9f087c +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +2407 + +charts.swf +file + + + + +2011-07-25T16:54:31.643562Z +a4313cccde096327031f21e38d22bea1 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +59168 + +sample.html +file + + + + +2011-07-25T16:54:31.571527Z +9d17b31376cf4a955e192bbc055f60da +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +1640 + +sample_HTTPS.html +file + + + + +2011-07-25T16:54:31.567525Z +3c1a53d6c0a040382eeddc5cf69e2e55 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +1643 + +chart-Branch-3.2.6-Build-Deploy.xml +file + + + + +2011-07-25T16:54:31.687584Z +5e12e79d0f4eace79aea0b972a1b8855 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +2837 + +charts_library +dir + +chart-hudson-ci-trunk.xml +file + + + + +2011-07-25T16:54:31.683582Z +cfdd5eba47e97de2d87ff99e70503a93 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +2830 + +AC_RunActiveContent.js +file + + + + +2011-07-25T16:54:31.575529Z +3e038cea960c1b650442b85cea237053 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +8029 + +chart-Branch-3.2.6-Build-Deploy.xml.html +file + + + + +2011-07-25T16:54:31.683582Z +83f3e8d570367af1d77bfbc0e1da3bd4 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +1726 + +resources +dir + +chart-hudson-ci-branch-3.3.9.xml +file + + + + +2011-07-25T16:54:31.647564Z +3d571b4773fdf84ecc346f2ff8926063 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +2832 + +chart-hudson-ci-trunk.xml.html +file + + + + +2011-07-25T16:54:31.683582Z +7ee92797683a3eecf36a688afeb2f103 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +1716 + +gen_graph.rb +file + + + + +2011-07-25T16:54:31.575529Z +1c42b0f0d82bc0829f62bccb4a482e2d +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +5395 + +chart-hudson-ci-branch-3.3.9.xml.html +file + + + + +2011-07-25T16:54:31.687584Z +210d2860864f37b398856c70655f3b14 +2011-07-25T17:00:42.220758Z +20464 +KINGSLEY HENDRICKSE +has-props + + + + + + + + + + + + + + + + + + + + +1723 + diff --git a/src/main/webapp/charts/.svn/prop-base/AC_RunActiveContent.js.svn-base b/src/main/webapp/charts/.svn/prop-base/AC_RunActiveContent.js.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/AC_RunActiveContent.js.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.html.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.html.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.html.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-branch-3.3.9.xml.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.html.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.html.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.html.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.svn-base b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/chart-hudson-ci-trunk.xml.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/charts.swf.svn-base b/src/main/webapp/charts/.svn/prop-base/charts.swf.svn-base new file mode 100644 index 0000000..dbc918b --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/charts.swf.svn-base @@ -0,0 +1,9 @@ +K 14 +svn:executable +V 1 +* +K 13 +svn:mime-type +V 24 +application/octet-stream +END diff --git a/src/main/webapp/charts/.svn/prop-base/gen_graph.rb.svn-base b/src/main/webapp/charts/.svn/prop-base/gen_graph.rb.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/gen_graph.rb.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/sample.html.svn-base b/src/main/webapp/charts/.svn/prop-base/sample.html.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/sample.html.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/sample.xml.svn-base b/src/main/webapp/charts/.svn/prop-base/sample.xml.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/sample.xml.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/prop-base/sample_HTTPS.html.svn-base b/src/main/webapp/charts/.svn/prop-base/sample_HTTPS.html.svn-base new file mode 100644 index 0000000..869ac71 --- /dev/null +++ b/src/main/webapp/charts/.svn/prop-base/sample_HTTPS.html.svn-base @@ -0,0 +1,5 @@ +K 14 +svn:executable +V 1 +* +END diff --git a/src/main/webapp/charts/.svn/text-base/AC_RunActiveContent.js.svn-base b/src/main/webapp/charts/.svn/text-base/AC_RunActiveContent.js.svn-base new file mode 100644 index 0000000..39c294b --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/AC_RunActiveContent.js.svn-base @@ -0,0 +1,292 @@ +//v1.7 +// Flash Player Version Detection +// Detect Client Browser type +// Copyright 2005-2007 Adobe Systems Incorporated. All rights reserved. +var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; +var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; +var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; + +function ControlVersion() +{ + var version; + var axo; + var e; + + // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry + + try { + // version will be set for 7.X or greater players + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + version = axo.GetVariable("$version"); + } catch (e) { + } + + if (!version) + { + try { + // version will be set for 6.X players only + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + + // installed player is some revision of 6.0 + // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29, + // so we have to be careful. + + // default to the first public version + version = "WIN 6,0,21,0"; + + // throws if AllowScripAccess does not exist (introduced in 6.0r47) + axo.AllowScriptAccess = "always"; + + // safe to call for 6.0r47 or greater + version = axo.GetVariable("$version"); + + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 4.X or 5.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = axo.GetVariable("$version"); + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 3.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = "WIN 3,0,18,0"; + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 2.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + version = "WIN 2,0,0,11"; + } catch (e) { + version = -1; + } + } + + return version; +} + +// JavaScript helper required to detect Flash Player PlugIn version information +function GetSwfVer(){ + // NS/Opera version >= 3 check for Flash plugin in plugin array + var flashVer = -1; + + if (navigator.plugins != null && navigator.plugins.length > 0) { + if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { + var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; + var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; + var descArray = flashDescription.split(" "); + var tempArrayMajor = descArray[2].split("."); + var versionMajor = tempArrayMajor[0]; + var versionMinor = tempArrayMajor[1]; + var versionRevision = descArray[3]; + if (versionRevision == "") { + versionRevision = descArray[4]; + } + if (versionRevision[0] == "d") { + versionRevision = versionRevision.substring(1); + } else if (versionRevision[0] == "r") { + versionRevision = versionRevision.substring(1); + if (versionRevision.indexOf("d") > 0) { + versionRevision = versionRevision.substring(0, versionRevision.indexOf("d")); + } + } + var flashVer = versionMajor + "." + versionMinor + "." + versionRevision; + } + } + // MSN/WebTV 2.6 supports Flash 4 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; + // WebTV 2.5 supports Flash 3 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; + // older WebTV supports Flash 2 + else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; + else if ( isIE && isWin && !isOpera ) { + flashVer = ControlVersion(); + } + return flashVer; +} + +// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available +function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) +{ + versionStr = GetSwfVer(); + if (versionStr == -1 ) { + return false; + } else if (versionStr != 0) { + if(isIE && isWin && !isOpera) { + // Given "WIN 2,0,0,11" + tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"] + tempString = tempArray[1]; // "2,0,0,11" + versionArray = tempString.split(","); // ['2', '0', '0', '11'] + } else { + versionArray = versionStr.split("."); + } + var versionMajor = versionArray[0]; + var versionMinor = versionArray[1]; + var versionRevision = versionArray[2]; + + // is the major.revision >= requested major.revision AND the minor version >= requested minor + if (versionMajor > parseFloat(reqMajorVer)) { + return true; + } else if (versionMajor == parseFloat(reqMajorVer)) { + if (versionMinor > parseFloat(reqMinorVer)) + return true; + else if (versionMinor == parseFloat(reqMinorVer)) { + if (versionRevision >= parseFloat(reqRevision)) + return true; + } + } + return false; + } +} + +function AC_AddExtension(src, ext) +{ + if (src.indexOf('?') != -1) + return src.replace(/\?/, ext+'?'); + else + return src + ext; +} + +function AC_Generateobj(objAttrs, params, embedAttrs) +{ + var str = ''; + if (isIE && isWin && !isOpera) + { + str += ' '; + } + str += ''; + } + else + { + str += ' + + + + + + + + + + + + diff --git a/src/main/webapp/charts/.svn/text-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base b/src/main/webapp/charts/.svn/text-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base new file mode 100644 index 0000000..ddfc26a --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/chart-Branch-3.2.6-Build-Deploy.xml.svn-base @@ -0,0 +1,107 @@ + + + + + + + + + + +150 + +149 + +148 + +147 + +144 + +143 + +142 + +141 + +140 + +139 + + + +Passed +189 + +99 + +8 + +55 + +403 + +426 + +426 + +426 + +428 + +390 + + + +Failed +39 + +108 + +0 + +5 + +27 + +4 + +4 + +4 + +2 + +4 + + + + + + + + stacked 3d column + + + + + + + + + + + + ADFF2F + DC143C + + + + + + Branch-3.2.6-Build-Deploy + Number of Tests + Builds + + + diff --git a/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base new file mode 100644 index 0000000..e0bc4a6 --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.html.svn-base @@ -0,0 +1,57 @@ + + + + + + + + + + + + + diff --git a/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.svn-base b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.svn-base new file mode 100644 index 0000000..54b8fd3 --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-branch-3.3.9.xml.svn-base @@ -0,0 +1,106 @@ + + + + + + + + + + +54 + +53 + +52 + +51 + +50 + +48 + +47 + +46 + +45 + +44 + + + +Passed +655 + +11 + +569 + +407 + +649 + +268 + +641 + +636 + +54 + +631 + + + +Failed +4 + +0 + +90 + +65 + +10 + +21 + +18 + +23 + +0 + +28 + + + + + + + + stacked 3d column + + + + + + + + + + + ADFF2F + DC143C + + + + + + hudson-ci-branch-3.3.9 + Number of Tests + Builds + + + diff --git a/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.html.svn-base b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.html.svn-base new file mode 100644 index 0000000..c23bcbe --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.html.svn-base @@ -0,0 +1,57 @@ + + + + + + + + + + + + + diff --git a/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.svn-base b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.svn-base new file mode 100644 index 0000000..8af3fa7 --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/chart-hudson-ci-trunk.xml.svn-base @@ -0,0 +1,107 @@ + + + + + + + + + + +111 + +109 + +108 + +107 + +106 + +105 + +104 + +102 + +101 + +99 + + + +Passed +85 + +99 + +512 + +522 + +189 + +166 + +254 + +8 + +146 + +8 + + + +Failed +1 + +27 + +70 + +86 + +21 + +18 + +121 + +0 + +27 + +0 + + + + + + + + stacked 3d column + + + + + + + + + + + + ADFF2F + DC143C + + + + + + hudson-ci-trunk + Number of Tests + Builds + + + diff --git a/src/main/webapp/charts/.svn/text-base/charts.swf.svn-base b/src/main/webapp/charts/.svn/text-base/charts.swf.svn-base new file mode 100644 index 0000000..f971f9d Binary files /dev/null and b/src/main/webapp/charts/.svn/text-base/charts.swf.svn-base differ diff --git a/src/main/webapp/charts/.svn/text-base/gen_graph.rb.svn-base b/src/main/webapp/charts/.svn/text-base/gen_graph.rb.svn-base new file mode 100644 index 0000000..2d48836 --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/gen_graph.rb.svn-base @@ -0,0 +1,183 @@ +require 'rubygems' +require 'open-uri' +require 'hpricot' +require 'ostruct' + +class GenerateGraph + + def initialize(build_name) + @result_url = "http://gbl01058.systems.uk.hsbc:8000/#{build_name}" + @build_name = build_name + @xml_name = "chart-#{@build_name}.xml" + @data = get_data + end + + def process + File.open(@xml_name, "w") do |f| + f.puts gen_chart_header + + f.puts gen_chart_data + + f.puts gen_chart_footer + end + + File.open(@xml_name + ".html", "w"){|f| f.puts gen_html } + + end + + def get_data + results = [] + doc = Hpricot(open(@result_url)) + doc.search("tr").each_with_index do |row,i| + + if row.search("td").size != 0 + if i <= 10 + r = row.search("td") + total = r[4].inner_text.strip + passed = r[5].inner_text.strip + failed = r[6].inner_text.strip + build = r[0].search("a").inner_text.split("Number")[-1].split("Log").first.strip + results << OpenStruct.new(:build => build, :total => total, :passed => passed, :failed => failed) + end + end + end + + results + end + + def gen_chart_header + xml =<<-EOF + + + + + + + + EOF + end + + def gen_chart_footer + xml =<<-EOF + + + + + stacked 3d column + + + + + + + + + + + + ADFF2F + DC143C + + + + + + #{@build_name} + Number of Tests + Builds + + + + EOF + end + + def gen_chart_data + xml = [] + xml << "" + + xml << "" + xml << "" + @data.collect{|d| d.build }.each{|i| xml << "#{i}\n"} + xml << "" + + xml << "" + xml << "Passed" + @data.collect{|d| d.passed }.each_with_index{|i,ind| xml << "#{i}\n"} + xml << "" + + xml << "" + xml << "Failed" + @data.collect{|d| d.failed }.each{|i| xml << "#{i}\n"} + xml << "" + + xml << "" + xml.join("\n") + + end + + def gen_html + html =<<-EOF + + + + + + + + + + + + + + EOF + end + +end + + +GenerateGraph.new("Branch-3.2.6-Build-Deploy").process \ No newline at end of file diff --git a/src/main/webapp/charts/.svn/text-base/sample.html.svn-base b/src/main/webapp/charts/.svn/text-base/sample.html.svn-base new file mode 100644 index 0000000..3b168cd --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/sample.html.svn-base @@ -0,0 +1,57 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/charts/.svn/text-base/sample.xml.svn-base b/src/main/webapp/charts/.svn/text-base/sample.xml.svn-base new file mode 100644 index 0000000..7199abd --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/sample.xml.svn-base @@ -0,0 +1,72 @@ + + + + + + + + + + + S + M + T + W + T + F + S + + + Region 1 + 22 + 15 + 11 + 15 + 20 + 22 + 21 + + + Region 2 + 15 + 20 + 15 + 17 + 25 + 12 + 11 + + + Region 3 + 30 + 32 + 35 + 20 + 30 + 30 + 36 + + + + + + + stacked 3d column + + + + + + + + + + + ff6600 + 88ff00 + 8866ff + + + + + diff --git a/src/main/webapp/charts/.svn/text-base/sample_HTTPS.html.svn-base b/src/main/webapp/charts/.svn/text-base/sample_HTTPS.html.svn-base new file mode 100644 index 0000000..478b304 --- /dev/null +++ b/src/main/webapp/charts/.svn/text-base/sample_HTTPS.html.svn-base @@ -0,0 +1,57 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/charts/AC_RunActiveContent.js b/src/main/webapp/charts/AC_RunActiveContent.js new file mode 100755 index 0000000..39c294b --- /dev/null +++ b/src/main/webapp/charts/AC_RunActiveContent.js @@ -0,0 +1,292 @@ +//v1.7 +// Flash Player Version Detection +// Detect Client Browser type +// Copyright 2005-2007 Adobe Systems Incorporated. All rights reserved. +var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false; +var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false; +var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false; + +function ControlVersion() +{ + var version; + var axo; + var e; + + // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry + + try { + // version will be set for 7.X or greater players + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + version = axo.GetVariable("$version"); + } catch (e) { + } + + if (!version) + { + try { + // version will be set for 6.X players only + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + + // installed player is some revision of 6.0 + // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29, + // so we have to be careful. + + // default to the first public version + version = "WIN 6,0,21,0"; + + // throws if AllowScripAccess does not exist (introduced in 6.0r47) + axo.AllowScriptAccess = "always"; + + // safe to call for 6.0r47 or greater + version = axo.GetVariable("$version"); + + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 4.X or 5.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = axo.GetVariable("$version"); + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 3.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3"); + version = "WIN 3,0,18,0"; + } catch (e) { + } + } + + if (!version) + { + try { + // version will be set for 2.X player + axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + version = "WIN 2,0,0,11"; + } catch (e) { + version = -1; + } + } + + return version; +} + +// JavaScript helper required to detect Flash Player PlugIn version information +function GetSwfVer(){ + // NS/Opera version >= 3 check for Flash plugin in plugin array + var flashVer = -1; + + if (navigator.plugins != null && navigator.plugins.length > 0) { + if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) { + var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : ""; + var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description; + var descArray = flashDescription.split(" "); + var tempArrayMajor = descArray[2].split("."); + var versionMajor = tempArrayMajor[0]; + var versionMinor = tempArrayMajor[1]; + var versionRevision = descArray[3]; + if (versionRevision == "") { + versionRevision = descArray[4]; + } + if (versionRevision[0] == "d") { + versionRevision = versionRevision.substring(1); + } else if (versionRevision[0] == "r") { + versionRevision = versionRevision.substring(1); + if (versionRevision.indexOf("d") > 0) { + versionRevision = versionRevision.substring(0, versionRevision.indexOf("d")); + } + } + var flashVer = versionMajor + "." + versionMinor + "." + versionRevision; + } + } + // MSN/WebTV 2.6 supports Flash 4 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4; + // WebTV 2.5 supports Flash 3 + else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3; + // older WebTV supports Flash 2 + else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2; + else if ( isIE && isWin && !isOpera ) { + flashVer = ControlVersion(); + } + return flashVer; +} + +// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available +function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) +{ + versionStr = GetSwfVer(); + if (versionStr == -1 ) { + return false; + } else if (versionStr != 0) { + if(isIE && isWin && !isOpera) { + // Given "WIN 2,0,0,11" + tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"] + tempString = tempArray[1]; // "2,0,0,11" + versionArray = tempString.split(","); // ['2', '0', '0', '11'] + } else { + versionArray = versionStr.split("."); + } + var versionMajor = versionArray[0]; + var versionMinor = versionArray[1]; + var versionRevision = versionArray[2]; + + // is the major.revision >= requested major.revision AND the minor version >= requested minor + if (versionMajor > parseFloat(reqMajorVer)) { + return true; + } else if (versionMajor == parseFloat(reqMajorVer)) { + if (versionMinor > parseFloat(reqMinorVer)) + return true; + else if (versionMinor == parseFloat(reqMinorVer)) { + if (versionRevision >= parseFloat(reqRevision)) + return true; + } + } + return false; + } +} + +function AC_AddExtension(src, ext) +{ + if (src.indexOf('?') != -1) + return src.replace(/\?/, ext+'?'); + else + return src + ext; +} + +function AC_Generateobj(objAttrs, params, embedAttrs) +{ + var str = ''; + if (isIE && isWin && !isOpera) + { + str += ' '; + } + str += ''; + } + else + { + str += '