mirror of
https://github.com/schollz/cowyo.git
synced 2023-08-10 21:13:00 +03:00
Versioning works with /edit
Former-commit-id: 985172ae69b662d82d5ccdf43717293fe2ed15fb [formerly f0cd3a45bbdaf08230eeb33919389cb48190b367] [formerly 72cb8e73da135302b9cc81410934bfc569a2842d [formerly c15ac624b8e27598579fd64ee64e4f0251221760]] Former-commit-id: 50bcb25221501c8dcd2d02057e270c749bdcda4b [formerly 063bef228a2e193d7fe5d8879f02983bc68501c4] Former-commit-id: d004f2c61e3520bd284529ae6d64ffbb8f11a0c1
This commit is contained in:
parent
021dd6e9e7
commit
1fa9b9af13
22
db.go
22
db.go
@ -33,7 +33,7 @@ func Close() {
|
|||||||
db.Close()
|
db.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Data for storing in DB
|
// CowyoData is data for storing in DB
|
||||||
type CowyoData struct {
|
type CowyoData struct {
|
||||||
Title string
|
Title string
|
||||||
CurrentText string
|
CurrentText string
|
||||||
@ -44,14 +44,14 @@ type CowyoData struct {
|
|||||||
func hasPassword(title string) (bool, error) {
|
func hasPassword(title string) (bool, error) {
|
||||||
title = strings.ToLower(title)
|
title = strings.ToLower(title)
|
||||||
if !open {
|
if !open {
|
||||||
return false, fmt.Errorf("db must be opened before loading!")
|
return false, fmt.Errorf("db must be opened before loading")
|
||||||
}
|
}
|
||||||
hasPassword := false
|
hasPassword := false
|
||||||
err := db.View(func(tx *bolt.Tx) error {
|
err := db.View(func(tx *bolt.Tx) error {
|
||||||
var err error
|
var err error
|
||||||
b := tx.Bucket([]byte("datas"))
|
b := tx.Bucket([]byte("datas"))
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return fmt.Errorf("db must be opened before loading!")
|
return fmt.Errorf("db must be opened before loading")
|
||||||
}
|
}
|
||||||
k := []byte(title)
|
k := []byte(title)
|
||||||
val := b.Get(k)
|
val := b.Get(k)
|
||||||
@ -77,17 +77,19 @@ func hasPassword(title string) (bool, error) {
|
|||||||
return hasPassword, nil
|
return hasPassword, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCurrentText(title string) string {
|
func getCurrentText(title string, version int) (string, []versionsInfo, bool) {
|
||||||
title = strings.ToLower(title)
|
title = strings.ToLower(title)
|
||||||
|
var vi []versionsInfo
|
||||||
|
isCurrent := true
|
||||||
currentText := ""
|
currentText := ""
|
||||||
if !open {
|
if !open {
|
||||||
return currentText
|
return currentText, vi, isCurrent
|
||||||
}
|
}
|
||||||
err := db.View(func(tx *bolt.Tx) error {
|
err := db.View(func(tx *bolt.Tx) error {
|
||||||
var err error
|
var err error
|
||||||
b := tx.Bucket([]byte("datas"))
|
b := tx.Bucket([]byte("datas"))
|
||||||
if b == nil {
|
if b == nil {
|
||||||
return fmt.Errorf("db must be opened before loading!")
|
return fmt.Errorf("db must be opened before loading")
|
||||||
}
|
}
|
||||||
k := []byte(title)
|
k := []byte(title)
|
||||||
val := b.Get(k)
|
val := b.Get(k)
|
||||||
@ -100,12 +102,18 @@ func getCurrentText(title string) string {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
currentText = p.CurrentText
|
currentText = p.CurrentText
|
||||||
|
if version > -1 && version < len(p.Diffs) {
|
||||||
|
// get that version of text instead
|
||||||
|
currentText = rebuildTextsToDiffN(p, version)
|
||||||
|
isCurrent = false
|
||||||
|
}
|
||||||
|
vi = getImportantVersions(p)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Could not get CowyoData: %s", err)
|
fmt.Printf("Could not get CowyoData: %s", err)
|
||||||
}
|
}
|
||||||
return currentText
|
return currentText, vi, isCurrent
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *CowyoData) load(title string) error {
|
func (p *CowyoData) load(title string) error {
|
||||||
|
2
main.go
2
main.go
@ -64,7 +64,7 @@ Options:`)
|
|||||||
|
|
||||||
var q CowyoData
|
var q CowyoData
|
||||||
q.load("SpikySeaSlug2")
|
q.load("SpikySeaSlug2")
|
||||||
rebuildTexts(q)
|
fmt.Println(getImportantVersions(q))
|
||||||
|
|
||||||
r := gin.Default()
|
r := gin.Default()
|
||||||
r.LoadHTMLGlob(path.Join(RuntimeArgs.SourcePath, "templates/*"))
|
r.LoadHTMLGlob(path.Join(RuntimeArgs.SourcePath, "templates/*"))
|
||||||
|
17
routes.go
17
routes.go
@ -34,14 +34,29 @@ func editNote(c *gin.Context) {
|
|||||||
if locked {
|
if locked {
|
||||||
c.Redirect(302, "/"+title+"/view")
|
c.Redirect(302, "/"+title+"/view")
|
||||||
} else {
|
} else {
|
||||||
currentText := getCurrentText(title)
|
version := c.DefaultQuery("version", "-1")
|
||||||
|
versionNum, _ := strconv.Atoi(version)
|
||||||
|
currentText, versions, currentVersion := getCurrentText(title, versionNum)
|
||||||
numRows := len(strings.Split(currentText, "\n")) + 10
|
numRows := len(strings.Split(currentText, "\n")) + 10
|
||||||
|
if currentVersion {
|
||||||
c.HTML(http.StatusOK, "index.tmpl", gin.H{
|
c.HTML(http.StatusOK, "index.tmpl", gin.H{
|
||||||
"Title": title,
|
"Title": title,
|
||||||
"ExternalIP": RuntimeArgs.ExternalIP,
|
"ExternalIP": RuntimeArgs.ExternalIP,
|
||||||
"CurrentText": currentText,
|
"CurrentText": currentText,
|
||||||
"NumRows": numRows,
|
"NumRows": numRows,
|
||||||
|
"Versions": versions,
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
c.HTML(http.StatusOK, "index.tmpl", gin.H{
|
||||||
|
"Title": title,
|
||||||
|
"ExternalIP": RuntimeArgs.ExternalIP,
|
||||||
|
"CurrentText": currentText,
|
||||||
|
"NumRows": numRows,
|
||||||
|
"Versions": versions,
|
||||||
|
"NoEdit": true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@
|
|||||||
|
|
||||||
|
|
||||||
<script src="/static/js/jquery.autogrowtextarea.min.js"></script>
|
<script src="/static/js/jquery.autogrowtextarea.min.js"></script>
|
||||||
<script src="/static/js/cowyo.js"></script>
|
{{if .NoEdit}} {{else}} <script src="/static/js/cowyo.js"></script> {{end}}
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
external_ip = '{{ .ExternalIP }}'
|
external_ip = '{{ .ExternalIP }}'
|
||||||
title_name = '{{ .Title }}'
|
title_name = '{{ .Title }}'
|
||||||
@ -31,14 +32,13 @@
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
font-family: Tahoma, sans-serif;
|
font-family: Tahoma, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
max-width: 800px;
|
max-width: 800px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +59,17 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="navbar" class="collapse navbar-collapse">
|
<div id="navbar" class="collapse navbar-collapse">
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li class="active"><a href="/{{ .Title }}">Edit</a></li>
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" class="active">Edit <span class="caret"></span></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li class="dropdown-header">Previous versions</li>
|
||||||
|
<li><a href="/{{ .Title }}?version=0">First</a></li>
|
||||||
|
{{ range .Versions }}
|
||||||
|
<li><a href="/{{ $.Title }}?version={{ .VersionNum }}">{{ .VersionDate }}</a></li>
|
||||||
|
{{ end }}
|
||||||
|
<li><a href="/{{ .Title }}">Current</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
<li><a href="/{{ .Title }}/view">View</a></li>
|
<li><a href="/{{ .Title }}/view">View</a></li>
|
||||||
<li><a href="/{{ .Title }}/list">List</a></li>
|
<li><a href="/{{ .Title }}/list">List</a></li>
|
||||||
<li><a href="/about/view">About</a></li>
|
<li><a href="/about/view">About</a></li>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user