示例#1
0
def siteInfo(siteName):
    """ Display information about a site.
    """
    import wiki
    tem = jinjaEnv.get_template("generic_10_2.html")

    dirPan = wiki.getDirPan(siteName, "")
    realPan = os.path.realpath(dirPan)
    realPanInfo = ""
    if realPan != dirPan:
        realPanInfo = form(
            "<p>Canonical path is <code>{realPan}"
            "</code> .</p>\n",
            realPan=realPan)
    #prvars("dirPan realPan realPanInfo")
    fns, dirs = butil.getFilesDirs(dirPan)
    if butil.fileExists(butil.join(dirPan, "home.md")):
        homePageInfo = form(
            "View <a href='/{siteName}/w/home'>"
            "<i class='fa fa-home'></i> home page</a>.",
            siteName=siteName)
    else:
        homePageInfo = form("""There is no home page.
             <a href='/{siteName}/wikiedit/home'>
                <i class='fa fa-plus'></i>
                Create one</a>.""",
                            siteName=siteName)

    contents = """\
<h1>Information about site <i class='fa fa-bank'></i> {siteName}</h1>

<p><b>{siteName}</b> is stored in directory <code>{siteRoot}</code> .</p>
{realPanInfo}

<p>There are {numPages} pages in the root folder, and {numSubDirs} sub-folders.
<a href='/{siteName}/w/'><i class='fa fa-folder'></i>
View root folder</a>.
</p>

<p>{homePageInfo}</p>
""".format(
        siteName=siteName,
        siteRoot=dirPan,
        realPanInfo=realPanInfo,
        numPages=len(fns),
        numSubDirs=len(dirs),
        homePageInfo=homePageInfo,
    )
    h = tem.render(
        siteName=siteName,
        title="Information about " + siteName,
        nav2=wiki.locationSitePath(siteName, ""),
        wikiText=contents,
    )
    return h
示例#2
0
def bsColumns(hs, numColumns, linSize='md'):
    """ Bootstrap multiple columns
    @param hs::[str] = each string contains html
    @param numColumns::int = number of columns. values are 2|3|4|6.
    @param linSize::str = linearize on size. Linearize means revert to a
        one-column setup when screen width gets below a certain size. Allowed
        values are:
       'xs' = never linearize
       'sm' = on <768 pixels
       'md' = on <992 pixels
       'lg' = on <1200 pixels
    @return::str containing html
    """
    if numColumns not in (2, 3, 4, 6) or len(hs) < 2 * numColumns:
        h = ("""<div class='container-fluid'><div class='row'>
            <div class='col-md-12'>
            """ + "<br>\n".join(hs) + "</div></div></div>\n")
        return h
    columnClass = "col-{}-{}".format(linSize, 12 / numColumns)
    itemsPerRow = int(math.ceil(len(hs) * 1.0 / numColumns))

    h = "<div class='container-fluid'><div class='row'>\n"
    for rowIx in range(numColumns):
        f = itemsPerRow * rowIx
        useHs = hs[f:f + itemsPerRow]
        h += form("""<div class='{columnClass}'>
{elements}
</div>
""",
                  columnClass=columnClass,
                  elements="<br>\n".join(useHs))
    #//for row
    h += "</div></div>\n"
    return h
示例#3
0
def siteInfo(siteName):
    """ Display information about a site.
    """
    import wiki
    tem = jinjaEnv.get_template("generic_10_2.html")
    
    dirPan = wiki.getDirPan(siteName, "")
    fns, dirs = butil.getFilesDirs(dirPan)
    if butil.fileExists(butil.join(dirPan, "home.md")):
         homePageInfo = form("View <a href='/{siteName}/w/home'>"
             "<i class='fa fa-home'></i> home page</a>.",
             siteName = siteName)           
    else:                                
         homePageInfo = form("""There is no home page.
             <a href='/{siteName}/wikiedit/home'>
                <i class='fa fa-plus'></i>
                Create one</a>.""",
             siteName = siteName)  
         
    contents = """\
<h1>Information about site <i class='fa fa-bank'></i> {siteName}</h1>

<p><b>{siteName}</b> is stored in directory <code>{siteRoot}</code> .</p>

<p>There are {numPages} pages in the root folder, and {numSubDirs} sub-folders.
<a href='/{siteName}/w/'><i class='fa fa-folder'></i>
View root folder</a>.
</p>

<p>{homePageInfo}</p>
""".format(
        siteName = siteName,
        siteRoot = dirPan,
        numPages = len(fns),
        numSubDirs = len(dirs),
        homePageInfo = homePageInfo,
    )
    h = tem.render(
    
        siteName = siteName,
        title = "Information about " + siteName,
        nav2 = wiki.locationSitePath(siteName, ""),
        wikiText = contents,
    )
    return h 
示例#4
0
文件: wiki.py 项目: cabalamat/catwiki
def getArticleBody(siteName, pathName):
    """ given an article name, return the body of the article.
    @return ::(str,str) =title,html
    """
    articlePan = getArticlePan(siteName, pathName)
    #prvars()
    if butil.fileExists(articlePan):
        src = butil.readFileUtf8(articlePan)
        src = convertQuickLinks(src)
        contents = md(src)
        return pathName, contents
    else:
        h = form("<p>({pathName} does not exist; "
            "<a href='/{siteName}/wikiedit/{pathName}'>create it</a>)</p>\n",
            siteName = htmlEscape(siteName),
            pathName = htmlEscape(pathName))
        return (pathName, h)
示例#5
0
def getArticleBody(siteName, pathName):
    """ given an article name, return the body of the article.
    @return ::(str,str) =title,html
    """
    articlePan = getArticlePan(siteName, pathName)
    #prvars()
    if butil.fileExists(articlePan):
        src = butil.readFileUtf8(articlePan)
        src = convertQuickLinks(src)
        contents = md(src)
        return pathName, contents
    else:
        h = form(
            "<p>({pathName} does not exist; "
            "<a href='/{siteName}/wikiedit/{pathName}'>create it</a>)</p>\n",
            siteName=htmlEscape(siteName),
            pathName=htmlEscape(pathName))
        return (pathName, h)
示例#6
0
def getCommitsTable(pathName, commits):
    """
    @param commits::[git.Commit]
    @return::str containing html
    """
    h = """<table class='report_table'>
<tr> 
    <th>Date</th>
    <th>Author</th>
    <th>Message</th>
    <th>Size</th>
    <th>Hex SHA</th>
</tr>    
"""
    for co in commits:
        path = pathName + ".md"
        fileData = (co.tree / path).data_stream.read()
        prvars("fileData")

        h += form(
            """<tr> 
    <td><tt>{date}</tt></td>
    <td>{author}</td>
    <td>{message}</td>
    <td>{size}</td>
    <td><tt>{hexsha}</tt></td>
</tr>""",
            date=niceTime(co.authored_date),
            author=co.author.name,
            message=htmlEsc(co.message),
            size=len(fileData),
            hexsha=co.hexsha,
        )
    #//for co
    h += "</table>\n"
    return h
示例#7
0
文件: wiki.py 项目: cabalamat/catwiki
def bsColumns(hs, numColumns, linSize='md'):
    """ Bootstrap multiple columns
    @param hs::[str] = each string contains html
    @param numColumns::int = number of columns. values are 2|3|4|6.
    @param linSize::str = linearize on size. Linearize means revert to a
        one-column setup when screen width gets below a certain size. Allowed
        values are:
       'xs' = never linearize
       'sm' = on <768 pixels
       'md' = on <992 pixels
       'lg' = on <1200 pixels
    @return::str containing html
    """
    if numColumns not in (2,3,4,6) or len(hs)<2*numColumns:
        h = ("""<div class='container-fluid'><div class='row'>
            <div class='col-md-12'>
            """
            + "<br>\n".join(hs)
            + "</div></div></div>\n")
        return h
    columnClass = "col-{}-{}".format(linSize, 12/numColumns)
    itemsPerRow = int(math.ceil(len(hs)*1.0 / numColumns))

    h = "<div class='container-fluid'><div class='row'>\n"
    for rowIx in range(numColumns):
        f = itemsPerRow * rowIx
        useHs = hs[f:f+itemsPerRow]
        h += form("""<div class='{columnClass}'>
{elements}
</div>
""",
            columnClass = columnClass,
            elements = "<br>\n".join(useHs))
    #//for row
    h += "</div></div>\n"
    return h
示例#8
0
文件: wiki.py 项目: cabalamat/catwiki
def getIndex(siteName, pathName):
    """ get an index of a directory.
    @param siteName::str
    @param pathName::str
    @return::(str,str) =title,html
    """
    def isArticle(fn):
        """ is a filename an article? """
        return (fn[-3:]==".md" and not fn[:1]=="~")


    if pathName[-1:] == "/":
        uPath = pathName[:-1]
    else:
        uPath = pathName
    dirPan = getDirPan(siteName, uPath)
    #prvars()
    if not os.path.isdir(dirPan):
        h = "<p>Directory {} does not exist.</p>\n".format(pathName)
        return h

    fns, dirs = butil.getFilesDirs(dirPan)
    dirs = [d for d in dirs if d[:1] != "."]
    arts = sorted([fn[:-3]
                  for fn in fns
                  if isArticle(fn)])
    nonArticles = sorted([fn
                  for fn in fns
                  if not isArticle(fn)])
    dirs = sorted(dirs)
    h = ("<h1><i class='fa fa-list'></i> Index of articles in "
         " /{}</h1>\n").format(pathName)
    items = []
    nonArticleItems = []
    if arts:
        for fn in arts:
            text = getTitle(butil.join(dirPan, fn+".md"))
            if text==fn: 
                text = ""
            else:
                text = " - " + text
                
            if fn=="home": 
                item = form("<a href='{fn}'>"
                    "<span class='home-icon'><i class='fa fa-home'></i></span>"
                    " {fn}</a>{text}",
                    fn = fn,
                    text = text)
            else:    
                item = form("<a href='{fn}'>"
                    "<i class='fa fa-file-text-o'></i> {fn}</a>{text}",
                    fn = fn,
                    text = text)
                
            items.append(item)
        #//for
        h += bsColumns(items, 3)
    if nonArticles:
        for fn in nonArticles:
            nonArticleItems.append(form("<a href='{fn}'>"
                "<i class='fa fa-file-o'></i> "
                "{fn}</a>",
                fn = fn))
        #//for
        h += "<h3>Other files</h3>\n" + bsColumns(nonArticleItems, 3)
    if dirs:
        dirItems = []
        for d in dirs:
            dirItems.append(("<a href='{d}/'><i class='fa fa-folder'></i> "
                  "{text}</a>").format(
                d = d,
                text = d,
            ))
        #//for
        h += "<h3>Folders</h3>\n" + bsColumns(dirItems, 3)

    title = "Index of {}".format(pathName)
    return title, h
示例#9
0
def getIndex(siteName, pathName):
    """ get an index of a directory.
    @param siteName::str
    @param pathName::str
    @return::(str,str) =title,html
    """
    def isArticle(fn):
        """ is a filename an article? """
        return (fn[-3:] == ".md" and not fn[:1] == "~")

    if pathName[-1:] == "/":
        uPath = pathName[:-1]
    else:
        uPath = pathName
    dirPan = getDirPan(siteName, uPath)
    #prvars()
    if not os.path.isdir(dirPan):
        h = "<p>Directory {} does not exist.</p>\n".format(pathName)
        return h

    fns, dirs = butil.getFilesDirs(dirPan)
    dirs = [d for d in dirs if d[:1] != "."]
    arts = sorted([fn[:-3] for fn in fns if isArticle(fn)])
    nonArticles = sorted([fn for fn in fns if not isArticle(fn)])
    dirs = sorted(dirs)
    h = ("<h1><i class='fa fa-list'></i> Index of articles in "
         " /{}</h1>\n").format(pathName)
    items = []
    nonArticleItems = []
    if arts:
        for fn in arts:
            text = getTitle(butil.join(dirPan, fn + ".md"))
            if text == fn:
                text = ""
            else:
                text = " - " + text

            if fn == "home":
                item = form(
                    "<a href='{fn}'>"
                    "<span class='home-icon'><i class='fa fa-home'></i></span>"
                    " {fn}</a>{text}",
                    fn=fn,
                    text=text)
            else:
                item = form(
                    "<a href='{fn}'>"
                    "<i class='fa fa-file-text-o'></i> {fn}</a>{text}",
                    fn=fn,
                    text=text)

            items.append(item)
        #//for
        h += bsColumns(items, 3)
    if nonArticles:
        for fn in nonArticles:
            hf = form(
                "<a href='{fn}'>"
                "<i class='fa fa-file-o'></i> "
                "{fn}</a>",
                fn=fn)
            if hasImageExtension(fn):
                hf += form(
                    "<br>\n<a href='{fn}'>"
                    "<img class='index_image' src='{fn}'>"
                    "</a>",
                    fn=fn)
            nonArticleItems.append(hf)
        #//for
        h += "<h3>Other files</h3>\n" + bsColumns(nonArticleItems, 3)
    if dirs:
        dirItems = []
        for d in dirs:
            dirItems.append(("<a href='{d}/'><i class='fa fa-folder'></i> "
                             "{text}</a>").format(
                                 d=d,
                                 text=d,
                             ))
        #//for
        h += "<h3>Folders</h3>\n" + bsColumns(dirItems, 3)

    title = "Index of {}".format(pathName)
    return title, h