root/lang/io/ioblosxom/ioblosxom.io @ 619

Revision 619, 2.1 kB (checked in by cho45, 6 years ago)

lang/io/ioblosxom/ioblosxom.io,
lang/io/ioblosxom/template.html:

PATH_INFO によるフィルタリングを実装

  • Property svn:mime-type set to text/script
  • Property svn:executable set to *
Line 
1#!/usr/bin/env io
2# vim:ft=io:
3
4doFile("eio.io")
5
6Object p := method(
7        writeln(self)
8        self
9)
10
11IoBlosxom := Object clone do (
12
13        dataDirectory := "data"
14        title         := "IoBlosxom"
15
16        Entry := Object clone do (
17                file  := File clone
18                name  := ""
19                title := ""
20                body  := ""
21                date  := ""
22
23                setFile := method(v,
24                        self file = v
25                        self
26                )
27        )
28
29        run := method(
30                self pathInfo   := System getenv("PATH_INFO") ifNilEval("/") split("/")
31                self flavour    := pathInfo last afterSeq(".") ifNilEval("html")
32                self pathInfo last clipAfterStartOfSeq(".")
33                self home := System getenv("SCRIPT_NAME") ifNilEval("/")
34                self path := System getenv("SCRIPT_NAME") ifNilEval("/") split("/") removeLast
35
36                self title := "IoBlosxom"
37                self entries := self filters(self getEntries(Directory with(dataDirectory)))
38                self debugObj := list(pathInfo, flavour)
39
40                self show("template.#{flavour}" interpolate, self)
41        )
42
43        filters := method(entries,
44                # self pathInfo = list("", "2007", "10")
45                y := self pathInfo at(1) ifNilEval("") asNumber
46                m := self pathInfo at(2) ifNilEval("") asNumber
47                d := self pathInfo at(3) ifNilEval("") asNumber
48                entries sortInPlace(date) reverse select (e,
49                        d isNan ifFalse( if (e date day   != d, continue) )
50                        m isNan ifFalse( if (e date month != m, continue) )
51                        if (y isNan,
52                                if (self pathInfo at(1) isNil,
53                                        true
54                                ,
55                                        e name beginsWithSeq(self pathInfo join("/"))
56                                )
57                        ,
58                                if (e date year == y, true)
59                        )
60                )
61        )
62
63        show := method(templateName, context,
64                template := File openForReading(templateName) contents
65                EIo clone setString(template) doInObject(context) print
66        )
67
68        // listup entries recursive
69        getEntries := method(dir,
70                ret := List clone
71                ret appendSeq(dir files map(f,
72                        e := Entry clone setFile(f)
73                        l := f readLines
74                        e title = l at(0)
75                        e body  = l slice(1)
76                        e date  = f lastDataChangeDate
77                        e name  = f path asMutable removePrefix(dataDirectory) clipAfterStartOfSeq(".")
78                        e
79                ))
80                dir folders foreach(d,
81                        ret appendSeq(getEntries(d))
82                )
83                ret
84        )
85)
86
87e := try (
88        IoBlosxom clone run
89); e catch (
90        """Content-Type: text/plain
91
92        #{e coroutine backTraceString}
93        """ asMutable replaceSeq("\t", "") interpolate print
94)
95
Note: See TracBrowser for help on using the browser.