From ae961e9dd13324e3be7d6ea3dc22968ee9c6d2da Mon Sep 17 00:00:00 2001 From: Tim Shannon Date: Fri, 15 Apr 2016 21:57:59 +0000 Subject: [PATCH] More web work rearranged how web files were loaded a bit Started on breadcrumb handling --- project.go | 14 ++++----- server.go | 17 +++++++--- web/index.html | 83 +++++++++++++++++++++++++++++++++++++++++++----- web/js/index.js | 84 +++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 176 insertions(+), 22 deletions(-) diff --git a/project.go b/project.go index ac9d836..20e3b58 100644 --- a/project.go +++ b/project.go @@ -185,12 +185,11 @@ func (p *Project) setStage(stage string) { } type webProject struct { - ID string `json:"id"` - Name string `json:"name"` - ReleaseVersion string `json:"releaseVersion"` //last successfully released version - LastVersion string `json:"lastVersion"` //last version success or otherwise - LastLog string `json:"lastLog"` // last log entry of last cycle - Stage string `json:"stage"` // current stage + ID string `json:"id"` + Name string `json:"name"` + ReleaseVersion string `json:"releaseVersion"` //last successfully released version + Stage string `json:"stage"` // current stage + LastLog *datastore.Log `json:"lastLog"` } func (p *Project) webData() (*webProject, error) { @@ -211,9 +210,8 @@ func (p *Project) webData() (*webProject, error) { Name: p.Name, ID: p.id(), ReleaseVersion: release.Version, - LastVersion: last.Version, - LastLog: last.Log, Stage: p.stage, + LastLog: last, } return d, nil diff --git a/server.go b/server.go index 7566c88..04fb77f 100644 --- a/server.go +++ b/server.go @@ -103,6 +103,14 @@ func routes() { get: rootGet, }) + webRoot.Handle("/js/", &methodHandler{ + get: assetGet, + }) + + webRoot.Handle("/css/", &methodHandler{ + get: assetGet, + }) + webRoot.Handle("/log/", &methodHandler{ get: logGet, }) @@ -118,12 +126,11 @@ func routes() { } func rootGet(w http.ResponseWriter, r *http.Request) { - if r.URL.Path == "/" { - //send index.html - serveAsset(w, r, "web/index.html") - return - } + //send index.html + serveAsset(w, r, "web/index.html") +} +func assetGet(w http.ResponseWriter, r *http.Request) { serveAsset(w, r, path.Join("web", r.URL.Path)) } diff --git a/web/index.html b/web/index.html index 711484e..5887cd0 100644 --- a/web/index.html +++ b/web/index.html @@ -39,10 +39,7 @@ .table-responsive { margin-left: auto; margin-right: auto; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - margin-bottom: 1em; } .table-responsive table { @@ -50,7 +47,18 @@ max-width: 100%; } + /* error */ + .error { + display: inline-block; + background-color: red; + color: white; + border-radius: 4px; + padding: .5em 1em; + margin: 10px; + } + /*stages*/ + .stage-load { } @@ -70,6 +78,18 @@ .stage-release { } + + /* breadcrumbs */ + + #breadcrumbs { + margin-bottom: 10px; + } + + .breadcrumb-separator { + color: #ccc; + font-weight: bold; + font-size: 2em; + } @@ -77,12 +97,51 @@ diff --git a/web/js/index.js b/web/js/index.js index 64aec7a..61fc987 100644 --- a/web/js/index.js +++ b/web/js/index.js @@ -15,23 +15,92 @@ version: null, stage: null, projects: [], + error: null, }; }, }); - getProjects(); + setPaths(); + + + function setPaths() { + var paths = window.location.pathname.split("/"); + + if (paths.length <= 1) { + getProjects(); + return; + } + if (!paths[1]) { + getProjects(); + return; + } + + if (paths[1] == "project") { + if (paths[2]) { + getProject(paths[2]); + if (paths[3]) { + r.set("version", paths[3]); + if (paths[4]) { + r.set("stage", paths[4]); + //get stage + } + //get version + } + + } + getProjects(); + return; + } + + r.set("error", "Path Not found!"); + } function getProjects() { get("/log/", function(result) { + for (var i = 0; i < result.data.length; i++) { + setStatus(result.data[i]); + } + r.set("projects", result.data); }, function(result) { - console.log("error", result); + r.set("error", err(result).message); }); } + function getProject(id) { + get("/log/" + id, + function(result) { + r.set("project", result.data); + }, + function(result) { + r.set("error", err(result).message); + }); + } + + function setStatus(project) { + //statuses + if (project.lastLog.version == project.releaseVersion) { + project.status = "Success"; + } else { + if (project.lastLog.stage == "loading") { + project.status = "Load Failing"; + } else if (project.lastLog.stage == "fetching") { + project.status = "Fetch Failing"; + } else if (project.lastLog.stage == "building") { + project.status = "Build Failing"; + } else if (project.lastLog.stage == "testing") { + project.status = "Tests Failing"; + } else if (project.lastLog.stage == "releasing") { + project.status = "Release Failing"; + } else { + project.status = "Failing"; + } + } + } + })(); function ajax(type, url, data, success, error) { @@ -72,3 +141,14 @@ function get(url, success, error) { ajax("GET", url, null, success, error); } +function err(response) { + "use strict"; + var error = { + message: "An error occurred and has been logged", + }; + + if (typeof response === "string") { + error.message = response; + } + return error; +}