static.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package main
  2. import (
  3. "errors"
  4. "github.com/spf13/hugo/hugolib"
  5. "io/ioutil"
  6. "os"
  7. )
  8. func (p *Page) Save() error {
  9. page, err := hugolib.NewPage(p.Path)
  10. if err != nil {
  11. return err
  12. }
  13. page.SetSourceContent([]byte(p.Body))
  14. return page.SafeSaveSourceAs(p.Path)
  15. }
  16. type StaticManager interface {
  17. Read(fp string) (*Page, error)
  18. Create(fp string, content []byte) (*Page, error)
  19. Update(fp string, content []byte) (*Page, error)
  20. Delete(fp string) error
  21. }
  22. func (p Page) Read(filename string) (*Page, error) {
  23. content, err := ioutil.ReadFile(filename)
  24. if err != nil {
  25. return nil, err
  26. }
  27. return &Page{
  28. Path: filename,
  29. Body: string(content),
  30. }, nil
  31. }
  32. func (p Page) Create(fp string, content []byte) (*Page, error) {
  33. // create a new page
  34. page := &Page{
  35. Path: fp,
  36. Body: string(content),
  37. }
  38. // save page to disk
  39. err := page.Save()
  40. if err != nil {
  41. return nil, err
  42. }
  43. return page, nil
  44. }
  45. // UpdatePage changes the content of an existing page
  46. func (p Page) Update(fp string, content []byte) (*Page, error) {
  47. // delete existing page
  48. err := p.Delete(fp)
  49. if err != nil {
  50. return nil, err
  51. }
  52. // create a new page
  53. page := &Page{
  54. Path: fp,
  55. Body: string(content),
  56. }
  57. // save page to disk
  58. err = page.Save()
  59. if err != nil {
  60. return nil, err
  61. }
  62. return page, nil
  63. }
  64. func (p Page) Delete(fp string) error {
  65. // check that file exists
  66. info, err := os.Stat(fp)
  67. if err != nil {
  68. return err
  69. }
  70. // that file is a directory
  71. if info.IsDir() {
  72. return errors.New("DeletePage cannot delete directories")
  73. }
  74. // remove the directory
  75. return os.Remove(fp)
  76. }