Skip to content

Commit

Permalink
use cached template when use vfs mode
Browse files Browse the repository at this point in the history
  • Loading branch information
codeskyblue committed Sep 25, 2018
1 parent c3218a1 commit b2923ea
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 39 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Tested with go-1.10, go-1.11
1. [x] Quick copy download link
1. [x] Show folder size
1. [x] Create folder
1. [x] Skip delete confirm when alt pressed

## Installation
```
Expand Down
8 changes: 5 additions & 3 deletions assets/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-2">
<ul class="nav navbar-nav">
<li class="hidden-xs">
<a href="javascript:void(0)" v-on:click='genQrcode(location.pathname)'>
<a href="javascript:void(0)" v-on:click='genQrcode()'>
View in Phone
<span class="glyphicon glyphicon-qrcode"></span>
</a>
Expand Down Expand Up @@ -251,7 +251,9 @@ <h4 class="modal-title">
<script src="/-/assets/js/underscore-min.js"></script>
<script src="/-/assets/js/clipboard-1.5.12.min.js"></script>
<script src="/-/assets/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="/-/assets/js/index.js"></script> [[if .GoogleTrackerId ]]
<script src='/-/assets/[["js/index.js" | urlhash ]]'></script>
<!-- <script src="/-/assets/js/index.js"></script> -->
[[if .GoogleTrackerID ]]
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
Expand All @@ -265,7 +267,7 @@ <h4 class="modal-title">
m.parentNode.insertBefore(a, m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');

ga('create', '[[.GoogleTrackerId]]', 'auto');
ga('create', '[[.GoogleTrackerID]]', 'auto');
ga('send', 'pageview');
</script> [[ end ]]
</body>
Expand Down
32 changes: 19 additions & 13 deletions assets/js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,23 +138,27 @@ var vm = new Vue({
removeAllUploads: function () {
this.myDropzone.removeAllFiles();
},
genInstallURL: function (name) {
var urlPath;
if (getExtention(name) == "ipa") {
urlPath = location.protocol + "//" + pathJoin([location.host, "/-/ipa/link", location.pathname, name]);
genInstallURL: function (name, noEncode) {
var parts = [location.host];
if (!name) {
parts.push(location.pathname);
} else if (getExtention(name) == "ipa") {
parts.push("/-/ipa/link", location.pathname, name);
} else {
urlPath = location.protocol + "//" + pathJoin([location.host, location.pathname, name]);
parts.push(location.pathname, name);
}
return encodeURI(urlPath);
var urlPath = location.protocol + "//" + pathJoin(parts);
return noEncode ? urlPath : encodeURI(urlPath);
},
genQrcode: function (name, title) {
var installURL = this.genInstallURL(name);
$("#qrcode-title").html(title || name);
$("#qrcode-link").attr("href", installURL);
var urlPath = this.genInstallURL(name, true);
$("#qrcode-title").html(title || name || location.pathname);
$("#qrcode-link").attr("href", urlPath);
$('#qrcodeCanvas').empty().qrcode({
text: installURL
text: urlPath
});
$("#qrcodeRight a").attr("href", encodeURI(location.origin + pathJoin([location.pathname, name])));

$("#qrcodeRight a").attr("href", encodeURI(urlPath));
$("#qrcode-modal").modal("show");
},
genDownloadURL: function (f) {
Expand Down Expand Up @@ -252,8 +256,10 @@ var vm = new Vue({
},
deletePathConfirm: function (f, e) {
e.preventDefault();
if (!window.confirm("Delete " + f.name + " ?")) {
return;
if (!e.altKey) { // skip confirm when alt pressed
if (!window.confirm("Delete " + f.name + " ?")) {
return;
}
}
$.ajax({
url: pathJoin([location.pathname, f.name]),
Expand Down
55 changes: 33 additions & 22 deletions httpstaticserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"bytes"
"encoding/json"
"fmt"
"html/template"
"io"
"io/ioutil"
Expand Down Expand Up @@ -46,7 +47,7 @@ type HTTPStaticServer struct {
Title string
Theme string
PlistProxy string
GoogleTrackerId string
GoogleTrackerID string
AuthType string

indexes []IndexFileItem
Expand Down Expand Up @@ -348,17 +349,14 @@ func (s *HTTPStaticServer) hIpaLink(w http.ResponseWriter, r *http.Request) {
return
}
plistUrl = url
//plistUrl = strings.TrimSuffix(s.PlistProxy, "/") + "/" + r.Host + "/-/ipa/plist/" + path
}

w.Header().Set("Content-Type", "text/html")
log.Println("PlistURL:", plistUrl)
renderHTML(w, "ipa-install.html", map[string]string{
"Name": filepath.Base(path),
"PlistLink": plistUrl,
})
// w.Write([]byte(fmt.Sprintf(
// `<a href='itms-services://?action=download-manifest&url=%s'>Click this link to install</a>`,
// plistUrl)))
}

func (s *HTTPStaticServer) genPlistLink(httpPlistLink string) (plistUrl string, err error) {
Expand Down Expand Up @@ -703,33 +701,46 @@ func assetsContent(name string) string {

// TODO: I need to read more abouthtml/template
var (
_tmpl *template.Template
_parsed = make(map[string]bool)
funcMap template.FuncMap
)

func _parseTemplate(name, content string) {
if _tmpl == nil {
_tmpl = template.New(name)
func init() {
funcMap = template.FuncMap{
"title": strings.Title,
"urlhash": func(path string) string {
httpFile, err := Assets.Open(path)
if err != nil {
return path + "#no-such-file"
}
info, err := httpFile.Stat()
if err != nil {
return path + "#stat-error"
}
return fmt.Sprintf("%s?t=%d", path, info.ModTime().Unix())
},
}
var t *template.Template
if _tmpl.Name() == name {
t = _tmpl
} else {
t = _tmpl.New(name)
}

var (
_tmpls = make(map[string]*template.Template)
)

func executeTemplate(w http.ResponseWriter, name string, v interface{}) {
if t, ok := _tmpls[name]; ok {
t.Execute(w, v)
return
}
template.Must(t.New(name).Delims("[[", "]]").Parse(content))
_parsed[name] = true
t := template.Must(template.New(name).Funcs(funcMap).Delims("[[", "]]").Parse(assetsContent(name)))
_tmpls[name] = t
t.Execute(w, v)
}

func renderHTML(w http.ResponseWriter, name string, v interface{}) {
if _, ok := Assets.(http.Dir); ok {
log.Println("Hot load", name)
t := template.Must(template.New(name).Delims("[[", "]]").Parse(assetsContent(name)))
t := template.Must(template.New(name).Funcs(funcMap).Delims("[[", "]]").Parse(assetsContent(name)))
t.Execute(w, v)
} else {
if !_parsed[name] {
_parseTemplate(name, assetsContent(name))
}
_tmpl.ExecuteTemplate(w, name, v)
executeTemplate(w, name, v)
}
}
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ func main() {
ss := NewHTTPStaticServer(gcfg.Root)
ss.Theme = gcfg.Theme
ss.Title = gcfg.Title
ss.GoogleTrackerId = gcfg.GoogleTrackerID
ss.GoogleTrackerID = gcfg.GoogleTrackerID
ss.Upload = gcfg.Upload
ss.Delete = gcfg.Delete
ss.AuthType = gcfg.Auth.Type
Expand Down

0 comments on commit b2923ea

Please sign in to comment.