diff options
Diffstat (limited to 'www-apps/pyblosxom-plugins/files/pycategories.py')
-rw-r--r-- | www-apps/pyblosxom-plugins/files/pycategories.py | 203 |
1 files changed, 0 insertions, 203 deletions
diff --git a/www-apps/pyblosxom-plugins/files/pycategories.py b/www-apps/pyblosxom-plugins/files/pycategories.py deleted file mode 100644 index f6c57f4..0000000 --- a/www-apps/pyblosxom-plugins/files/pycategories.py +++ /dev/null @@ -1,203 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 -""" -Walks through your blog root figuring out all the categories you have -and how many entries are in each category. It generates html with -this information and stores it in the $categorylinks variable which -you can use in your head or foot templates. - -You can format the output by setting "category_begin", "category_item", -"category_end" and properties. - -Categories exist in a hierarchy. "category_start" starts the category listing -and is only used at the very beginning. The "category_begin" property begins a -new category group and the "category_end" property ends that category group. The -"category_item" property is the template for each category item. Then -after all the categories are printed, "category_finish" ends the category -listing. - -For example, the following properties will use <ul> to open a category, </ul> -to close a category and <li> for each item: - -py["category_start"] = "<ul>" -py["category_begin"] = "<li><ul>" -py["category_item"] = r'<li><a href="%(base_url)s/%(category)sindex">%(category)s</a></li>' -py["category_end"] = "</li></ul>" -py["category_finish"] = "</ul>" - - -Another example, the following properties don't have a begin or an end but -instead use indentation for links and displays the number of entries in that -category: - -py["category_start"] = "" -py["category_begin"] = "" -py["category_item"] = r'%(indent)s<a href="%(base_url)s/%(category)sindex">%(category)s</a> (%(count)d)<br />' -py["category_end"] = "" -py["category_finish"] = "" - -There are no variables available in the category_begin or category_end templates. - -Available variables in the category_item template: - - base_url (this is set in your config.py file) string - fullcategory 'dev/pyblosxom/status/' string - category 'status/' string - flavour 'html' string - count 70 int - indent ' ' string - - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Copyright 2004, 2005 Will Guaraldi -""" -__author__ = "Will Guaraldi - willg at bluesock dot org" -__version__ = "$Id: pycategories.py,v 1.20.4.4 2005/06/14 15:36:45 willhelm Exp $" -__url__ = "http://pyblosxom.sourceforge.net/" -__description__ = "Builds a list of categories." - -from Pyblosxom import tools -import re, os - -DEFAULT_START = r'<ul class="categorygroup">' -DEFAULT_BEGIN = r'<li><ul class="categorygroup">' -DEFAULT_ITEM = r'<li><a href="%(base_url)s/%(fullcategory)sindex.%(flavour)s">%(category)s</a> (%(count)d)</li>' -DEFAULT_END = "</ul></li>" -DEFAULT_FINISH = "</ul>" - -def verify_installation(request): - config = request.getConfiguration() - if not config.has_key("category_template"): - print "missing optional config property 'category_template' which allows " - print "you to specify how the category hierarchy is rendered. see" - print "the documentation at the top of the pycategories plugin code " - print "file for more details." - return 1 - -class PyblCategories: - def __init__(self, request): - self._request = request - self._categories = None - self.genCategories() - - def __str__(self): - if self._categories == None: - self.genCategories() - return self._categories - - def genCategories(self): - config = self._request.getConfiguration() - root = config["datadir"] - - start_t = config.get("category_start", DEFAULT_START) - begin_t = config.get("category_begin", DEFAULT_BEGIN) - item_t = config.get("category_item", DEFAULT_ITEM) - end_t = config.get("category_end", DEFAULT_END) - finish_t = config.get("category_start", DEFAULT_FINISH) - - self._baseurl = config.get("base_url", "") - - form = self._request.getForm() - flavour = (form.has_key('flav') and form['flav'].value or - config.get('default_flavour', 'html')) - - # build the list of all entries in the datadir - elist = tools.Walk(self._request, root) - - # peel off the root dir from the list of entries - elist = [mem[len(root)+1:] for mem in elist] - - # go through the list of entries and build a map that - # maintains a count of how many entries are in each - # category - elistmap = {} - for mem in elist: - mem = os.path.dirname(mem) - elistmap[mem] = 1 + elistmap.get(mem, 0) - self._elistmap = elistmap - - # go through the elistmap keys (which is the list of - # categories) and for each piece in the key (i.e. the key - # could be "dev/pyblosxom/releases" and the pieces would - # be "dev", "pyblosxom", and "releases") we build keys - # for the category list map (i.e. "dev", "dev/pyblosxom", - # "dev/pyblosxom/releases") - clistmap = {} - for mem in elistmap.keys(): - mem = mem.split(os.sep) - for index in range(len(mem)+1): - p = os.sep.join(mem[0:index]) - clistmap[p] = 0 - - # then we take the category list from the clistmap and - # sort it alphabetically - clist = clistmap.keys() - clist.sort() - - output = [] - indent = 0 - - output.append(start_t) - # then we generate each item in the list - for item in clist: - itemlist = item.split(os.sep) - - num = 0 - for key in self._elistmap.keys(): - if key.endswith(item) or key.endswith(item + os.sep): - num = num + self._elistmap[key] - - if not item: - tab = "" - else: - tab = len(itemlist) * " " - - if indent > len(itemlist): - for i in range(indent - len(itemlist)): - output.append(end_t) - - elif indent < len(itemlist): - for i in range(len(itemlist) - indent): - output.append(begin_t) - - # now we build the dict with the values for substitution - d = { "base_url": self._baseurl, - "fullcategory": item + "/", - "category": itemlist[-1] + "/", - "flavour": flavour, - "count": num, - "indent": tab } - - # and we toss it in the thing - output.append(item_t % d) - - indent = len(itemlist) - - output.append(end_t * indent) - output.append(finish_t) - - # then we join the list and that's the final string - self._categories = "\n".join(output) - -def cb_prepare(args): - request = args["request"] - data = request.getData() - data["categorylinks"] = PyblCategories(request) |