From: Noah Campbell Date: Sun, 29 Sep 2013 06:05:16 +0000 (-0700) Subject: Add the ability to set navbar li class to active X-Git-Tag: v0.9~85 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=f34ea6108d259caec04b4f7b325c91db071e78f8;p=brevno-suite%2Fhugo Add the ability to set navbar li class to active First cut at doing post html processing. This utility can be used to mark pages as active. --- diff --git a/transform/nav.go b/transform/nav.go new file mode 100644 index 00000000..c3dfe790 --- /dev/null +++ b/transform/nav.go @@ -0,0 +1,28 @@ +package transform + +import ( + htmltran "code.google.com/p/go-html-transform/html/transform" + "io" + "fmt" +) + +type NavActive struct { + Section string +} + +func (n *NavActive) Apply(r io.Reader, w io.Writer) (err error) { + var tr *htmltran.Transformer + + if n.Section == "" { + _, err = io.Copy(w, r) + return + } + + if tr, err = htmltran.NewFromReader(r); err != nil { + return + } + + tr.Apply(htmltran.ModifyAttrib("class", "active"), fmt.Sprintf("li[data-nav=%s]", n.Section)) + + return tr.Render(w) +} diff --git a/transform/nav_test.go b/transform/nav_test.go new file mode 100644 index 00000000..997fe33f --- /dev/null +++ b/transform/nav_test.go @@ -0,0 +1,60 @@ +package transform + +import ( + "bytes" + "strings" + "testing" +) + +const HTML_WITH_NAV = ` + + + + + + +` +const EXPECTED_HTML_WITH_NAV_1 = ` + + + + +` + +func TestDegenerateNoSectionSet(t *testing.T) { + var ( + tr = new(NavActive) + out = new(bytes.Buffer) + ) + + if err := tr.Apply(strings.NewReader(HTML_WITH_NAV), out); err != nil { + t.Errorf("Unexpected error in NavActive.Apply: %s", err) + } + + if out.String() != HTML_WITH_NAV { + t.Errorf("NavActive.Apply should simply pass along the buffer unmodified.") + } +} + +func TestSetNav(t *testing.T) { + tr := &NavActive{Section: "section_2"} + out := new(bytes.Buffer) + if err := tr.Apply(strings.NewReader(HTML_WITH_NAV), out); err != nil { + t.Errorf("Unexpected error in Apply() for NavActive: %s", err) + } + + expected := EXPECTED_HTML_WITH_NAV_1 + if out.String() != expected { + t.Errorf("NavActive.Apply output expected and got:\n%q\n%q", expected, out.String()) + } +}