diff --git a/www/data/css/styles.css b/www/data/css/styles.css index de83522..7ea6eff 100644 --- a/www/data/css/styles.css +++ b/www/data/css/styles.css @@ -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 { - 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; } +.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 */ .euler_pnl_row { diff --git a/www/data/css/styles.min.css b/www/data/css/styles.min.css index 615dd43..06c9383 100644 --- a/www/data/css/styles.min.css +++ b/www/data/css/styles.min.css @@ -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} diff --git a/www/data/css/styles.scss b/www/data/css/styles.scss index e3894b1..0b7df2a 100644 --- a/www/data/css/styles.scss +++ b/www/data/css/styles.scss @@ -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'; \ No newline at end of file diff --git a/www/data/css/styles_booksview.scss b/www/data/css/styles_booksview.scss new file mode 100644 index 0000000..fe6f213 --- /dev/null +++ b/www/data/css/styles_booksview.scss @@ -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 { + +} \ No newline at end of file diff --git a/www/data/css/styles_global.scss b/www/data/css/styles_global.scss index ceaf7d1..e6221b8 100644 --- a/www/data/css/styles_global.scss +++ b/www/data/css/styles_global.scss @@ -229,4 +229,46 @@ body { tbody tr:nth-child(odd) { background-color: #ccc; } -} \ No newline at end of file +} + +.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; } \ No newline at end of file diff --git a/www/data/images/book_img/apgte1_front.png b/www/data/images/book_img/apgte1_front.png new file mode 100644 index 0000000..95292d5 Binary files /dev/null and b/www/data/images/book_img/apgte1_front.png differ diff --git a/www/data/images/book_img/apgte1_full.png b/www/data/images/book_img/apgte1_full.png new file mode 100644 index 0000000..89be747 Binary files /dev/null and b/www/data/images/book_img/apgte1_full.png differ diff --git a/www/data/images/book_img/apgte1_img1.jpg b/www/data/images/book_img/apgte1_img1.jpg new file mode 100644 index 0000000..63793e9 Binary files /dev/null and b/www/data/images/book_img/apgte1_img1.jpg differ diff --git a/www/data/images/book_img/apgte1_img2.jpg b/www/data/images/book_img/apgte1_img2.jpg new file mode 100644 index 0000000..2090863 Binary files /dev/null and b/www/data/images/book_img/apgte1_img2.jpg differ diff --git a/www/data/images/book_img/apgte1_img3.jpg b/www/data/images/book_img/apgte1_img3.jpg new file mode 100644 index 0000000..c10fe2b Binary files /dev/null and b/www/data/images/book_img/apgte1_img3.jpg differ diff --git a/www/data/images/book_img/apgte1_img4.jpg b/www/data/images/book_img/apgte1_img4.jpg new file mode 100644 index 0000000..20e2e1f Binary files /dev/null and b/www/data/images/book_img/apgte1_img4.jpg differ diff --git a/www/data/images/book_img/apgte_1_front.png b/www/data/images/book_img/apgte_1_front.png deleted file mode 100644 index ee9be22..0000000 Binary files a/www/data/images/book_img/apgte_1_front.png and /dev/null differ diff --git a/www/data/images/book_img/apgte_1_full.png b/www/data/images/book_img/apgte_1_full.png deleted file mode 100644 index b4df82e..0000000 Binary files a/www/data/images/book_img/apgte_1_full.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor1_front.png b/www/data/images/book_img/hpmor1_front.png new file mode 100644 index 0000000..0b0e397 Binary files /dev/null and b/www/data/images/book_img/hpmor1_front.png differ diff --git a/www/data/images/book_img/hpmor1_full.png b/www/data/images/book_img/hpmor1_full.png new file mode 100644 index 0000000..721ae25 Binary files /dev/null and b/www/data/images/book_img/hpmor1_full.png differ diff --git a/www/data/images/book_img/hpmor1_img1.jpg b/www/data/images/book_img/hpmor1_img1.jpg new file mode 100644 index 0000000..9b30c55 Binary files /dev/null and b/www/data/images/book_img/hpmor1_img1.jpg differ diff --git a/www/data/images/book_img/hpmor1_img2.jpg b/www/data/images/book_img/hpmor1_img2.jpg new file mode 100644 index 0000000..a97fdbe Binary files /dev/null and b/www/data/images/book_img/hpmor1_img2.jpg differ diff --git a/www/data/images/book_img/hpmor1_img3.jpg b/www/data/images/book_img/hpmor1_img3.jpg new file mode 100644 index 0000000..6d1b2f8 Binary files /dev/null and b/www/data/images/book_img/hpmor1_img3.jpg differ diff --git a/www/data/images/book_img/hpmor1_img4.jpg b/www/data/images/book_img/hpmor1_img4.jpg new file mode 100644 index 0000000..19378c6 Binary files /dev/null and b/www/data/images/book_img/hpmor1_img4.jpg differ diff --git a/www/data/images/book_img/hpmor2_front.png b/www/data/images/book_img/hpmor2_front.png new file mode 100644 index 0000000..651e470 Binary files /dev/null and b/www/data/images/book_img/hpmor2_front.png differ diff --git a/www/data/images/book_img/hpmor2_full.png b/www/data/images/book_img/hpmor2_full.png new file mode 100644 index 0000000..855682c Binary files /dev/null and b/www/data/images/book_img/hpmor2_full.png differ diff --git a/www/data/images/book_img/hpmor2_img1.jpg b/www/data/images/book_img/hpmor2_img1.jpg new file mode 100644 index 0000000..957af67 Binary files /dev/null and b/www/data/images/book_img/hpmor2_img1.jpg differ diff --git a/www/data/images/book_img/hpmor2_img2.jpg b/www/data/images/book_img/hpmor2_img2.jpg new file mode 100644 index 0000000..568a199 Binary files /dev/null and b/www/data/images/book_img/hpmor2_img2.jpg differ diff --git a/www/data/images/book_img/hpmor2_img3.jpg b/www/data/images/book_img/hpmor2_img3.jpg new file mode 100644 index 0000000..ab51742 Binary files /dev/null and b/www/data/images/book_img/hpmor2_img3.jpg differ diff --git a/www/data/images/book_img/hpmor2_img4.jpg b/www/data/images/book_img/hpmor2_img4.jpg new file mode 100644 index 0000000..407d951 Binary files /dev/null and b/www/data/images/book_img/hpmor2_img4.jpg differ diff --git a/www/data/images/book_img/hpmor3_front.png b/www/data/images/book_img/hpmor3_front.png new file mode 100644 index 0000000..298f430 Binary files /dev/null and b/www/data/images/book_img/hpmor3_front.png differ diff --git a/www/data/images/book_img/hpmor3_full.png b/www/data/images/book_img/hpmor3_full.png new file mode 100644 index 0000000..ca760ca Binary files /dev/null and b/www/data/images/book_img/hpmor3_full.png differ diff --git a/www/data/images/book_img/hpmor3_img1.jpg b/www/data/images/book_img/hpmor3_img1.jpg new file mode 100644 index 0000000..99ed479 Binary files /dev/null and b/www/data/images/book_img/hpmor3_img1.jpg differ diff --git a/www/data/images/book_img/hpmor3_img2.jpg b/www/data/images/book_img/hpmor3_img2.jpg new file mode 100644 index 0000000..b88a47d Binary files /dev/null and b/www/data/images/book_img/hpmor3_img2.jpg differ diff --git a/www/data/images/book_img/hpmor3_img3.jpg b/www/data/images/book_img/hpmor3_img3.jpg new file mode 100644 index 0000000..9ba22d5 Binary files /dev/null and b/www/data/images/book_img/hpmor3_img3.jpg differ diff --git a/www/data/images/book_img/hpmor3_img4.jpg b/www/data/images/book_img/hpmor3_img4.jpg new file mode 100644 index 0000000..1cc121c Binary files /dev/null and b/www/data/images/book_img/hpmor3_img4.jpg differ diff --git a/www/data/images/book_img/hpmor_1_front.png b/www/data/images/book_img/hpmor_1_front.png deleted file mode 100644 index feb442c..0000000 Binary files a/www/data/images/book_img/hpmor_1_front.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor_1_full.png b/www/data/images/book_img/hpmor_1_full.png deleted file mode 100644 index 979cc2a..0000000 Binary files a/www/data/images/book_img/hpmor_1_full.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor_2_front.png b/www/data/images/book_img/hpmor_2_front.png deleted file mode 100644 index f2ce79e..0000000 Binary files a/www/data/images/book_img/hpmor_2_front.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor_2_full.png b/www/data/images/book_img/hpmor_2_full.png deleted file mode 100644 index d89f44c..0000000 Binary files a/www/data/images/book_img/hpmor_2_full.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor_3_front.png b/www/data/images/book_img/hpmor_3_front.png deleted file mode 100644 index 62cbd42..0000000 Binary files a/www/data/images/book_img/hpmor_3_front.png and /dev/null differ diff --git a/www/data/images/book_img/hpmor_3_full.png b/www/data/images/book_img/hpmor_3_full.png deleted file mode 100644 index 8477541..0000000 Binary files a/www/data/images/book_img/hpmor_3_full.png and /dev/null differ diff --git a/www/data/images/book_img/mm_front.png b/www/data/images/book_img/mm_front.png index c8d844e..f46bec1 100644 Binary files a/www/data/images/book_img/mm_front.png and b/www/data/images/book_img/mm_front.png differ diff --git a/www/data/images/book_img/mm_full.png b/www/data/images/book_img/mm_full.png index 359df7c..f4e0cd9 100644 Binary files a/www/data/images/book_img/mm_full.png and b/www/data/images/book_img/mm_full.png differ diff --git a/www/data/images/book_img/mm_img1.jpg b/www/data/images/book_img/mm_img1.jpg new file mode 100644 index 0000000..0224ac1 Binary files /dev/null and b/www/data/images/book_img/mm_img1.jpg differ diff --git a/www/data/images/book_img/mm_img2.jpg b/www/data/images/book_img/mm_img2.jpg new file mode 100644 index 0000000..c6ea4ec Binary files /dev/null and b/www/data/images/book_img/mm_img2.jpg differ diff --git a/www/data/images/book_img/mm_img3.jpg b/www/data/images/book_img/mm_img3.jpg new file mode 100644 index 0000000..b566693 Binary files /dev/null and b/www/data/images/book_img/mm_img3.jpg differ diff --git a/www/data/images/book_img/mm_img4.jpg b/www/data/images/book_img/mm_img4.jpg new file mode 100644 index 0000000..e21a76e Binary files /dev/null and b/www/data/images/book_img/mm_img4.jpg differ diff --git a/www/data/images/icons.svg b/www/data/images/icons.svg index b6c62f7..19da5da 100644 --- a/www/data/images/icons.svg +++ b/www/data/images/icons.svg @@ -13,4 +13,7 @@ + + + \ No newline at end of file diff --git a/www/data/javascript/ms_basic.js b/www/data/javascript/ms_basic.js new file mode 100644 index 0000000..cae1802 --- /dev/null +++ b/www/data/javascript/ms_basic.js @@ -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] + ');'); +} \ No newline at end of file diff --git a/www/index.php b/www/index.php index a9d87e7..a386415 100644 --- a/www/index.php +++ b/www/index.php @@ -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 +// +// \ No newline at end of file diff --git a/www/internals/base.php b/www/internals/base.php index 7b39e32..2a12414 100644 --- a/www/internals/base.php +++ b/www/internals/base.php @@ -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); } diff --git a/www/internals/books.php b/www/internals/books.php index 29b1272..b805c75 100644 --- a/www/internals/books.php +++ b/www/internals/books.php @@ -6,16 +6,25 @@ class Books { public static function readSingle($a) { - $a['imgfront_url'] = '/data/images/book_img/' . $a['id'] . '_front.png'; - $a['imgfront_path'] = __DIR__ . '/../data/images/book_img/' . $a['id'] . '_front.png'; + $a['imgfront_url'] = '/data/images/book_img/' . $a['id'] . '_front.png'; + $a['imgfront_path'] = __DIR__ . '/../data/images/book_img/' . $a['id'] . '_front.png'; - $a['imgfull_url'] = '/data/images/book_img/' . $a['id'] . '_full.png'; - $a['imgfull_path'] = __DIR__ . '/../data/images/book_img/' . $a['id'] . '_full.png'; + $a['imgfull_url'] = '/data/images/book_img/' . $a['id'] . '_full.png'; + $a['imgfull_path'] = __DIR__ . '/../data/images/book_img/' . $a['id'] . '_full.png'; - $a['preview_url'] = '/data/dynamic/bookprev_' . $a['id'] . '.png'; - $a['preview_path'] = __DIR__ . '/../data/dynamic/bookprev_' . $a['id'] . '.png'; + $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; + } } \ No newline at end of file diff --git a/www/pages/blog_list.php b/www/pages/blog_list.php index d36423a..f9d777b 100644 --- a/www/pages/blog_list.php +++ b/www/pages/blog_list.php @@ -10,7 +10,6 @@ $allposts = Blog::listAllNewestFirst(); Mikescher.com - Blog - diff --git a/www/pages/blog_view.php b/www/pages/blog_view.php index 7bff421..4b96f86 100644 --- a/www/pages/blog_view.php +++ b/www/pages/blog_view.php @@ -27,7 +27,6 @@ if ($eulerproblem === null) $isSubEuler = false; Mikescher.com - <?php echo ($isSubEuler ? $eulerproblem['title'] : $post['title']); ?> - '; ?> diff --git a/www/pages/books_view.php b/www/pages/books_view.php new file mode 100644 index 0000000..2741859 --- /dev/null +++ b/www/pages/books_view.php @@ -0,0 +1,100 @@ + + + + + + Mikescher.com - <?php echo $book['title']; ?> + + + '; ?> + + + +
+ + + +
+ +
+ +
+ +


+ +
+
<?php echo $book['title'] ?>
+
+
Name:
+
+ +
Pages:
+
+ +
Author:
+
+ +
Size:
+
+ +
Date:
+
+ + +
+
+ + + +
+
+
+ + + +
+ + \ No newline at end of file diff --git a/www/pages/programs_view.php b/www/pages/programs_view.php index 24c73c8..437d09f 100644 --- a/www/pages/programs_view.php +++ b/www/pages/programs_view.php @@ -17,7 +17,7 @@ if ($prog === NULL) httpError(404, 'Program not found'); Mikescher.com - <?php echo $prog['name']; ?> - + diff --git a/www/statics/books/__all.php b/www/statics/books/__all.php index 7df4197..93dcc15 100644 --- a/www/statics/books/__all.php +++ b/www/statics/books/__all.php @@ -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, ], ];