# -*-s2-*- layerinfo type = "layout"; layerinfo name = "Opal (Maya)"; 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(maya)/layout"; #layerinfo previews = "opal/opal.jpg"; layerinfo source_viewable = 1; layerinfo is_public = 1; ################################################################################ # # 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 = "#00000"; set color_bg_font = "#FFC869"; set color_med = "#00000"; set color_med_font = "#FFC869"; set color_fg = "#000000"; set color_fg_font = "#CFAA00"; set color_link = "#FF0000"; set color_visited = "#AA0000"; } 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"; } function split(string text, string sep): string[] { var int j = 0; var int k = 0; var string[] list = []; foreach var int i(0..$text->length() - 1) { foreach var int m(0..$sep->length() -1) { if($text->substr($i, 1) == $sep->substr($m, 1)) { $list[$k] = $text->substr($j, $i - $j); $j = $i + 1; $k = $k + 1; } } } $list[$k] = $text->substr($j, $text->length() - $j); return $list; } propgroup moder { property string stopwords { des = "Стоп-слова"; } property string[] replacewords { des = "Слова замены"; } property string[] replacewords { des = "Слова замены"; } property string prepositions { des = "Список предлгов"; } set replacewords = ["коко", "кококо", "кудах-тах-тах", "пок-пок-пок", "кукареку", "кудах", "кокок"]; property int pass_word_length { des = "Минимальная длина слова, которое прохдит"; } set pass_word_length = 14; property int start_unicorn_day { des = "Включать макакование юзерпиков после этой даты"; } set start_unicorn_day = 0; property string hosting { des = "Хостинг"; } property string faggots { des = "Список питухов"; } } propgroup maya { property string[] haab { des = "haab monthes"; } #set haab = ["Pop", "Uo", "Zip", "Zotz", "Tzec", "Xul", "Yaxkin", "Mol", "Chen", "Yax", "Zac", "Ceh", "Mac", "Kankin", "Muan", "Pax", "Kayab", "Cumku"]; set haab = ["Поп", "Во", "Сип", "Соц", "Сек", "Шуль", "Йашкин", "Моль", "Чен", "Йаш", "Сак", "Кех", "Мак", "Канкин", "Муан", "Паш", "Кайяб", "Кумху", "Уайеб"]; property string[] tzolkin { des = "tzolkin days"; } #set tzolkin = ["Ahau", "Imix", "Ik", "Akbal", "Kan", "Chicchan", "Cimi", "Manik", "Lamat", "Muluc", "Oc", "Chuen", "Eb", "Ben", "Ix", "Men", "Cib", "Caban", "Etznab", "Caunac"]; set tzolkin = ["Ахау", "Имиш", "Ик'", "Ак'баль", "К'ан", "Чичкан", "Кими", "Маник'", "Ламат", "Мулук", "Ок", "Чуэн", "Эб", "Бен", "Иш", "Мен", "Киб", "Кабан", "Эцнаб", "Кавак"]; property int tzolkin_sweek_length { des = "tzolkin week lenth"; } property int tzolkin_sweek_offset { des = "tzolkin start offset"; } property int haab_offset { des = "haab offset"; } set tzolkin_sweek_length = 13; set tzolkin_sweek_offset = 4; set haab_offset = 348; } set tags_aware = true; function alpha_sum(string text) : int { $text = $text->lower(); var string alphabeth = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщьыъэюя"; var int hash = 0; foreach var int i(0..$text->length() - 1) { foreach var int j(0..$alphabeth->length() - 1) { if($text->substr($i, 1) == $alphabeth->substr($j, 1) and $alphabeth->substr($j, 1) != "") { $hash = $hash + $j; } } } return $hash; } function array_length(string[] a) : int { var int i = 0; foreach var string item($a) { $i = $i + 1; } return $i; } function rooster(string ctext, string[] stopwords) : string { var int length = array_length($*replacewords); var bool stop = false; var string[] words = split($ctext, " <>/-_|.,:+="); $ctext = ""; foreach var string word($words) { $stop = false; var string wlower = $word->lower(); foreach var string stop_word($stopwords){ if($wlower->starts_with($stop_word)) { $stop = true; } } var int sum = alpha_sum($word); if($stop or (($sum % 3) != 0 and not $*prepositions->contains(",$wlower,"))) { var string kokoko = $*replacewords[$sum % $length]; $ctext = "$ctext $kokoko"; } else { $ctext = "$ctext $word"; } } return $ctext; } ################################################################################ # # 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 get_day_of_year(Date d) : int { var int[] month_len = [31,28,31,30,31,30,31,31,30,31,30,31]; var int days = 0; foreach var int i(1 .. $d.month - 1) { $days = $days + $month_len[$i - 1]; } return $days + $d.day; } function get_days_from_date(Date start, Date end) : int { return 365*($end.year - $start.year) + ($end.year - $start.year/4*4)/4 - ($end.year - $start.year/100*100)/100 + ($end.year - $start.year/400*400)/400 - get_day_of_year($start) + get_day_of_year($end); } function get_maya_days(Date end) : int { var Date maya_era; $maya_era.year = -3113; $maya_era.month = 8; $maya_era.day = 13; return get_days_from_date($maya_era, $end); } function get_short_date(Date d) : string { var int days = get_maya_days($d); var int tzolkin_day = ($days + $*tzolkin_sweek_offset) % $*tzolkin_sweek_length; var string tzolkin_day_name = $*tzolkin[$days % 20]; var int haab_day = ($days + $*haab_offset)%365; return "<abbr title='" + string($d.year) + "-" + string($d.month) + "-" + string($d.day) + "'>" + string($tzolkin_day) + " " + $tzolkin_day_name + " " + string($haab_day%20) + " " + $*haab[$haab_day/20] + "</abbr>"; } function get_long_date(Date d) : string { var int days = get_maya_days($d); var string date = ""; foreach var int i(0..4) { var int len = $i == 1? 18: 20; $date = string($days % $len) + ($i == 0? "": "." + $date); $days = $days / $len; } return "<abbr title='" + string($d.year) + "-" + string($d.month) + "-" + string($d.day) + "'>" + $date + "</abbr>"; } function apocalypse_days(Date d) : int { return 20*18*20*20*13 - get_maya_days($d); } function apocalypse_label(Date d) : string { if(apocalypse_days($d) > 0) { return "<small>до конца света осталось</small> <strong><font color=red>" + string(apocalypse_days($d)) + " </font></strong><small>дней</small>"; } else { return "<strong><font color=red>" + string(-apocalypse_days($d)) + " </font></strong><small>дней после конца света</small> "; } } 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) { """ <div class="border4"> <div class="border3"> <div class="border2"> <div class="columncontent"> """; print """<strong>$header</strong>"""; print """$text"""; """ </div> </div> </div> </div> <br /> """; } function box_item (string text) : string { return """<div class="columnitem">$text</div>\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) { """ <div id="userpic"><a href="$*SITEROOT/allpics.bml?user=$.journal.username"><img src="$.journal.default_pic.url" width="$.journal.default_pic.width" height="$.journal.default_pic.height" alt="$.journal.name" title="$.journal.name" border="0" /></a></div> """; } } function Page::lay_print_username () { var string dots = generateDots($.global_title); """ <div id="headerinfo"> $.journal.username <br /> $dots </div> """; } function RecentPage::title() : string { return $.global_title + "(" + $.global_subtitle + ")"; } function EntryPage::title() : string { return $.global_title + "(" + $.global_subtitle + ")" + ($.entry.subject?" — " + $.entry.subject:""); } function ReplyPage::title() : string { return $.global_title + "(" + $.global_subtitle + ")" + ($.entry.subject?" — " + $.entry.subject:""); } function Page::lay_print_header () { var string title = $this->title(); """ <div id="header"> <h3>$title</h3> <div id="nav"> """; foreach var string v ($.views_order) { println "<a href=\""+$.view_url{$v}+"\">"+lang_viewname($v)+"</a>"; } var string website; if($.journal.website_url != "") { $website = """<a href="$.journal.website_url">$.journal.website_name</a>"""; } """ $website </div> </div> """; } 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 + """<div style="margin-top: 4px;"><strong>$l.title</strong></div>"""; } else { $links = $links + box_item("""<a href="$l.url">$l.title</a>"""); } } } 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 = """ <table cellspacing="2" cellpadding="2" border="0" width="100%">"""; foreach var YearWeek w ($m.weeks) { $text = $text + """ <tr>"""; if($w.pre_empty > 0) { foreach var int empty (1..$w.pre_empty) { $text = $text + """ <td class="calempty"> </td>"""; } } foreach var YearDay d ($w.days) { if($d.num_entries > 0) { $text = $text + """ <td class="calactitem"><a href="$d.url">$d.day</a></td>"""; } else { $text = $text + """ <td class="calinitem">$d.day</td>"""; } } $text = $text + "</tr>\n"; } $text = $text + "</table>"; print_box($mon, $text); } function Page::lay_entry_nav (Entry e) : string { var string line; var string date; if($e.new_day) { $date = get_short_date($e.time); } var string time = $e.time->time_format(); var string subject = ($e.subject != "") ? " :: $e.subject" : """ :: <i class="nosubject">$*text_nosubject</i>"""; 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 <a href="#item""" + $e.itemid + """\">""" : """<a href="#item""" + $e.itemid + """\"><strong>$date $time</strong>"""; $line = """<div class="columnitem">$item $subject</a></div>"""; 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 + """<div style="margin-top: 4px;"><strong>+$count more</strong></div>"""; } 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 : """<i class="nosubject">$*text_nosubject</i> """; $text = $text + """<div class="columnitem">$c.poster :: <a href="#$c.anchor">$subject</a>"""; var int num = num_comments_in_thread($c.replies); if($num > 0) { $text = $text + " [+" + string($num) + "] "; } $text = $text + """</div>"""; } $count = $count - 1; } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """<div style="margin-top: 4px;"><strong>+$count more</strong></div>"""; } 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 + """<div class="columnitem"><a href="#anchor$m.month">$mon [$num_entries entries]</a></div>"""; } } $count = $count - 1; } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """<div style="margin-top: 4px;"><strong>+$count more</strong></div>"""; } 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 + """<div class="columnitem"><a href="#anchor$d.day">$day [$d.num_entries entries]</a></div>"""; } } } if($text != "") { if($count < 0) { $count = $count * -1; $text = $text + """<div style="margin-top: 4px;"><strong>+$count more</strong></div>"""; } 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 + """<div style="margin-top: 4px;"><strong>+$count more</strong></div>"""; } print_box($*page_summary_title, $text); } } function Page::lay_print_subnav () { # } function RecentPage::lay_print_subnav () { var string back; if($.nav.backward_url != "") { $back = """<a href="$.nav.backward_url">$*text_back</a>"""; } else { $back = " "; } var string forward; if($.nav.forward_url != "") { $forward = """<a href="$.nav.forward_url">$*text_forward</a>"""; } else { $forward = " "; } var int start = $.nav.skip; var int end = $.nav.skip + size $.entries; var string text = "Viewing $start - $end"; """ <div class="messageholder"><div class="systemmessage"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td width="15%">$back</td> <td width="70%" align="center">$text</td> <td width="15%" align="right">$forward</td> </tr> </table> </div></div> """; } function DayPage::lay_print_subnav () { var string back; if($.prev_url != "") { $back = """<a href="$.prev_url">$*text_back</a>"""; } else { $back = " "; } var string forward; if($.next_url != "") { $forward = """<a href="$.next_url">$*text_forward</a>"""; } else { $forward = " "; } var string text = $.date->date_format("long"); """ <div class="messageholder"><div class="systemmessage"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td width="15%">$back</td> <td width="70%" align="center">$text</td> <td width="15%" align="right">$forward</td> </tr> </table> </div></div> """; } 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) { """ <div class="entryinfo"> $e.poster </div> <div class="entrydivider"></div> """; } function FriendsPage::lay_make_username (Entry e) { var Friend f = $.friends{$e.journal.username}; var string url = $e.poster->base_url(); """ <div class="entryinfo"> <a href="$url/" class="friendname" style="color: $f.fgcolor; background-color: $f.bgcolor;">$e.poster.username</a> """; if($e.poster.username != $e.journal.username) { """ $e.journal"""; } """ </div> <div class="entrydivider"></div> """; } function Page::print_entry (Entry e) { print """<a name="item""" + $e.itemid + """\"></a>"""; var string time = ""; var string date = get_long_date($e.time) + " " + get_short_date($e.time) + ", " + apocalypse_label($e.time); var string security; if ($e.security != "") { $security = """<img src="$e.security_icon.url" align="right" """+ """width="$e.security_icon.width" height="$e.security_icon.height" """+ """alt="[$e.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; """ <div class="entry"> <div class="entrydivider"></div> """; if($show_pic) { """ <div class="userpic2"> <a href="$*SITEROOT/allpics.bml?user=$e.poster.username"><img src="$e.userpic.url" width="$e.userpic.width" height="$e.userpic.height" alt="$e.poster.name [userpic]" title="$e.poster.name [userpic]" border="0" /></a> </div> """; } if($show_name) { $this->lay_make_username($e); } """ <div class="entryinfo">$security $date $time</div> <div class="entrydivider"></div> <div class="entrylinks"> """; $e.comments->print(); foreach var string key (["edit_entry","edit_tags","mem_add","tell_friend"]) { var Link link = $e->get_link($key); if ($link) { """<a href=\"$link.url\"> $link.caption </a>"""; } } """<a href="$e.permalink_url"> $*text_permalink </a> </div> <div class="entrytext"> <div class="subject">$e.subject</div> <p>"""; print $e.text; """</p> """; $e->print_metadata(); """ </div> </div> <div class="backtop"><a href="#top">back to top</a></div> """; } 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(); "<a href=\"$.post_url\"> "+($p.view == "friends" ? $*text_post_comment_friends : $*text_post_comment)+" </a>"; } function CommentInfo::print_readlink { var Page p = get_page(); "<a href=\"$.read_url\"> "+ get_plural_phrase($.count, $p.view == "friends" ? "text_read_comments_friends" : "text_read_comments")+ " </a>"; } ################################################################################ # # EntryPage and Comments # function EntryPage::print_body() { """<div class="entries">"""; $this->print_entry($.entry); if ($this.multiform_on) { $this->print_multiform_start(); } if ($.entry.comments.count > 0) { """ <div class="messageholder"><div class="systemmessage"><div class="notablemessage "><b>Comments</b></div></div></div> """; } if ($.comment_pages.total_subitems > 0) { $.comment_pages->print(); } if ($.entry.comments.enabled) { $this->print_comments($.comments); } if ($.entry.comments.count > 0) { """ <div class="messageholder"> <div class="systemmessage"> <div class="notablemessage "> """; $.entry.comments->print(); """ </div> </div> </div> """; } if ($.comment_pages.total_subitems > 0) { $.comment_pages->print(); } if ($this.multiform_on and ($.entry.comments.count > 0)) { """ <div class="messageholder"> <div class="systemmessage"> <div class="notablemessage "> <div class="multiform"> """; $this->print_multiform_actionline(); """ </div> </div> </div> </div> """; $this->print_multiform_end(); } """</div>"""; } 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[] stopwords = split($*stopwords, ","); var bool stop = false; var string permalink = eurl($c.permalink_url); var int length = array_length($*replacewords); var string lower = $c.text->lower(); var string makaka = ""; if(not defined $c.poster and ($c.text->contains(".svg") or $c.text->contains("000px") or $c.text->contains("userinfo.bml?user=veniamin") or $c.text->length()>20000)) { $makaka = "&makaka=1"; } var string subject = $c.subject; if(not defined $c.poster) { foreach var string stop_word($stopwords){ if($lower->contains($stop_word) or ($c.subject->contains($stop_word) and not $c.subject->starts_with("Re:"))) { $stop = true; } if($c.subject->contains($stop_word) and $c.subject->starts_with("Re:")) { $subject = "Re:"; } } } var string datetime; $datetime = get_short_date($c.time) + ", " + $c.time->time_format(); var string parent; var string thread; if($c.parent_url != "") { $parent = """<a href="$c.parent_url"> $*text_comment_parent </a>"""; } if($c.thread_url != "") { $thread = """<a href="$c.thread_url"> $*text_comment_thread </a>"""; } var string subjecticon; if (defined $c.subject_icon) { $subjecticon = """<img src="$c.subject_icon.url" width="$c.subject_icon.width" height="$c.subject_icon.height" alt="" />"""; } var string ip; if ($c.metadata{"poster_ip"}) { $ip = """ """ + $c.metadata{"poster_ip"}; } foreach var string k ($c.link_keyseq) { var Link link = $c->get_link($k); if ($link.caption=="Delete" and not defined $c.poster) { $ip="""<img src="$*hosting/text_ip/$c.dom_id"/><img height="20px" src="$*hosting/flag/$c.dom_id"/><img height="10px" src="$*hosting/city/$c.dom_id"/>"""; } } var string poster = defined $c.poster ? $c.poster->as_string() : "<b><a rel='nofollow' title='Предыдущее имя' href='$*hosting/next/$c.dom_id/0?url=$permalink'><img alt='Предыдущее имя' src='$*hosting/show_for_owner/$c.dom_id/left-arrow-red.png/empty.png?url=$permalink'></a><img title='Anonymous' src='$*hosting/anon_name/$c.dom_id?url=$permalink&color=red$makaka'><a rel='nofollow' title='Другое имя' href='$*hosting/next/$c.dom_id/1?url=$permalink'><img alt='Другое имя' src='$*hosting/show_for_owner/$c.dom_id/right-arrow-red.png/empty.png?url=$permalink'></a></b>"; var string pic; if (defined $c.userpic and $*comment_userpic_style != "off") { $pic = """<img src="$c.userpic.url" width="$c.userpic.width" height="$c.userpic.height" alt="" />"""; }elseif(not defined $c.poster and -apocalypse_days($c.time) > $*start_unicorn_day) { var string kokoko_param=""; if($stop or $makaka != ""){ $kokoko_param = "&kokoko=1"; } $pic = """<img src="$*hosting/avatar/$c.dom_id?url=$permalink$kokoko_param" width="100px" height="100px" alt="" />"""; } var string indent = ($c.depth - 1) * 25 + "px"; """ <div id='$c.dom_id'> <a name='$c.anchor'></a> <div class="userpic2">$pic</div> <div class="entry" style="margin-left: $indent;"> <div class="entrydivider"></div> <div class="postedby">$poster <span class="ip">$ip</span></div> <div class="entrydivider"></div> <div class="entryinfo">$subjecticon $datetime</div> <div class="entrydivider"></div> """; if ($.multiform_on) { """<div class="entryinfo"><label for="ljcomsel_$c.talkid">$*text_multiform_check</label> """; $c->print_multiform_check(); """</div> <div class="entrydivider"></div> """; } var string replyurl; if ($c.frozen) { $replyurl = """<a href="javascript://"> $*text_comment_frozen </a>"""; } else { $replyurl = """<a href="$c.reply_url"> $*text_comment_reply </a>"""; } """ <div class="entrylinks"> $replyurl """; var string ctext; $ctext = $c.text; if($makaka != "") { $ctext = $ctext->substr(0, 100); $ctext = ehtml($ctext); } if(not defined $c.poster and $makaka=="" and $stop or $*faggots->contains(",$c.poster.username,")) { $ctext = rooster($ctext, $stopwords); $subject = rooster($subject, $stopwords); } if($ip != "") { var int l = $c.text->length(); $ctext = "<h6>Length: $l</h6>$ctext"; } # some links for doing stuff to this comment foreach var string k ($c.link_keyseq) { var Link link = $c->get_link($k); if ($link) { """<a href=\"$link.url\"> $link.caption </a>"""; } } """ <a href="$c.permalink_url"> $*text_permalink </a>$parent$thread </div> <div class="entrytext"> <div class="subject">$subject</div> <p>$ctext</p> </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> <div class="backtop"><a href="#top">back to top</a></div> </div> """; if ((size $c.replies) > 0 and $c.replies[0].full == true) { $this->print_comments($c.replies); } """<!--Stopwords: $*stopwords-->"""; } 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 : """<i class="nosubject">$*text_nosubject</i>"""; var string indent = ($c.depth - 1) * 25 + "px"; """ <div class="entry" style="margin-left: $indent;"><div class="minicommentholder"><div class="minicomment">$poster - <a href="$c.permalink_url">$subj</a></div></div></div> """; $this->print_comments($c.replies); } function ItemRange::print() { if ($.all_subitems_displayed) { return; } """ <div class="messageholder"><div class="systemmessage"><div class="notablemessage "> <b>"""; print lang_page_of_pages($.current, $.total); "</b> — "; foreach var int i (1..$.total) { if ($i == $.current) { """<b class="systemtext">[$i]</b>"""; } else { var string url_of = $this->url_of($i); "<a href='$url_of'><b>[$i]</b></a>"; } } """</div></div></div>"""; } ################################################################################ # # ReplyPage # function ReplyPage::print_body() { var EntryLite e = $.replyto; var string poster = defined $e.poster ? $e.poster->as_string() : "<i>(Anon)</i>"; var string datetime; var string time = $e.time->time_format(); var string date = get_short_date($e.time); var string name; """<div class="userpic2">"""; if(defined $e.userpic and $*comment_userpic_style != "off") { if (defined $e.userpic or (defined $e.userpic and $.view == "entry" and $*show_entry_userpic)) { """<img src="$e.userpic.url" width="$e.userpic.width" height="$e.userpic.height" alt="" />"""; } } elseif(not defined $e.poster) { var string[] parts = split($e.permalink_url, "#"); var string dom_id = $parts[1]; $poster="""<img src="$*hosting/anon_name/ljcm$dom_id?color=red" alt="Имя" />"""; """<img src="$*hosting/avatar/ljcm$dom_id" width="100px" height="100px" alt="" />"""; } """ </div>"""; """ <div class="entry"><script>alert("hello")</script> <div class="entrydivider"></div> <div class="entryinfo">$poster</div> <div class="entrydivider"></div> <div class="entryinfo">$time $date</div> <div class="entrydivider"></div> <div class="entrylinks"> <a href="$.entry.comments.read_url" class="comments">$*text_reply_back</a>"""; foreach var string key (["edit_entry","mem_add","tell_friend"]) { var Link link = $e->get_link($key); if ($link) { """<a href=\"$link.url\">$link.caption</a>"""; } } """<a href="$e.permalink_url">$*text_permalink</a> </div> """; """ <div class="entrytext"> <div class="subject">$e.subject</div> <p>"""; print $e.text; """</p> </div> <div class="messageholder"><div class="systemmessage"> """; $.form->print(); """ </div></div> """; } function Entry::print_metadata() { var string caption; var string val; var Image i; if ($this.tags) { """<div class="meta">"""; print $this->get_tags_text(); "</div>"; } 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 = """<img src="$i.url" width="$i.width" height="$i.height" alt="$val" title="$val" /> $val"""; } } println """<div class="meta">$caption: $val</div>"""; } } ################################################################################ # # RecentPage # function RecentPage::print_body () { """ <div class="entries"> """; foreach var Entry e ($.entries) { $this->print_entry($e); } """ </div> """; } ################################################################################ # # YearPage # function YearPage::print_body { $this->print_year_links(); """<div id="cal">"""; foreach var YearMonth m ($.months) { $this->print_month($m); } """</div>"""; } function YearPage::print_year_links() { """<div class="messageholder"><div class="systemmessage"><div class="notablemessage">"""; foreach var YearYear y ($.years) { if ($y.displayed) { """<b class="systemtext">$y.year</b>"""; } else { """<b><a href="$y.url"> $y.year </a></b>"""; } } """</div></div></div>"""; } function YearPage::print_month(YearMonth m) { if (not $m.has_entries) { return; } """ <a name="anchor$m.month"></a> <div class="entry"> <div class="entrydivider"></div> <div class="entryinfo"> """; print $m->month_format(); """ </div> <div class="entrydivider"></div> <div class="entrylinks"><a href="$m.url"> $*text_view_month </a></div> <div class="entrytext"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> """; foreach var int d (weekdays()) { """ <td width="14%"><div class="bigday">$*lang_dayname_short[$d]</div></td> """; } """ </tr> """; foreach var YearWeek w ($m.weeks) { $w->print(); } """ </table> </div> </div> <div class="backtop"><a href="#top">back to top</a></div> """; } function YearWeek::print() { """ <tr> """; if ($.pre_empty > 0) { """ <td colspan="$.pre_empty"></td> """; } foreach var YearDay d ($.days) { var string day = zeropad($d.day, 2); """ <td> <div class="bigday">$day</div> """; if ($d.num_entries > 0) { var string num = $d.num_entries < 10 ? " " + string($d.num_entries) : string($d.num_entries); """ <div class="calactitem"><a href="$d.url">$num</a></div> """; } """ </td> """; } """ </tr> """; } ################################################################################ # # MonthPage # function MonthPage::view_title : string { return $.date->date_format($*lang_fmt_month_long); } function MonthPage::print_body { "<form method='post' action='$.redir.url'>"; $.redir->print_hiddens(); var string back; var string forward; if ($.prev_url != "") { $back = """<a href="$.prev_url">$*text_back</a>"""; } if ($.next_url != "") { $forward = """<a href="$.next_url">$*text_forward</a>"""; } var string select; if (size $.months > 1) { $select = "<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'"; } $select = $select + "<option value='$mei.redir_key'$sel>" + $mei.date->date_format($*lang_fmt_month_long) + "</option>"; } $select = $select + "</select>\n<input type='submit' value='View' />"; } """ <div class="messageholder"><div class="systemmessage"> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td width="15%">$back</td> <td align="center" width="70%">$select</td> <td align="right" width="15%">$forward</td> </tr> </table> </div></div> """; "</form>"; foreach var MonthDay d ($.days) { if ($d.has_entries) { """ <a name="anchor$d.day"></a> <div class="entry"> <div class="entrydivider"></div> <div class="entrylinks"><a href=\"$d.url\"> <b> """; print lang_ordinal($d.day); """ </b> </a></div> <div class="entries"> <div class="entrytext"> """; $d->print_subjectlist(); """ </div> </div> </div> <div class="backtop"><a href="#top">back to top</a></div> """; } } } 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 != "") { " <a href=\"$e.permalink_url\">$e.subject</a>"; } else { """ <a href="$e.permalink_url"><i class="nosubject">$*text_nosubject</i></a>"""; } if ($e.comments.count > 0) { " - " + get_plural_phrase($e.comments.count, "text_read_comments"); } if ($e.comments.screened) { " <b>$*text_month_screened_comments</b>"; } "<br />\n"; } } ################################################################################ # # DayPage # function DayPage::print_body() { """<div class="entries">"""; if ($.has_entries) { foreach var Entry e ($.entries) { $this->print_entry($e); } } else { "<p>$*text_noentries_day</p>"; } """</div>"""; } ################################################################################ # # Page # function Page::print () { var string title = $this->title(); """ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>$title</title> <link rel="stylesheet" href="$.stylesheet_url" type="text/css" /> <meta name="google-site-verification" content="Souv_Of8Rn9B0NKBgLZHU2xPW2F_-0ghb02Yrp7HO84" /> <meta name='yandex-verification' content='5eee9e7396c5112b' /> <link rel="stylesheet" type="text/css" href="http://wwwzona.ru/media/css/wwwzona_common.css"/> """; $this->print_head(); """ </head> <body> <a name="top"></a> <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td> <div class="border3"> <div class="border2"> <div id="bodycontent"> """; $this->lay_print_userpic(); $this->lay_print_username(); $this->lay_print_header(); """ <div id="content"> <table cellspacing="10" cellpadding="0" border="0"> <tr> <td valign="top" class="sidetd"> <div id="sidecolumn"> """; $this->lay_print_sidebar(); """ </div> </td> <td valign="top" width="100%"> """; $this->lay_print_subnav(); $this->print_body(); $this->lay_print_subnav(); """ </td> </tr> </table> </div> </div> </div> </div> </td> </tr> </table> </body> </html> """; } 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); """ <div style="background-color: $*color_fg; border: 1px solid $color_fg_dk; padding: 4px; width: 210px;"> <div style="border-top: 1px solid $color_divider; border-bottom: 1px solid $*color_fg;"></div> <div style="background-color: $color_fg_dk; font-size: $*static_font_size$*static_font_measurement; padding: 4px; width: 200px;">Username - Title</div> <div style="border-top: 1px solid $color_divider; border-bottom: 1px solid $*color_fg;"></div> <br /> <div style="border: 1px solid $*color_bg; width: 200px;"><div style="border: 1px solid $*color_fg;"><div style="border: 2px solid $color_border;"> <div style="background-color: $color_bg_lt; border: 1px solid $*color_bg; padding: 3px; font-size: $*static_font_size$*static_font_measurement; color: $*color_bg_font;"> <strong>Welcome</strong> <div style="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;">This is my new journal using a cool new style!</div> </div></div></div></div> </div> """; }