# -*-s2-*- layerinfo type = "layout"; layerinfo name = "Opal (Libra OSWD)"; layerinfo lang = "en"; layerinfo author_name = "Ported by Kevin Phillips"; layerinfo author_email = "xevinx@livejournal.com"; layerinfo des = "Based on the Libra and Pasilda design available from Open Source Web Designs. Originally written by whompy."; layerinfo redist_uniq = "opal/layout"; layerinfo previews = "opal/opal.jpg"; ################################################################################ # # Properties # propgroup prez = "Presentation"; propgroup prez { property use font_base; property use font_fallback; property string static_font_size { noui = 1; } property string static_font_measurement { noui = 1; } property use page_recent_items; property use page_friends_items; property use use_shared_pic; property use view_entry_disabled; property bool show_entry_userpic { des = "Always display userpic?"; } property int summary_items { des = "Summary Items"; note="Maximum number of items in the Page Summary list. Set to 0 to turn off the Page Summary. Set to 100 to show all available items."; } property bool use_count { noui=1; } set static_font_size = "12"; set static_font_measurement = "px"; set summary_items = 100; set show_entry_userpic = false; set font_fallback = "sans-serif"; } propgroup colors = "Colors"; propgroup colors { property Color color_bg { des = "Background Color"; } property Color color_bg_font { des = "Background Font Color"; note = "The color of any font appearing on the background color."; } property Color color_med { des = "Page Holder Background"; note = "This is the background of the main body, but within the outer borders."; } property Color color_med_font { des = "Page Holder Font Color"; note="The color of the font appearing on the Page Holder Background color."; } property Color color_fg { des = "Content Background Color"; note = "This is the background to the main content where the entries and side elements are."; } property Color color_fg_font { des = "Content Font Color"; note = "The color of the font that appears on in the main Content area."; } property Color color_link { des = "Link Color"; } property Color color_visited { des = "Visited Link Color"; } set color_bg = "#2d3851"; set color_bg_font = "#ffffff"; set color_med = "#7C8AA4"; set color_med_font = "#e9f2fc"; set color_fg = "#BFC4CB"; set color_fg_font = "#333333"; } propgroup text = "Text"; propgroup text { property string free_text_header { des = "Free Text Header"; } property string free_text_text { des = "Free Text Text"; cols = 30; rows = 10; } property string links_header { des = "Links Header"; } property string page_summary_title { des = "Page Summary Header"; } property use text_view_userinfo; property use text_view_recent; property use text_view_friends; property use text_view_archive; property string text_forward { des = "Text to show in a link to skip forward through entries"; } property string text_back { des = "Text to show in a link to skip backward through entries"; } property use text_read_comments; property use text_read_comments_friends; property use text_post_comment; property use text_post_comment_friends; property use text_comment_reply; property use text_reply_back; property use text_nosubject; property use text_noentries_day; property use text_meta_music; property use text_meta_mood; set page_summary_title = "Page Summary"; set links_header = "Links"; set free_text_header = "About this journal"; set free_text_text = ""; set text_back = "Back"; set text_forward = "Forward"; } set tags_aware = true; ################################################################################ # # Prop Init # function prop_init () { if($*color_bg.as_string == "") { $*color_bg = "#000000"; } if($*color_fg.as_string == "") { $*color_fg = "#000000"; } if($*color_fg_font.as_string == "") { $*color_fg_font = "#000000"; } } ################################################################################ # # Stylesheet # function getAltColor (Color color, string dir, int num) : Color { var int lt = $color->lightness(); if($dir == "light") { if($lt > 200) { $color = $color->darker($num); } else { $color = $color->lighter($num); } } elseif($dir == "dark") { if($lt < 55) { $color = $color->lighter($num); } else { $color = $color->darker($num); } } return $color; } function print_stylesheet () { var Color color_bg_lt = getAltColor($*color_bg, "light", 30); var Color color_fg_dk = getAltColor($*color_fg, "dark", 20); var Color color_fg_dk_font = getAltColor($*color_fg_font, "dark", 20); var Color color_divider = getAltColor($color_fg_dk, "dark", 30); var Color color_fg_dk_dk_font = getAltColor($color_fg_dk, "dark", 50); var Color color_border = getAltColor($*color_bg, "light", 90); var string base = ($*font_base != "") ? "$*font_base, " : ""; """ body { font-family: $base $*font_fallback; background-color: $*color_bg; margin: 10px; } .border4 { border: 1px solid $*color_bg; } .border3 { border: 1px solid $*color_fg; } .border2 { border: 2px solid $color_border; } """; if($*color_link.as_string != "") { """ A { color: $*color_link; } """; } if($*color_visited.as_string != "") { """ A:Visited { color: $*color_visited; } """; } """ #bodycontent { background-color: $*color_med; border: 1px solid $*color_bg; padding: 3px; } #headerinfo { background-color: $*color_bg; color: $*color_bg_font; text-align: right; font-size: 10px; padding: 2px; margin-top: 1px; } #header { color: $*color_med_font; } #header h3 { font-weight: normal; } #userpic { float: right; } .userpic2 { float: right; text-align: right; margin-top: 2px; margin-right: 3px; } #nav { white-space: nowrap; margin-bottom: 10px; font-size: $*static_font_size$*static_font_measurement; } #nav A { border: 1px solid $*color_bg; padding-left: 10px; padding-right: 10px; padding-top: 2px; padding-bottom: 2px; height: 20px; text-decoration: none; color: $*color_bg_font; background-color: $color_bg_lt; } #nav A:Hover { background-color: $*color_bg; } #content { background-color: $*color_fg; border: 1px solid $color_fg_dk; padding: 4px; } .columncontent { background-color: $color_bg_lt; border: 1px solid $*color_bg; padding: 3px; width: 200px; font-size: $*static_font_size$*static_font_measurement; color: $*color_bg_font; } .columnitem { background-color: $color_fg_dk; padding: 3px; margin-top: 5px; color: $*color_fg_font; border-top: 1px solid $color_divider; border-bottom: 1px solid $color_divider; overflow: hidden; } .entries { color: $*color_fg_font; } .entrydivider { border-top: 1px solid $color_divider; border-bottom: 1px solid $*color_fg; } .minicomment { background-color: $color_fg_dk; padding: 4px; color: $*color_fg_font; border: 1px solid $*color_fg; font-size: $*static_font_size$*static_font_measurement; } .minicommentholder { border: 1px solid $color_divider; } .entryinfo { background-color: $color_fg_dk; font-size: $*static_font_size$*static_font_measurement; padding: 4px; color: $*color_fg_font; } .postedby { background-color: $color_fg_dk; padding: 6px; font-size: $*static_font_size$*static_font_measurement; } .entrylinks { border-bottom: 1px solid $*color_fg; background-color: $color_fg_dk; padding-top: 4px; padding-bottom: 4px; font-size: $*static_font_size$*static_font_measurement; } .entrylinks A { text-decoration: none; padding-top: 4px; padding-bottom: 4px; white-space: nowrap; color: $*color_fg_font; border-right: 1px solid $*color_fg; } .entrylinks A:Hover { background-color: $*color_fg; } .messageholder { border: 1px solid $*color_bg;; margin-bottom: 5px; margin-top: 5px; } .systemmessage { background-color: $color_bg_lt; color: $*color_bg_font; border: 1px solid $color_border; font-size: $*static_font_size$*static_font_measurement; } .systemtext { font-weight: normal; padding-left: 10px; padding-right: 10px; } .systemmessage A { text-decoration: none; padding-left: 10px; padding-right: 10px; color: $*color_bg_font; padding-top: 4px; padding-bottom: 4px; } .systemmessage A:Hover { background-color: $*color_bg; } .systemmessage input, .systemmessage textarea, .systemmessage select { background-color: $*color_fg; color: $*color_fg_font; } .systemmessage TD { padding: 4px; font-size: $*static_font_size$*static_font_measurement; color: $*color_bg_font; } .entry { margin-bottom: 30px; } .entrytext { margin: 10px; } .subject { font-weight: bold; } .meta { font-size: $*static_font_size$*static_font_measurement; padding: 4px; } .meta A { text-decoration: none; color: $*color_link; } .systemmessage A:Hover { background-color: $*color_bg; } #sidecolumn TD { color: $*color_bg_font; } #sidecolumn A { text-decoration: none; color: $*color_fg_font; } .sidetd { width: 200px; } .backtop { text-align: right; } .backtop A { color: $*color_fg_font; font-size: $*static_font_size$*static_font_measurement; text-decoration: none; padding-bottom: 1px; } #cal A { text-decoration: none; color: $*color_fg_font; } .calrow { clear: both; font-family: Arial, sans-serif; } .calempty { width: 24px; font-size: 11px; margin: 1px; float: left; } .calactitem { float: left; margin: 1px; width: 23px; font-size: 11px; text-align: center; background-color: $color_fg_dk; border-right: 1px solid $color_bg_lt; border-bottom: 1px solid $color_bg_lt; } .calinitem { float: left; margin: 1px; width: 23px; font-size: 11px; text-align: center; border-right: 1px solid $color_fg_dk; border-bottom: 1px solid $color_fg_dk; } .friendcolor { width: 10px; height: 10px; border: 2px solid $*color_fg; } .multiform { font-weight: bold; } .ip { color: $color_fg_dk_dk_font; } .friendname { padding: 4px; text-decoration: none; border-left: 1px solid $*color_fg; border-right: 1px solid $*color_fg; } .bigday { font-size: 2em; color: $color_fg_dk; float: left; font-weight: bolder; } .notablemessage { padding: 4px; } """; } ################################################################################ # # Global functions # function generateDots (string un) : string { var string dots; if($un != "") { foreach var string s ($un) { if($s == "a" or $s == "c" or $s == "e" or $s == "f" or $s == "h" or $s == "k" or $s == "m" or $s == "n" or $s == "p" or $s == "r" or $s == "t" or $s == "v" or $s == "x" or $s == "z") { $dots = $dots + ":"; } elseif($s == " ") { $dots = $dots + " "; } else { $dots = $dots + "."; } } } return $dots; } function print_box (string header, string text) { """
"""; print safe """$header"""; print safe """$text"""; """

"""; } function box_item (string text) : string { return """
$text
\n"""; } function num_comments_in_thread (Comment[] comments) : int { var int total = 0; foreach var Comment c ($comments) { $total = $total + 1; if (size $c.replies > 0) { $total = $total + num_comments_in_thread($c.replies); } } return $total; } ################################################################################ # # Layout specific functions # function Page::lay_print_userpic() { if(defined $.journal.default_pic) { """
$.journal.name
"""; } } function Page::lay_print_username () { var string dots = generateDots($.global_title); """
$.journal.username
$dots
"""; } function Page::lay_print_header () { var string title = $this->title(); """ """; } function Page::lay_print_freetext () { if($*free_text_text != "") { var string text = box_item($*free_text_text); print_box($*free_text_header, $text); } } function Page::print_linklist() { if (size $.linklist <= 0) { return; } var string links; foreach var UserLink l ($.linklist) { if ($l.title) { if ($l.is_heading) { $links = $links + """
$l.title
"""; } else { $links = $links + box_item("""$l.title"""); } } } print_box($*links_header, $links); } function Page::lay_print_calendar () { var YearMonth m = $this->get_latest_month(); var string mon = $m->month_format(); var string text; $text = """ """; foreach var YearWeek w ($m.weeks) { $text = $text + """ """; if($w.pre_empty > 0) { foreach var int empty (1..$w.pre_empty) { $text = $text + """ """; } } foreach var YearDay d ($w.days) { if($d.num_entries > 0) { $text = $text + """ """; } else { $text = $text + """ """; } } $text = $text + "\n"; } $text = $text + "
 $d.day$d.day
"; print_box($mon, $text); } function Page::lay_entry_nav (Entry e) : string { var string line; var string date; if($e.new_day) { $date = $e.time->date_format("short"); } var string time = $e.time->time_format(); var string subject = ($e.subject != "") ? " :: $e.subject" : """ :: $*text_nosubject"""; var string j = ($.view == "friends" and $e.journal.username != $e.poster.username) ? " : $e.journal " : ""; var string item = ($.view == "friends" or $e.journal.username != $e.poster.username) ? $e.poster->as_string() + """$j """ : """$date $time"""; $line = """
$item $subject
"""; return $line; } function Page::lay_print_summary () { #blank because there's shouldn't be a box if there's nothing specific about the page. } function RecentPage::lay_print_summary () { var int count = $*summary_items; if($count == 0) { return; } var string text; foreach var Entry e ($.entries) { if($count > 0) { $text = $text + $this->lay_entry_nav($e); } $count = $count - 1; } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """
+$count more
"""; } print_box($*page_summary_title, $text); } } function EntryPage::lay_print_summary () { var int count = $*summary_items; if($count == 0) { return; } var string text; $text = $this->lay_entry_nav($.entry); $count = $count - 1; foreach var Comment c ($.comments) { if($count > 0) { var string subject = ($c.subject != "") ? $c.subject : """$*text_nosubject """; $text = $text + """
$c.poster :: $subject"""; var int num = num_comments_in_thread($c.replies); if($num > 0) { $text = $text + " [+" + string($num) + "] "; } $text = $text + """
"""; } $count = $count - 1; } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """
+$count more
"""; } if($count != ($*summary_items - 1)) { print_box($*page_summary_title, $text); } } } function YearPage::lay_print_summary () { var int count = $*summary_items; if($count == 0) { return; } var string text; var int num_entries; foreach var YearMonth m ($.months) { if($count > 0) { var string mon = $m->month_format(); if($m.has_entries) { $num_entries = 0; foreach var YearWeek w ($m.weeks) { foreach var YearDay d ($w.days) { $num_entries = $num_entries + $d.num_entries; } } $text = $text + """
$mon [$num_entries entries]
"""; } } $count = $count - 1; } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """
+$count more
"""; } print_box($*page_summary_title, $text); } } function MonthPage::lay_print_summary () { var int count = $*summary_items; if($count == 0) { return; } var string text; foreach var MonthDay d ($.days) { if($count > 0) { var string day = lang_ordinal($d.day); if ($d.has_entries) { $text = $text + """
$day [$d.num_entries entries]
"""; } } } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """
+$count more
"""; } print_box($*page_summary_title, $text); } } function DayPage::lay_print_summary () { var int count = $*summary_items; if($count == 0) { return; } var string text; foreach var Entry e ($.entries) { $text = $text + $this->lay_entry_nav($e); } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """
+$count more
"""; } print_box($*page_summary_title, $text); } } function Page::lay_print_subnav () { # } function RecentPage::lay_print_subnav () { var string back; if($.nav.backward_url != "") { $back = """$*text_back"""; } else { $back = " "; } var string forward; if($.nav.forward_url != "") { $forward = """$*text_forward"""; } else { $forward = " "; } var int start = $.nav.skip; var int end = $.nav.skip + size $.entries; var string text = "Viewing $start - $end"; """
$back $text $forward
"""; } function DayPage::lay_print_subnav () { var string back; if($.prev_url != "") { $back = """$*text_back"""; } else { $back = " "; } var string forward; if($.next_url != "") { $forward = """$*text_forward"""; } else { $forward = " "; } var string text = $.date->date_format("long"); """
$back $text $forward
"""; } function Page::lay_print_sidebar () { $this->lay_print_summary(); $this->print_linklist(); $this->lay_print_freetext(); $this->lay_print_calendar(); } function Page::lay_make_username(Entry e) { """
$e.poster
"""; } function FriendsPage::lay_make_username (Entry e) { var Friend f = $.friends{$e.journal.username}; var string url = $e.poster->base_url(); """
$e.poster.username """; if($e.poster.username != $e.journal.username) { """ $e.journal"""; } """
"""; } function Page::print_entry (Entry e) { print """"""; var string time = $e.time->time_format(); var string date = $e.time->date_format(); var string security; if ($e.security != "") { $security = """"""; } var UserLite name; var string pname; var bool show_name = ($.view == "friends" or $e.poster.username != $.journal.username or $.view == "entry") ? true : false; var bool show_pic = (defined $e.userpic and ($.view == "friends" or $*show_entry_userpic or $e.poster.username != $e.journal.username or $.view == "entry")) ? true : false; """
"""; if($show_pic) { """
$e.poster.name [userpic]
"""; } if($show_name) { $this->lay_make_username($e); } """
$security $date $time
$e.subject

$e.text

"""; $e->print_metadata(); """
back to top
"""; } function CommentInfo::print() { if ($.enabled) { $this->print_postlink(); if ($.count > 0 or $.screened) { $this->print_readlink(); } } } function CommentInfo::print_postlink() { var Page p = get_page(); "   "+($p.view == "friends" ? $*text_post_comment_friends : $*text_post_comment)+"   "; } function CommentInfo::print_readlink { var Page p = get_page(); "   "+ get_plural_phrase($.count, $p.view == "friends" ? "text_read_comments_friends" : "text_read_comments")+ "   "; } ################################################################################ # # EntryPage and Comments # function EntryPage::print_body() { """
"""; $this->print_entry($.entry); if ($this.multiform_on) { $this->print_multiform_start(); } if ($.entry.comments.count > 0) { """
Comments
"""; } if ($.comment_pages.total_subitems > 0) { $.comment_pages->print(); } if ($.entry.comments.enabled) { $this->print_comments($.comments); } if ($.entry.comments.count > 0) { """
"""; $.entry.comments->print(); """
"""; } if ($.comment_pages.total_subitems > 0) { $.comment_pages->print(); } if ($this.multiform_on and ($.entry.comments.count > 0)) { """
"""; $this->print_multiform_actionline(); """
"""; $this->print_multiform_end(); } """
"""; } function EntryPage::print_comments(Comment[] cs) { if (size $cs == 0) { return; } foreach var Comment c ($cs) { if ($c.full) { $this->print_comment($c); } else { $this->print_comment_partial($c); } } } function EntryPage::print_comment(Comment c) { var string datetime; $datetime = $c.time->date_format()+", " + $c.time->time_format(); var string parent; var string thread; if($c.parent_url != "") { $parent = """   $*text_comment_parent   """; } if($c.thread_url != "") { $thread = """   $*text_comment_thread   """; } var string subjecticon; if (defined $c.subject_icon) { $subjecticon = """"""; } var string ip; if ($c.metadata{"poster_ip"}) { $ip = """   """ + $c.metadata{"poster_ip"}; } var string poster = defined $c.poster ? $c.poster->as_string() : "(Anonymous)"; var string pic; if (defined $c.userpic and $*comment_userpic_style != "off") { $pic = """
"""; } var string indent = ($c.depth - 1) * 25 + "px"; """
$pic
$poster $ip
"""; if ($.multiform_on) { """
"""; } var string replyurl; if ($c.frozen) { $replyurl = """   $*text_comment_frozen   """; } else { $replyurl = """   $*text_comment_reply   """; } """
$c.subject

$c.text

"""; if ((size $c.replies) > 0 and $c.replies[0].full == false) { """
\n"""; $this->print_comments($c.replies); "
\n"; } """
back to top
"""; 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() : "(Anonymous)"; var string subj = $c.subject != "" ? $c.subject : """$*text_nosubject"""; var string indent = ($c.depth - 1) * 25 + "px"; """
$poster - $subj
"""; $this->print_comments($c.replies); } function ItemRange::print() { if ($.all_subitems_displayed) { return; } """
"""; print lang_page_of_pages($.current, $.total); " — "; foreach var int i (1..$.total) { if ($i == $.current) { """[$i]"""; } else { var string url_of = $this->url_of($i); "[$i]"; } } """
"""; } ################################################################################ # # ReplyPage # function ReplyPage::print_body() { var EntryLite e = $.replyto; var string poster = defined $e.poster ? $e.poster->as_string() : "(Anonymous)"; var string datetime; var string time = $e.time->time_format(); var string date = $e.time->date_format(); var UserLite name; if(defined $e.userpic and $*comment_userpic_style != "off") { $name = $e.poster; """
"""; if (defined $e.userpic or (defined $e.userpic and $.view == "entry" and $*show_entry_userpic)) { """"""; } """
"""; } """
$name
$time $date
"""; """
$e.subject

$e.text

"""; $.form->print(); """
"""; } function Entry::print_metadata() { var string caption; var string val; var Image i; if ($this.tags) { """
"""; print $this->get_tags_text(); "
"; } if (size $.metadata == 0) { return; } 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 = """$val $val"""; } } println """
$caption: $val
"""; } } ################################################################################ # # RecentPage # function RecentPage::print_body () { """
"""; foreach var Entry e ($.entries) { $this->print_entry($e); } """
"""; } ################################################################################ # # YearPage # function YearPage::print_body { $this->print_year_links(); """
"""; foreach var YearMonth m ($.months) { $this->print_month($m); } """
"""; } function YearPage::print_year_links() { """
"""; foreach var YearYear y ($.years) { if ($y.displayed) { """$y.year"""; } else { """   $y.year   """; } } """
"""; } function YearPage::print_month(YearMonth m) { if (not $m.has_entries) { return; } """
"""; foreach var int d (weekdays()) { """ """; } """ """; foreach var YearWeek w ($m.weeks) { $w->print(); } """
$*lang_dayname_short[$d]
back to top
"""; } function YearWeek::print() { """ """; if ($.pre_empty > 0) { """ """; } foreach var YearDay d ($.days) { var string day = zeropad($d.day, 2); """
$day
"""; if ($d.num_entries > 0) { var string num = $d.num_entries < 10 ? " " + string($d.num_entries) : string($d.num_entries); """
$num
"""; } """ """; } """ """; } ################################################################################ # # MonthPage # function MonthPage::view_title : string { return $.date->date_format($*lang_fmt_month_long); } function MonthPage::print_body { "
"; $.redir->print_hiddens(); var string back; var string forward; if ($.prev_url != "") { $back = """$*text_back"""; } if ($.next_url != "") { $forward = """$*text_forward"""; } var string select; if (size $.months > 1) { $select = "\n"; } """
$back $select $forward
"""; "
"; foreach var MonthDay d ($.days) { if ($d.has_entries) { """
"""; $d->print_subjectlist(); """
back to top
"""; } } } function MonthDay::print_subjectlist() { # Too many tables... foreach var Entry e ($.entries) { print $e.time->time_format("short") + ": "; if ($e.poster.username != $e.journal.username) { $e.poster->print(); " "; } "$e.security_icon"; if ($e.subject != "") { " $e.subject"; } else { """ $*text_nosubject"""; } if ($e.comments.count > 0) { " - " + get_plural_phrase($e.comments.count, "text_read_comments"); } if ($e.comments.screened) { " $*text_month_screened_comments"; } "
\n"; } } ################################################################################ # # DayPage # function DayPage::print_body() { """
"""; if ($.has_entries) { foreach var Entry e ($.entries) { $this->print_entry($e); } } else { "

$*text_noentries_day

"; } """
"""; } ################################################################################ # # Page # function Page::print () { var string title = $this->title(); """ $title """; $this->print_head(); """
"""; $this->lay_print_userpic(); $this->lay_print_username(); $this->lay_print_header(); """
"""; $this->lay_print_sidebar(); """
"""; $this->lay_print_subnav(); $this->print_body(); $this->lay_print_subnav(); """
"""; } function print_theme_preview() { var Color color_bg_lt = getAltColor($*color_bg, "light", 30); var Color color_fg_dk = getAltColor($*color_fg, "dark", 20); var Color color_fg_dk_font = getAltColor($*color_fg_font, "dark", 20); var Color color_divider = getAltColor($color_fg_dk, "dark", 30); var Color color_fg_dk_dk_font = getAltColor($color_fg_dk, "dark", 50); var Color color_border = getAltColor($*color_bg, "light", 90); """
Username - Title

Welcome
This is my new journal using a cool new style!
"""; }