From 7f2f5c342e0a0c031f0710b952c1153037a06cfd Mon Sep 17 00:00:00 2001 From: Shish Date: Sat, 1 Feb 2020 18:22:08 +0000 Subject: [PATCH] r34 theme --- themes/rule34v2/.gitignore | 8 + themes/rule34v2/bg.png | Bin 0 -> 145 bytes themes/rule34v2/favicon.ico | Bin 0 -> 1406 bytes themes/rule34v2/flags/china-flag.png | Bin 0 -> 239 bytes themes/rule34v2/flags/dutch-flag.png | Bin 0 -> 227 bytes themes/rule34v2/flags/english-flag.png | Bin 0 -> 371 bytes themes/rule34v2/flags/finnish-flag.png | Bin 0 -> 218 bytes themes/rule34v2/flags/german-flag.png | Bin 0 -> 154 bytes themes/rule34v2/flags/italian-flag.png | Bin 0 -> 240 bytes themes/rule34v2/flags/norway-flag.png | Bin 0 -> 231 bytes themes/rule34v2/flags/port-flag.png | Bin 0 -> 328 bytes themes/rule34v2/flags/russian-flag.png | Bin 0 -> 220 bytes themes/rule34v2/flags/spain-flag.png | Bin 0 -> 275 bytes themes/rule34v2/flags/swedish-flag.png | Bin 0 -> 152 bytes themes/rule34v2/header.inc | 94 +++++++ themes/rule34v2/home.theme.php | 70 +++++ themes/rule34v2/index.theme.php | 39 +++ themes/rule34v2/menuh.css | 122 ++++++++ themes/rule34v2/page.class.php | 134 +++++++++ themes/rule34v2/rule34_logo_top.png | Bin 0 -> 17886 bytes themes/rule34v2/style.css | 367 +++++++++++++++++++++++++ themes/rule34v2/tag_edit.theme.php | 38 +++ themes/rule34v2/themelet.class.php | 39 +++ themes/rule34v2/upload.theme.php | 30 ++ themes/rule34v2/user.theme.php | 39 +++ 25 files changed, 980 insertions(+) create mode 100644 themes/rule34v2/.gitignore create mode 100644 themes/rule34v2/bg.png create mode 100644 themes/rule34v2/favicon.ico create mode 100644 themes/rule34v2/flags/china-flag.png create mode 100644 themes/rule34v2/flags/dutch-flag.png create mode 100644 themes/rule34v2/flags/english-flag.png create mode 100644 themes/rule34v2/flags/finnish-flag.png create mode 100644 themes/rule34v2/flags/german-flag.png create mode 100644 themes/rule34v2/flags/italian-flag.png create mode 100644 themes/rule34v2/flags/norway-flag.png create mode 100644 themes/rule34v2/flags/port-flag.png create mode 100644 themes/rule34v2/flags/russian-flag.png create mode 100644 themes/rule34v2/flags/spain-flag.png create mode 100644 themes/rule34v2/flags/swedish-flag.png create mode 100644 themes/rule34v2/header.inc create mode 100644 themes/rule34v2/home.theme.php create mode 100644 themes/rule34v2/index.theme.php create mode 100644 themes/rule34v2/menuh.css create mode 100644 themes/rule34v2/page.class.php create mode 100644 themes/rule34v2/rule34_logo_top.png create mode 100644 themes/rule34v2/style.css create mode 100644 themes/rule34v2/tag_edit.theme.php create mode 100644 themes/rule34v2/themelet.class.php create mode 100644 themes/rule34v2/upload.theme.php create mode 100644 themes/rule34v2/user.theme.php diff --git a/themes/rule34v2/.gitignore b/themes/rule34v2/.gitignore new file mode 100644 index 00000000..13c95f72 --- /dev/null +++ b/themes/rule34v2/.gitignore @@ -0,0 +1,8 @@ +*.png +*.jpg +*.gif +*.mp3 +*.html +ad* +ads* +random* diff --git a/themes/rule34v2/bg.png b/themes/rule34v2/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..45e1b42c0a1c035c32141c136f71e2f29837284b GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^{2voo}c)DoCv&E~P zE?)h3(V8cVD}OJQ1S&B1ba4#fn3?QRoakK$BoaJ|O}qvDicJy<1UU;!N(DI+3Q9Z$ p3yVuU6B5F_4ZN6zcuazM7;fE=ZD@7>`v7PJgQu&X%Q~loCII2aFPH!T literal 0 HcmV?d00001 diff --git a/themes/rule34v2/favicon.ico b/themes/rule34v2/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2ec940d8ab3c44d4a5ff81bc44e8a8f6be50881b GIT binary patch literal 1406 zcmeHGJ8#-h6#gI(9w7+{N&0Tncj%kG=_@ULQ_jLxZxu@`M%2mb=BctWRE$=KO3n}o z1|%~enFYxiBEf)UhDz>`!9xcR9Xxb!&rO0l^#@eSvA+AAdwlPAJ{`+Ih@W&CyvFf9 z3M>IwVQ>k{3{f9PW(pAC;!aqb7VMD?|CbNX^Uxpk5&RC|e0R{_>cbw|Fgqs9t_iDW z!TI69_kA>)4Y;lgqirDHQ{isA$ahqfTPl=}j`C1Lt);dQ(T`T?Iw% zWw1teLq@hOqxeCB&ECt~>~Z9vvL?e}ef3+Ndl`_{RaCwzP`;>;-b#=@R#9*3$gxkQ z%l$u9kz*}oO@+3hL;75U&iZ|xh4<4#5Cr3K?(_Zx{_6=)G?osPCK3q>r$Q4%Gz}^d zr4B|pza5(-nw(9A>0Tnca{Tg15+~wUmg!XF!il+a7cZSAie5c(VDZetvE13EI}Z;N zy?Jr-#?#DP=KNyu*(0LaWa0knLkmYA%-khbo=;D+#C(F6WLSt@drV;pr$x%msC4T| zGXH#Liqpt6FLZr1^y;NBL!!nJ-zAC(FB}oJD=4%>A`>4Zwp$(7{>gyEr>hK|A@8x+ Si(K8?*O*O)&F~n1|NlSi%-hKT literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/china-flag.png b/themes/rule34v2/flags/china-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..b54e1c73fe42c367a13f40fbdc7f9ae38dc6550f GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL!VDw@Pn?_qr1%4TLR|kdF#P||@P94C|4xSg zw-{!z7IgxpI14-?i-EKU7`vU!wgWO$JY5_^IIbrr9AIG5uu)^S2o9Lg$f|gzovz1_n=8KbLh*2~7Y=7(qG! literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/dutch-flag.png b/themes/rule34v2/flags/dutch-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..99d69fde982aa639806fa09b5fd178ac3554edf6 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL#0(_ob=X({DV_kI5Z8SS>i_@$&uQLe9kp1c zpBW_1S>O>_45U54*zIJt9grdI>Eal|aXmRfL8zsvk=e0IRKmpI4|_9nO9n&Q6vNPm zqQ?_~%2Z2SBT7;dOH!?pi&B9UgOP!up{}8ku8~QIk)f5bnU#s5wt<0_fx)+JS8kwa c$jwj5OsmALq5XAE3Qz-sr>mdKI;Vst01x*&{Qv*} literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/english-flag.png b/themes/rule34v2/flags/english-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..c171928ba104ce51ccb0d84fd805af5882a205a1 GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL!3-p?Sg6bdQZ@lTA+G-!82J>RsP0cA&rkqn$obvtq_y6zT|KGd!`Sb7pH8qbNd%kw2C2JN#=5iW=uj&fgEW- zn^j9(BT7;dOH!?pi&B9UgOP!uk*)y{nTHq}SQ(jEnHp;w7+4t?WISmB1_P3Y-29Zx ov`UZ$LtUUABa;v#Ln~u5D-%PAhW6JvAP+Nmy85}Sb4q9e0J*G*%K!iX literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/finnish-flag.png b/themes/rule34v2/flags/finnish-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..eddfdba4fa597b4d9ae4f637109c9e84b33cb737 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL$P6TJYPh`sQfvV}A+G=b|F@1>TvR@<87RV8 z;1O92q&>jc?PRtckRjpe;uyklJvpJ~z<~n|lYjjGU(amS7|zac=cGiV`B(Kapc>T@ z*NBpo#FA92_-ZK4Jg> literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/german-flag.png b/themes/rule34v2/flags/german-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9d04f685937b76edff91a1951643ca31db2251 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL#0(_ob=X({DaPU;cPEB*=VV?2Ih+ALA+Cx% z4F7}~{-0&&3`*Js5-jkDEM{Qf76xHPhFNnYfP(BLp1!W^cbM3@R86|x?^y{H68Cg* s4B@z*oS-1o($vU&@r#y0hJp(-gOaxL!#c^$oIoWEp00i_>zopr0KlIlYXATM literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/italian-flag.png b/themes/rule34v2/flags/italian-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..c687ea2bf33486baa572d339ef9b76138a7d9a52 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL!VDw@Pn?_qr1%4TLR=YoUH||8|LfoXKmY$< zQqrDRt78R}VodUOcVYa`q+YZQ(@N{tu;kcfhz`&%as;Vk1 zE-udAmUx_*VVA3PqrCd=2%s9(64!{5l*E!$tK_0oAjM#0U}&goXryao5@KX%Wo%|; qVyJCkU}a$NZQGR_C>nC}Q!>*kacgLQos$C8z~JfX=d#Wzp$PyFr9lq> literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/norway-flag.png b/themes/rule34v2/flags/norway-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9bb5a87224ab431459f708de5dfa9fff153007 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL#0(_ob=X({Db4_&5Z8YUO#lD?S5hh8rz`s$ zBv{}PSq!8-z}W3%wjGe6o=I4RsBTbd5|xj0~-e&8$oewG9lc3=F<) hyK)0XLvDUbW?Cg~4ehUUQh*v5JYD@<);T3K0RU0pJ-Pq@ literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/port-flag.png b/themes/rule34v2/flags/port-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..b883e280bca1827615b1f035c831f34cbdb13bbf GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL!3-p?Sg6bdQpN#3A+8Js3_pNu4Tc{-7#b=V z7(5snIv5xN7;Z2CMSi?sU??bHV5neFFkq07kZ=Gp1sEis9*_cRVNCLNcVXyYmGuB} zI14-?i-9zV?ZM!7GTRQw@bPqU43W6J^@1f|gMk3EgLJW_%)|fddzD-mZ?-Arxo1am z+dNc%q10^BW^{G7<%Fm2qM|3}sIQ#L`)!`Y3C3H?i#9lj|I~Z^rP)4+q2egx&7}2{ zfsSKPEpd$~Nl7e8wMs5Z1yT$~28M>ZhDN$ZCLuo#lCWhJu237_J-?m)=dIU*B cZhlH;S|x4`?XPoEfEpM)UHx3vIVCg!0EI|jbpQYW literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/russian-flag.png b/themes/rule34v2/flags/russian-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..95333f6f0561059a312feba17fe99a1ab812c743 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL#0(_ob=X({Db4_&5ZC|z|MNJ``VZu$>V5(V z7I;J!18EO1b~~AE2V{tQx;Tb#Tu)9=5Nc^^WWM-C%OFF+g_%J~Tlry~FVdQ&MBb@0N=GZ-v9sr literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/spain-flag.png b/themes/rule34v2/flags/spain-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2921f04434c5ee280f2b395e5de25f184cdc68 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL!VDw@Pn?_qq|^g^LR`-=GyfJmH(ck1GR7#ctjQhX%8@VJDF_f9Rag8WRNi0dVN-jzTQVd20hK9O^M!H5OAx4H)#%5L~hS~-ORt5&&wq3b_ dq9HdwB{QuOw}$rDIVnI544$rjF6*2UngG`FRK@@R literal 0 HcmV?d00001 diff --git a/themes/rule34v2/flags/swedish-flag.png b/themes/rule34v2/flags/swedish-flag.png new file mode 100644 index 0000000000000000000000000000000000000000..b0e4a76018bac866127035bfd6d633b93173f17b GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoL$P6TJYPh`sQjEnx?oJHr&dIz4a@YcVLR|SG zm)*UlZW`|73l!lj@Q5sCU=SAqVaD|Nmq3QFmw5WRvfp81=TcReV486SC?w(O;uykl rJvpJ`00Ya8j{pDvn=cTqC}m){bzP!##VzrEpc)2GS3j3^P6 + + + logo + + + + +
+ +  Sidebar  + + + logo + + + + + + + +
+ + + + + + + + + diff --git a/themes/rule34v2/home.theme.php b/themes/rule34v2/home.theme.php new file mode 100644 index 00000000..b44a96f0 --- /dev/null +++ b/themes/rule34v2/home.theme.php @@ -0,0 +1,70 @@ +set_mode("data"); + $page->add_auto_html_headers(); + $hh = $page->get_all_html_headers(); + $page->set_data( + << + + $sitename + + + $hh + + + + + + $body + + +EOD +); + } + + public function build_body(string $sitename, string $main_links, string $main_text, string $contact_link, $num_comma, string $counter_text) + { + $main_links_html = empty($main_links) ? "" : ""; + $message_html = empty($main_text) ? "" : "
$main_text
"; + $counter_html = empty($counter_text) ? "" : "
$counter_text
"; + $contact_link = empty($contact_link) ? "" : "
Contact –"; + $search_html = " + + "; + return " +
+

$sitename

+ $main_links_html + $search_html + $message_html + $counter_html + +
"; + } +} diff --git a/themes/rule34v2/index.theme.php b/themes/rule34v2/index.theme.php new file mode 100644 index 00000000..04aab4fe --- /dev/null +++ b/themes/rule34v2/index.theme.php @@ -0,0 +1,39 @@ +can("delete_image") ? "can-del" : ""; + $h_query = html_escape($query); + + $table = "
"; + foreach ($images as $image) { + $table .= $this->build_thumb_html($image); + } + $table .= "
"; + return $table; + } + + public function display_page(Page $page, $images) + { + $this->display_page_header($page, $images); + + $nav = $this->build_navigation($this->page_number, $this->total_pages, $this->search_terms); + if (!empty($this->search_terms)) { + $page->_search_query = $this->search_terms; + } + $page->add_block(new Block("Navigation", $nav, "left", 0)); + + if (count($images) > 0) { + $this->display_page_images($page, $images); + } else { + $this->display_error( + 404, + "No Images Found", + "No images were found to match the search criteria. Try looking up a character/series/artist by another name if they go by more than one. Remember to use underscores in place of spaces and not to use commas. If you came to this page by following a link, try using the search box directly instead. See the FAQ for more information." + ); + } + } +} diff --git a/themes/rule34v2/menuh.css b/themes/rule34v2/menuh.css new file mode 100644 index 00000000..1d96dc42 --- /dev/null +++ b/themes/rule34v2/menuh.css @@ -0,0 +1,122 @@ +/* Begin CSS Drop Down Menu */ + +a:link.menu { color:#FF0000; text-decoration: none; } + +a:visited.menu { color: #FF0000; text-decoration: none; } + +a:hover.menu { color: #FF0000; text-decoration: none; } + +a:active.menu { color: #FF0000; text-decoration: none; } + +#menuh-container + { + font-size: 1em; + float: left; + top:0; + left: 5%; + width: 100%; + margin: 0px; + } + +#menuh + { + font-size: small; + font-family: arial, helvetica, sans-serif; + width:100%; + margin-top: 0px; + } + +#menuh a.sub_option + { + border: 1px solid #555; + /*background-image:url(topban.jpg);*/ + } + +#menuh a + { + text-align: center; + background: #ACE4A3; + display:block; + white-space:nowrap; + margin:0; + margin-top:0; + padding: 0.2em; + } + +#menuh a, #menuh a:visited /* menu at rest */ + { + color: #000099; + text-decoration:none; + } + +#menuh a:hover /* menu at mouse-over */ + { + color: #000000; + } + +#menuh a.top_parent, #menuh a.top_parent:hover /* attaches down-arrow to all top-parents */ + { + /*background-image: url(navdown_white.gif);*/ + background-position: right center; + background-repeat: no-repeat; + } + +#menuh a.parent, #menuh a.parent:hover /* attaches side-arrow to all parents */ + { + /*background-image: url(nav_white.gif);*/ + background-position: right center; + border: 1px solid #555; + background-repeat: no-repeat; + } + +#menuh ul + { + list-style:none; + margin:0; + padding:0; + float:left; + width:9em; /* width of all menu boxes */ + } + +#menuh li + { + position:relative; + min-height: 1px; /* Sophie Dennis contribution for IE7 */ + vertical-align: bottom; /* Sophie Dennis contribution for IE7 */ + } + +#menuh ul ul + { + position:absolute; + z-index:500; + top:auto; + display:none; + padding: 1em; + margin:-1em 0 0 -1em; + } + +#menuh ul ul ul + { + top:0; + left:100%; + } + +div#menuh li:hover + { + cursor:pointer; + z-index:100; + } + +div#menuh li:hover ul ul, +div#menuh li li:hover ul ul, +div#menuh li li li:hover ul ul, +div#menuh li li li li:hover ul ul +{display:none;} + +div#menuh li:hover ul, +div#menuh li li:hover ul, +div#menuh li li li:hover ul, +div#menuh li li li li:hover ul +{display:block;} + +/* End CSS Drop Down Menu */ diff --git a/themes/rule34v2/page.class.php b/themes/rule34v2/page.class.php new file mode 100644 index 00000000..6ecb5d71 --- /dev/null +++ b/themes/rule34v2/page.class.php @@ -0,0 +1,134 @@ +get_string('theme', 'default'); + $data_href = get_base_href(); + $contact_link = contact_link(); + $header_html = $this->get_all_html_headers(); + + $left_block_html = ""; + $right_block_html = ""; + $main_block_html = ""; + $head_block_html = ""; + $sub_block_html = ""; + + foreach ($this->blocks as $block) { + switch ($block->section) { + case "left": + $left_block_html .= $block->get_html(true); + break; + case "right": + $right_block_html .= $block->get_html(true); + break; + case "head": + $head_block_html .= "".$block->get_html(false).""; + break; + case "main": + $main_block_html .= $block->get_html(false); + break; + case "subheading": + $sub_block_html .= $block->body; // $block->get_html(true); + break; + default: + print "

error: {$block->header} using an unknown section ({$block->section})"; + break; + } + } + + $debug = get_debug_info(); + + $contact = empty($contact_link) ? "" : "
Contact"; + $subheading = empty($this->subheading) ? "" : "

{$this->subheading}
"; + + $wrapper = ""; + if (strlen($this->heading) > 100) { + $wrapper = ' style="height: 3em; overflow: auto;"'; + } + + $flash_html = $this->flash ? "".nl2br(html_escape(implode("\n", $this->flash)))."" : ""; + + $generated = autodate(date('c')); + $debug .= "; generated $generated"; + $query = !empty($this->_search_query) ? html_escape(Tag::implode($this->_search_query)) : ""; + + $self = _get_query(); + + # $header_html_thing = file_get_contents("themes/rule34v2/header.inc"); + print << + + + {$this->title} + + + +$header_html + + + + + + + + + + + + $sub_block_html + + + +
+ $flash_html + + $main_block_html +
+ + + + + + + + + +EOD; + } +} diff --git a/themes/rule34v2/rule34_logo_top.png b/themes/rule34v2/rule34_logo_top.png new file mode 100644 index 0000000000000000000000000000000000000000..98298cb0353771dcf5d3f65610762fba08e3d007 GIT binary patch literal 17886 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"; +} + +.tag_count:before { + content: "("; +} +.tag_count:after { + content: ")"; +} + +#imagelist .blockbody, +#paginator .blockbody { + background: none; + border: none; + box-shadow: none; +} + +#commentlistimage .blockbody, +#commentlistrecent .blockbody { + background: none; + border: none; + box-shadow: none; + padding: 0px; +} + +#commentlistimage .blockbody .comment, +#commentlistrecent .blockbody .comment { + margin-left: 0px; + margin-right: 0px; +} + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* the main part of each page * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +ARTICLE { + margin-left: 276px; + margin-right: 16px; + text-align: center; + height: 1%; + margin-top: 16px; +} +ARTICLE TABLE { + width: 90%; + margin: auto; +} +NAV SECTION:first-child H3 { + margin-top: 0px; +} + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* specific page types * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#pagelist { + margin-top: 32px; +} + +#tagmap A { + padding: 8px 4px 8px 4px; +} + +SECTION>.blockbody, .comment, .setupblock { + background: #ACE4A3; + margin: 8px; + border: 1px solid #7EB977; + padding: 8px; +} + +SECTION>H3 { + text-align: center; + background: #9CD493; + margin: 8px; + border: 1px solid #7EB977; + padding: 8px; +} + +.thumb { + width: 226px; + display: inline-block; + zoom: 1; /* ie6 */ + *display: inline; /* ie6 */ + text-align: center; + margin-bottom: 8px; +} +.thumb IMG { + border: 1px solid #7EB977; + background: #ACE4A3; + padding: 4px; +} + +div#twitter_update_list li { + list-style:none; + padding-bottom:0px; + text-align:left; + margin-top:5px; + margin-bottom:5px; + border: solid 1px #000; + background: url(bg.png); +} + +.username { + font-weight: bold; +} + +#bans TD, .image_info TD { + vertical-align: middle; +} +#bans INPUT { + font-size: 0.85em; +} + +.need-del { + display: none; +} +.can-del .need-del { + display: inline; +} + + +.unread { + color: red; +} + +UL.tagit { + margin: 0px; +} +ul.tagit li.tagit-new { + width: 50px; +} + + +[data-tags~="animated"]>A>IMG { background: #CC00CC; } +[data-ext="mp4"]>A>IMG, +[data-ext="webm"]>A>IMG { background: #0000FF; } + +#menuh-container { + float: none; + width: 500px; + margin: auto; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* responsive overrides * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +@media (max-width: 750px) { + .atoz, #paginator { + font-size: 2em; + } + .header-sites { + display: none; + } + SECTION>.blockbody { + overflow-x: auto; + } +} + +/* responsive padding */ +@media (max-width: 1024px) { + NAV {margin-left: 0px;} + ARTICLE {margin-right: 0px; margin-left: 242px;} +} +@media (max-width: 750px) { + NAV {margin-left: 0px;} + ARTICLE {margin-right: 0px; margin-left: 250px;} +} + +/* responsive navbar */ +#nav-toggle {display: none;} +@media (max-width: 750px) { + TD#nav-toggle {display: table-cell; width: 40px;} + #nav-toggle A {border: 1px solid black; border-radius: 8px;} + #nav-toggle A:hover {text-decoration: none;} + + NAV>SECTION>.blockbody, + NAV>SECTION>.blockbody>.comment { + margin: 0px; + } + NAV>SECTION>H3 { + margin: 0px; + } + + BODY.navHidden #menuh-container {display: none;} + BODY.navHidden NAV {display: none;} + BODY.navHidden ARTICLE {margin-left: 0px;} + +/* + NAV { + position: fixed; + top: 6.5em; + bottom: 0px; + overflow-y: scroll; + } + */ +} + +/* sticky header */ +@media (max-width: 750px) { + BODY.navHidden {padding-top: 5.4em} +} +@media (max-width: 750px) { + #header {position: fixed; top: 0px; left: 0px; z-index: 99999999999;} + .ui-autocomplete {z-index: 999999999999;} + BODY {padding-top: 7em} +} + +/* responsive header */ +#Uploadleft {display: none;} +#Uploadhead {display: block;} +#UserBlockleft {display: none;} +#UserBlockhead {display: block;} +#Loginleft {display: none;} +#Loginhead {display: block;} +.headcol {width: 250px; font-size: 0.85em;} +.headbox {width: 80%; margin: auto;} +#big-logo {display: table-cell;} +#mini-logo {display: none;} +@media (max-width: 1024px) { + #Uploadleft {display: block;} + #Uploadhead {display: none;} + #UserBlockleft {display: block;} + #UserBlockhead {display: none;} + #Loginleft {display: block;} + #Loginhead {display: none;} + .headcol {display: none;} + .headbox {width: 100%; margin: auto;} + #big-logo {display: none;} + #mini-logo {display: table-cell; width: 100px;} + + /* hide nav-search when header-search is sticky */ + ARTICLE {margin-top: 0px;} + #Navigationleft .blockbody {font-size: 1.5em;} + #Navigationleft .blockbody P, + #Navigationleft .blockbody FORM + {display: none;} +} + +/* responsive comments */ +.comment_list_table {width: 100%;} + +/* responsive misc */ +@media (max-width: 750px) { + #shm-main-image { max-width: 95%; } +} + +#ed91727bc9c7a73fdcec6db562e63151main { + overflow: scroll; +} diff --git a/themes/rule34v2/tag_edit.theme.php b/themes/rule34v2/tag_edit.theme.php new file mode 100644 index 00000000..4e92654e --- /dev/null +++ b/themes/rule34v2/tag_edit.theme.php @@ -0,0 +1,38 @@ +get_tag_list()); + return " + + Tags + + + + + "; + } + + public function get_source_editor_html(Image $image): string + { + global $user; + $h_source = html_escape($image->get_source()); + $f_source = $this->format_source($image->get_source()); + $style = "overflow: hidden; white-space: nowrap; max-width: 350px; text-overflow: ellipsis;"; + return " + + Source Link + + ".($user->can("edit_image_source") ? " +
$f_source
+ + " : " +
$f_source
+ ")." + + + "; + } +} diff --git a/themes/rule34v2/themelet.class.php b/themes/rule34v2/themelet.class.php new file mode 100644 index 00000000..bc7ad99a --- /dev/null +++ b/themes/rule34v2/themelet.class.php @@ -0,0 +1,39 @@ +get("thumb-block:{$image->id}"); + if ($cached) { + return $cached; + } + + $i_id = (int) $image->id; + $h_view_link = make_link('post/view/'.$i_id); + $h_image_link = $image->get_image_link(); + $h_thumb_link = $image->get_thumb_link(); + $h_tip = html_escape($image->get_tooltip()); + $h_tags = strtolower($image->get_tag_list()); + $h_ext = strtolower($image->ext); + + // If file is flash or svg then sets thumbnail to max size. + if ($image->ext === 'swf' || $image->ext === 'svg') { + $tsize = get_thumbnail_size($config->get_int('thumb_width'), $config->get_int('thumb_height')); + } else { + $tsize = get_thumbnail_size($image->width, $image->height); + } + + $html = "
". + ''.$h_tip.''. + '
Image Only'. + " - Ban". + "
\n"; + + // cache for ages; will be cleared in ext/index:onImageInfoSet + $cache->set("thumb-block:{$image->id}", $html, 0); + + return $html; + } +} diff --git a/themes/rule34v2/upload.theme.php b/themes/rule34v2/upload.theme.php new file mode 100644 index 00000000..766ac422 --- /dev/null +++ b/themes/rule34v2/upload.theme.php @@ -0,0 +1,30 @@ +add_block(new Block("Upload", $this->build_upload_block(), "head", 20)); + $page->add_block(new Block("Upload", $this->build_upload_block(), "left", 20)); + } + + public function display_full(Page $page) + { + $page->add_block(new Block("Upload", "Disk nearly full, uploads disabled", "head", 20)); + } + + public function display_page(Page $page) + { + parent::display_page($page); + $html = " + Tagging Guide + "; + $page->add_block(new Block(null, $html, "main", 19)); + } + + protected function build_upload_block(): string + { + $url = make_link("upload"); + return "Upload"; + } +} diff --git a/themes/rule34v2/user.theme.php b/themes/rule34v2/user.theme.php new file mode 100644 index 00000000..80856cdb --- /dev/null +++ b/themes/rule34v2/user.theme.php @@ -0,0 +1,39 @@ +name); + $lines = []; + foreach ($parts as $part) { + $lines[] = "{$part["name"]}"; + } + if (count($lines) < 6) { + $html = implode("\n
", $lines); + } else { + $html = implode(" | \n", $lines); + } + $page->add_block(new Block("Logged in as $h_name", $html, "head", 90, "UserBlockhead")); + $page->add_block(new Block("Logged in as $h_name", $html, "left", 15, "UserBlockleft")); + } + + public function display_login_block(Page $page) + { + global $config; + $html = " +
+ + + + +
Name
Password
+
+ "; + if ($config->get_bool("login_signup_enabled")) { + $html .= "Create Account"; + } + $page->add_block(new Block("Login", $html, "head", 90)); + $page->add_block(new Block("Login", $html, "left", 15)); + } +}