123456789101112131415161718192021222324252627282930313233343536373839404142 |
- # -*- coding: utf-8 -*-
- from __future__ import absolute_import
- import codecs
- from pelican import signals
- from pelican.generators import Generator
- from linker import linker
- def encode_mailto_link(mailto):
- return 'mailto/' + codecs.encode(mailto, 'rot_13') + '/'
- class MailtoLinker(linker.LinkerBase):
- commands = ['mailto']
- def link(self, link):
- mailto = link.path
- link.path = '/' + encode_mailto_link(mailto) # a.href for JS parsing
- link.context['mailtos'].add(mailto) # remember mail address for fallback
- class MailtoFallbackGenerator(Generator):
- def generate_context(self):
- self.context['mailtos'] = set() # populated on {mailto} link processing
- def generate_output(self, writer):
- for mailto in self.context['mailtos']:
- save_as = encode_mailto_link(mailto) + 'index.html'
- writer.write_file(save_as, self.get_template('mailto_fallback'),
- self.context, mailto=mailto)
- def return_mailto_fallback_generator(generators):
- return MailtoFallbackGenerator
- def register():
- linker.register()
- signals.get_generators.connect(return_mailto_fallback_generator)
|