Show search results using redirect in explorer
This commit is contained in:
parent
13dfa46edc
commit
435b6f4e80
@ -222,7 +222,7 @@ func (s *PublicServer) newTemplateDataWithError(text string) *TemplateData {
|
|||||||
Error: &api.ApiError{Text: text},
|
Error: &api.ApiError{Text: text},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func (s *PublicServer) htmlTemplateHandler(handler func(r *http.Request) (tpl, *TemplateData, error)) func(w http.ResponseWriter, r *http.Request) {
|
func (s *PublicServer) htmlTemplateHandler(handler func(w http.ResponseWriter, r *http.Request) (tpl, *TemplateData, error)) func(w http.ResponseWriter, r *http.Request) {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
var t tpl
|
var t tpl
|
||||||
var data *TemplateData
|
var data *TemplateData
|
||||||
@ -237,9 +237,12 @@ func (s *PublicServer) htmlTemplateHandler(handler func(r *http.Request) (tpl, *
|
|||||||
data = s.newTemplateDataWithError("Internal server error")
|
data = s.newTemplateDataWithError("Internal server error")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
// noTpl means the handler completely handled the request
|
||||||
if err := s.templates[t].ExecuteTemplate(w, "base.html", data); err != nil {
|
if t != noTpl {
|
||||||
glog.Error(err)
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
|
if err := s.templates[t].ExecuteTemplate(w, "base.html", data); err != nil {
|
||||||
|
glog.Error(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if s.debug {
|
if s.debug {
|
||||||
@ -247,8 +250,8 @@ func (s *PublicServer) htmlTemplateHandler(handler func(r *http.Request) (tpl, *
|
|||||||
// to reflect changes during development
|
// to reflect changes during development
|
||||||
s.templates = parseTemplates()
|
s.templates = parseTemplates()
|
||||||
}
|
}
|
||||||
t, data, err = handler(r)
|
t, data, err = handler(w, r)
|
||||||
if err != nil || data == nil {
|
if err != nil || (data == nil && t != noTpl) {
|
||||||
t = errorTpl
|
t = errorTpl
|
||||||
if apiErr, ok := err.(*api.ApiError); ok {
|
if apiErr, ok := err.(*api.ApiError); ok {
|
||||||
data = s.newTemplateData()
|
data = s.newTemplateData()
|
||||||
@ -270,7 +273,8 @@ func (s *PublicServer) htmlTemplateHandler(handler func(r *http.Request) (tpl, *
|
|||||||
type tpl int
|
type tpl int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
errorTpl = tpl(iota)
|
noTpl = tpl(iota)
|
||||||
|
errorTpl
|
||||||
txTpl
|
txTpl
|
||||||
addressTpl
|
addressTpl
|
||||||
|
|
||||||
@ -320,13 +324,7 @@ func setTxToTemplateData(td *TemplateData, tx *api.Tx) *TemplateData {
|
|||||||
return td
|
return td
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PublicServer) templateForTx(tx *api.Tx) (tpl, *TemplateData, error) {
|
func (s *PublicServer) explorerTx(w http.ResponseWriter, r *http.Request) (tpl, *TemplateData, error) {
|
||||||
data := s.newTemplateData()
|
|
||||||
data.Tx = tx
|
|
||||||
return txTpl, data, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *PublicServer) explorerTx(r *http.Request) (tpl, *TemplateData, error) {
|
|
||||||
var tx *api.Tx
|
var tx *api.Tx
|
||||||
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
||||||
txid := r.URL.Path[i+1:]
|
txid := r.URL.Path[i+1:]
|
||||||
@ -338,19 +336,12 @@ func (s *PublicServer) explorerTx(r *http.Request) (tpl, *TemplateData, error) {
|
|||||||
return errorTpl, nil, err
|
return errorTpl, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s.templateForTx(tx)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *PublicServer) templateForAddress(address *api.Address) (tpl, *TemplateData, error) {
|
|
||||||
data := s.newTemplateData()
|
data := s.newTemplateData()
|
||||||
data.AddrStr = address.AddrStr
|
data.Tx = tx
|
||||||
data.Address = address
|
return txTpl, data, nil
|
||||||
data.Page = address.Page
|
|
||||||
data.PagingRange, data.PrevPage, data.NextPage = getPagingRange(address.Page, address.TotalPages)
|
|
||||||
return addressTpl, data, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PublicServer) explorerAddress(r *http.Request) (tpl, *TemplateData, error) {
|
func (s *PublicServer) explorerAddress(w http.ResponseWriter, r *http.Request) (tpl, *TemplateData, error) {
|
||||||
var address *api.Address
|
var address *api.Address
|
||||||
var err error
|
var err error
|
||||||
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
||||||
@ -363,27 +354,34 @@ func (s *PublicServer) explorerAddress(r *http.Request) (tpl, *TemplateData, err
|
|||||||
return errorTpl, nil, err
|
return errorTpl, nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return s.templateForAddress(address)
|
data := s.newTemplateData()
|
||||||
|
data.AddrStr = address.AddrStr
|
||||||
|
data.Address = address
|
||||||
|
data.Page = address.Page
|
||||||
|
data.PagingRange, data.PrevPage, data.NextPage = getPagingRange(address.Page, address.TotalPages)
|
||||||
|
return addressTpl, data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *PublicServer) explorerSearch(r *http.Request) (tpl, *TemplateData, error) {
|
func (s *PublicServer) explorerSearch(w http.ResponseWriter, r *http.Request) (tpl, *TemplateData, error) {
|
||||||
q := strings.TrimSpace(r.URL.Query().Get("q"))
|
q := strings.TrimSpace(r.URL.Query().Get("q"))
|
||||||
if len(q) > 0 {
|
|
||||||
}
|
|
||||||
var tx *api.Tx
|
var tx *api.Tx
|
||||||
var address *api.Address
|
var address *api.Address
|
||||||
var err error
|
var err error
|
||||||
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
if len(q) > 0 {
|
||||||
bestheight, _, err := s.db.GetBestBlock()
|
if i := strings.LastIndexByte(r.URL.Path, '/'); i > 0 {
|
||||||
if err == nil {
|
bestheight, _, err := s.db.GetBestBlock()
|
||||||
tx, err = s.api.GetTransaction(q, bestheight, true)
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return s.templateForTx(tx)
|
tx, err = s.api.GetTransaction(q, bestheight, false)
|
||||||
|
if err == nil {
|
||||||
|
http.Redirect(w, r, joinURL("/explorer/tx/", tx.Txid), 302)
|
||||||
|
return noTpl, nil, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
address, err = s.api.GetAddress(q, 0, 1, true)
|
||||||
|
if err == nil {
|
||||||
|
http.Redirect(w, r, joinURL("/explorer/address/", address.AddrStr), 302)
|
||||||
|
return noTpl, nil, nil
|
||||||
}
|
}
|
||||||
}
|
|
||||||
address, err = s.api.GetAddress(q, 0, txsOnPage, false)
|
|
||||||
if err == nil {
|
|
||||||
return s.templateForAddress(address)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|||||||
@ -30,7 +30,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-2">
|
||||||
<div id="qrcode"></div>
|
<div id="qrcode" style="width: 160px; height: 160px;"></div>
|
||||||
<script type="text/javascript" src="/static/js/qrcode.min.js"></script>
|
<script type="text/javascript" src="/static/js/qrcode.min.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
new QRCode(document.getElementById("qrcode"), { text: "{{$addr.AddrStr}}", width: 160, height: 160 });
|
new QRCode(document.getElementById("qrcode"), { text: "{{$addr.AddrStr}}", width: 160, height: 160 });
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user