added download button
This commit is contained in:
@@ -7,13 +7,13 @@ import strutils
|
|||||||
import sets
|
import sets
|
||||||
from sequtils import map, apply
|
from sequtils import map, apply
|
||||||
|
|
||||||
var pkgMap : OrderedTable[string, JsonNode]
|
var pkgMap : JsonNode
|
||||||
|
|
||||||
type DownloadPanel = ref object
|
type DownloadPanel = ref object
|
||||||
badge : Node
|
badge : Node
|
||||||
listgroup : Node
|
listgroup : Node
|
||||||
pkgs : HashSet[string]
|
pkgs : HashSet[string]
|
||||||
body : Node
|
footer : Node
|
||||||
|
|
||||||
proc newDownloadPanel(parent : Node) : DownloadPanel =
|
proc newDownloadPanel(parent : Node) : DownloadPanel =
|
||||||
let dp = DownloadPanel()
|
let dp = DownloadPanel()
|
||||||
@@ -26,7 +26,6 @@ proc newDownloadPanel(parent : Node) : DownloadPanel =
|
|||||||
"h3":
|
"h3":
|
||||||
class ["panel-title"]
|
class ["panel-title"]
|
||||||
"a":
|
"a":
|
||||||
#attrs {"data-toggle": "collapse", "href": "#dlist"}
|
|
||||||
text "Package list "
|
text "Package list "
|
||||||
"span":
|
"span":
|
||||||
class ["badge", "pull-right"]
|
class ["badge", "pull-right"]
|
||||||
@@ -39,7 +38,7 @@ proc newDownloadPanel(parent : Node) : DownloadPanel =
|
|||||||
cb:
|
cb:
|
||||||
dp.listgroup = node
|
dp.listgroup = node
|
||||||
"div":
|
"div":
|
||||||
class ["panel-body"]
|
class ["panel-footer"]
|
||||||
style {
|
style {
|
||||||
"text-align" : "right",
|
"text-align" : "right",
|
||||||
"display" :"none"
|
"display" :"none"
|
||||||
@@ -51,14 +50,33 @@ proc newDownloadPanel(parent : Node) : DownloadPanel =
|
|||||||
class ["glyphicon", "glyphicon-download"]
|
class ["glyphicon", "glyphicon-download"]
|
||||||
cb:
|
cb:
|
||||||
node.appendChild(document.createTextNode(" Download"))
|
node.appendChild(document.createTextNode(" Download"))
|
||||||
|
let clickHandler = proc(e : Event) =
|
||||||
|
let pkglist : seq[string] = sequtils.toSeq(dp.pkgs.items())
|
||||||
|
let r = newXMLHTTPRequest()
|
||||||
|
let load_cb = proc(e : Event) =
|
||||||
|
var blob : Blob = r.responseAsBlob #newBlob(r.response, "application/x-tar")
|
||||||
|
let anchor = document.createElement("a")
|
||||||
|
let url = createObjectURL(blob)
|
||||||
|
anchor.setAttribute("href", url)
|
||||||
|
anchor.setAttribute("download", "archive.tar")
|
||||||
|
anchor.click()
|
||||||
|
revokeObjectURL(url)
|
||||||
|
r.addEventListener("load", load_cb)
|
||||||
|
r.open("post", "rest/pkg/downloadTar")
|
||||||
|
r.responseType = "blob"
|
||||||
|
r.setRequestHeader("Accept", "application/x-tar")
|
||||||
|
r.setRequestHeader("Content-Type", "application/json")
|
||||||
|
r.send($(%*pkglist))
|
||||||
|
|
||||||
|
node.addEventListener("click", clickHandler)
|
||||||
cb:
|
cb:
|
||||||
dp.body = node
|
dp.footer = node
|
||||||
dp
|
dp
|
||||||
|
|
||||||
|
|
||||||
proc updateBadge(dp : DownloadPanel) =
|
proc updateBadge(dp : DownloadPanel) =
|
||||||
let st = if dp.pkgs.len() > 0: "block" else: "none"
|
let st = if dp.pkgs.len() > 0: "block" else: "none"
|
||||||
dp.body.style.display = st
|
dp.footer.style.display = st
|
||||||
dp.badge.style.display = st
|
dp.badge.style.display = st
|
||||||
dp.badge.textContent = $dp.pkgs.len()
|
dp.badge.textContent = $dp.pkgs.len()
|
||||||
|
|
||||||
@@ -257,13 +275,8 @@ htmlDocument document, document.body:
|
|||||||
|
|
||||||
let r = newXMLHTTPRequest()
|
let r = newXMLHTTPRequest()
|
||||||
let load_cb = proc(e : Event) =
|
let load_cb = proc(e : Event) =
|
||||||
let response = parseJson($r.responseText)
|
pkgMap = parseJson($r.responseText)
|
||||||
pkgMap = response.getFields()
|
|
||||||
# var keys = newSeq[string]()
|
|
||||||
# for key in response.getFields().keys():
|
|
||||||
# keys.add(key)
|
|
||||||
# echo keys
|
|
||||||
r.addEventListener("load", load_cb)
|
r.addEventListener("load", load_cb)
|
||||||
r.open("get", "http://oggio88.soon.it/jpacrepo/rest/pkg/map")
|
r.open("get", "rest/pkg/map")
|
||||||
r.setRequestHeader("Accept", "application/json")
|
r.setRequestHeader("Accept", "application/json")
|
||||||
r.send()
|
r.send()
|
||||||
|
@@ -8,6 +8,7 @@ import javax.inject.Inject;
|
|||||||
import javax.ws.rs.container.ContainerRequestContext;
|
import javax.ws.rs.container.ContainerRequestContext;
|
||||||
import javax.ws.rs.container.ContainerResponseContext;
|
import javax.ws.rs.container.ContainerResponseContext;
|
||||||
import javax.ws.rs.container.ContainerResponseFilter;
|
import javax.ws.rs.container.ContainerResponseFilter;
|
||||||
|
import javax.ws.rs.core.MultivaluedMap;
|
||||||
import javax.ws.rs.ext.Provider;
|
import javax.ws.rs.ext.Provider;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@@ -28,7 +29,9 @@ public class CORSFilter implements ContainerResponseFilter
|
|||||||
{
|
{
|
||||||
if (!ctx.cors_enabled)
|
if (!ctx.cors_enabled)
|
||||||
{
|
{
|
||||||
containerResponseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
|
MultivaluedMap<String, Object> headers = containerResponseContext.getHeaders();
|
||||||
|
headers.add("Access-Control-Allow-Origin", "*");
|
||||||
|
headers.add("Access-Control-Allow-Headers", "Accept, Accept-Language, Content-Language, Content-Type");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -293,7 +293,6 @@ public class PacmanWebService
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@CORSManaged
|
|
||||||
@Path("/search")
|
@Path("/search")
|
||||||
public List<PkgData> searchPackage(
|
public List<PkgData> searchPackage(
|
||||||
@QueryParam("name") String name,
|
@QueryParam("name") String name,
|
||||||
@@ -354,6 +353,13 @@ public class PacmanWebService
|
|||||||
return query.getResultList();
|
return query.getResultList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OPTIONS
|
||||||
|
@Path("/downloadTar")
|
||||||
|
@Produces("text/plain; charset=UTF-8")
|
||||||
|
public Response options() {
|
||||||
|
return Response.ok("POST, OPTIONS").build();
|
||||||
|
}
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
@Path("/downloadTar")
|
@Path("/downloadTar")
|
||||||
@Produces("application/x-tar")
|
@Produces("application/x-tar")
|
||||||
@@ -389,7 +395,6 @@ public class PacmanWebService
|
|||||||
taos.closeArchiveEntry();
|
taos.closeArchiveEntry();
|
||||||
}
|
}
|
||||||
taos.close();
|
taos.close();
|
||||||
output.close();
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -398,7 +403,6 @@ public class PacmanWebService
|
|||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
taos.close();
|
taos.close();
|
||||||
output.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user