diff options
| author | mailman | 1998-02-25 22:17:31 +0000 |
|---|---|---|
| committer | mailman | 1998-02-25 22:17:31 +0000 |
| commit | 41b6e12b095c3c36b17ba3c40b723bdde0b7d08f (patch) | |
| tree | dcff8b6b5fad56b655798b9c2dfbd4662343fe8a /modules/mm_html.py | |
| parent | 79cdac1cab62e048a1545211a29067d5240bfd14 (diff) | |
| download | mailman-41b6e12b095c3c36b17ba3c40b723bdde0b7d08f.tar.gz mailman-41b6e12b095c3c36b17ba3c40b723bdde0b7d08f.tar.zst mailman-41b6e12b095c3c36b17ba3c40b723bdde0b7d08f.zip | |
Diffstat (limited to 'modules/mm_html.py')
| -rw-r--r-- | modules/mm_html.py | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/modules/mm_html.py b/modules/mm_html.py new file mode 100644 index 000000000..15c7c181d --- /dev/null +++ b/modules/mm_html.py @@ -0,0 +1,154 @@ +import os +import regsub +import string +import mm_cfg, mm_utils +import htmlformat + +class HTMLFormatter: + def InitVars(self): + self._template_dir = os.path.join(mm_cfg.TEMPLATE_DIR, + self._internal_name) + + def GetMailmanFooter(self): + owners_html = htmlformat.Container() + for i in range(len(self.owner)): + owner = self.owner[i] + owners_html.AddItem(htmlformat.Link('mailto:%s' % owner, owner)) + if i + 1 <> len(self.owner): + owners_html.AddItem(', ') + + # Remove the .Format() when htmlformat conversion is done. + return htmlformat.Container( + '<hr>', + htmlformat.Address( + htmlformat.Container( + 'List run by ', + owners_html, + '<p>', + 'HTML generated by ', + htmlformat.Link(mm_cfg.MAILMAN_URL, + "Mailman v %s" % mm_cfg.VERSION)))).Format() + + def SnarfHTMLTemplate(self, file): + filename = os.path.join(self._template_dir, file) + f = open(filename,'r') + str = f.read() + f.close() + return str + + def FormatUsers(self, digest): + def NotHidden(x, s=self, v=mm_cfg.ConcealSubscription): + return not s.GetUserOption(x, v) + + if self.closed: + return 'Sorry, not available over the web.' + if digest: + people = filter(NotHidden, self.digest_members) + else: + people = filter(NotHidden, self.members) + + def FormatOneUser(person, me=self): + import htmlformat, os + return htmlformat.Link(os.path.join(me.GetScriptURL('options'), + person), person) + items = map(FormatOneUser, people) + # Just return the .Format() so this works until I finish + # converting everything to htmlformat... + return apply(htmlformat.UnorderedList, tuple(items)).Format() + + def FormatOptionButton(self, type, value, user): + users_val = self.GetUserOption(user, type) + if users_val == value: + checked = ' CHECKED' + else: + checked = '' + name = { mm_cfg.DontReceiveOwnPosts : "dontreceive", + mm_cfg.DisableDelivery : "disablemail", + mm_cfg.EnableMime : "plaintext", + mm_cfg.AcknowlegePosts : "ackposts", + mm_cfg.Digests : "digest", + mm_cfg.ConcealSubscription : "conceal" + }[type] + import sys + return '<input type=radio name="%s" value="%d"%s>' % (name, value, checked) + def FormatDigestButton(self): + if self.digest_is_default: + checked = ' CHECKED' + else: + checked = '' + return '<input type=radio name="digest" value="1"%s>' % checked + + def FormatUndigestButton(self): + if self.digest_is_default: + checked = '' + else: + checked = ' CHECKED' + return '<input type=radio name="digest" value="0"%s>' % checked + + def FormatFormStart(self, name, extra=''): + base_url = self.GetScriptURL(name) + full_url = os.path.join(base_url, extra) + return ('<FORM Method=POST ACTION="%s">' % full_url) + + def FormatArchiveAnchor(self): + return '<a href="%s">' % self.GetScriptURL("archives") + + def FormatFormEnd(self): + return '</FORM>' + + def FormatBox(self, name, size=20): + return '<INPUT type="Text" name="%s" size="%d">' % (name, size) + + def FormatSecureBox(self, name): + return '<INPUT type="Password" name="%s">' % name + + def FormatButton(self, name, text='Submit'): + return '<INPUT type="Submit" name="%s" value="%s">' % (name, text) + + def ParseTags(self, template, replacements): + text = self.SnarfHTMLTemplate(template) + parts = regsub.splitx(text, '</?[Mm][Mm]-[^>]*>') + i = 1 + while i < len(parts): + tag = string.lower(parts[i]) + if replacements.has_key(tag): + parts[i] = replacements[tag] + else: + parts[i] = '' + i = i + 2 + return string.join(parts, '') + + # This needs to wait until after the list is inited, so let's build it + # when it's needed only. + def GetStandardReplacements(self): + return { + '<mm-mailman-footer>' : self.GetMailmanFooter(), + '<mm-list-name>' : self.real_name, + '<mm-email-user>' : self._internal_name, + '<mm-list-description>' : self.description, + '<mm-list-info>' : string.join(string.split(self.info, '\n'),'<br>'), + '<mm-form-end>' : self.FormatFormEnd(), + '<mm-archive>' : self.FormatArchiveAnchor(), + '</mm-archive>' : '</a>', + '<mm-regular-users>' : self.FormatUsers(0), + '<mm-digest-users>' : self.FormatUsers(1), + '<mm-num-reg-users>' : `len(self.members)`, + '<mm-num-digesters>' : `len(self.digest_members)`, + '<mm-num-members>' : `len(self.members) + len(self.digest_members)`, + '<mm-posting-addr>' : '%s' % self.GetListEmail(), + '<mm-owner>' : self.GetAdminEmail() + } + + def InitTemplates(self): + def ExtensionFilter(item): + return item[-5:] == '.html' + + files = filter(ExtensionFilter, os.listdir(mm_cfg.TEMPLATE_DIR)) + mm_utils.MakeDirTree(self._template_dir) + for filename in files: + file1 = open(os.path.join(mm_cfg.TEMPLATE_DIR, filename), 'r') + text = file1.read() + file1.close() + file2 = open(os.path.join(self._template_dir, filename), 'w+') + file2.write(text) + file2.close() |
