|
@@ -78,18 +78,17 @@ class LA{
|
|
|
|
|
|
public $PageType;
|
|
|
public $CurrentPostID;
|
|
|
+ public $TagID;
|
|
|
|
|
|
function ReadableTime($id){
|
|
|
$dt = DateTime::createFromFormat('YmdHis', $id);
|
|
|
return $dt->format('Y/m/d H:i:s');
|
|
|
}
|
|
|
-
|
|
|
function FullURL(){
|
|
|
return (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ?
|
|
|
"https" : "http") . "://" . $_SERVER['HTTP_HOST'] .
|
|
|
$_SERVER['REQUEST_URI'];
|
|
|
}
|
|
|
-
|
|
|
function T($str){
|
|
|
if(!$this->LanguageAppendix) return $str;
|
|
|
foreach($this->Translations as $entry){
|
|
@@ -375,6 +374,7 @@ sup,sub{line-height:0;}
|
|
|
blockquote{border-left:2px solid %black%;padding-left:0.3em;}
|
|
|
*{box-sizing:border-box;padding:0;margin:0;font-weight:normal;}
|
|
|
b,strong,th{font-weight:bold;}
|
|
|
+select{font-size:inherit;}
|
|
|
.page,.page_gallery{padding:1em;padding-top:0;}
|
|
|
.hidden_on_desktop,.hidden_on_wide{display:none;}
|
|
|
.hidden_on_desktop_force{display:none !important;}
|
|
@@ -423,7 +423,7 @@ display:block;top:0.2em;object-fit:cover;max-width:calc(100% - 1.4em) !important
|
|
|
tr:hover .post_menu_button{opacity:1;}
|
|
|
.post_current_row{background-color:%graybkg%;}
|
|
|
.align_right{text-align:right;}
|
|
|
-.left{display:inline-block;vertical-align:top;width:25%;height:calc(100vh - 5.2em);top:2em;
|
|
|
+.left{display:inline-block;vertical-align:top;width:25%;max-height:calc(100vh - 2.6em);top:2em;
|
|
|
position:sticky;overflow:auto;padding-right:0.2em;padding-bottom:4rem;}
|
|
|
.center{display:inline-block;vertical-align:top;width:50%;padding-left:0.3em;overflow:visible;padding-bottom:4rem;}
|
|
|
.center_wide{display:inline-block;vertical-align:top;width:75%;padding-left:0.3em;overflow:visible;padding-bottom:4rem;}
|
|
@@ -434,7 +434,7 @@ position:sticky;overflow:auto;padding-right:0.2em;padding-bottom:4rem;}
|
|
|
.table_top{position:relative;left:calc(-50% - 0.45em);width:calc(200% + 0.6em);background:%white%;z-index:1;
|
|
|
box-shadow:0px 0px 2em 1em %white%;margin-top:2em;margin-bottom:2em;}
|
|
|
.right{display:inline-block;vertical-align:top;width:25%;position:sticky;top:2em;
|
|
|
-padding-left:0.5em;height:calc(100vh - 2.6em);overflow:auto;padding-bottom:4rem;}
|
|
|
+padding-left:0.5em;max-height:calc(100vh - 2.6em);overflow:auto;padding-bottom:4rem;}
|
|
|
textarea,input[type=text],input[type=password]{width:100%;display:block;font-family:inherit;max-height:60vh;font-size:inherit;}
|
|
|
select,textarea,input[type=text],input[type=password]{background:none;border:none;border-bottom:1px solid %black%;color:%black%;}
|
|
|
.button{background:none;border:none;font-family:inherit;color:%black%;font-size:inherit;font-weight:bold;}
|
|
@@ -539,7 +539,7 @@ no_pop{cursor:unset;}
|
|
|
p{min-height:0.8em;}
|
|
|
.bold,.bold *{font-weight:bold;}
|
|
|
.footer_additional{display:inline-block;width:50%;vertical-align:text-top;white-space:normal;}
|
|
|
-.small_footer{position:sticky;bottom:0em;background-color:%white%;padding-bottom:0.5em;z-index:10;overflow:auto;white-space:nowrap;}
|
|
|
+.small_footer{background-color:%white%;padding-bottom:0.5em;overflow:auto;white-space:nowrap;position:sticky;bottom:0px;}
|
|
|
.top_post_hint{margin-left:1.5em;font-weight:bold;}
|
|
|
.white{color:%white%;}
|
|
|
.full_box{border:1px solid %black% !important;padding:0.3rem;overflow:auto;}
|
|
@@ -597,7 +597,9 @@ animation:anim_loading 1s linear infinite;}
|
|
|
.post_selecting .post *{pointer-events:none;}
|
|
|
.post_selected{background-color:%graybkg%;}
|
|
|
.small_pad{padding-left:0.2em;padding-right:0.2em;}
|
|
|
-.wscroll{scroll-margin:3.5em;}
|
|
|
+.wscroll{scroll-margin:3.5em;padding-left:0.3em;display:none;font-weight:bold;font-size:0.75em;box-shadow: 13em 0em 4em -8em inset %gray%;color:%white%;}
|
|
|
+.wscroll:target{display:block;}
|
|
|
+.wayback_link{display:inline;}
|
|
|
|
|
|
@media screen and (max-width:1000px){
|
|
|
.left{width:35%;}
|
|
@@ -669,10 +671,12 @@ table img{max-width:30vw !important;}
|
|
|
.product_ref{width:100%;display:block;}
|
|
|
.post_dummy > *{width:100%;max-width:25rem;}
|
|
|
.sticky_title{top:1.2em;}
|
|
|
+.small_footer{position:relative;}
|
|
|
#upload_selector{width:100%;}
|
|
|
.focused_post{padding:0.3rem !important;}
|
|
|
.interesting_tbody{background:linear-gradient(90deg, %white%ff, %white%88 10em);}
|
|
|
.wayback_expand{display:block;text-align:center;}
|
|
|
+.wayback_link{display:block;}
|
|
|
}
|
|
|
|
|
|
@media print{
|
|
@@ -1026,14 +1030,16 @@ blockquote{border-left:2px solid black;}
|
|
|
};
|
|
|
if(isset($this->Archive[0])){
|
|
|
usort($this->Archive,$cmpap);
|
|
|
- $this->YearBegin = substr($this->Archive[0]['id'],0,4);
|
|
|
+ $year_begin = substr($this->Archive[0]['id'],0,4);
|
|
|
+ $this->YearBegin = ($year_begin<$this->YearBegin)?$year_begin:$this->YearBegin;
|
|
|
}
|
|
|
if(isset($this->ArchiveHandles[0])){
|
|
|
usort($this->ArchiveHandles,$cmpac);
|
|
|
foreach($this->ArchiveHandles as &$a){
|
|
|
- if(isset($a['list']))usort($a['list'],$cmpap);
|
|
|
- if(($p = &$this->GetPost($a['id']))!=NULL){
|
|
|
- $p['archive'] = $a;
|
|
|
+ if(isset($a['list'])){ usort($a['list'],$cmpap);
|
|
|
+ foreach($a['list'] as &$ver){ $ver['archive']= &$a; } }
|
|
|
+ if(($p = &$this->GetPost($a['id'],true))!=NULL){
|
|
|
+ $p['archive'] = &$a;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1080,7 +1086,7 @@ blockquote{border-left:2px solid black;}
|
|
|
/* marks add here */
|
|
|
$this->Posts[] = $post;
|
|
|
|
|
|
- if(isset($post['comment_to']) && ($target_post = &$this->GetPost($post['comment_to']))){
|
|
|
+ if(isset($post['comment_to']) && ($target_post = &$this->GetPost($post['comment_to'],true))){
|
|
|
if(!isset($target_post['comments']) || !isset($target_post['comments'][0])) $target_post['comments']=[];
|
|
|
$target_post['comments'][]=&$this->Posts[count($this->Posts) - 1];
|
|
|
}
|
|
@@ -1093,6 +1099,7 @@ blockquote{border-left:2px solid black;}
|
|
|
if(isset($this->Posts[0])){
|
|
|
usort($this->Posts,$cmpp);
|
|
|
$this->YearEnd = substr($this->Posts[sizeof($this->Posts)-1]['id'],0,4);
|
|
|
+ $this->YearBegin = substr($this->Posts[0]['id'],0,4);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1136,6 +1143,7 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
$this->SortArchive();
|
|
|
$this->DoneReadArchive=1;
|
|
|
+ $this->UpdateThreadForWayback();
|
|
|
}
|
|
|
|
|
|
function GetThreadForPost(&$post){
|
|
@@ -1144,13 +1152,13 @@ blockquote{border-left:2px solid black;}
|
|
|
$post['tid'] = &$th; $th['first'] = &$post; $th['last'] = &$post;
|
|
|
if(!(isset($post['prev']) || isset($post['next']))) { $this->Threads[] = &$th; return; }
|
|
|
if(isset($post['prev']))for($p = $post['prev']; $p!=NULL; $p = $iterp){
|
|
|
- $np = &$this->GetPost($p); if(!$np) { break; }//err
|
|
|
+ $np = &$this->GetPost($p,true); if(!$np) { break; }//err
|
|
|
$np['tid'] = &$th;
|
|
|
$th['first'] = &$np;
|
|
|
$iterp = isset($np['prev'])?$np['prev']:NULL;
|
|
|
}
|
|
|
if(isset($post['next']))for($p = $post['next']; $p!=NULL; $p = $iterp){
|
|
|
- $np = &$this->GetPost($p); if(!$np) { break; }//err
|
|
|
+ $np = &$this->GetPost($p,true); if(!$np) { break; }//err
|
|
|
$np['tid'] = &$th;
|
|
|
$th['last'] = &$np;
|
|
|
$iterp = isset($np['next'])?$np['next']:NULL;
|
|
@@ -1181,25 +1189,53 @@ blockquote{border-left:2px solid black;}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ function ThreadMakeWayback(&$th){
|
|
|
+ /* TODO: Make before-merge thread array here. */
|
|
|
+ }
|
|
|
+ function AddMergedPosts(&$p, &$array){
|
|
|
+ if(isset($p['archive']) && isset($p['archive']['list'])){
|
|
|
+ foreach($p['archive']['list'] as &$ver){
|
|
|
+ if(isset($ver['merged_from'])&&isset($ver['merged_from'][0])) foreach($ver['merged_from'] as $po){
|
|
|
+ $mp=&$this->GetPost($po); if(isset($mp)){ $array[]=&$mp; $this->AddMergedPosts($mp, $array); } }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(isset($p['merged_from'])&&isset($p['merged_from'][0])) foreach($p['merged_from'] as $po){
|
|
|
+ $mp=&$this->GetPost($po); if(isset($mp)){ $array[]=&$mp; $this->AddMergedPosts($mp, $array); } }
|
|
|
+ }
|
|
|
function FinalizeThread(&$th, $relink_posts=false, $now){
|
|
|
- $nextp=NULL; $arr=[]; $count=0;
|
|
|
+ $nextp=NULL; $arr=[]; $lasttime=NULL;
|
|
|
if(!isset($th['arr'])){
|
|
|
- for($p = &$th['first']; $p!=$this->NULL_POST; $p = &$this->GetPost(isset($p['next'])?$p['next']:NULL)){
|
|
|
- $arr[]=&$p;$count++;
|
|
|
- } $th['count'] = $count;
|
|
|
+ for($p = &$th['first']; $p!=$this->NULL_POST; $p = &$this->GetPost(isset($p['next'])?$p['next']:NULL,true)){
|
|
|
+ $arr[]=&$p;
|
|
|
+ }
|
|
|
+ if(isset($this->WayBack) && $this->DoneReadArchive){ $new_arr=[];
|
|
|
+ foreach($arr as &$p){ $pa = &$this->GetPost($p['id']); if(isset($pa)) $new_arr[]=&$pa; }
|
|
|
+ foreach($arr as &$p){ $this->AddMergedPosts($p,$new_arr); } $arr=&$new_arr; }
|
|
|
$cmppt = function($a, $b){ if ($a['id'] == $b['id']) return 0; return (($a['id'] > $b['id']) ? 1 : -1); };
|
|
|
if(isset($arr[0])){ usort($arr,$cmppt); } $th['arr']=&$arr;
|
|
|
+ $th['count'] = sizeof($th['arr']);
|
|
|
}
|
|
|
- if($relink_posts){
|
|
|
+ if($relink_posts){ $count = $th['count'];
|
|
|
for($i=0; $i<$count; $i++){ if($i>0) $arr[$i]['prev'] = $arr[$i-1]['id']; if($i<$count-1) $arr[$i]['next'] = $arr[$i+1]['id'];
|
|
|
$arr[$i]['tid']=&$th;}
|
|
|
$th['first'] = &$arr[0]; $th['last'] = &$arr[$count-1]; unset($arr[0]['prev']); unset($arr[$count-1]['next']);
|
|
|
}
|
|
|
+ $th['score'] = 0; if(!isset($th['first'])){ return; }
|
|
|
$this->IdentifyThreadCategory($th, $th['first']);
|
|
|
- $lasttime = DateTime::createFromFormat('YmdHis', $th['last']['id']);
|
|
|
+ if(isset($this->WayBack)) $lasttime=$this->WayBack;
|
|
|
+ if(!isset($last_time)) $lasttime = DateTime::createFromFormat('YmdHis', $th['last']['id']);
|
|
|
$diff_days = ($now - date_timestamp_get($lasttime))/3600/24;
|
|
|
$th['score'] = (float)$th['count']*0.2 - min($diff_days,200);
|
|
|
}
|
|
|
+ function SortThreads(){
|
|
|
+ if (!function_exists('cmpt')) {
|
|
|
+ function cmpt($a, $b){
|
|
|
+ if ($a['score'] == $b['score']) return 0;
|
|
|
+ return ($a['score'] > $b['score']) ? -1 : 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ usort($this->Threads,"cmpt");
|
|
|
+ }
|
|
|
function DetectThreads(){
|
|
|
foreach($this->Posts as &$p){
|
|
|
if(isset($p['tid'])) { continue; }
|
|
@@ -1211,17 +1247,59 @@ blockquote{border-left:2px solid black;}
|
|
|
foreach($this->Threads as &$t){
|
|
|
$this->FinalizeThread($t,false,$now);
|
|
|
}
|
|
|
- function cmp($a, $b){
|
|
|
- if ($a['score'] == $b['score']) return 0;
|
|
|
- return ($a['score'] > $b['score']) ? -1 : 1;
|
|
|
+ $this->SortThreads();
|
|
|
+ }
|
|
|
+ function UpdateThreadForWayback(){
|
|
|
+ if(!isset($this->WayBack) || !$this->DoneReadArchive){ return; }
|
|
|
+ foreach($this->Threads as &$t){
|
|
|
+ unset($t['arr']); $this->FinalizeThread($t,true,$this->WayBack);
|
|
|
}
|
|
|
- usort($this->Threads,"cmp");
|
|
|
+ $this->SortThreads();
|
|
|
}
|
|
|
|
|
|
- function &GetPost($id){
|
|
|
+ function &GetMergedPost($id){
|
|
|
+ $this->ReadArchive();
|
|
|
+ $ah = &$this->GetArchiveHandle($id);
|
|
|
+ if(!isset($ah) || !isset($ah['list']) || !isset($ah['list'][0])){ return $this->NULL_POST; }
|
|
|
+ $ver = &$ah['list'][sizeof($ah['list'])-1];
|
|
|
+ if(!isset($ver['merged_into'])) return $this->GetPost($id);
|
|
|
+ [$tp, $tver] = $ver['merged_into'];
|
|
|
+ if(isset($this->WayBack)){
|
|
|
+ if($tver <= $this->WayBack) return $this->GetMergedPost($tp);
|
|
|
+ else return $this->GetPost($id); /* should not happen directly. */
|
|
|
+ }
|
|
|
+ return $this->GetMergedPost($tp);
|
|
|
+ }
|
|
|
+
|
|
|
+ function &GetPost($id, $latest_only=false){
|
|
|
if(!isset($id)) return $this->NULL_POST;
|
|
|
+ $found=&$this->NULL_POST;
|
|
|
if(isset($this->Posts[0])) foreach($this->Posts as &$p){
|
|
|
- if($p&& $p['id'] == $id) { return $p; }
|
|
|
+ if($p&& $p['id'] == $id) { $found = &$p; break; }
|
|
|
+ }
|
|
|
+ if($latest_only || !isset($this->WayBack)){ return $found; }
|
|
|
+ else{
|
|
|
+ if(isset($found)){
|
|
|
+ if(!isset($found['archive'])&&!isset($found['archive']['list']))
|
|
|
+ { if($found['id'] > $this->WayBack) return $this->NULL_POST; else return $found; }
|
|
|
+ $last_ver = &$this->NULL_POST;
|
|
|
+ if(isset($found['archive']['list'][0])) foreach($found['archive']['list'] as &$ver){
|
|
|
+ if($ver['version'] > $this->WayBack) return $last_ver;
|
|
|
+ $last_ver = &$ver;
|
|
|
+ }
|
|
|
+ if(isset($found['version']) && $found['version'] <= $this->WayBack) return $found;
|
|
|
+ else return $last_ver;
|
|
|
+ }else{
|
|
|
+ $ah = &$this->GetArchiveHandle($id); $last_ver = &$this->NULL_POST;
|
|
|
+ if(isset($ah) && isset($ah['list']) && isset($ah['list'][0])) foreach($ah['list'] as &$ver){
|
|
|
+ if($ver['version'] > $this->WayBack) return $last_ver;
|
|
|
+ $last_ver = &$ver;
|
|
|
+ } if(!isset($last_ver['merged_into'])) return $last_ver; else{
|
|
|
+ [$tp, $tver] = $last_ver['merged_into'];
|
|
|
+ if($tver <= $this->WayBack) return $this->NULL_POST;
|
|
|
+ return $last_ver;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
return $this->NULL_POST;
|
|
|
}
|
|
@@ -1243,11 +1321,11 @@ blockquote{border-left:2px solid black;}
|
|
|
if(!isset($ah)) return $this->NULL_POST;
|
|
|
$found = NULL; $last_verp=NULL;
|
|
|
if(isset($ah['list'][0])) foreach($ah['list'] as &$p){
|
|
|
- if(isset($found)){ $next_ver = &$p; $last_ver = $last_verp; return $found; }
|
|
|
+ if(isset($found)){ $next_ver = &$p; $last_ver = &$last_verp; return $found; }
|
|
|
if($p && $p['version'] == $version) { $found = &$p; continue; }
|
|
|
$last_verp = &$p;
|
|
|
}
|
|
|
- if(isset($found)) { $next_ver=NULL; $last_ver = $last_verp; return $found; }
|
|
|
+ if(isset($found)) { $next_ver=NULL; $last_ver = &$last_verp; return $found; }
|
|
|
return $this->NULL_POST;
|
|
|
}
|
|
|
|
|
@@ -1318,7 +1396,7 @@ blockquote{border-left:2px solid black;}
|
|
|
foreach ($this->Posts as &$post){
|
|
|
if(preg_match_all('/<a[^>]*href=[\'\"]\?post=([0-9]{14})[\'\"][^>]*>.*?<\/a>/u',$post['html'],$matches,PREG_SET_ORDER)){
|
|
|
foreach($matches as $m){
|
|
|
- $ref = &$this->GetPost($m[1]);
|
|
|
+ $ref = &$this->GetPost($m[1],true);
|
|
|
if($ref!=NULL){
|
|
|
if(!isset($ref['refs']))$ref['refs']=[];
|
|
|
if(!in_array($post['id'],$ref['refs'])){ $ref['refs'][]=$post['id']; }
|
|
@@ -1359,7 +1437,7 @@ blockquote{border-left:2px solid black;}
|
|
|
|
|
|
function DetachPost(&$th,&$post){
|
|
|
$p0=$p1=NULL;foreach($th['arr'] as $a) echo $a['id']." "; echo ' -'.$post['id']."<br />";
|
|
|
- if(isset($post['prev'])){$p0=&$this->GetPost($post['prev']);} if(isset($post['next'])){$p1=&$this->GetPost($post['next']);}
|
|
|
+ if(isset($post['prev'])){$p0=&$this->GetPost($post['prev'],true);} if(isset($post['next'])){$p1=&$this->GetPost($post['next'],true);}
|
|
|
if(isset($p0)){ $p0['next']=$p1['id']; }else{ $th['first']=$p1['id']; }
|
|
|
if(isset($p1)){ $p1['prev'] =$p0['id']; }else{ $th['last']=$p0['id']; }
|
|
|
foreach($this->Posts as $key => $p){ if ($p==$post) unset($this->Posts[$key]); }
|
|
@@ -1393,7 +1471,7 @@ blockquote{border-left:2px solid black;}
|
|
|
$combined_content = ""; $first_id=NULL;
|
|
|
$this->ReadPosts(); $child_list=[];
|
|
|
foreach($ids as $id){
|
|
|
- if(!preg_match('/[0-9]{14}/u',$id) || $this->GetPost($id)==$this->NULL_POST) continue;
|
|
|
+ if(!preg_match('/[0-9]{14}/u',$id) || $this->GetPost($id,true)==$this->NULL_POST) continue;
|
|
|
if(!isset($first_id)) { $first_id = $id; } else { $combined_content.=PHP_EOL.PHP_EOL."//".$id.PHP_EOL; $child_list[]=$id; }
|
|
|
$combined_content.=$this->EditPost($id, NULL, NULL, NULL, true, NULL, NULL, false, NULL);
|
|
|
}
|
|
@@ -1418,7 +1496,7 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
$p_success = NULL;
|
|
|
if(isset($id_if_edit)){
|
|
|
- $post = &$this->GetPost($id_if_edit);
|
|
|
+ $post = &$this->GetPost($id_if_edit,true);
|
|
|
if($post===$this->NULL_POST) return $this->NULL_POST;
|
|
|
if($get_original_only){
|
|
|
return $post['real_content'];
|
|
@@ -1434,11 +1512,11 @@ blockquote{border-left:2px solid black;}
|
|
|
}else{
|
|
|
if(!isset($content)) return $this->NULL_POST;
|
|
|
$id = date('YmdHis');
|
|
|
- if($this->GetPost($id)!== $this->NULL_POST) return $this->NULL_POST;
|
|
|
+ if($this->GetPost($id,true)!== $this->NULL_POST) return $this->NULL_POST;
|
|
|
$post = [];
|
|
|
$post['id'] = $id;
|
|
|
$post['real_content'] = $content;
|
|
|
- if(isset($reply_to) && ($rep = &$this->GetPost($reply_to))!== $this->NULL_POST){
|
|
|
+ if(isset($reply_to) && ($rep = &$this->GetPost($reply_to,true))!== $this->NULL_POST){
|
|
|
if(!(isset($rep['next']) && $rep['next'])){$rep['next'] = $id; $post['prev'] = $rep['id'];}
|
|
|
else $post['real_content'] = "[引用的文章]($reply_to)".$post['content'];
|
|
|
}
|
|
@@ -1457,7 +1535,7 @@ blockquote{border-left:2px solid black;}
|
|
|
$this->ReadPosts();
|
|
|
$p_success = NULL;
|
|
|
if(isset($id_if_edit)){
|
|
|
- $post = &$this->GetPost($id_if_edit);
|
|
|
+ $post = &$this->GetPost($id_if_edit,true);
|
|
|
if($post===$this->NULL_POST || !isset($post['comment_to'])) return $this->NULL_POST;
|
|
|
if(isset($content)) $post['content'] = $content;
|
|
|
if(isset($comment_to_id)) $post['comment_to'] = $comment_to_id;
|
|
@@ -1467,8 +1545,8 @@ blockquote{border-left:2px solid black;}
|
|
|
}else{
|
|
|
if(!isset($content) || !isset($comment_to_id)) return $this->NULL_POST;
|
|
|
$id = date('YmdHis');
|
|
|
- if($this->GetPost($id)!== $this->NULL_POST) return $this->NULL_POST;
|
|
|
- if(!($to_post=$this->GetPost($comment_to_id))) return $this->NULL_POST;
|
|
|
+ if($this->GetPost($id,true)!== $this->NULL_POST) return $this->NULL_POST;
|
|
|
+ if(!($to_post=$this->GetPost($comment_to_id,true))) return $this->NULL_POST;
|
|
|
$post = []; $post['id'] = $id; $post['content'] = $content; $post['comment_to'] = $comment_to_id;
|
|
|
if(isset($email)) $post['email'] = $email; if(isset($name)) $post['name'] = $name; if(isset($link)) $post['link'] = $link;
|
|
|
if(isset($ip)) $post['ip'] = $ip;
|
|
@@ -1522,10 +1600,14 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
|
|
|
function CanShowPost(&$p){
|
|
|
- if(isset($p['comment_to'])) return false;
|
|
|
+ if(!isset($p) || isset($p['comment_to'])) return false;
|
|
|
$is_mark_exp = (isset($p['tid'])&&isset($p['tid']['exp'])&&$p['tid']['exp']) || (isset($p['mark_value'])&&$p['mark_value']==6);
|
|
|
$is_mark_slf = (isset($p['tid'])&&isset($p['tid']['slf'])&&$p['tid']['slf']) || (isset($p['mark_value'])&&$p['mark_value']==7);
|
|
|
if($is_mark_slf && !$this->LoggedIn){ return false; }
|
|
|
+ if(isset($this->WayBack)){
|
|
|
+ if(isset($p['version'])) { if ($p['version']>$this->WayBack) return false; }
|
|
|
+ else if ($p['id']>$this->WayBack) return false;
|
|
|
+ }
|
|
|
if(!$this->InExperimentalMode){
|
|
|
if(!$this->LoggedIn){
|
|
|
if($is_mark_exp) return false;
|
|
@@ -1582,7 +1664,9 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
if(isset($_GET['set_wayback'])){
|
|
|
if($_GET['set_wayback']!='false'){
|
|
|
- $wayback = date('YmdHis'); setcookie('la_wayback',$wayback); $_COOKIE['la_wayback'] = $wayback;
|
|
|
+ $wayback=$wayback = date('YmdHis');
|
|
|
+ if(preg_match('/[0-9]{14}/u', $_GET['set_wayback'])) $wayback = $_GET['set_wayback'];
|
|
|
+ setcookie('la_wayback',$wayback); $_COOKIE['la_wayback'] = $wayback;
|
|
|
}else{
|
|
|
setcookie('la_wayback', null, -1); unset($_COOKIE['la_wayback']);
|
|
|
}
|
|
@@ -1590,6 +1674,7 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
if(isset($_GET['post'])){
|
|
|
$this->CurrentPostID = $_GET['post'];
|
|
|
+ $this->TagID = $this->CurrentPostID;
|
|
|
}
|
|
|
if(isset($_GET['offset'])){
|
|
|
$this->CurrentOffset = $_GET['offset'];
|
|
@@ -1789,10 +1874,10 @@ blockquote{border-left:2px solid black;}
|
|
|
$this->NeedWriteImages = 1;
|
|
|
if($do_image_redirect) return 0;
|
|
|
}
|
|
|
- //if(isset($_GET['rewrite_styles'])){
|
|
|
+ if(isset($_GET['rewrite_styles'])){
|
|
|
$this->WriteStyles();
|
|
|
- // $redirect='?extras=true'; return 0;
|
|
|
- //}
|
|
|
+ $redirect='?extras=true'; return 0;
|
|
|
+ }
|
|
|
if(isset($_GET['regenerate_thumbnails'])){
|
|
|
$this->RegenerateThumbnails();
|
|
|
$redirect='?extras=true'; return 0;
|
|
@@ -1816,10 +1901,9 @@ blockquote{border-left:2px solid black;}
|
|
|
"$1$2$4 target='_blank'$5$6<sup>↗</sup>$7",$html);
|
|
|
$html = preg_replace("/<p>\s*\@.*?<\/p>/mu","",$html);
|
|
|
$html = preg_replace("/<p>\s*\{\s*INTERESTING\s+(.*?)\}\s*<\/p>/imu","",$html);
|
|
|
- $html = preg_replace("/\/\/([0-9]{14})/imu","<span class='wscroll' id='$1'></span>",$html);
|
|
|
+ $html = preg_replace("/\/\/([0-9]{14})/imu","<span class='wscroll' id='$1'>".$this->T("链接位置")."</span>",$html);
|
|
|
$images = [];
|
|
|
$images_noclick = [];
|
|
|
- $search_str =
|
|
|
$html = preg_replace_callback(
|
|
|
"/(<p>\s*)?(<img([^>]*)src=[\'\"])(images\/([0-9]{14,}\.(jpg|png|jpeg|gif)))([\'\"][^>]*)\/>(\s*<\/p>)?/u",
|
|
|
function($m) use (&$images,&$images_noclick) {
|
|
@@ -2001,22 +2085,42 @@ blockquote{border-left:2px solid black;}
|
|
|
<hr />
|
|
|
<?php if(isset($this->WayBack)){
|
|
|
$time=(isset($_COOKIE['la_wayback']) && preg_match('/[0-9]{14}/u',$_COOKIE['la_wayback']))?$_COOKIE['la_wayback']:date('YmdHis');
|
|
|
- $year=substr($time,0,4);$month=substr($time,4,2);$day=substr($time,6,2);?> <div class='text_highlight'>
|
|
|
+ $year=substr($time,0,4);$month=substr($time,4,2);$day=substr($time,6,2);
|
|
|
+ $hour=substr($time,8,2);$minute=substr($time,10,2);?> <div class='text_highlight'>
|
|
|
<b><span onclick='document.getElementById("wayback_config").classList.toggle("hidden_on_mobile")'>
|
|
|
<div class='wayback_close' onclick='event.stopPropagation()'><a href='<?=$this->GetRedirect()?>&set_wayback=false'>
|
|
|
<span class='hidden_on_mobile'><?=$this->T('退出')?></span>× </a></div>
|
|
|
<?=$this->T('正以过去的日期浏览')?></b><div id='wayback_config' class='wayback_expand hidden_on_mobile'>
|
|
|
- <select id="wayback_year"><?php for($y=$this->YearBegin;$y<=$this->YearEnd;$y++){ ?>
|
|
|
+ <select id="wayback_year" onchange="UpdateWayback()"><?php for($y=$this->YearBegin;$y<=$this->YearEnd;$y++){ ?>
|
|
|
<option value="<?=$y?>"<?=$y==$year?" selected":""?>><?=$y?></option><?php } ?></select>
|
|
|
<br class='hidden_on_desktop' />
|
|
|
- <select id="wayback_month"><?php for($y=1;$y<=12;$y++){ ?>
|
|
|
+ <select id="wayback_month" onchange="UpdateWayback()"><?php for($y=1;$y<=12;$y++){ ?>
|
|
|
<option value="<?=$y?>"<?=$y==$month?" selected":""?>><?=$y?></option><?php } ?></select>
|
|
|
- <select id="wayback_day"><?php for($y=1;$y<=31;$y++){ ?>
|
|
|
+ <select id="wayback_day" onchange="UpdateWayback()"><?php for($y=1;$y<=31;$y++){ ?>
|
|
|
<option value="<?=$y?>"<?=$y==$day?" selected":""?>><?=$y?></option><?php } ?></select>
|
|
|
<br class='hidden_on_desktop' />
|
|
|
- <a href='<?=$this->GetRedirect()?>'><?=$this->T('查看')?> →</a>
|
|
|
- </div>
|
|
|
- </div><?php } ?>
|
|
|
+ <select id="wayback_hour" onchange="UpdateWayback()"><?php for($y=0;$y<=23;$y++){ ?>
|
|
|
+ <option value="<?=$y?>"<?=$y==$hour?" selected":""?>><?=$y?></option><?php } ?></select>:
|
|
|
+ <select id="wayback_minute" onchange="UpdateWayback()"><?php for($y=0;$y<=59;$y++){ ?>
|
|
|
+ <option value="<?=$y?>"<?=$y==$minute?" selected":""?>><?=$y?></option><?php } ?></select>
|
|
|
+ <br class='hidden_on_desktop' />
|
|
|
+ <a id='wayback_see' href='#'><?=$this->T('查看')?> →</a>
|
|
|
+ </div><script>
|
|
|
+ var wbyear=document.querySelector('#wayback_year');
|
|
|
+ var wbmonth=document.querySelector('#wayback_month');
|
|
|
+ var wbday=document.querySelector('#wayback_day');
|
|
|
+ var wbhour=document.querySelector('#wayback_hour');
|
|
|
+ var wbminute=document.querySelector('#wayback_minute');
|
|
|
+ var wbsee=document.querySelector('#wayback_see');
|
|
|
+ getCookie = function(name) { var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
|
|
+ if (match) return match[2]; }
|
|
|
+ function UpdateWayback(){
|
|
|
+ str=getCookie("la_wayback");if(!str.match(/[0-9]{14}/g)){str="".padStart(14,"0");}
|
|
|
+ str = ""+wbyear.value.padStart(2,"0")+wbmonth.value.padStart(2,"0")+wbday.value.padStart(2,"0")
|
|
|
+ +wbhour.value.padStart(2,"0")+wbminute.value.padStart(2,"0")+str.substr(12);
|
|
|
+ wbsee.href='<?=$this->GetRedirect()?>&set_wayback='+str;
|
|
|
+ }
|
|
|
+ </script></div><?php } ?>
|
|
|
</header>
|
|
|
<div id='waiting_bar' style='display:none;'></div>
|
|
|
<script>ShowWaitingBar();window.addEventListener('load',(event) =>{HideWaitingBar();}); </script>
|
|
@@ -2033,8 +2137,9 @@ blockquote{border-left:2px solid black;}
|
|
|
<hr />
|
|
|
<?php if($this->LoggedIn){ ?>
|
|
|
<li><a id='menu_history'><?=$this->T('历史')?></a>
|
|
|
- <a id='menu_edit'><?=$this->T('修改')?></a></li>
|
|
|
- <li>
|
|
|
+ <?php if(!isset($this->WayBack)){ ?>
|
|
|
+ <a id='menu_edit'><?=$this->T('修改')?></a><?php } ?></li>
|
|
|
+ <?php if(!isset($this->WayBack)){ ?><li>
|
|
|
<a id='menu_refer_copy'><?=$this->T('只复制')?></a>
|
|
|
<a id='menu_refer'><?=$this->T('引用')?></a><br class='hidden_on_desktop' />
|
|
|
</li>
|
|
@@ -2058,7 +2163,7 @@ blockquote{border-left:2px solid black;}
|
|
|
name='post_rename_confirm' id='post_rename_confirm' value='<?=$this->T('确认')?>'>
|
|
|
</li>
|
|
|
<hr />
|
|
|
- <li><a id='menu_delete' class='smaller'></a></li>
|
|
|
+ <li><a id='menu_delete' class='smaller'></a></li><?php } ?>
|
|
|
<?php }else{ ?>
|
|
|
<li><a id='menu_history'><?=$this->T('历史')?></a></li>
|
|
|
<?php } ?>
|
|
@@ -2121,7 +2226,7 @@ blockquote{border-left:2px solid black;}
|
|
|
<?php } ?>
|
|
|
<a href='index.php?gallery=default' onclick='ShowWaitingBar()'><?=$this->T('画廊')?></a>
|
|
|
<?php if($this->LoggedIn){ ?>
|
|
|
- | <span class='gray invert_a'><a href='index.php?comments=all'>@</a></span><?php } ?></li>
|
|
|
+ | <span class='gray invert_a'><a href='index.php?comments=al最近l'>@</a></span><?php } ?></li>
|
|
|
<?php $this->SpecialNavigation;if(isset($this->SpecialNavigation) && ($p = &$this->GetPost($this->SpecialNavigation))!=NULL){
|
|
|
echo $this->TranslatePostParts($this->GenerateSinglePost($p, false, false, false, false,$this->NULL_POST));
|
|
|
} ?>
|
|
@@ -2216,13 +2321,13 @@ blockquote{border-left:2px solid black;}
|
|
|
$ht = preg_replace('/<p>\s*\{read_more\}\s*<\/p>/u',"", $ht);
|
|
|
}
|
|
|
if ($strip_tags){
|
|
|
- $ht = strip_tags($ht,'<b><i><h1><h2><h3><h4><p><blockquote>');
|
|
|
+ $ht = strip_tags($ht,'<b><i><h1><h2><h3><h4><p><blockquote><span>');
|
|
|
$ht = preg_replace('/<p>\s*<\/p>/u',"", $ht);
|
|
|
$ht = "<div class='post_ref_main'>".$ht."</div>";
|
|
|
}
|
|
|
else{
|
|
|
if($generate_refs) $ht = $this->GenerateLinkedPosts($ht);
|
|
|
- if($table_out!==$this->NULL_POST){
|
|
|
+ if($table_out!=$this->NULL_POST){
|
|
|
$table = NULL; $ht = $this->ExtractBigTables($ht,$table);
|
|
|
$table_out = $table;
|
|
|
}else{
|
|
@@ -2290,7 +2395,7 @@ blockquote{border-left:2px solid black;}
|
|
|
<?php if($is_product&&!$generate_anchor){echo "</a></div>";} ?>
|
|
|
</div>
|
|
|
<?=$side?"</a>":""?> <?php
|
|
|
- if(!$show_thread_link && $big_table!==$this->NULL_POST && !$side){
|
|
|
+ if(!$show_thread_link && $big_table!=$this->NULL_POST && !$side){
|
|
|
echo "</ul></li><div class='table_top'>".$big_table.'</div>';
|
|
|
?><ul class='print_column'>
|
|
|
<li class='post<?=isset($extra_class_string)?' '.$extra_class_string:''?>' <?=$is_deleted?"data-mark-delete='true'":""?>>
|
|
@@ -2380,7 +2485,7 @@ blockquote{border-left:2px solid black;}
|
|
|
<h2><?=isset($search_term)?$this->T('搜索'):
|
|
|
(isset($category)?("<span class='gray'>".$this->T('分类')."</span> ".
|
|
|
($category=='none'?$this->T('未分类'):$this->T($category))):($this->T('最近')).
|
|
|
- " <span class='gray invert_a hidden_on_print'><a href='index.php?&set_wayback=true'>↶</a> ".
|
|
|
+ " <span class='gray invert_a hidden_on_print'>".//"<a href='index.php?&set_wayback=true'>↶</a>".
|
|
|
($this->LoggedIn?"<a href='index.php?comments=all'>@</a>":"")."</span>")?></h2>
|
|
|
<?php if(isset($search_term)){ ?>
|
|
|
<form action="index.php" method="post" style='display:none;' id='search_form'></form>
|
|
@@ -2403,6 +2508,10 @@ blockquote{border-left:2px solid black;}
|
|
|
$i = 0;
|
|
|
foreach(array_reverse($this->Posts) as &$p){
|
|
|
if(!$this->CanShowPost($p) || $this->SkipProduct($p)) continue;
|
|
|
+ if(isset($p['tid'])){ /* Should always be set. */
|
|
|
+ $th = &$p['tid']; if($p['tid']['count']==0) continue;
|
|
|
+ $p = &$th['last'];
|
|
|
+ }
|
|
|
if(isset($search_term)){
|
|
|
if ($search_term=='' || !preg_match("/".preg_quote($search_term)."/iu", $p['content'])) continue;
|
|
|
}else if(isset($category)){
|
|
@@ -2445,6 +2554,7 @@ blockquote{border-left:2px solid black;}
|
|
|
<?php
|
|
|
$i=0;
|
|
|
foreach($this->Threads as &$th){
|
|
|
+ if(!isset($th['first']) || $th['count']==0){ continue; }
|
|
|
if(!$this->CanShowPost($th['first'])) continue;
|
|
|
if($i>=$this->HotPostCount) break;
|
|
|
$this->MakeSinglePost($th['first'], false, true, "post_preview", true, false, true, false, true, false);
|
|
@@ -2500,8 +2610,10 @@ blockquote{border-left:2px solid black;}
|
|
|
<?php
|
|
|
}
|
|
|
|
|
|
- function MakePostHistoryList(&$ah, &$post,$version=NULL, $show_latest=true){
|
|
|
- $title = $this->T($this->GetPostTitle($post, false)); if(!isset($title)) $title=$this->T('未命名');
|
|
|
+ function MakePostHistoryList(&$ah, &$post,$version=NULL, $show_latest=true){
|
|
|
+ $title = NULL; if(!isset($ah)) { $title=$this->T($this->GetPostTitle($post, false)); }
|
|
|
+ else{ $ver = &$ah['list'][sizeof($ah['list'])-1]; $title= $this->GetPostTitle($ver); }
|
|
|
+ if(!isset($title)) $title=$this->T('未命名');
|
|
|
if(!isset($ah)){ ?>
|
|
|
<h2><?=$this->T('没有历史记录')?></h2>
|
|
|
<span class='omittable_title smaller'><?=$this->T('帖子')?> <a href='?post=<?=$post['id']?>'><?=$title?></a></span><br />
|
|
@@ -2510,8 +2622,9 @@ blockquote{border-left:2px solid black;}
|
|
|
<span class='omittable_title smaller'><?=$this->T('帖子')?> <a href='?post=<?=$ah['id']?>'><?=$title?></a></span><br />
|
|
|
<div class='list'><ul>
|
|
|
<?php $latest_ver=isset($post['version'])?$post['version']:$post['id'];
|
|
|
- if($show_latest){ ?>
|
|
|
- <li class='<?=isset($version)&&$version==$latest_ver?" post_current_row bold":""?>'style='list-style:"";'>
|
|
|
+ $can_show=1; if(isset($this->WayBack) && $latest_ver>$this->WayBack) $can_show=0;
|
|
|
+ if($show_latest && $can_show){ $post['history_displayed']=1; ?>
|
|
|
+ <li class='<?=isset($version)&&$version==$latest_ver?" post_current_row bold":""?>' style='list-style:"";'>
|
|
|
<a href='?post=<?=$this->CurrentPostID?>&history=1&version=<?=$latest_ver?>'><?=$this->ReadableTime($latest_ver)?></a>
|
|
|
<span class='smaller gray'><?=$this->T('长度').' '.strlen($post['content'])?></span>
|
|
|
<?php if(isset($post['merged_from'][0])){ ?><ul><?php foreach($post['merged_from'] as $from){
|
|
@@ -2522,7 +2635,9 @@ blockquote{border-left:2px solid black;}
|
|
|
<span class='smaller gray'><?=$this->T('长度').' '.strlen($ver['content'])?></span></li>
|
|
|
<?php } ?></ul><?php } ?>
|
|
|
</li><?php } ?>
|
|
|
- <?php if(isset($ah['list'][0])) foreach(array_reverse($ah['list']) as &$ver){ ?>
|
|
|
+ <?php if(isset($ah['list'][0])) foreach(array_reverse($ah['list']) as &$ver){
|
|
|
+ if(isset($this->WayBack) && $ver['version']>$this->WayBack) continue;
|
|
|
+ if(isset($ver['history_displayed']) && $ver['history_displayed']) continue; ?>
|
|
|
<li<?=isset($version)&&$version==$ver['version']?" class='post_current_row bold'":""?>>
|
|
|
<a href='?post=<?=$this->CurrentPostID?>&history=1&version=<?=$ver['version']?>'>
|
|
|
<?=$this->ReadableTime($ver['version'])?></a>
|
|
@@ -2557,7 +2672,7 @@ blockquote{border-left:2px solid black;}
|
|
|
}
|
|
|
function MakePostHistory(&$post, $version=NULL){
|
|
|
$ah = &$this->GetArchiveHandle($this->CurrentPostID);
|
|
|
- $p = $post; if(!isset($post)){ $p=&$ah['list'][0]; }
|
|
|
+ $p = &$post; if(!isset($post)){ $p=&$ah['list'][0]; }
|
|
|
$show_latest = isset($ah)?(!isset($ah['list'][sizeof($ah['list'])-1]['merged_into'])):true;
|
|
|
?>
|
|
|
<div class='left hidden_on_mobile history' id='div_left'>
|
|
@@ -2709,26 +2824,34 @@ blockquote{border-left:2px solid black;}
|
|
|
</div>
|
|
|
<?php return true;
|
|
|
}
|
|
|
-
|
|
|
+ function CssNumberID($id){
|
|
|
+ return "#\\3".substr($id,0,1)." ".substr($id,1);
|
|
|
+ }
|
|
|
function MakePostSection(&$post){
|
|
|
- $this->Anchors = []; ?>
|
|
|
+ $this->Anchors = [];
|
|
|
+ if(isset($this->TagID)){ ?><style><?=$this->CssNumberID($this->TagID);?>{display:block;}</style><?php } ?>
|
|
|
<div class='center' id='div_center'>
|
|
|
<h2 class='hidden_on_print'>
|
|
|
<?php $th=NULL; $is_thread = isset($post['tid']['count'])&&$post['tid']['count']>1; if($is_thread){ $th = $post['tid'];?>
|
|
|
<?=$this->T('话题')?> <?php }else{ ?> <?=$this->T('详细')?>
|
|
|
- <?php } ?>
|
|
|
- <a class='clean_a gray' href='<?=$this->GetRedirect()?>&set_wayback=true'>↶</a></h2>
|
|
|
+ <?php } ?></h2>
|
|
|
<?php $cat = NULL;
|
|
|
if($is_thread) { if(isset($th['categories']) && isset($th['categories'][0])){ $cat = $th['categories']; } }
|
|
|
else { if(isset($post['categories']) && isset($post['categories'][0])) { $cat = $post['categories']; } }
|
|
|
- if($this->LoggedIn){ ?><div class='smaller gray hidden_on_print'>
|
|
|
- <?=$this->T('操作')?>
|
|
|
- <a href='javascript:TogglePostSelectMode()'><?=$this->T('合并帖子')?></a>
|
|
|
- <a><?=$this->T('合并话题到')?></a>
|
|
|
- <div style='display:none;' id='merge_post_dialog' class='text_highlight small_pad'>
|
|
|
- <div><?=$this->T('将合并');?> <span id='merge_post_count'></span> <?=$this->T('个帖子');?></div>
|
|
|
- <div class='clean_a bold'><a id='merge_post'><?=$this->T('执行');?></a></div>
|
|
|
+ if($this->LoggedIn && !isset($this->WayBack)){ ?><div class='smaller gray hidden_on_print clean_a'>
|
|
|
+ <a id='merge_cancel' href='javascript:TogglePostSelectMode(false,true);'>
|
|
|
+ <?=$this->T('工具')?></a>:<div class='hidden_on_mobile' style='display:inline'>
|
|
|
+ <span id='merge_post_btn'><a href='javascript:TogglePostSelectMode()'><?=$this->T('合并帖子')?></a></span>
|
|
|
+ | <span id='merge_thread_btn'><a><?=$this->T('合并话题')?></a></span>
|
|
|
</div>
|
|
|
+ <select class='hidden_on_desktop' id='merge_select'
|
|
|
+ onchange="if(this.selectedIndex==1){TogglePostSelectMode(true);}">
|
|
|
+ <option value='-1' selected>--</option>
|
|
|
+ <option value='1'><?=$this->T('合并帖子')?></option>
|
|
|
+ <option value='2'><?=$this->T('合并话题')?></option></select>
|
|
|
+ <div style='display:none;' id='merge_post_dialog' class='text_highlight small_pad'>
|
|
|
+ <div style='display:inline;'><?=$this->T('将合并');?> <span id='merge_post_count'></span> <?=$this->T('个帖子');?></div>
|
|
|
+ <span class='clean_a bold align_right'><a id='merge_post'> <?=$this->T('执行');?></a></span></div>
|
|
|
</div><div class='spacer'></div><?php }
|
|
|
if($cat){ ?>
|
|
|
<p><b><?=$this->T('分类')?></b> | <?php foreach($cat as $c){
|
|
@@ -2756,13 +2879,14 @@ blockquote{border-left:2px solid black;}
|
|
|
} ?>
|
|
|
<div class='smaller align_right'>
|
|
|
<span class='gray'><?=$this->ReadableTime($post['tid']['first']['id']);?></span>
|
|
|
- <br class='hidden_on_desktop' /><?=$this->ReadableTime($post['tid']['last']['id']);?>
|
|
|
+ <br class='hidden_on_desktop' /><?=$this->ReadableTime(isset($post['tid']['last']['version'])?
|
|
|
+ $post['tid']['last']['version']:$post['tid']['last']['id']);?>
|
|
|
</div>
|
|
|
<?php if($this->LoggedIn && (!$this->InExperimentalMode)){ ?>
|
|
|
<div class='post_width_big hidden_on_print'>
|
|
|
<br /><?php $this->MakePostingFields($is_thread?$th['last']['id']:$post['id'], true);?>
|
|
|
</div>
|
|
|
- <?php }
|
|
|
+ <?php }
|
|
|
$this->MakeCommentSection($post);
|
|
|
?>
|
|
|
</ul>
|
|
@@ -3441,7 +3565,7 @@ blockquote{border-left:2px solid black;}
|
|
|
<div class='footer'>
|
|
|
<div style='white-space:nowrap;'>
|
|
|
<div class='footer_additional'>
|
|
|
- <?php if(isset($this->ExpFooter) && ($p = &$this->GetPost($this->ExpFooter))!=NULL){
|
|
|
+ <?php if(isset($this->ExpFooter) && ($p = &$this->GetPost($this->ExpFooter,true))!=NULL){
|
|
|
echo $this->TranslatePostParts($this->GenerateSinglePost($p, false, false, false, false,$this->NULL_POST,false));
|
|
|
} ?>
|
|
|
</div>
|
|
@@ -3464,6 +3588,9 @@ blockquote{border-left:2px solid black;}
|
|
|
<b><?=$this->T($this->Title)?></b>
|
|
|
<span onclick='event.stopPropagation()'
|
|
|
ondblclick='javascript:window.location.href="index.php?settings=true"'>©</span><?=$this->T($this->DisplayName)?>
|
|
|
+ <?php if(!isset($this->WayBack)){ ?><div class='wayback_link clean_a invert_a'>
|
|
|
+ <a class='hidden_on_print' href='<?=$this->GetRedirect()?>&set_wayback=true'><?=$this->T('以过去的日期浏览')?></a></div>
|
|
|
+ <?php } ?>
|
|
|
</div>
|
|
|
<div class='footer'>
|
|
|
<div style='white-space:nowrap;'>
|
|
@@ -3559,19 +3686,24 @@ blockquote{border-left:2px solid black;}
|
|
|
trans.href='https://translate.google.com/translate?sl=auto&tl=en-US&u='+encodeURIComponent(document.location.href);
|
|
|
}
|
|
|
<?php if($this->LoggedIn){ ?>
|
|
|
- <?php if($this->PageType=='post') { ?>
|
|
|
+ <?php if($this->PageType=='post' && !isset($this->WayBack)) { ?>
|
|
|
var Scenter = document.querySelector('#div_center');
|
|
|
var Sposts = Scenter.querySelectorAll('.post');
|
|
|
var Smerge_post_dialog = Scenter.querySelector('#merge_post_dialog');
|
|
|
var Smerge_post = Scenter.querySelector('#merge_post');
|
|
|
var Smerge_post_count = Smerge_post_dialog.querySelector('#merge_post_count');
|
|
|
+ var Smerge_post_btn = Scenter.querySelector('#merge_post_btn');
|
|
|
+ var Smerge_cancel = Scenter.querySelector('#merge_cancel');
|
|
|
+ var Smerge_select = Scenter.querySelector('#merge_select');
|
|
|
var select_mode = false; var selected_posts = null;
|
|
|
- function TogglePostSelectMode(){
|
|
|
+ function TogglePostSelectMode(force_on=false,force_off=false){
|
|
|
Scenter.classList.add('post_selecting');
|
|
|
- if(!select_mode){ select_mode = 1; Scenter.classList.add('post_selecting');
|
|
|
- Smerge_post_dialog.style.display="block"; }
|
|
|
+ if((!select_mode || force_on) && !force_off){ select_mode = 1; Scenter.classList.add('post_selecting');
|
|
|
+ Smerge_post_dialog.style.display="block";Smerge_post_btn.classList.add('text_highlight');
|
|
|
+ Smerge_cancel.innerText='<?=$this->T("取消")?>';}
|
|
|
else{ select_mode = 0; Scenter.classList.remove('post_selecting');
|
|
|
- Smerge_post_dialog.style.display="none"; }
|
|
|
+ Smerge_post_dialog.style.display="none";Smerge_post_btn.classList.remove('text_highlight');
|
|
|
+ Smerge_cancel.innerText='<?=$this->T("工具")?>';Smerge_select.selectedIndex='0'; }
|
|
|
for(var i=0;i<Sposts.length;i++){ Sposts[i].classList.remove('post_selected');
|
|
|
Sposts[i].onclick=select_mode?function(){TogglePostSelect(this);}:null; }
|
|
|
Smerge_post_count.innerText="0";
|
|
@@ -3698,7 +3830,7 @@ blockquote{border-left:2px solid black;}
|
|
|
});
|
|
|
hs = menu.querySelector('#menu_history');
|
|
|
hs.href='?post='+id+'&history=1';
|
|
|
- <?php if($this->LoggedIn){ ?>
|
|
|
+ <?php if($this->LoggedIn && !isset($this->WayBack)){ ?>
|
|
|
menu.querySelector('#menu_refer').href='javascript:MakeRefer(id)';
|
|
|
menu.querySelector('#menu_refer_copy').href='javascript:CopyRefer(id)';
|
|
|
ed = menu.querySelector('#menu_edit')
|
|
@@ -4024,7 +4156,7 @@ blockquote{border-left:2px solid black;}
|
|
|
"'> ".$this->T('继续')." </a>";
|
|
|
?>
|
|
|
<div class='center_exp'><?php
|
|
|
- if(isset($this->ExpCaution) && ($p=$this->GetPost($this->ExpCaution)))$this->MakeSinglePostExp($p);
|
|
|
+ if(isset($this->ExpCaution) && ($p=$this->GetPost($this->ExpCaution,true)))$this->MakeSinglePostExp($p);
|
|
|
else echo "<li class='post post_dummy'>".$this->TranslatePostParts("<h1>注意</h1><p>您将进入实验站。</p>")."</li>";
|
|
|
?></div>
|
|
|
<div class='center_exp'><li class='post post_dummy'><p><?=$confirm?></p></li></div>
|
|
@@ -4066,8 +4198,11 @@ if(isset($la->WayBack)){
|
|
|
}
|
|
|
|
|
|
$p = &$la->GetPost($la->CurrentPostID);
|
|
|
+if(!isset($p)){
|
|
|
+ $p = &$la->GetMergedPost($la->CurrentPostID);
|
|
|
+}
|
|
|
|
|
|
-if(!$la->CanShowPost($p)) $p=NULL;
|
|
|
+if(isset($p) && !$la->CanShowPost($p)) $p=NULL;
|
|
|
else{ $la->DoExperimentalTopLink($p); }
|
|
|
|
|
|
$la->MakeHeader($p);
|