851 lines
24 KiB
Plaintext
851 lines
24 KiB
Plaintext
|
# -*-s2-*-
|
||
|
|
||
|
layerinfo type = "layout";
|
||
|
layerinfo name = "A Sturdy Gesture";
|
||
|
layerinfo lang = "en";
|
||
|
|
||
|
layerinfo author = "Martin Atkins";
|
||
|
layerinfo author_email = "mart@livejournal.com";
|
||
|
|
||
|
layerinfo redist_uniq = "sturdygesture/layout";
|
||
|
layerinfo previews = "sturdygesture/sturdygesture.jpg";
|
||
|
|
||
|
propgroup colors {
|
||
|
property Color clr_page_back { des = "Page background"; }
|
||
|
set clr_page_back = "#ffffff";
|
||
|
|
||
|
property Color clr_page_text { des = "Box border color"; }
|
||
|
set clr_page_text = "#000000";
|
||
|
|
||
|
property Color clr_box_text { des = "Box content color"; }
|
||
|
set clr_boxhead_text = "#ffffff";
|
||
|
|
||
|
property Color clr_box_back { des = "Box background color"; }
|
||
|
set clr_boxhead_back = "#000000";
|
||
|
|
||
|
property Color clr_boxhead_text { des = "Box heading text color"; }
|
||
|
set clr_boxhead_text = "#ffffff";
|
||
|
|
||
|
property Color clr_boxhead_back { des = "Box heading background color"; }
|
||
|
set clr_boxhead_back = "#000000";
|
||
|
|
||
|
property Color clr_page_link { des = "Link color"; }
|
||
|
set clr_page_link = "#0000ff";
|
||
|
|
||
|
property Color clr_page_vlink { des = "Visited link color"; }
|
||
|
set clr_page_vlink = "#0000ff";
|
||
|
}
|
||
|
|
||
|
propgroup fonts {
|
||
|
property use font_base;
|
||
|
property use font_fallback;
|
||
|
}
|
||
|
|
||
|
propgroup presentation {
|
||
|
property string opt_navbar_pos {
|
||
|
des = "Navigation Bar Location";
|
||
|
values = "left|Left|right|Right";
|
||
|
}
|
||
|
set opt_navbar_pos = "left";
|
||
|
|
||
|
property bool opt_friends_colors {
|
||
|
des = "Use friend colors on friends page";
|
||
|
note = "If this option is on, the titles of friends' entries will use the colors you have selected for each friend.";
|
||
|
}
|
||
|
set opt_friends_colors = true;
|
||
|
|
||
|
property bool opt_always_userpic {
|
||
|
des = "Always show userpics";
|
||
|
note = "With this off, userpics are only shown in the friends view.";
|
||
|
}
|
||
|
set opt_always_userpic = false;
|
||
|
|
||
|
|
||
|
|
||
|
## These have no UI, but S2 generates an empty settings page if they aren't in a group
|
||
|
property string text_page_prev {
|
||
|
des = "Text used to link to the previous page";
|
||
|
noui = 1;
|
||
|
}
|
||
|
property string text_page_next {
|
||
|
des = "Text used to link to the next page";
|
||
|
noui = 1;
|
||
|
}
|
||
|
set text_page_prev = "Previous Page";
|
||
|
set text_page_next = "Next Page";
|
||
|
|
||
|
property string{} text_entry_links {
|
||
|
des = "Captions for Entry Action links";
|
||
|
noui = 1;
|
||
|
}
|
||
|
set text_entry_links = {"edit_entry" => "Edit Entry",
|
||
|
"edit_tags" => "Edit Tags",
|
||
|
"mem_add" => "Add As Memory",
|
||
|
"tell_friend" => "Tell a Friend",
|
||
|
"nav_prev" => "Previous Entry",
|
||
|
"nav_next" => "Next Entry"};
|
||
|
|
||
|
property string{} text_comment_links {
|
||
|
des = "Captions for Comment Action links";
|
||
|
noui = 1;
|
||
|
}
|
||
|
set text_comment_links = {"delete_comment" => "Delete",
|
||
|
"screen_comment" => "Screen",
|
||
|
"unscreen_comment" => "Unscreen",
|
||
|
"freeze_thread" => "Freeze",
|
||
|
"unfreeze_thread" => "Unfreeze", };
|
||
|
|
||
|
property use use_shared_pic;
|
||
|
property use linklist_support;
|
||
|
property use external_stylesheet;
|
||
|
}
|
||
|
|
||
|
set tags_aware = true;
|
||
|
|
||
|
function navheading(RecentNav nav, int entries) : string
|
||
|
"i18n layers should override this to translate the skiplink box heading." {
|
||
|
return ($nav.skip == 0 ? $entries+" most recent" : "skipped back "+$nav.skip);
|
||
|
}
|
||
|
function navlinktext(RecentNav nav, bool next) : string
|
||
|
"i18n layers should override this to translate the skiplinks. If \$next is false, output 'Previous X', else 'Next X'." {
|
||
|
return ($next ? "Next "+$nav.forward_count : "Previous "+$nav.backward_count);
|
||
|
}
|
||
|
|
||
|
function print_stylesheet() {
|
||
|
"""
|
||
|
body {
|
||
|
background: $*clr_page_back;
|
||
|
color: $*clr_page_text;
|
||
|
""";
|
||
|
# Ugliness
|
||
|
if ($*font_base != "" or $*font_fallback != "none") {
|
||
|
"font-family: ";
|
||
|
if ($*font_base != "") {
|
||
|
"\"$*font_base\"";
|
||
|
if ($*font_fallback != "none") {
|
||
|
", ";
|
||
|
}
|
||
|
}
|
||
|
if ($*font_fallback != "none") {
|
||
|
print $*font_fallback;
|
||
|
}
|
||
|
";";
|
||
|
}
|
||
|
"""
|
||
|
}
|
||
|
a {
|
||
|
color: $*clr_page_link;
|
||
|
}
|
||
|
a:visited {
|
||
|
color: $*clr_page_vlink;
|
||
|
}
|
||
|
|
||
|
img {
|
||
|
border: 0;
|
||
|
}
|
||
|
|
||
|
.box {
|
||
|
border: 1px solid $*clr_page_text;
|
||
|
margin: 1em;
|
||
|
background: $*clr_box_back;
|
||
|
color: $*clr_box_text;
|
||
|
}
|
||
|
|
||
|
#navbar {
|
||
|
width: 25%;
|
||
|
}
|
||
|
#body {
|
||
|
width: 75%;
|
||
|
}
|
||
|
|
||
|
#navbar .box h1, .box h2, .box h3 {
|
||
|
font-size: 1em;
|
||
|
background: $*clr_boxhead_back;
|
||
|
color: $*clr_boxhead_text;
|
||
|
padding: 3px;
|
||
|
margin: 0;
|
||
|
}
|
||
|
#navbar .box h1 {
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.box h1 a, .box h2 a, .box h3 a {
|
||
|
color: $*clr_boxhead_text;
|
||
|
background: $*clr_boxhead_back;
|
||
|
}
|
||
|
|
||
|
#navbar .box div.userpic {
|
||
|
margin: 1em;
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
#navbar p {
|
||
|
margin-left: 1em;
|
||
|
margin-right: 1em;
|
||
|
margin-bottom: 0;
|
||
|
}
|
||
|
#navbar ul, #skipbar ul {
|
||
|
list-style: none;
|
||
|
padding: 0;
|
||
|
margin: 0.5em;
|
||
|
}
|
||
|
#navbar ul li.active, #skipbar ul li.active {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
.box .entry {
|
||
|
margin: 1em;
|
||
|
}
|
||
|
|
||
|
.box .talklinks {
|
||
|
margin: 1em;
|
||
|
text-align: right;
|
||
|
clear: both;
|
||
|
}
|
||
|
.box .talklinks .permalink {
|
||
|
float: left;
|
||
|
}
|
||
|
|
||
|
.box .minicomment {
|
||
|
clear: both;
|
||
|
}
|
||
|
|
||
|
body.day #body h1 {
|
||
|
font-size: 1.1em;
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
table.box, table.box td, table.box th {
|
||
|
border: 1px solid #000000;
|
||
|
}
|
||
|
|
||
|
.metadata {
|
||
|
margin-top: 1em;
|
||
|
}
|
||
|
|
||
|
form#postform table {
|
||
|
background: $*clr_box_back;
|
||
|
color: $*clr_box_text;
|
||
|
}
|
||
|
""";
|
||
|
}
|
||
|
|
||
|
function Page::lay_page_nav() {
|
||
|
|
||
|
}
|
||
|
function RecentPage::lay_page_nav() {
|
||
|
if ($.nav.backward_url == "" and $.nav.forward_url == "") {
|
||
|
return;
|
||
|
}
|
||
|
println "<div class=\"box\">";
|
||
|
println "<h2>"+navheading($.nav,size $.entries)+"</h2>\n<ul>";
|
||
|
if ($.nav.backward_url != "") {
|
||
|
println "<li><a href=\""+$.nav.backward_url+"\">"+
|
||
|
navlinktext($.nav,false)+"</a></li>";
|
||
|
}
|
||
|
if ($.nav.forward_url != "") {
|
||
|
println "<li><a href=\""+$.nav.forward_url+"\">"+
|
||
|
navlinktext($.nav,true)+"</a></li>";
|
||
|
}
|
||
|
println "</ul>\n";
|
||
|
println "</div>\n";
|
||
|
}
|
||
|
function DayPage::lay_page_nav() {
|
||
|
println "<div class=\"box\"><ul>";
|
||
|
println "<li><a href=\"$.prev_url\">"+$.prev_date->date_format("med")+"</a></li>";
|
||
|
println "<li><a href=\"$.next_url\">"+$.next_date->date_format("med")+"</a></li>";
|
||
|
println "</ul></div>";
|
||
|
}
|
||
|
function YearPage::lay_page_nav() {
|
||
|
println "<div class=\"box\"><ul>";
|
||
|
foreach var YearYear y ($.years) {
|
||
|
if ($y.displayed) {
|
||
|
println "<li class=\"active\">$y.year</li>";
|
||
|
} else {
|
||
|
println "<li><a href=\"$y.url\">$y.year</a></li>";
|
||
|
}
|
||
|
}
|
||
|
println "</ul></div>";
|
||
|
}
|
||
|
function MonthPage::lay_page_nav() {
|
||
|
println "<div class=\"box\"><ul>";
|
||
|
if ($.prev_url != "") {
|
||
|
"""<li><a href="$.prev_url">"""+$.prev_date->date_format($*lang_fmt_month_long)+"""</a></li>""";
|
||
|
}
|
||
|
if ($.next_url != "") {
|
||
|
"""<li><a href="$.next_url">"""+$.next_date->date_format($*lang_fmt_month_long)+"""</a></li>""";
|
||
|
}
|
||
|
"</ul>";
|
||
|
|
||
|
"<form method='post' action='$.redir.url'><center>";
|
||
|
$.redir->print_hiddens();
|
||
|
if (size $.months > 1) {
|
||
|
"<select name='redir_key'>\n";
|
||
|
foreach var MonthEntryInfo mei ($.months) {
|
||
|
var string sel;
|
||
|
if ($mei.date.year == $.date.year and $mei.date.month == $.date.month) {
|
||
|
$sel = " selected='selected'";
|
||
|
}
|
||
|
"<option value='$mei.redir_key'$sel>" + $mei.date->date_format($*lang_fmt_month_long) + "</option>";
|
||
|
}
|
||
|
"</select>\n<input type='submit' value='View' />";
|
||
|
}
|
||
|
"</center></form>\n</div>\n";
|
||
|
}
|
||
|
|
||
|
function EntryPage::lay_page_nav() {
|
||
|
println "<div class=\"box\">";
|
||
|
if (size $.comments > 0 and not $.comment_pages.all_subitems_displayed) {
|
||
|
"<h2>"+lang_page_of_pages($.comment_pages.current, $.comment_pages.total)+"</h2>\n";
|
||
|
}
|
||
|
print "<ul>\n";
|
||
|
if ($.entry.comments.enabled) {
|
||
|
"<li>"; $.entry.comments->print_postlink(); "</li>\n";
|
||
|
}
|
||
|
if ($.comment_pages.url_prev != "") {
|
||
|
"""<li><a href="$.comment_pages.url_prev">$*text_page_prev</a></li>\n""";
|
||
|
}
|
||
|
if ($.comment_pages.url_next != "") {
|
||
|
"""<li><a href="$.comment_pages.url_next">$*text_page_next</a></li>\n""";
|
||
|
}
|
||
|
println "<li> </li>";
|
||
|
var Link l = new Link;
|
||
|
$l = $.entry->get_link("nav_next");
|
||
|
println """<li><a href="$l.url">$*text_entry_links{"nav_next"}</a></li>""";
|
||
|
foreach var string ls ($.entry.link_keyseq) {
|
||
|
$l = $.entry->get_link($ls);
|
||
|
if (defined $l) {
|
||
|
println """<li><a href="$l.url">$*text_entry_links{$ls}</a></li>""";
|
||
|
}
|
||
|
}
|
||
|
$l = $.entry->get_link("nav_prev");
|
||
|
println """<li><a href="$l.url">$*text_entry_links{"nav_prev"}</a></li>""";
|
||
|
println "</ul></div>";
|
||
|
}
|
||
|
|
||
|
function Page::lay_show_firstnav() : bool {
|
||
|
return false;
|
||
|
}
|
||
|
function RecentPage::lay_show_firstnav() : bool {
|
||
|
return ((size $.entries) > 5);
|
||
|
}
|
||
|
function DayPage::lay_show_firstnav() : bool {
|
||
|
return ((size $.entries) > 5);
|
||
|
}
|
||
|
function YearPage::lay_show_firstnav() : bool {
|
||
|
return true;
|
||
|
}
|
||
|
function MonthPage::lay_show_firstnav() : bool {
|
||
|
return true;
|
||
|
}
|
||
|
function EntryPage::lay_show_firstnav() : bool {
|
||
|
return ((size $.comments) > 5);
|
||
|
}
|
||
|
function EntryPage::lay_show_firstnav() : bool {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function Page::lay_navbar() {
|
||
|
var string userpic;
|
||
|
var Image up_img = $.journal.default_pic;
|
||
|
if (defined $up_img) {
|
||
|
$userpic = """<div class="userpic">
|
||
|
<img src="$up_img.url"
|
||
|
class="userpic" alt=""
|
||
|
height="$up_img.height" width="$up_img.width" />
|
||
|
</div>
|
||
|
""";
|
||
|
}
|
||
|
var string website;
|
||
|
if ($.journal.website_url != "") {
|
||
|
$website = """<li><a href="$.journal.website_url">$.journal.website_name</a></li>\n""";
|
||
|
}
|
||
|
|
||
|
"""
|
||
|
<td id="navbar" width="25%">
|
||
|
<div class="box">
|
||
|
<h1>$.journal.name</h1>
|
||
|
<ul>
|
||
|
""";
|
||
|
foreach var string v ($.views_order) {
|
||
|
if ($.view == $v) {
|
||
|
println "<li class=\"active\">"+lang_viewname($v)+"</li>";
|
||
|
} else {
|
||
|
println "<li><a href=\""+$.view_url{$v}+"\">"+lang_viewname($v)+"</a></li>";
|
||
|
}
|
||
|
}
|
||
|
"""
|
||
|
$website</ul>
|
||
|
$userpic
|
||
|
</div>
|
||
|
""";
|
||
|
|
||
|
if ($this->lay_show_firstnav()) {
|
||
|
$this->lay_page_nav();
|
||
|
}
|
||
|
|
||
|
if (size $this.linklist > 0 and $*linklist_support) {
|
||
|
println "<div class=\"box\">";
|
||
|
println "<h2>Links</h2>\n";
|
||
|
$this->print_linklist();
|
||
|
println "</div>";
|
||
|
}
|
||
|
|
||
|
"</td>";
|
||
|
|
||
|
}
|
||
|
|
||
|
function Page::print_linklist() {
|
||
|
if (size $.linklist <= 0) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var bool section_open = false;
|
||
|
|
||
|
println "<ul>";
|
||
|
foreach var UserLink l ($.linklist) {
|
||
|
if ($l.title) {
|
||
|
if ($l.is_heading) {
|
||
|
if ($section_open) {
|
||
|
println "</ul></li>";
|
||
|
}
|
||
|
println """<li><span style="font-weight: bold;">$l.title</span>\n<ul>""";
|
||
|
$section_open = true;
|
||
|
} else {
|
||
|
println """<li><a href="$l.url">$l.title</a></li>""";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if ($section_open) {
|
||
|
println "</ul></li>";
|
||
|
}
|
||
|
println "</ul>";
|
||
|
}
|
||
|
|
||
|
function Page::print() {
|
||
|
var string title = $this->title();
|
||
|
|
||
|
"""<html>\n<head>\n""";
|
||
|
|
||
|
if ($*external_stylesheet) {
|
||
|
println """<link rel="stylesheet" href="$.stylesheet_url" type="text/css" />""";
|
||
|
} else {
|
||
|
println """<style type="text/css">"""; print_stylesheet(); "</style>";
|
||
|
}
|
||
|
$this->print_head();
|
||
|
|
||
|
"<title>"+$this->title()+"</title>";
|
||
|
"""
|
||
|
</head>
|
||
|
<body class="$.view">
|
||
|
<table border="0" cellpadding="0" cellspacing="0" width="100%">
|
||
|
<tr valign="top">
|
||
|
""";
|
||
|
|
||
|
if ($*opt_navbar_pos == "left") {
|
||
|
$this->lay_navbar();
|
||
|
}
|
||
|
|
||
|
"<td rowspan=\"2\" id=\"body\">\n";
|
||
|
$this->print_body();
|
||
|
"</td>\n";
|
||
|
|
||
|
if ($*opt_navbar_pos == "right") {
|
||
|
$this->lay_navbar();
|
||
|
}
|
||
|
|
||
|
"</tr><tr><td valign=\"bottom\" id=\"skipbar\">";
|
||
|
$this->lay_page_nav();
|
||
|
"</td>";
|
||
|
|
||
|
"""
|
||
|
</tr>
|
||
|
</table>
|
||
|
</body>
|
||
|
</html>
|
||
|
""";
|
||
|
}
|
||
|
|
||
|
function print_entry(Page p, Entry e, Color bgcolor, Color fgcolor) {
|
||
|
var string datetime;
|
||
|
if ($p.view != "day") {
|
||
|
$datetime = $e.time->date_format("med_day")+", "+$e.time->time_format();
|
||
|
} else {
|
||
|
$datetime = $e.time->time_format();
|
||
|
}
|
||
|
|
||
|
if (not (defined $bgcolor) or not $*opt_friends_colors) {
|
||
|
$bgcolor = $*clr_boxhead_back;
|
||
|
}
|
||
|
if (not (defined $fgcolor) or not $*opt_friends_colors) {
|
||
|
$fgcolor = $*clr_boxhead_text;
|
||
|
}
|
||
|
|
||
|
"""<div class="box"><h2 style="color: $fgcolor; background: $bgcolor;">$datetime """;
|
||
|
|
||
|
if ($e.security != "") {
|
||
|
print """<img src="$e.security_icon.url" align="right" """+
|
||
|
"""width="$e.security_icon.width" height="$e.security_icon.height" """+
|
||
|
"""alt="[$e.security]" />""";
|
||
|
}
|
||
|
|
||
|
if ($p.view == "friends" or
|
||
|
$e.subject != "" or
|
||
|
$e.poster.username != $p.journal.username) {
|
||
|
|
||
|
print "<br />";
|
||
|
if ($p.view == "friends" or $e.poster.username != $p.journal.username) {
|
||
|
$p->print_entry_poster($e);
|
||
|
print ": ";
|
||
|
}
|
||
|
print $e.subject;
|
||
|
}
|
||
|
"</h2>\n<div class=\"entry\">\n";
|
||
|
if (defined $e.userpic and (
|
||
|
$*opt_always_userpic
|
||
|
or ($e.poster.username != $p.journal.username and $e.userpic.url != $p.journal.default_pic.url)
|
||
|
or $p.view == "friends"
|
||
|
or $p.view == "entry")) {
|
||
|
|
||
|
"""<img src="$e.userpic.url" """;
|
||
|
"""width="$e.userpic.width" height="$e.userpic.height" """;
|
||
|
"""alt="" align="right" style="margin: 5px;" />\n""";
|
||
|
}
|
||
|
|
||
|
"$e.text";
|
||
|
|
||
|
$e->print_metadata();
|
||
|
|
||
|
"""</div><div class="talklinks">""";
|
||
|
"""<div class="permalink"><a href="$e.permalink_url">$*text_permalink</a></div> """;
|
||
|
$e.comments->print();
|
||
|
"</div>";
|
||
|
|
||
|
"</div>";
|
||
|
|
||
|
} # print_entry(Page,Entry,Color,Color)
|
||
|
|
||
|
function Entry::print_metadata() {
|
||
|
var string caption;
|
||
|
var string val;
|
||
|
var Image i;
|
||
|
if (size $.metadata == 0 and size $.tags == 0) { return; }
|
||
|
println """<div class="metadata">""";
|
||
|
if ($this.tags) {
|
||
|
var int tcount = 0;
|
||
|
"<div class='ljtags'><strong>Tags:</strong> ";
|
||
|
foreach var Tag t ($this.tags) {
|
||
|
"""<a rel="tag" href="$t.url">$t.name</a>""";
|
||
|
$tcount++;
|
||
|
if ($tcount != size $this.tags) { ", "; }
|
||
|
}
|
||
|
"</div>";
|
||
|
}
|
||
|
if (size $.metadata != 0) {
|
||
|
foreach var string k ($.metadata) {
|
||
|
$caption = $k;
|
||
|
$val = $.metadata{$k};
|
||
|
if ($k == "music") {
|
||
|
$caption = $*text_meta_music;
|
||
|
}
|
||
|
elseif ($k == "mood") {
|
||
|
$caption = $*text_meta_mood;
|
||
|
if (defined $.mood_icon) {
|
||
|
$i = $.mood_icon;
|
||
|
$val = """<img src="$i.url" width="$i.width" height="$i.height" align="absmiddle"> $val""";
|
||
|
}
|
||
|
}
|
||
|
println """<div class="metadata-$k"><span style="font-weight: bold;">$caption:</span> $val</div>""";
|
||
|
}
|
||
|
}
|
||
|
println "</div>";
|
||
|
}
|
||
|
|
||
|
function Page::print_entry(Entry e) {
|
||
|
print_entry($this, $e, null Color, null Color);
|
||
|
}
|
||
|
|
||
|
function FriendsPage::print_entry(Entry e) {
|
||
|
var Friend f = $.friends{$e.journal.username};
|
||
|
print_entry($this, $e, $f.bgcolor, $f.fgcolor);
|
||
|
}
|
||
|
function colored_ljuser(UserLite u, Color fg, Color bg) : string {
|
||
|
var Image uiimg = userinfoicon($u);
|
||
|
var string dir = $u.journal_type == "C" ? "community" : "users";
|
||
|
return """<span class="ljuser" style="white-space:nowrap;"><a href="$*SITEROOT/userinfo.bml?user=$u.username" style="color: $fg; background: $bg;"><img src="$uiimg.url" alt="[i]" width="$uiimg.width" height="$uiimg.height" style="vertical-align:bottom;border:0;" /></a><a href="$*SITEROOT/$dir/$u.username/" style="color: $fg; background: $bg; font-weight: bold;">$u.username</a></span>""";
|
||
|
}
|
||
|
function FriendsPage::print_entry_poster(Entry e) {
|
||
|
var Friend f = $.friends{$e.journal.username};
|
||
|
var Color fg; var Color bg;
|
||
|
if ($*opt_friends_colors) {
|
||
|
$fg = $f.fgcolor;
|
||
|
$bg = $f.bgcolor;
|
||
|
} else {
|
||
|
$fg = $*clr_boxhead_text;
|
||
|
$bg = $*clr_boxhead_back;
|
||
|
}
|
||
|
print colored_ljuser($e.poster, $fg, $bg);
|
||
|
if ($e.poster.username != $e.journal.username) {
|
||
|
" posting in ";
|
||
|
print colored_ljuser($e.journal, $fg, $bg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function RecentPage::print_body() {
|
||
|
foreach var Entry e ($.entries) {
|
||
|
$this->print_entry($e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CommentInfo::print() {
|
||
|
if ($.enabled) {
|
||
|
$this->print_postlink();
|
||
|
if ($.count > 0 or $.screened) {
|
||
|
" | ";
|
||
|
$this->print_readlink();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function DayPage::print_body() {
|
||
|
println """<h1 style="font-size: 1.5em; text-align: center;">"""+$.date->date_format("long")+"</h1>";
|
||
|
|
||
|
if (not $.has_entries) {
|
||
|
print "<p>$*text_noentries_day</p>";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
foreach var Entry e ($.entries) {
|
||
|
$this->print_entry($e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function EntryPage::print_body() {
|
||
|
$this->print_entry($.entry);
|
||
|
if ($this.multiform_on) {
|
||
|
$this->print_multiform_start();
|
||
|
}
|
||
|
if ($.entry.comments.enabled) {
|
||
|
$this->print_comments($.comments);
|
||
|
}
|
||
|
if ($this.multiform_on) {
|
||
|
"<div class='box'><h2>Mass Action on Selected Comments:</h2>";
|
||
|
"<p class='entry'>"; $this->print_multiform_actionline(); "</p>";
|
||
|
"</div>";
|
||
|
$this->print_multiform_end();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function EntryPage::print_comments(Comment[] cs) {
|
||
|
if (size $cs == 0) { return; }
|
||
|
print "<div style=\"margin-left: 25px;\">";
|
||
|
foreach var Comment c ($cs) {
|
||
|
var int indent = ($c.depth - 1) * 25;
|
||
|
if ($c.full) {
|
||
|
$this->print_comment($c);
|
||
|
} else {
|
||
|
$this->print_comment_partial($c);
|
||
|
}
|
||
|
}
|
||
|
print "</div>";
|
||
|
}
|
||
|
|
||
|
function EntryPage::print_comment(Comment c) {
|
||
|
var string datetime;
|
||
|
$datetime = $c.time->date_format("med_day")+", "+$c.time->time_format();
|
||
|
|
||
|
"""<a name='$c.anchor'></a><div id="$c.dom_id" class="box"><h3 style="color: $*clr_boxhead_text; background: $*clr_boxhead_back;">""";
|
||
|
|
||
|
if ($c.metadata{"poster_ip"}) { print """<div style="float: right; vertical-align: top; font-size: 0.75em;">(""" +
|
||
|
$c.metadata{"poster_ip"} +
|
||
|
""")</div>"""; }
|
||
|
|
||
|
print $datetime;
|
||
|
|
||
|
if (defined $c.subject_icon) {
|
||
|
print """<img src="$c.subject_icon.url" align="right" """+
|
||
|
"""width="$c.subject_icon.width" height="$c.subject_icon.height" """+
|
||
|
"""alt="" />""";
|
||
|
}
|
||
|
|
||
|
var string poster = defined $c.poster ? $c.poster->as_string() : "<i>(Anonymous)</i>";
|
||
|
print "<br />"+$poster;
|
||
|
|
||
|
if ($c.subject != "") {
|
||
|
print ": "+$c.subject;
|
||
|
}
|
||
|
|
||
|
"</h3>\n<div class=\"entry\">\n";
|
||
|
if (defined $c.userpic and $*comment_userpic_style != "off") {
|
||
|
"""<img src="$c.userpic.url" """;
|
||
|
"""width="$c.userpic.width" height="$c.userpic.height" """;
|
||
|
"""alt="" align="right" style="margin: 5px;" />\n""";
|
||
|
}
|
||
|
|
||
|
"$c.text</div>";
|
||
|
"""<div class="talklinks">""";
|
||
|
"""<div class="permalink"><a href="$c.permalink_url">$*text_permalink</a></div>""";
|
||
|
|
||
|
if ($c.parent_url != "") { """<a href="$c.parent_url">$*text_comment_parent</a> - """; }
|
||
|
if ($c.thread_url != "") { """<a href="$c.thread_url">$*text_comment_thread</a> - """; }
|
||
|
var Link l = new Link;
|
||
|
foreach var string ls ($c.link_keyseq) {
|
||
|
$l = $c->get_link($ls);
|
||
|
if (defined $l) {
|
||
|
println """<a href="$l.url">$*text_comment_links{$ls}</a> - """;
|
||
|
}
|
||
|
}
|
||
|
if (not $c.frozen) {
|
||
|
"""<a href="$c.reply_url">$*text_comment_reply</a>""";
|
||
|
} else {
|
||
|
"""$*text_comment_frozen""";
|
||
|
}
|
||
|
# FIXME: better location?
|
||
|
if ($.multiform_on) {
|
||
|
"""<br /><label for="ljcomsel_$c.talkid">$*text_multiform_check</label> """; $c->print_multiform_check();
|
||
|
}
|
||
|
"</div>";
|
||
|
|
||
|
if ((size $c.replies) > 0 and $c.replies[0].full == false) {
|
||
|
"""<div style="margin-top: 5px; margin-bottom: 5px; clear: both;">\n""";
|
||
|
$this->print_comments($c.replies);
|
||
|
"</div>\n";
|
||
|
}
|
||
|
|
||
|
"</div>";
|
||
|
|
||
|
if ((size $c.replies) > 0 and $c.replies[0].full == true) {
|
||
|
$this->print_comments($c.replies);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
function EntryPage::print_comment_partial(Comment c) {
|
||
|
var string poster = defined $c.poster ? $c.poster->as_string() : "<i>(Anonymous)</i>";
|
||
|
var string subj = $c.subject != "" ? $c.subject : $*text_nosubject;
|
||
|
print """<div class="minicomment"><a href="$c.permalink_url">$subj</a> - $poster</div>""";
|
||
|
$this->print_comments($c.replies);
|
||
|
}
|
||
|
|
||
|
|
||
|
function ReplyPage::print_body() {
|
||
|
|
||
|
var EntryLite c = $.replyto;
|
||
|
var string datetime;
|
||
|
$datetime = $c.time->date_format("med_day")+", "+$c.time->time_format();
|
||
|
|
||
|
"""<div class="box"><h2 style="color: $*clr_boxhead_text; background: $*clr_boxhead_back;">$datetime """;
|
||
|
|
||
|
var string poster = defined $c.poster ? $c.poster->as_string() : "<i>(Anonymous)</i>";
|
||
|
print "<br />"+$poster;
|
||
|
|
||
|
if ($c.subject != "") {
|
||
|
print ": "+$c.subject;
|
||
|
}
|
||
|
|
||
|
"</h2>\n<div class=\"entry\">\n";
|
||
|
if (defined $c.userpic and $*comment_userpic_style != "off") {
|
||
|
"""<img src="$c.userpic.url" """;
|
||
|
"""width="$c.userpic.width" height="$c.userpic.height" """;
|
||
|
"""alt="" align="right" style="margin: 5px;" />\n""";
|
||
|
}
|
||
|
|
||
|
"$c.text</div>";
|
||
|
|
||
|
if (defined $c.userpic and $*comment_userpic_style != "off") {
|
||
|
"""<br clear="all" />""";
|
||
|
}
|
||
|
|
||
|
"</div>";
|
||
|
|
||
|
"""<div class="box" style="margin-left: 25px;">\n""";
|
||
|
$.form->print();
|
||
|
"</div>\n";
|
||
|
|
||
|
}
|
||
|
|
||
|
function YearPage::print_body {
|
||
|
foreach var YearMonth m ($.months) {
|
||
|
$this->print_month($m);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function YearPage::print_month(YearMonth m) {
|
||
|
if (not $m.has_entries) { return; }
|
||
|
"""<table class="box" style="border-collapse: collapse; border: 1px solid; width: 80%; margin-left: 10%; margin-right: 10%;" border="1">\n
|
||
|
<tr><th colspan="7" style="background: $*clr_boxhead_back; color: $*clr_boxhead_text; text-align: center;">""";
|
||
|
print $m->month_format();
|
||
|
"""</th></tr>\n""";
|
||
|
foreach var int d (weekdays()) {
|
||
|
"<th style=\"width: 14%;\">"+$*lang_dayname_short[$d]+"</th>\n";
|
||
|
}
|
||
|
"</tr>\n";
|
||
|
foreach var YearWeek w ($m.weeks) {
|
||
|
$w->print();
|
||
|
}
|
||
|
"""<tr><td colspan="7" style="text-align: center;">
|
||
|
<a href="$m.url">$*text_view_month</a></td></tr>\n""";
|
||
|
"</table>";
|
||
|
}
|
||
|
|
||
|
function YearWeek::print() {
|
||
|
"""<tr valign="top" style="height: 2.75em;">\n""";
|
||
|
if ($.pre_empty > 0) {
|
||
|
"""<td class="emptyday" colspan="$.pre_empty"> </td>\n""";
|
||
|
}
|
||
|
foreach var YearDay d ($.days) {
|
||
|
"""<td>\n""";
|
||
|
"""<div style="text-align: right;">$d.day</div>\n""";
|
||
|
if ($d.num_entries > 0) {
|
||
|
"""<div style="text-align: center;"><a href="$d.url">$d.num_entries</a></div>\n""";
|
||
|
}
|
||
|
"""</td>\n""";
|
||
|
}
|
||
|
if ($.post_empty > 0) {
|
||
|
"""<td colspan="$.post_empty"> </td>\n""";
|
||
|
}
|
||
|
"</tr>";
|
||
|
}
|
||
|
|
||
|
function MonthPage::print_body {
|
||
|
"""<div class="box"><h2>"""+$.date->date_format($*lang_fmt_month_long)+"</h2>\n";
|
||
|
"<dl style=\"margin: 1em;\">";
|
||
|
foreach var MonthDay d ($.days) {
|
||
|
if ($d.has_entries) {
|
||
|
"<dt><a href=\"$d.url\"><b>";
|
||
|
print lang_ordinal($d.day);
|
||
|
"</b></a></dt>\n<dd>";
|
||
|
$d->print_subjectlist();
|
||
|
"</dd>\n";
|
||
|
}
|
||
|
}
|
||
|
"</dl>\n</div>\n";
|
||
|
}
|
||
|
|
||
|
|
||
|
### Handler for the theme previews
|
||
|
|
||
|
function print_theme_preview() {
|
||
|
"""
|
||
|
<div style="padding: 1em; background: $*clr_page_back; color: $*clr_page_text;">
|
||
|
<div style="border: 1px solid $*clr_page_text; margin: 1em; background: $*clr_box_back; color: $*clr_box_text;">
|
||
|
<h2 style="color: $*clr_boxhead_text; background: $*clr_boxhead_back; font-size: 1em; padding: 4px; margin: 0;">Cir zuta besho cavu mabu</h2>
|
||
|
<div style="margin: 1em;">
|
||
|
Cir zuta besho cavu mabu. Jad dop fugu hige wiju. Jam nek sapu shek noshea, moz lolle jil hattou daz.
|
||
|
Heck mippe giffou tipe pello, govo goof wachou fenu betui, mumu niffo puffu hivoo ziv! Sap gap jozo vem
|
||
|
sushu jiwo peru diche gese zar. Zuk kah rec sok vapui, mumu. Puw wuti mufe bak jivo, zef kazou gipwew cus.
|
||
|
Cev lepp gik fego rer. Tucku mickou jeck helou soopp! Vowa vov fawea pip wok. Heg fum heafsum pele.
|
||
|
Piz kuzu louw rome puir. Pashi jog huku pobi ckush. Zuj bit wido guih biha. Som veh nelo ruh ruju.
|
||
|
Coosh jecko nuh tutt tab. Zutt ckek vano fic der, hivu?
|
||
|
</div>
|
||
|
<div style="margin: 1em; text-align: right; clear: both;">
|
||
|
<div style="float: left;"><span style="color: #0000ff; text-decoration: underline; cursor: hand;">$*text_permalink</span></div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
""";
|
||
|
|
||
|
|
||
|
}
|