index.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. define('N',"\n");
  3. $instpath='/mastostart';
  4. $path=preg_replace('/^'.preg_quote($instpath,'/').'/','',$_SERVER['REQUEST_URI']);
  5. $ndir=preg_match_all('/\//',$path)-1;
  6. $prepath='';
  7. for ($i=0; $i<$ndir; $i++)
  8. $prepath.='../';
  9. if (strlen($path)>0) {
  10. while ($path[strlen($path)-1]=='/') {
  11. $path=substr($path,0,-1);
  12. if (strlen($path)<1)
  13. break;
  14. }
  15. }
  16. $supplangs=['ca','en','es','fr','it'];
  17. if (preg_match('#/('.implode('|',$supplangs).')$#',$path,$lang)===1) {
  18. $dlang=$lang[1];
  19. $path=substr($path,0,-3);
  20. } else {
  21. $dlang=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
  22. $dlang=in_array($dlang,$supplangs) ? $dlang : 'en';
  23. }
  24. $menu=array(
  25. 'guide'=>array('liadd'=>null, 'href'=>$instpath.'/'.$dlang, 'title'=>'Guide', 'selected'=>false, 'submenu'=>null),
  26. 'instances'=>array('liadd'=>null, 'href'=>$instpath.'/instances/'.$dlang, 'title'=>'Instances', 'selected'=>false, 'submenu'=>null),
  27. 'about'=>array('liadd'=>null, 'href'=>$instpath.'/about/'.$dlang, 'title'=>'About', 'selected'=>false, 'submenu'=>null),
  28. 'language'=>array('liadd'=>null, 'href'=>null, 'title'=>'Language', 'selected'=>false, 'submenu'=>array(
  29. 'ca'=>array('liadd'=>'onmouseover="this.style.cursor=\'pointer\'"', 'href'=>null, 'title'=>'Català', 'selected'=>false, 'submenu'=>null),
  30. 'en'=>array('liadd'=>'onmouseover="this.style.cursor=\'pointer\'"', 'href'=>null, 'title'=>'English', 'selected'=>false, 'submenu'=>null),
  31. 'es'=>array('liadd'=>'onmouseover="this.style.cursor=\'pointer\'"', 'href'=>null, 'title'=>'Español', 'selected'=>false, 'submenu'=>null),
  32. 'fr'=>array('liadd'=>'onmouseover="this.style.cursor=\'pointer\'"', 'href'=>null, 'title'=>'Français', 'selected'=>false, 'submenu'=>null),
  33. 'it'=>array('liadd'=>'onmouseover="this.style.cursor=\'pointer\'"', 'href'=>null, 'title'=>'Italiano', 'selected'=>false, 'submenu'=>null)
  34. )
  35. )
  36. );
  37. foreach ($supplangs as $lang)
  38. $menu['language']['submenu'][$lang]['href']=$instpath.$path.'/'.$lang;
  39. $menu['language']['submenu'][$dlang]['href']=null;
  40. $menu['language']['submenu'][$dlang]['liadd']=null;
  41. $menu['language']['submenu'][$dlang]['selected']=true;
  42. switch ($dlang) {
  43. case 'ca':
  44. $menu['guide']['title']='Guia';
  45. $menu['instances']['title']='Instàncies';
  46. $menu['about']['title']='Info';
  47. $menu['language']['title']='Idioma';
  48. break;
  49. case 'en':
  50. $menu['guide']['title']='Guide';
  51. $menu['instances']['title']='Instances';
  52. $menu['about']['title']='About';
  53. $menu['language']['title']='Language';
  54. break;
  55. case 'es':
  56. $menu['guide']['title']='Guía';
  57. $menu['instances']['title']='Instancias';
  58. $menu['about']['title']='Info';
  59. $menu['language']['title']='Idioma';
  60. break;
  61. case 'fr':
  62. $menu['guide']['title']='Guide';
  63. $menu['instances']['title']='Instances';
  64. $menu['about']['title']='Infos';
  65. $menu['language']['title']='Langue';
  66. break;
  67. case 'it':
  68. $menu['guide']['title']='Guida';
  69. $menu['instances']['title']='Istanze';
  70. $menu['about']['title']='Info';
  71. $menu['language']['title']='Lingua';
  72. break;
  73. }
  74. $data=array(
  75. 'ca.home.atit'=>'Guia',
  76. 'ca.home.desc'=>'A thorough introduction to Mastodon', // needs translation
  77. 'ca.instances.atit'=>'Instàncies',
  78. 'ca.instances.desc'=>'Recommended Mastodon instances', // needs translation
  79. 'ca.about.atit'=>'Info',
  80. 'ca.about.desc'=>'Info about Mastodon Startpage’s authors, contributors, license', // needs translation
  81. 'en.home.atit'=>'Guide',
  82. 'en.home.desc'=>'A thorough introduction to Mastodon',
  83. 'en.instances.atit'=>'Instancias',
  84. 'en.instances.desc'=>'Recommended Mastodon instances',
  85. 'en.about.atit'=>'About',
  86. 'en.about.desc'=>'Info about Mastodon Startpage’s authors, contributors, license',
  87. 'es.home.atit'=>'Guide',
  88. 'es.home.desc'=>'A thorough introduction to Mastodon', // needs translation
  89. 'es.instances.atit'=>'Instances',
  90. 'es.instances.desc'=>'Recommended Mastodon instances', // needs translation
  91. 'es.about.atit'=>'Info',
  92. 'es.about.desc'=>'Info about Mastodon Startpage’s authors, contributors, license', // needs translation
  93. 'fr.home.atit'=>'Guía',
  94. 'fr.home.desc'=>'A thorough introduction to Mastodon', // needs translation
  95. 'fr.instances.atit'=>'Instances',
  96. 'fr.instances.desc'=>'Recommended Mastodon instances', // needs translation
  97. 'fr.about.atit'=>'Infos',
  98. 'fr.about.desc'=>'Info about Mastodon Startpage’s authors, contributors, license', // needs translation
  99. 'it.home.atit'=>'Guida',
  100. 'it.home.desc'=>'Una approfondita introduzione a Mastodon',
  101. 'it.instances.atit'=>'Istanze',
  102. 'it.instances.desc'=>'Istanze Mastodon consigliate',
  103. 'it.about.atit'=>'Info',
  104. 'it.about.desc'=>'Informazioni sugli autori, i collaboratori e la licenza di Mastodon Startpage'
  105. );
  106. switch($path) {
  107. case '':
  108. $cont=array(
  109. 'fp'=>'home_'.$dlang.'.php',
  110. 'atit'=>' - '.$data[$dlang.'.home.atit'],
  111. 'desc'=>$data[$dlang.'.home.desc'],
  112. 'js'=>array('shsum','guideanchors','scrolltrack')
  113. );
  114. $menu['guide']['liadd']='onclick="shsum()" onmouseover="this.style.cursor=\'pointer\'; this.style.textDecoration=\'underline\'" onmouseout="this.style.textDecoration=\'none\'"';
  115. $menu['guide']['href']=null;
  116. $menu['guide']['selected']=true;
  117. break;
  118. case '/instances':
  119. $cont=array(
  120. 'fp'=>'instances_'.$dlang.'.php',
  121. 'atit'=>' - '.$data[$dlang.'.instances.atit'],
  122. 'desc'=>$data[$dlang.'.instances.desc'],
  123. 'js'=>array()
  124. );
  125. $menu['instances']['href']=null;
  126. $menu['instances']['selected']=true;
  127. break;
  128. case '/about':
  129. $cont=array(
  130. 'fp'=>'about_'.$dlang.'.php',
  131. 'atit'=>' - '.$data[$dlang.'.about.atit'],
  132. 'desc'=>$data[$dlang.'.about.desc'],
  133. 'js'=>array()
  134. );
  135. $menu['about']['href']=null;
  136. $menu['about']['selected']=true;
  137. break;
  138. default:
  139. $cont=array(
  140. 'fp'=>'404.php',
  141. 'atit'=>' - 404',
  142. 'desc'=>'Page not found',
  143. 'js'=>array()
  144. );
  145. break;
  146. }
  147. /*
  148. <li><a href="<?php echo($instpath); ?>">Guide</a></li>
  149. <li><a href="instances">Instances</a></li>
  150. <li><a href="about">About us</a></li>
  151. <li onmouseover="chulsh(this,true)" onmouseout="chulsh(this,false)">Language
  152. <ul class="ula" onmouseover="ulsh(this,true)" onmouseout="ulsh(this,false)">
  153. <li><a href="#">English</a></li>
  154. <li><a href="#">Italiano</a></li>
  155. </ul>
  156. </li>
  157. */
  158. $menuout='';
  159. function buildmenu($menu) {
  160. global $menuout;
  161. foreach ($menu as $key=>$arr) {
  162. $menuout.='<li';
  163. if (!is_null($arr['liadd'])) $menuout.=' '.$arr['liadd'];
  164. if (!is_null($arr['submenu'])) $menuout.=' onmouseover="chulsh(this,true)" onmouseout="chulsh(this,false)"';
  165. if ($arr['selected']) $menuout.=' class="hil"';
  166. $menuout.='>';
  167. if (!is_null($arr['href']))
  168. $menuout.='<a href="'.$arr['href'].'">'.$arr['title'].'</a>';
  169. else
  170. $menuout.=$arr['title'];
  171. if (!is_null($arr['submenu'])) {
  172. // qui bisognerebbe aggiungere che a seconda del "livello" imposta class giusta: ula, oppure ulb per livello > 1
  173. $menuout.=N.'<ul class="ula" onmouseover="ulsh(this,true)" onmouseout="ulsh(this,false)">'.N;
  174. buildmenu($arr['submenu']);
  175. $menuout.='</ul>'.N;
  176. }
  177. $menuout.='</li>'.N;
  178. }
  179. }
  180. buildmenu($menu);
  181. //echo(htmlentities($menuout));
  182. $cjrand=rand(0,999999);
  183. ?>
  184. <!DOCTYPE HTML>
  185. <html lang="<?php echo($dlang); ?>">
  186. <head>
  187. <title>Mastodon Startpage<?php echo($cont['atit']); ?></title>
  188. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  189. <meta name="description" content="<?php echo($cont['desc']); ?>">
  190. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  191. <link rel="icon" type="image/png" href="<?php echo($prepath); ?>imgs/icona-32.png" sizes="32x32">
  192. <link rel="icon" type="image/png" href="<?php echo($prepath); ?>imgs/icona-192.png" sizes="192x192">
  193. <link rel="icon" type="image/png" href="<?php echo($prepath); ?>imgs/icona-512.png" sizes="512x512">
  194. <link rel="apple-touch-icon-precomposed" href="<?php echo($prepath); ?>imgs/icona-180.png">
  195. <link rel="stylesheet" type="text/css" href="<?php echo($prepath); ?>theme.css?v=<?php echo($cjrand); ?>">
  196. <?php
  197. foreach ($cont['js'] as $val)
  198. echo('<script language="JavaScript" src="js/'.$val.'.js?v='.$cjrand.'"></script>'.N);
  199. ?>
  200. <script language="JavaScript">
  201. <!--
  202. function chulsh(el,sh) {
  203. if (sh)
  204. el.querySelector('ul').style='display:block';
  205. else
  206. el.querySelector('ul').style='display:none';
  207. }
  208. function ulsh(el,sh) {
  209. if (sh)
  210. el.style='display:block';
  211. else
  212. el.style='display:none';
  213. }
  214. //-->
  215. </script>
  216. </head>
  217. <?php
  218. require($cont['fp']);
  219. ?>
  220. </html>