1
0

books_view

This commit is contained in:
Mike Schwörer 2018-01-28 01:29:25 +01:00
parent 6db79d9447
commit d16b630e6a
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
53 changed files with 839 additions and 249 deletions

View File

@ -188,6 +188,56 @@ body {
.stripedtable tbody tr:nth-child(odd) {
background-color: #ccc; }
.imgcarousel_parent {
display: flex;
flex-direction: row;
align-content: center;
justify-content: center;
padding: 5px;
background: #BBB; }
.imgcarousel_content {
background-size: contain;
background-position: center;
background-repeat: no-repeat;
height: 100%;
width: 100%; }
.imgcarousel_prev, .imgcarousel_next {
display: flex;
flex-direction: column;
justify-content: center; }
.imgcarousel_prev {
margin-right: 5px; }
.imgcarousel_next {
margin-left: 5px; }
.imgcarousel_prev svg {
width: 48px;
height: 48px;
border: 1px solid black;
background: #333;
fill: #DDD; }
.imgcarousel_next svg {
width: 48px;
height: 48px;
border: 1px solid black;
background: #333;
fill: #DDD; }
.imgcarousel_prev:hover svg {
background: #000;
fill: #FFF;
cursor: pointer; }
.imgcarousel_next:hover svg {
background: #000;
fill: #FFF;
cursor: pointer; }
/* 400px */
#headerdiv {
z-index: 999;
@ -363,6 +413,177 @@ html, body {
.index_pnl_base {
width: 330px; } }
/* 400px */
.aboutcontent {
display: block;
width: 100%; }
.aboutcontent .boxedcontent {
margin-bottom: 20px; }
.about_egh_container {
display: flex;
flex-direction: column;
align-items: center; }
.git_list {
display: inline-block;
width: 715px;
height: 115px;
overflow: visible; }
@media (max-width: 991px) {
.git_list {
width: 100%;
height: auto; }
.extGitGraphContainer {
width: 95%;
width: calc(100% - 16px); } }
.git_list text.caption {
font-size: 10px;
fill: #666; }
.git_list text.caption_month {
font-size: 8px;
fill: #BBB; }
.git_list text.caption_day {
font-size: 8px;
fill: #BBB; }
.svg-tip:after {
box-sizing: border-box;
position: absolute;
left: 50%;
height: 5px;
width: 5px;
bottom: -10px;
margin: 0 0 0px -5px;
content: " ";
border: 5px solid transparent;
border-top-color: rgba(0, 0, 0, 0.8);
-moz-border-top-colors: none;
-moz-border-right-colors: none;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
border-image: none; }
.svg-tip {
padding: 5px;
background: none repeat scroll 0 0 rgba(0, 0, 0, 0.8);
color: #BBB;
font-size: 12px;
position: absolute;
z-index: 99999;
text-align: center;
border-radius: 3px;
box-sizing: border-box;
opacity: 0; }
.extGitGraphContainer {
background-color: #FCFCFC;
margin: 10px;
display: inline-block;
border: 1px solid #222;
border-radius: 0;
box-shadow: 0 0 1px rgba(0, 0, 0, 0.25) inset; }
.egg_footer {
margin-top: 5px;
text-align: right;
margin-right: 5px;
margin-bottom: 5px;
color: #888; }
.egg_footer > a {
text-decoration: none;
color: inherit; }
.egg_footer > a:hover {
text-decoration: none;
color: #22F; }
.about_circles {
display: flex;
flex-direction: column; }
.about_circles a {
margin: 5px 0; }
.about_circles .iconbutton_light span {
text-align: left; }
/* 400px */
.admincontent {
display: block;
width: 100%; }
.admincontent .boxedcontent {
margin-bottom: 20px; }
.egh_ajaxOutput {
display: flex;
box-sizing: border-box;
width: 100%;
align-self: center;
justify-self: center;
margin-left: auto;
margin-right: auto;
resize: none;
height: 300px; }
.keyvaluelist {
display: flex;
flex-direction: column; }
.keyvaluelist div {
display: flex;
flex-direction: row; }
.keyvaluelist div span {
align-self: center; }
.keyvaluelist div span:first-child {
font-weight: bold;
min-width: 500px; }
.kvl_100 div span:first-child {
min-width: 100px; }
.kvl_200 div span:first-child {
min-width: 200px; }
.kvl_300 div span:first-child {
min-width: 300px; }
.consistency_result_ok, .consistency_result_warn, .consistency_result_err {
min-width: 400px;
border: 1px solid #888;
padding: 0 5px;
margin: 1px 0; }
.consistency_result_ok {
background: #0F0; }
.consistency_result_warn {
background: #FF0; }
.consistency_result_err {
background: #F00; }
/* 400px */
#loginform div {
display: flex;
flex-direction: column; }
#loginform div button {
margin: 10px 0;
padding: 0; }
.loginerror {
display: flex;
background: #FF4444;
font-weight: bold;
padding: 0 5px;
margin: 5px 0 20px 0; }
/* 400px */
.bloglistelem_container {
display: flex;
align-items: center;
@ -665,28 +886,6 @@ html, body {
.bce_pag05 {
flex-direction: row; } }
/* 400px */
.ev_master {
align-self: center; }
@media (min-width: 851px) {
.ev_master {
padding-bottom: 80px; } }
.ev_master .ev_code {
color: #000;
text-align: center;
font-size: 150pt;
font-weight: 500;
font-family: Consolas, Monaco, "Courier New", Menlo, monospace; }
.ev_master .ev_msg {
color: #888;
text-align: center;
font-size: 25pt; }
@media (max-width: 767px) {
.ev_master .ev_code {
font-size: 75pt; }
.ev_master .ev_msg {
font-size: 15pt; } }
/* 400px */
.prgl_parent {
display: flex;
flex-direction: column; }
@ -1007,175 +1206,154 @@ html, body {
.booklst_title {
font-size: 32pt; } }
/* 400px */
.aboutcontent {
display: block;
width: 100%; }
.aboutcontent .boxedcontent {
margin-bottom: 20px; }
.about_egh_container {
.bookv_content {
display: flex;
flex-direction: column;
align-items: center; }
color: #333;
border: 1px solid black;
background-color: #E0E0E0;
width: 100%;
margin-left: auto;
margin-right: auto; }
.git_list {
display: inline-block;
width: 715px;
height: 115px;
overflow: visible; }
#bookv_header h1 {
font-size: 48pt;
text-align: center;
margin-top: 5px; }
#bookv_header hr {
background: -moz-radial-gradient(circle, #CCC, #FFFFFF00);
background: -webkit-radial-gradient(circle, #CCC 0%, #FFFFFF00 100%); }
.bookv_top {
display: flex;
flex-direction: row;
margin-top: 15px;
padding-bottom: 10px; }
.bookv_left {
display: inline-flex;
justify-content: center;
flex-grow: 1;
margin-left: 10px;
margin-top: auto;
margin-bottom: auto; }
.bookv_left img {
max-height: 100%;
max-width: 100%; }
.bookv_right {
background: #BBB;
border: 1px solid #666;
margin: 0 10px;
padding: 8px 5px 2px 5px;
min-height: 250px;
min-width: 200px;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto auto auto auto auto 1fr auto;
grid-column-gap: 15px;
grid-row-gap: 2px; }
.bookv_right_key {
font-weight: bold; }
.bookv_right_value a {
color: #333;
text-decoration: none; }
.bookv_right_value a:hover {
color: #339;
text-decoration: none; }
.bookv_right_comb {
grid-column: 1 / span 2; }
.bookv_right_lang {
display: flex;
justify-content: right; }
.bookv_dl_download {
background: #442222; }
.bookv_dl_github {
background: #4078C0; }
.bookv_right_lang img {
display: inline;
height: 16pt;
max-width: 32px;
margin: 1px 2px 0 2px; }
.bookv_center {
margin: 0 8px 8px 8px;
padding: 16px;
background: #EEE;
border: 1px solid rgba(0, 0, 0, 0.15); }
.bookv_sep {
margin: 40px 0 40px 0;
display: block;
border: none;
color: white;
height: 1px;
background: #666666FF;
background: -moz-radial-gradient(circle, #666, #FFFFFF00);
background: -webkit-radial-gradient(circle, #666 0%, #FFFFFF00 100%); }
@media (max-width: 991px) {
.git_list {
width: 100%;
height: auto; }
.bookv_content {
border: none; }
.extGitGraphContainer {
width: 95%;
width: calc(100% - 16px); } }
.git_list text.caption {
font-size: 10px;
fill: #666; }
#bookv_header h1 {
font-size: 28pt; } }
@media (max-width: 1199px) {
#bookv_header h1 {
font-size: 28pt; } }
@media (max-width: 767px) {
.bookv_top {
flex-direction: column;
margin-top: 0; }
.git_list text.caption_month {
font-size: 8px;
fill: #BBB; }
.bookv_left {
margin: 0 10px 10px 10px; }
.git_list text.caption_day {
font-size: 8px;
fill: #BBB; }
.bookv_right {
min-height: 0;
min-width: 0; }
.svg-tip:after {
box-sizing: border-box;
position: absolute;
left: 50%;
height: 5px;
width: 5px;
bottom: -10px;
margin: 0 0 0px -5px;
content: " ";
border: 5px solid transparent;
border-top-color: rgba(0, 0, 0, 0.8);
-moz-border-top-colors: none;
-moz-border-right-colors: none;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
border-image: none; }
.bookv_right_lang {
justify-content: space-evenly; }
.svg-tip {
padding: 5px;
background: none repeat scroll 0 0 rgba(0, 0, 0, 0.8);
color: #BBB;
font-size: 12px;
position: absolute;
z-index: 99999;
text-align: center;
border-radius: 3px;
box-sizing: border-box;
opacity: 0; }
.extGitGraphContainer {
background-color: #FCFCFC;
margin: 10px;
display: inline-block;
border: 1px solid #222;
border-radius: 0;
box-shadow: 0 0 1px rgba(0, 0, 0, 0.25) inset; }
.egg_footer {
margin-top: 5px;
text-align: right;
margin-right: 5px;
margin-bottom: 5px;
color: #888; }
.egg_footer > a {
text-decoration: none;
color: inherit; }
.egg_footer > a:hover {
text-decoration: none;
color: #22F; }
.about_circles {
display: flex;
flex-direction: column; }
.about_circles a {
margin: 5px 0; }
.about_circles .iconbutton_light span {
text-align: left; }
#bookv_header h1 {
font-size: 18pt; } }
.bookv_extra {
height: 500px;
border: 1px solid #333;
margin: 10px; }
/* 400px */
.admincontent {
display: block;
width: 100%; }
.admincontent .boxedcontent {
margin-bottom: 20px; }
.egh_ajaxOutput {
display: flex;
box-sizing: border-box;
width: 100%;
align-self: center;
justify-self: center;
margin-left: auto;
margin-right: auto;
resize: none;
height: 300px; }
.keyvaluelist {
display: flex;
flex-direction: column; }
.keyvaluelist div {
display: flex;
flex-direction: row; }
.keyvaluelist div span {
.ev_master {
align-self: center; }
.keyvaluelist div span:first-child {
font-weight: bold;
min-width: 500px; }
.kvl_100 div span:first-child {
min-width: 100px; }
.kvl_200 div span:first-child {
min-width: 200px; }
.kvl_300 div span:first-child {
min-width: 300px; }
.consistency_result_ok, .consistency_result_warn, .consistency_result_err {
min-width: 400px;
border: 1px solid #888;
padding: 0 5px;
margin: 1px 0; }
.consistency_result_ok {
background: #0F0; }
.consistency_result_warn {
background: #FF0; }
.consistency_result_err {
background: #F00; }
/* 400px */
#loginform div {
display: flex;
flex-direction: column; }
#loginform div button {
margin: 10px 0;
padding: 0; }
.loginerror {
display: flex;
background: #FF4444;
font-weight: bold;
padding: 0 5px;
margin: 5px 0 20px 0; }
@media (min-width: 851px) {
.ev_master {
padding-bottom: 80px; } }
.ev_master .ev_code {
color: #000;
text-align: center;
font-size: 150pt;
font-weight: 500;
font-family: Consolas, Monaco, "Courier New", Menlo, monospace; }
.ev_master .ev_msg {
color: #888;
text-align: center;
font-size: 25pt; }
@media (max-width: 767px) {
.ev_master .ev_code {
font-size: 75pt; }
.ev_master .ev_msg {
font-size: 15pt; } }
/* 400px */
.euler_pnl_row {

View File

@ -41,6 +41,15 @@ body{background-color:#EEE;color:#CCC;font-family:serif}
.stripedtable tbody td:first-child{border-left:0}
.stripedtable tbody tr:last-child td{border-bottom:0}
.stripedtable tbody tr:nth-child(odd){background-color:#ccc}
.imgcarousel_parent{display:flex;flex-direction:row;align-content:center;justify-content:center;padding:5px;background:#BBB}
.imgcarousel_content{background-size:contain;background-position:center;background-repeat:no-repeat;height:100%;width:100%}
.imgcarousel_prev,.imgcarousel_next{display:flex;flex-direction:column;justify-content:center}
.imgcarousel_prev{margin-right:5px}
.imgcarousel_next{margin-left:5px}
.imgcarousel_prev svg{width:48px;height:48px;border:1px solid black;background:#333;fill:#DDD}
.imgcarousel_next svg{width:48px;height:48px;border:1px solid black;background:#333;fill:#DDD}
.imgcarousel_prev:hover svg{background:#000;fill:#FFF;cursor:pointer}
.imgcarousel_next:hover svg{background:#000;fill:#FFF;cursor:pointer}
#headerdiv{z-index:999;background-color:#333;display:flex;border-bottom:1px solid #111;box-shadow:0 0 8px #000;position:fixed;width:100%}
#headerdiv .logowrapper{flex:initial;margin:0;padding:0;height:42px}
#headerdiv .logowrapper a{cursor:default}
@ -80,6 +89,43 @@ html,body{margin:0;padding:0;height:100%}
.index_pnl_header a:hover{text-decoration:underline}
.index_pnl_content{display:flex;flex-direction:column;background:#DDD;padding:6px}
@media(max-width:850px){.index_pnl_base{width:330px}}
.aboutcontent{display:block;width:100%}
.aboutcontent .boxedcontent{margin-bottom:20px}
.about_egh_container{display:flex;flex-direction:column;align-items:center}
.git_list{display:inline-block;width:715px;height:115px;overflow:visible}
@media(max-width:991px){
.git_list{width:100%;height:auto}
.extGitGraphContainer{width:95%;width:calc(100% - 16px)}
}
.git_list text.caption{font-size:10px;fill:#666}
.git_list text.caption_month{font-size:8px;fill:#BBB}
.git_list text.caption_day{font-size:8px;fill:#BBB}
.svg-tip:after{box-sizing:border-box;position:absolute;left:50%;height:5px;width:5px;bottom:-10px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,0.8);-moz-border-top-colors:none;-moz-border-right-colors:none;-moz-border-bottom-colors:none;-moz-border-left-colors:none;border-image:none}
.svg-tip{padding:5px;background:none repeat scroll 0 0 rgba(0,0,0,0.8);color:#BBB;font-size:12px;position:absolute;z-index:99999;text-align:center;border-radius:3px;box-sizing:border-box;opacity:0}
.extGitGraphContainer{background-color:#fcfcfc;margin:10px;display:inline-block;border:1px solid #222;border-radius:0;box-shadow:0 0 1px rgba(0,0,0,0.25) inset}
.egg_footer{margin-top:5px;text-align:right;margin-right:5px;margin-bottom:5px;color:#888}
.egg_footer>a{text-decoration:none;color:inherit}
.egg_footer>a:hover{text-decoration:none;color:#22F}
.about_circles{display:flex;flex-direction:column}
.about_circles a{margin:5px 0}
.about_circles .iconbutton_light span{text-align:left}
.admincontent{display:block;width:100%}
.admincontent .boxedcontent{margin-bottom:20px}
.egh_ajaxOutput{display:flex;box-sizing:border-box;width:100%;align-self:center;justify-self:center;margin-left:auto;margin-right:auto;resize:none;height:300px}
.keyvaluelist{display:flex;flex-direction:column}
.keyvaluelist div{display:flex;flex-direction:row}
.keyvaluelist div span{align-self:center}
.keyvaluelist div span:first-child{font-weight:bold;min-width:500px}
.kvl_100 div span:first-child{min-width:100px}
.kvl_200 div span:first-child{min-width:200px}
.kvl_300 div span:first-child{min-width:300px}
.consistency_result_ok,.consistency_result_warn,.consistency_result_err{min-width:400px;border:1px solid #888;padding:0 5px;margin:1px 0}
.consistency_result_ok{background:#0F0}
.consistency_result_warn{background:#FF0}
.consistency_result_err{background:#F00}
#loginform div{display:flex;flex-direction:column}
#loginform div button{margin:10px 0;padding:0}
.loginerror{display:flex;background:#f44;font-weight:bold;padding:0 5px;margin:5px 0 20px 0}
.bloglistelem_container{display:flex;align-items:center;flex-direction:column}
.bloglistelem{width:100%;border:solid 1px #444;margin:10px 5px;color:#333;text-decoration:none}
.ble_blog{background-color:#BBB}
@ -171,14 +217,6 @@ html,body{margin:0;padding:0;height:100%}
.bce_pag10{flex-direction:row}
.bce_pag05{flex-direction:row}
}
.ev_master{align-self:center}
@media(min-width:851px){.ev_master{padding-bottom:80px}}
.ev_master .ev_code{color:#000;text-align:center;font-size:150pt;font-weight:500;font-family:Consolas,Monaco,"Courier New",Menlo,monospace}
.ev_master .ev_msg{color:#888;text-align:center;font-size:25pt}
@media(max-width:767px){
.ev_master .ev_code{font-size:75pt}
.ev_master .ev_msg{font-size:15pt}
}
.prgl_parent{display:flex;flex-direction:column}
@media(max-width:850px){.prgl_parent{align-items:center}}
.prgl_elem{display:flex;flex-direction:row;text-decoration:none;background:#BBB;border:solid 1px #444;margin:5px 0}
@ -257,43 +295,44 @@ html,body{margin:0;padding:0;height:100%}
.booklst_date{display:none;visibility:hidden}
.booklst_title{font-size:32pt}
}
.aboutcontent{display:block;width:100%}
.aboutcontent .boxedcontent{margin-bottom:20px}
.about_egh_container{display:flex;flex-direction:column;align-items:center}
.git_list{display:inline-block;width:715px;height:115px;overflow:visible}
.bookv_content{display:flex;flex-direction:column;color:#333;border:1px solid black;background-color:#e0e0e0;width:100%;margin-left:auto;margin-right:auto}
#bookv_header h1{font-size:48pt;text-align:center;margin-top:5px}
#bookv_header hr{background:-moz-radial-gradient(circle,#CCC,#FFFFFF00);background:-webkit-radial-gradient(circle,#CCC 0,#FFFFFF00 100%)}
.bookv_top{display:flex;flex-direction:row;margin-top:15px;padding-bottom:10px}
.bookv_left{display:inline-flex;justify-content:center;flex-grow:1;margin-left:10px;margin-top:auto;margin-bottom:auto}
.bookv_left img{max-height:100%;max-width:100%}
.bookv_right{background:#BBB;border:1px solid #666;margin:0 10px;padding:8px 5px 2px 5px;min-height:250px;min-width:200px;display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto auto auto auto auto 1fr auto;grid-column-gap:15px;grid-row-gap:2px}
.bookv_right_key{font-weight:bold}
.bookv_right_value a{color:#333;text-decoration:none}
.bookv_right_value a:hover{color:#339;text-decoration:none}
.bookv_right_comb{grid-column:1 / span 2}
.bookv_right_lang{display:flex;justify-content:right}
.bookv_dl_download{background:#422}
.bookv_dl_github{background:#4078c0}
.bookv_right_lang img{display:inline;height:16pt;max-width:32px;margin:1px 2px 0 2px}
.bookv_center{margin:0 8px 8px 8px;padding:16px;background:#EEE;border:1px solid rgba(0,0,0,0.15)}
.bookv_sep{margin:40px 0 40px 0;display:block;border:0;color:white;height:1px;background:#666666FF;background:-moz-radial-gradient(circle,#666,#FFFFFF00);background:-webkit-radial-gradient(circle,#666 0,#FFFFFF00 100%)}
@media(max-width:991px){
.git_list{width:100%;height:auto}
.extGitGraphContainer{width:95%;width:calc(100% - 16px)}
.bookv_content{border:0}
#bookv_header h1{font-size:28pt}
}
@media(max-width:1199px){#bookv_header h1{font-size:28pt}}
@media(max-width:767px){
.bookv_top{flex-direction:column;margin-top:0}
.bookv_left{margin:0 10px 10px 10px}
.bookv_right{min-height:0;min-width:0}
.bookv_right_lang{justify-content:space-evenly}
#bookv_header h1{font-size:18pt}
}
.bookv_extra{height:500px;border:1px solid #333;margin:10px}
.ev_master{align-self:center}
@media(min-width:851px){.ev_master{padding-bottom:80px}}
.ev_master .ev_code{color:#000;text-align:center;font-size:150pt;font-weight:500;font-family:Consolas,Monaco,"Courier New",Menlo,monospace}
.ev_master .ev_msg{color:#888;text-align:center;font-size:25pt}
@media(max-width:767px){
.ev_master .ev_code{font-size:75pt}
.ev_master .ev_msg{font-size:15pt}
}
.git_list text.caption{font-size:10px;fill:#666}
.git_list text.caption_month{font-size:8px;fill:#BBB}
.git_list text.caption_day{font-size:8px;fill:#BBB}
.svg-tip:after{box-sizing:border-box;position:absolute;left:50%;height:5px;width:5px;bottom:-10px;margin:0 0 0 -5px;content:" ";border:5px solid transparent;border-top-color:rgba(0,0,0,0.8);-moz-border-top-colors:none;-moz-border-right-colors:none;-moz-border-bottom-colors:none;-moz-border-left-colors:none;border-image:none}
.svg-tip{padding:5px;background:none repeat scroll 0 0 rgba(0,0,0,0.8);color:#BBB;font-size:12px;position:absolute;z-index:99999;text-align:center;border-radius:3px;box-sizing:border-box;opacity:0}
.extGitGraphContainer{background-color:#fcfcfc;margin:10px;display:inline-block;border:1px solid #222;border-radius:0;box-shadow:0 0 1px rgba(0,0,0,0.25) inset}
.egg_footer{margin-top:5px;text-align:right;margin-right:5px;margin-bottom:5px;color:#888}
.egg_footer>a{text-decoration:none;color:inherit}
.egg_footer>a:hover{text-decoration:none;color:#22F}
.about_circles{display:flex;flex-direction:column}
.about_circles a{margin:5px 0}
.about_circles .iconbutton_light span{text-align:left}
.admincontent{display:block;width:100%}
.admincontent .boxedcontent{margin-bottom:20px}
.egh_ajaxOutput{display:flex;box-sizing:border-box;width:100%;align-self:center;justify-self:center;margin-left:auto;margin-right:auto;resize:none;height:300px}
.keyvaluelist{display:flex;flex-direction:column}
.keyvaluelist div{display:flex;flex-direction:row}
.keyvaluelist div span{align-self:center}
.keyvaluelist div span:first-child{font-weight:bold;min-width:500px}
.kvl_100 div span:first-child{min-width:100px}
.kvl_200 div span:first-child{min-width:200px}
.kvl_300 div span:first-child{min-width:300px}
.consistency_result_ok,.consistency_result_warn,.consistency_result_err{min-width:400px;border:1px solid #888;padding:0 5px;margin:1px 0}
.consistency_result_ok{background:#0F0}
.consistency_result_warn{background:#FF0}
.consistency_result_err{background:#F00}
#loginform div{display:flex;flex-direction:column}
#loginform div button{margin:10px 0;padding:0}
.loginerror{display:flex;background:#f44;font-weight:bold;padding:0 5px;margin:5px 0 20px 0}
.euler_pnl_row{display:flex;flex-direction:row;flex-wrap:wrap}
@media(max-width:850px){.euler_pnl_row{flex-direction:column}}
.euler_pnl_row2{display:flex;flex-direction:row}

View File

@ -3,20 +3,26 @@
@import 'styles_footer';
@import 'styles_main';
@import 'styles_bloglist';
@import 'styles_blogview';
@import 'styles_blogview_euler';
@import 'styles_errorview';
@import 'styles_programslist';
@import 'styles_programsview';
@import 'styles_bookslist';
@import 'styles_about';
@import 'styles_admin';
@import 'styles_login';
@import 'styles_bloglist';
@import 'styles_blogview';
@import 'styles_blogview_euler';
@import 'styles_programslist';
@import 'styles_programsview';
@import 'styles_bookslist';
@import 'styles_booksview';
@import 'styles_errorview';
@import 'styles_eulerpanel';
@import 'styles_programspanel';
@import 'styles_blogpanel';
@import 'styles_bookspanel';
@import 'styles_bfjoustrunner';
@import 'styles_befungerunner';

View File

@ -0,0 +1,158 @@
@import 'styles_config';
.bookv_content {
display: flex;
flex-direction: column;
color: $COL_TEXT_DARK;
border: 1px solid black;
background-color: #E0E0E0;
width: 100%;
margin-left: auto;
margin-right: auto;
}
#bookv_header h1 {
font-size: 48pt;
text-align: center;
margin-top: 5px;
}
#bookv_header hr {
background: -moz-radial-gradient( circle, $COL_TEXT_NORMAL, $COL_TRANSPARENT);
background: -webkit-radial-gradient(circle, $COL_TEXT_NORMAL 0%,$COL_TRANSPARENT 100%);
}
.bookv_top {
display: flex;
flex-direction: row;
margin-top: 15px;
padding-bottom: 10px;
}
.bookv_left {
display: inline-flex;
justify-content: center;
flex-grow: 1;
margin-left: 10px;
margin-top: auto;
margin-bottom: auto;
}
.bookv_left img {
max-height: 100%;
max-width: 100%;
}
.bookv_right {
background: #BBB;
border: 1px solid #666;
margin: 0 10px;
padding: 8px 5px 2px 5px;
min-height: 250px;
min-width: 200px;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto auto auto auto auto 1fr auto;
grid-column-gap: 15px;
grid-row-gap: 2px;
}
.bookv_right_key {
font-weight: bold;
}
.bookv_right_value a {
color: $COL_TEXT_DARK;
text-decoration: none;
}
.bookv_right_value a:hover {
color: #339;
text-decoration: none;
}
.bookv_right_comb {
grid-column: 1 / span 2;
}
.bookv_right_lang {
display: flex;
justify-content: right;
}
.bookv_dl_download { background: #442222; }
.bookv_dl_github { background: $COL_GITHUB; }
.bookv_right_lang img {
display: inline;
height: 16pt;
max-width: 32px;
margin: 1px 2px 0 2px;
}
.bookv_center {
margin: 0 8px 8px 8px;
padding: 16px;
background: #EEE;
border: 1px solid rgba(0, 0, 0, 0.15);
}
.bookv_sep {
margin: 40px 0 40px 0;
display: block;
border: none;
color: white;
height: 1px;
background: #666666FF;
background: -moz-radial-gradient( circle, #666, #FFFFFF00);
background: -webkit-radial-gradient(circle, #666 0%, #FFFFFF00 100%);
}
@include rdmedia_range(0,2) {
.bookv_content { border: none; }
#bookv_header h1 { font-size: 28pt; }
}
@include rdmedia_range(0,3) {
#bookv_header h1 { font-size: 28pt; }
}
@include rdmedia(0) {
.bookv_top {
flex-direction: column;
margin-top: 0;
}
.bookv_left {
margin: 0 10px 10px 10px;
}
.bookv_right {
min-height: 0;
min-width: 0;
}
.bookv_right_lang {
justify-content: space-evenly;
}
#bookv_header h1 {
font-size: 18pt;
}
}
.bookv_extra {
height: 500px;
border: 1px solid #333;
margin: 10px;
}
.bookv_extra img {
}

View File

@ -230,3 +230,45 @@ body {
background-color: #ccc;
}
}
.imgcarousel_parent {
display: flex;
flex-direction: row;
align-content: center;
justify-content: center;
padding: 5px;
background: #BBB;
}
.imgcarousel_content {
background-size: contain;
background-position: center;
background-repeat: no-repeat;
height: 100%;
width: 100%;
}
.imgcarousel_prev, .imgcarousel_next
{
display: flex;
flex-direction: column;
justify-content: center;
}
.imgcarousel_prev
{
margin-right: 5px;
}
.imgcarousel_next
{
margin-left: 5px;
}
.imgcarousel_prev svg { width: 48px; height: 48px; border: 1px solid black; background: #333; fill: #DDD; }
.imgcarousel_next svg { width: 48px; height: 48px; border: 1px solid black; background: #333; fill: #DDD; }
.imgcarousel_prev:hover svg { background: #000; fill: #FFF; cursor: pointer; }
.imgcarousel_next:hover svg { background: #000; fill: #FFF; cursor: pointer; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 538 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 804 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 880 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

View File

@ -13,4 +13,7 @@
<path id="stackoverflow" class="svg_path" d="M18.986 21.865v-6.404h2.134V24H1.844v-8.539h2.13v6.404h15.012zM6.111 19.731H16.85v-2.137H6.111v2.137zm.259-4.852l10.48 2.189.451-2.07-10.478-2.187-.453 2.068zm1.359-5.056l9.705 4.53.903-1.95-9.706-4.53-.902 1.936v.014zm2.715-4.785l8.217 6.855 1.359-1.62-8.216-6.853-1.35 1.617-.01.001zM15.751 0l-1.746 1.294 6.405 8.604 1.746-1.294L15.749 0h.002z"/>
<path id="goodreads" class="svg_path" d="M19.525 15.977V.49h-2.059v2.906h-.064c-.211-.455-.481-.891-.842-1.307-.36-.412-.767-.777-1.232-1.094-.466-.314-.962-.561-1.519-.736C13.256.09 12.669 0 12.038 0c-1.21 0-2.3.225-3.246.67-.947.447-1.743 1.057-2.385 1.83-.642.773-1.133 1.676-1.47 2.711-.336 1.037-.506 2.129-.506 3.283 0 1.199.141 2.326.425 3.382.286 1.057.737 1.976 1.368 2.762.631.78 1.412 1.397 2.375 1.833.961.436 2.119.661 3.471.661 1.248 0 2.33-.315 3.262-.946s1.638-1.473 2.119-2.525h.061v2.284c0 2.044-.421 3.607-1.264 4.705-.84 1.081-2.224 1.638-4.146 1.638-.572 0-1.128-.061-1.669-.181-.542-.12-1.036-.315-1.487-.57-.437-.271-.827-.601-1.143-1.038-.316-.435-.526-.961-.632-1.593H5.064c.067.887.315 1.654.737 2.3.424.646.961 1.172 1.602 1.593.641.406 1.367.706 2.172.902.811.194 1.639.3 2.494.3 1.383 0 2.541-.195 3.486-.555.947-.376 1.714-.902 2.301-1.608.601-.708 1.021-1.549 1.293-2.556.27-1.007.42-2.134.42-3.367l-.044.062zm-7.484-.557c-.955 0-1.784-.189-2.479-.571-.697-.38-1.277-.882-1.732-1.503-.467-.621-.797-1.332-1.022-2.139s-.332-1.633-.332-2.484c0-.871.105-1.725.301-2.563.21-.84.54-1.587.992-2.24.451-.652 1.037-1.182 1.728-1.584s1.533-.605 2.51-.605 1.803.209 2.495.621c.676.415 1.247.959 1.683 1.634.436.677.751 1.429.947 2.255.195.826.285 1.656.285 2.482 0 .852-.12 1.678-.345 2.484-.226.807-.572 1.518-1.038 2.139-.465.621-1.021 1.123-1.698 1.503-.676.382-1.458.571-2.359.571h.064z"/>
<path id="delphipraxis" class="svg_path" d="M3.301 5.558.603 18.442H5.147C6.289 18.442 7.136 18.378 7.687 18.249 8.66 18.015 9.453 17.651 10.069 17.159 10.871 16.526 11.537 15.674 12.064 14.602 12.288 14.148 12.465 13.666 12.595 13.157L11.488 18.442H14.142L15.171 13.529H16.867C18.009 13.529 18.789 13.5 19.205 13.442 19.92 13.342 20.488 13.198 20.91 13.011 21.332 12.817 21.724 12.536 22.088 12.167 22.457 11.798 22.767 11.306 23.019 10.69 23.271 10.075 23.397 9.442 23.397 8.792 23.397 8.089 23.239 7.485 22.923 6.981 22.606 6.472 22.176 6.108 21.631 5.892 21.092 5.669 20.356 5.558 19.424 5.558H14.186L12.739 12.468C12.822 11.97 12.864 11.448 12.864 10.901 12.864 10.257 12.796 9.665 12.662 9.126 12.527 8.581 12.333 8.101 12.081 7.685 11.835 7.269 11.539 6.914 11.194 6.621 10.854 6.322 10.473 6.091 10.051 5.927 9.635 5.763 9.16 5.654 8.627 5.602 8.358 5.572 7.74 5.558 6.773 5.558H3.301zM16.392 7.676H18.291C19.152 7.676 19.706 7.723 19.952 7.817 20.204 7.904 20.397 8.048 20.532 8.247 20.673 8.446 20.743 8.701 20.743 9.012 20.743 9.475 20.608 9.899 20.338 10.286 20.069 10.673 19.7 10.954 19.231 11.13 18.762 11.306 17.828 11.394 16.428 11.394H15.61L16.392 7.676zM5.498 7.685H7.037C7.816 7.685 8.358 7.737 8.662 7.843 9.096 7.995 9.459 8.303 9.752 8.766 10.051 9.223 10.201 9.908 10.201 10.822 10.201 11.895 10.022 12.826 9.664 13.617 9.307 14.408 8.868 15.041 8.346 15.516 7.983 15.844 7.581 16.069 7.142 16.192 6.708 16.31 6.005 16.368 5.033 16.368H3.688L5.498 7.685z"/>
<path id="pdf" class="svg_path" d="M23.598 15.368c-.71-.76-2.164-1.197-4.224-1.197-1.1 0-2.375.11-3.76.37-.782-.77-1.562-1.67-2.307-2.72-.53-.74-.993-1.52-1.42-2.29.813-2.54 1.206-4.61 1.206-6.1 0-1.672-.603-3.416-2.34-3.416-.533 0-1.066.325-1.35.8-.783 1.408-.43 4.493.917 7.54-.503 1.52-1.035 2.973-1.7 4.605-.578 1.376-1.244 2.794-1.923 4.096C2.793 18.64.267 20.49.03 21.94c-.104.547.074 1.05.457 1.45.133.11.636.545 1.48.545 2.59 0 5.32-4.28 6.707-6.86 1.065-.36 2.13-.687 3.193-1.015 1.168-.323 2.34-.583 3.405-.765 2.735 2.504 5.146 2.9 6.358 2.9 1.492 0 2.024-.617 2.203-1.122.28-.65.07-1.37-.252-1.74l.02.04zm-1.385 1.054c-.104.544-.638.906-1.386.906-.21 0-.39-.037-.603-.072-1.36-.325-2.633-1.016-3.903-2.106 1.25-.214 2.31-.25 2.98-.25.74 0 1.38.032 1.81.144.49.106 1.27.435 1.095 1.38h.02zm-7.523-1.707c-.92.19-1.914.414-2.944.693-.816.223-1.666.474-2.52.77.463-.902.854-1.774 1.208-2.603.428-1.02.78-2.07 1.135-3.046.35.61.74 1.23 1.13 1.78.64.87 1.31 1.7 1.98 2.42v-.02zM10.04 1.23c.145-.29.43-.436.678-.436.745 0 .887.868.887 1.56 0 1.168-.354 2.942-.96 4.967-1.062-2.82-1.135-5.18-.603-6.09zM6.138 18.127C4.328 21.17 2.59 23.06 1.525 23.06c-.21 0-.387-.075-.53-.183-.214-.216-.32-.472-.248-.76.213-1.09 2.236-2.613 5.392-3.99z"/>
<path id="arrow_right" class="svg_path" d="M.823.8C.882.8 23.222 12 23.2 12.018 23.125 12.081.817 23.22.809 23.2.804 23.187 1.887 20.662 3.217 17.591L5.634 12.006 3.217 6.43C1.888 3.364.8 .842.8 .827.8 .812.81 .8.823 .8z"/>
<path id="arrow_left" class="svg_path" d="M23.177.8C23.118.8 .778 12 .8 12.018.875 12.081 23.183 23.22 23.191 23.2 23.196 23.187 22.113 20.662 20.783 17.591L18.366 12.006 20.783 6.43C22.112 3.364 23.2.842 23.2.827 23.2.812 23.19.8 23.177.8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,32 @@
function findParent(el, selector) {
let retval = null;
while (el) {
if (el.matches(selector)) {
retval = el;
break
}
el = el.parentElement;
}
return retval;
}
function findChild(el, selector) {
for (let i = 0; i < el.children.length; i++) {
if (el.children[i].matches(selector)) { return el.children[i]; }
let rec = findChild(el.children[i], selector);
if (rec !== null) return rec;
}
return null;
}
function imgcarousel_move(source, delta) {
let carousel = findParent(source, ".imgcarousel_parent");
let index = parseInt(carousel.getAttribute('data-imgcarousel-index'));
let images = JSON.parse(carousel.getAttribute('data-imgcarousel-images'));
let content = findChild(carousel, '.imgcarousel_content');
index = (index + delta + images.length) % images.length;
carousel.setAttribute('data-imgcarousel-index', index);
content.setAttribute('style', 'background-image: url(' + images[index] + ');');
}

View File

@ -28,6 +28,7 @@ $URL_RULES =
[ 'url' => ['books'], 'target' => 'pages/books_list.php', 'options' => [], ],
[ 'url' => ['books', 'list'], 'target' => 'pages/books_list.php', 'options' => [], ],
[ 'url' => ['books', 'view', '?{id}'], 'target' => 'pages/books_view.php', 'options' => [ 'id' => '%GET%' ], ],
[ 'url' => ['books', 'view', '?{id}', '*'], 'target' => 'pages/books_view.php', 'options' => [ 'id' => '%URL%' ], ],
[ 'url' => ['update.php'], 'target' => 'pages/api_updatecheck.php', 'options' => [ 'Name' => '%GET%' ], ],
[ 'url' => ['update.php', '?{Name}'], 'target' => 'pages/api_updatecheck.php', 'options' => [ 'Name' => '%URL%' ], ],
@ -116,6 +117,10 @@ try {
$ident = substr($comp, 2, strlen($comp)-3);
$urlparams[$ident] = $pathparts[$i];
}
else if ($comp === '*')
{
// ok
}
else
{
if (strtolower($comp) !== strtolower($pathparts[$i])) { $match = false; break; }
@ -194,3 +199,9 @@ try {
//TODO euler insert+show 32bit | 64bit mode
//TODO send cache header (?)
//TODO global uncached error logger -> send by mail
//TODO chrome test
// - books view image height
// - program list image height changes on hover
//
//

View File

@ -52,6 +52,7 @@ function httpError($errorcode, $message)
function destructiveUrlEncode($str) {
$str = str_replace(' ', '_', $str);
$str = str_replace('+', '_', $str);
$str = str_replace(':', '_', $str);
$str = str_replace('.', '', $str);
return urlencode($str);
}

View File

@ -15,7 +15,16 @@ class Books
$a['preview_url'] = '/data/dynamic/bookprev_' . $a['id'] . '.png';
$a['preview_path'] = __DIR__ . '/../data/dynamic/bookprev_' . $a['id'] . '.png';
$a['url'] = '/books/view/' . $a['id'];
$a['url'] = '/books/view/' . $a['id'] . '/' . destructiveUrlEncode($a['title']);
$a['extraimages_urls'] = [];
$a['extraimages_paths'] = [];
for ($i=1; $i <= $a['imagecount']; $i++)
{
$a['extraimages_urls'] []= '/data/images/book_img/' . $a['id'] . '_img' . $i . '.jpg';
$a['extraimages_paths'] []= __DIR__ . '/../data/images/book_img/' . $a['id'] . '_img' . $i . '.jpg';
}
return $a;
}
@ -70,4 +79,12 @@ class Books
smart_resize_image($src , null, 200, 0, true, $dst, 100);
}
public static function getBook($id)
{
foreach (self::listAll() as $book) {
if ($book['id'] == $id) return $book;
}
return null;
}
}

View File

@ -10,7 +10,6 @@ $allposts = Blog::listAllNewestFirst();
<head>
<meta charset="utf-8">
<title>Mikescher.com - Blog</title>
<meta name="google-site-verification" content="pZOhmjeJcQbRMNa8xRLam4dwJ2oYwMwISY1lRKreSSs"/>
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
<link rel="canonical" href="https://www.mikescher.com/blog"/>
<?php printCSS(); ?>

View File

@ -27,7 +27,6 @@ if ($eulerproblem === null) $isSubEuler = false;
<head>
<meta charset="utf-8">
<title>Mikescher.com - <?php echo ($isSubEuler ? $eulerproblem['title'] : $post['title']); ?></title>
<meta name="google-site-verification" content="pZOhmjeJcQbRMNa8xRLam4dwJ2oYwMwISY1lRKreSSs"/>
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
<?php printCSS(); ?>
<?php echo '<link rel="canonical" href="' . ($isSubEuler ? $eulerproblem['canonical'] : $post['canonical']) . '"/>'; ?>

100
www/pages/books_view.php Normal file
View File

@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">
<?php
require_once (__DIR__ . '/../internals/base.php');
require_once (__DIR__ . '/../internals/books.php');
$id = $OPTIONS['id'];
$book = Books::getBook($id);
if ($book === NULL) httpError(404, 'Book not found');
?>
<head>
<meta charset="utf-8">
<title>Mikescher.com - <?php echo $book['title']; ?></title>
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
<?php printCSS(); ?>
<?php echo '<link rel="canonical" href="' . $book['url'] . '"/>'; ?>
<?php includeScriptOnce("/data/javascript/ms_basic.js", true, 'defer') ?>
</head>
<body>
<div id="mastercontainer">
<?php $HEADER_ACTIVE = 'book'; include (__DIR__ . '/../fragments/header.php'); ?>
<div id="content" class="content-responsive">
<div class="blockcontent">
<div class="bookv_content">
<div class="contentheader" id="bookv_header"><h1><?php echo htmlspecialchars($book['title']); ?></h1><hr/></div>
<div class="bookv_top">
<div class="bookv_left"><img src="<?php echo $book['imgfull_url']; ?>" alt="<?php echo $book['title'] ?>" /></div>
<div class="bookv_right">
<div class="bookv_right_key" style="grid-row:1">Name:</div>
<div class="bookv_right_value" style="grid-row:1"><?php echo htmlspecialchars($book['title_short']) ?></div>
<div class="bookv_right_key" style="grid-row:2">Pages:</div>
<div class="bookv_right_value" style="grid-row:2"><?php echo $book['pages'] ?></div>
<div class="bookv_right_key" style="grid-row:3">Author:</div>
<div class="bookv_right_value" style="grid-row:3"><?php echo htmlspecialchars($book['author']) ?></div>
<div class="bookv_right_key" style="grid-row:4">Size:</div>
<div class="bookv_right_value" style="grid-row:4"><?php echo $book['size'][0] . 'cm x ' . $book['size'][1] . 'cm'; ?></div>
<div class="bookv_right_key" style="grid-row:5">Date:</div>
<div class="bookv_right_value" style="grid-row:5"><?php echo $book['date'] ?></div>
<div class="bookv_right_comb" style="grid-row:6">
<a class="iconbutton" href="<?php echo $book['github'] ?>">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
<use xlink:href="/data/images/icons.svg#github"/>
</svg>
<span>Github</span>
</a>
<a class="iconbutton" href="<?php echo $book['online'] ?>">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
<use xlink:href="/data/images/icons.svg#home"/>
</svg>
<span>Homepage</span>
</a>
<a class="iconbutton" href="<?php echo $book['pdf'] ?>">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
<use xlink:href="/data/images/icons.svg#pdf"/>
</svg>
<span>PDF</span>
</a>
</div>
</div>
</div>
<div class="bookv_extra imgcarousel_parent" data-imgcarousel-index="0" data-imgcarousel-images="<?php echo htmlspecialchars(json_encode($book['extraimages_urls'])); ?>" >
<a class="imgcarousel_prev" href="javascript:void(0)" onclick="imgcarousel_move(this, -1);">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
<use xlink:href="/data/images/icons.svg#arrow_left"/>
</svg>
</a>
<div class="imgcarousel_content" style="background-image: url(<?php echo $book['extraimages_urls'][0]; ?>);"></div>
<a class="imgcarousel_next" href="javascript:void(0)" onclick="imgcarousel_move(this, +1);">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24">
<use xlink:href="/data/images/icons.svg#arrow_right"/>
</svg>
</a>
</div>
</div>
</div>
</div>
<?php include (__DIR__ . '/../fragments/footer.php'); ?>
</div>
</body>
</html>

View File

@ -17,7 +17,7 @@ if ($prog === NULL) httpError(404, 'Program not found');
<meta charset="utf-8">
<title>Mikescher.com - <?php echo $prog['name']; ?></title>
<link rel="icon" type="image/png" href="/data/images/favicon.png"/>
<link rel="canonical" href="https://www.mikescher.com/programs/view/<?php echo $prog['internal_name']; ?>"/>
<link rel="canonical" href="<?php echo $prog['url']; ?>"/>
<?php printCSS(); ?>
</head>
<body>

View File

@ -3,7 +3,7 @@
return
[
[
'id' => 'hpmor_1',
'id' => 'hpmor1',
'title' => 'Harry Potter and the Methods of Rationality: Book 1',
'title_short' => 'HPMoR: Book 1',
'date' => '2015-04-04',
@ -12,11 +12,12 @@ return
'pdf' => 'https://github.com/Mikescher/HPMOR-LyX/raw/master/hpmor_volume1_16x23.pdf',
'online' => 'http://www.hpmor.com/',
'author' => 'Eliezer Yudkowsky',
'size' => '17.0cm x 24.0cm',
'size' => [17.0, 24.0],
'imagecount' => 4,
],
[
'id' => 'hpmor_2',
'id' => 'hpmor2',
'title' => 'Harry Potter and the Methods of Rationality: Book 2',
'title_short' => 'HPMoR: Book 2',
'date' => '2015-04-04',
@ -25,11 +26,12 @@ return
'pdf' => 'https://github.com/Mikescher/HPMOR-LyX/raw/master/hpmor_volume2_16x23.pdf',
'online' => 'http://www.hpmor.com/',
'author' => 'Eliezer Yudkowsky',
'size' => '17.0cm x 24.0cm',
'size' => [17.0, 24.0],
'imagecount' => 4,
],
[
'id' => 'hpmor_3',
'id' => 'hpmor3',
'title' => 'Harry Potter and the Methods of Rationality: Book 3',
'title_short' => 'HPMoR: Book 3',
'date' => '2015-04-04',
@ -38,11 +40,12 @@ return
'pdf' => 'https://github.com/Mikescher/HPMOR-LyX/raw/master/hpmor_volume3_16x23.pdf',
'online' => 'http://www.hpmor.com/',
'author' => 'Eliezer Yudkowsky',
'size' => '17.0cm x 24.0cm',
'size' => [17.0, 24.0],
'imagecount' => 4,
],
[
'id' => 'apgte_1',
'id' => 'apgte1',
'title' => 'A Practical Guide to Evil: Book 1',
'title_short' => 'APGtE: Book 1',
'date' => '2016-12-23',
@ -51,7 +54,8 @@ return
'pdf' => 'https://github.com/Mikescher/A-Practical-Guide-To-Evil-Lyx/raw/master/APGTE_1/APGTE.pdf',
'online' => 'https://practicalguidetoevil.wordpress.com/',
'author' => 'David Verburg',
'size' => '12.5cm x 19.0cm',
'size' => [12.5, 19.0],
'imagecount' => 4,
],
[
@ -64,6 +68,7 @@ return
'pdf' => 'https://github.com/Mikescher/Metropolitan-Man-Lyx/raw/master/src/MM.pdf',
'online' => 'https://www.fanfiction.net/s/10360716/1/',
'author' => 'Alexandr Wales',
'size' => '12.5cm x 19.0cm',
'size' => [12.5, 19.0],
'imagecount' => 4,
],
];