bétatesztre kész
This commit is contained in:
		
						commit
						512c3915b1
					
				
							
								
								
									
										83
									
								
								index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								index.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="hu">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8"/>
 | 
				
			||||||
 | 
					    <title>Fotófal</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="js/o.js"></script>
 | 
				
			||||||
 | 
					    <script src="js/socket.js"></script>
 | 
				
			||||||
 | 
					    <script src="js/slider.js"></script>
 | 
				
			||||||
 | 
					    <script src="js/phw.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <link href="phw.css" rel="stylesheet">
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- MEGJELENÍTŐ -->
 | 
				
			||||||
 | 
					<section id="display">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- FELTÖLTŐABLAK MEGNYITÁSA gomb -->
 | 
				
			||||||
 | 
					<section class="upload-btn" style="float: right;bottom: 1em;position: fixed;right: 1em;" onclick="open_upload_pup();">
 | 
				
			||||||
 | 
					    <img src="media/upload_glyph_white.svg" style="height: 2em;">
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- FELTÖLTŐABLAK -->
 | 
				
			||||||
 | 
					<section class="upload-popup" id="uploadpup" shown="false">
 | 
				
			||||||
 | 
					    <section class="upload-popup-closebtn" onclick="close_upload_pup();">⊠</section>
 | 
				
			||||||
 | 
					    <section class="upload-popup-slider" id="pupslider">
 | 
				
			||||||
 | 
					        <section class="upload-popup-inner-container" id="uploadtype">
 | 
				
			||||||
 | 
					            <section style="margin: 3em 0em; text-align: center;">
 | 
				
			||||||
 | 
					                Húzd az ablakra, vagy tallózással töltsd fel a képet!<br><br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                A feltöltendő kép JPG- vagy PNG-formátumú, illetve legalább egyik dimenziójában minimum 2000 pixel
 | 
				
			||||||
 | 
					                méretű
 | 
				
			||||||
 | 
					                kell legyen!
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					            <input type="file" id="fileselector"><br><br>
 | 
				
			||||||
 | 
					            <section style="text-align: right">
 | 
				
			||||||
 | 
					                <section class="btn" onclick="upload_from_device()">Feltöltés</section>
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					        </section>
 | 
				
			||||||
 | 
					        <section class="upload-popup-inner-container" id="uploadform">
 | 
				
			||||||
 | 
					            <section style="text-align: center; display: block; margin-top: 130px;">
 | 
				
			||||||
 | 
					                <img src="media/loading.svg" style="width: 148px; height: 148px;"><br>
 | 
				
			||||||
 | 
					                Feltöltés folyamatban...
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					        </section>
 | 
				
			||||||
 | 
					        <section class="upload-popup-inner-container" id="infoform">
 | 
				
			||||||
 | 
					            <section style="margin: 3em 0em;">
 | 
				
			||||||
 | 
					                <label for="author">Alkotó:*</label><br>
 | 
				
			||||||
 | 
					                <input type="text" id="author" style="width: 440px;" placeholder="Arthur Dent"><br><br>
 | 
				
			||||||
 | 
					                <label for="imgtitle">Cím:*</label><br>
 | 
				
			||||||
 | 
					                <input type="text" id="imgtitle" style="width: 440px;" placeholder="Negyvenkettő"><br><br>
 | 
				
			||||||
 | 
					                <label for="description">Leírás:</label><br>
 | 
				
			||||||
 | 
					                <textarea id="description" style="width: 440px; height: 5em;"
 | 
				
			||||||
 | 
					                          placeholder="A válasz az életet, a világmindenséget, meg mindent érintő kérdésre."></textarea><br><br>
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					            <section style="text-align: right;">
 | 
				
			||||||
 | 
					                <section class="btn" onclick="publish()" id="publishbtn">Mehet!</section>
 | 
				
			||||||
 | 
					            </section>
 | 
				
			||||||
 | 
					        </section>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- KÉPMEGJELENÍTŐ -->
 | 
				
			||||||
 | 
					<section id="viewersect" class="viewer" shown="false" onclick="close_viewer()">
 | 
				
			||||||
 | 
					    <img src="media/loading.svg"
 | 
				
			||||||
 | 
					         style="display: block; position: absolute; left: calc(50% - 74px); top: calc(50% - 74px);">
 | 
				
			||||||
 | 
					    <img src="" id="viewerimg" class="viewer">
 | 
				
			||||||
 | 
					    <section class="art-captions" id="artcaptions">
 | 
				
			||||||
 | 
					        <span class="art-title" id="arttitle">Negyvenkettő</span>
 | 
				
			||||||
 | 
					        <span class="art-author" id="artauthor">Arthur Dent</span>
 | 
				
			||||||
 | 
					        <span class="art-desc" id="artdesc">A válasz az életet, a világmindenséget, meg mindent érintő kérdésre.</span>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					    init_photowall();
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										233
									
								
								interface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								interface.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,233 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					ini_set("display_errors", "On");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// könyvtárak
 | 
				
			||||||
 | 
					define("ARTWORKS_DIR", "ARTWORKS");
 | 
				
			||||||
 | 
					define("INCOMING_DIR", ARTWORKS_DIR . DIRECTORY_SEPARATOR . "incoming");
 | 
				
			||||||
 | 
					define("PUBLISHED_DIR", ARTWORKS_DIR . DIRECTORY_SEPARATOR . "published");
 | 
				
			||||||
 | 
					define("THUMBNAIL_DIR", ARTWORKS_DIR . DIRECTORY_SEPARATOR . "thumbnails");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// SQL-paraméterek
 | 
				
			||||||
 | 
					define("SQL_USER", "photowall_user");
 | 
				
			||||||
 | 
					define("SQL_PASS", "photowpwd");
 | 
				
			||||||
 | 
					define("SQL_DB", "photowall_db");
 | 
				
			||||||
 | 
					define("SQL_IP", "172.28.0.6");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// olyan szöveget ad vissza, amibe csak angol ABC betűi és számok szerepelnek (KL)
 | 
				
			||||||
 | 
					function only_alpha_numeric($input){
 | 
				
			||||||
 | 
					    return preg_replace("/[^a-zA-Z0-9_]+/", "", $input);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// csatlakozás az adatbázishoz
 | 
				
			||||||
 | 
					function open_sql_connection()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return mysqli_connect(SQL_IP, SQL_USER, SQL_PASS, SQL_DB);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Globális SQL-kapcsolat
 | 
				
			||||||
 | 
					$dbconn = open_sql_connection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// incoming fájl elérési útvonala UID-ből
 | 
				
			||||||
 | 
					function incoming_from_uid($uid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return INCOMING_DIR . DIRECTORY_SEPARATOR . $uid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feltöltött fájl feldolgozása
 | 
				
			||||||
 | 
					// RET:
 | 
				
			||||||
 | 
					//  -2: MIME-hiba
 | 
				
			||||||
 | 
					//  -3: mérethiba
 | 
				
			||||||
 | 
					// pozitív: egyedi azonosító, a feltöltés sikerült
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define("MIME_ERROR", -2);
 | 
				
			||||||
 | 
					define("SIZE_ERROR", -3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function process_uploaded_file($file_info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    $ACCEPTED_MIME_TYPES = ["image/png", "image/jpeg"]; // elfogadott MIME-típusok
 | 
				
			||||||
 | 
					    $MINIMUM_SIZE_BY_DIM = 2000; // minimális oldalméret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $tmp_filename = $file_info["tmp_name"];
 | 
				
			||||||
 | 
					    $img_info = getimagesize($tmp_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // MIME-ellenőrzés
 | 
				
			||||||
 | 
					    $mime_type = $img_info["mime"];
 | 
				
			||||||
 | 
					    if (!in_array($mime_type, $ACCEPTED_MIME_TYPES)) { // ha nem megfelelő a fájltípus, akkor visszatérünk -1-gyel
 | 
				
			||||||
 | 
					        return MIME_ERROR;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // méretellenőrzés
 | 
				
			||||||
 | 
					    if ($img_info[0] < $MINIMUM_SIZE_BY_DIM || $img_info[1] < $MINIMUM_SIZE_BY_DIM) {
 | 
				
			||||||
 | 
					        return SIZE_ERROR;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha itt tartunk, akkor a fájl biztosan jó
 | 
				
			||||||
 | 
					    $tmp_uid = substr(basename($tmp_filename), 3); // "php" előtag levágása
 | 
				
			||||||
 | 
					    $incoming_filename = incoming_from_uid($tmp_uid);
 | 
				
			||||||
 | 
					    $ret = move_uploaded_file($tmp_filename, $incoming_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $tmp_uid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// kép publikálása
 | 
				
			||||||
 | 
					define("THUMB_LARGEST_SIDE", 400);
 | 
				
			||||||
 | 
					function publish_image($artwork_details)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    $MAX_LARGE_IMAGE_FILESIZE = 2000000; // nagyméretű kép maximális mérete
 | 
				
			||||||
 | 
					    $MAX_LARGE_IMAGE_FILESIZE_STR = "2M"; // ...stringként
 | 
				
			||||||
 | 
					    $MAX_THUMB_IMAGE_FILESIZE_STR = "100k"; // bélyegkép maximális mérete
 | 
				
			||||||
 | 
					    $THUMB_IMAGE_LARGEST_DIM = THUMB_LARGEST_SIDE; // bélyegkép hosszabb oldalának mérete
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $incoming_filename = incoming_from_uid($artwork_details["uid"]);
 | 
				
			||||||
 | 
					    $final_filename = date("Y_m_d_H_i_s") . random_int(1E6, 1E7 - 1) . ".jpg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // nagyméretű kép elkészítése
 | 
				
			||||||
 | 
					    $large_filename = PUBLISHED_DIR . DIRECTORY_SEPARATOR . $final_filename;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha a fájl nagyobb, mint 2MB, akkor visszatömörítjük
 | 
				
			||||||
 | 
					    $filesize = filesize($incoming_filename);
 | 
				
			||||||
 | 
					    if ($filesize > $MAX_LARGE_IMAGE_FILESIZE) {
 | 
				
			||||||
 | 
					        $cmd = "convert -define jpeg:extent=$MAX_LARGE_IMAGE_FILESIZE_STR $incoming_filename $large_filename";
 | 
				
			||||||
 | 
					        shell_exec($cmd);
 | 
				
			||||||
 | 
					        unlink($incoming_filename); // törlés az incoming-ból
 | 
				
			||||||
 | 
					    } else { //...ha nem volt túl nagy a fájl
 | 
				
			||||||
 | 
					        shell_exec("mv $incoming_filename $large_filename");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // bélyegkép elkészítése
 | 
				
			||||||
 | 
					    $thumb_filename = THUMBNAIL_DIR . DIRECTORY_SEPARATOR . $final_filename;
 | 
				
			||||||
 | 
					    $cmd = "convert -define jpeg:extent=$MAX_THUMB_IMAGE_FILESIZE_STR -resize \"$THUMB_IMAGE_LARGEST_DIM>\" $large_filename $thumb_filename";
 | 
				
			||||||
 | 
					    shell_exec($cmd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // átlagszín kiszámítása
 | 
				
			||||||
 | 
					    $cmd = "convert $thumb_filename -resize 1x1\! -format \"rgb(%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)])\" info:-";
 | 
				
			||||||
 | 
					    $color_mean = shell_exec($cmd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // beírás az adatbázisba
 | 
				
			||||||
 | 
					    global $dbconn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //echo mysqli_error($dbconn);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $img_info = getimagesize($thumb_filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $author = mysqli_real_escape_string($dbconn, $artwork_details["author"]);
 | 
				
			||||||
 | 
					    $title = mysqli_real_escape_string($dbconn, $artwork_details["title"]);
 | 
				
			||||||
 | 
					    $desc = mysqli_real_escape_string($dbconn, $artwork_details["desc"]);
 | 
				
			||||||
 | 
					    $uid = md5_file($thumb_filename); // valami random...
 | 
				
			||||||
 | 
					    $aspect_ratio = $img_info[0] / $img_info[1];
 | 
				
			||||||
 | 
					    $query = "INSERT INTO publish_table (Author,Title,Description,Image_FileName,AspectRatio,ColorMean,Approved,UID,TS) VALUES('$author', '$title', '$desc', '$final_filename', $aspect_ratio, '$color_mean', TRUE, '$uid', CURRENT_TIMESTAMP);";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $res = mysqli_query($dbconn, $query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // megnézzük, hogy volt-e már ilyen kép feltöltve
 | 
				
			||||||
 | 
					    if ($res === false) {
 | 
				
			||||||
 | 
					        unlink($large_filename);
 | 
				
			||||||
 | 
					        unlink($thumb_filename);
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* $accented_chars = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
 | 
				
			||||||
 | 
					$accented_alternatives = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$title = $artwork_details["title"];
 | 
				
			||||||
 | 
					$title_conforming = str_replace(" ", "_", $title);
 | 
				
			||||||
 | 
					$title_conforming = strtolower($title_conforming);
 | 
				
			||||||
 | 
					$title_conforming = str_replace($accented_chars, $accented_alternatives, $title_conforming);*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// általános információk lekérése
 | 
				
			||||||
 | 
					function get_general_info()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    global $dbconn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $info = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // összes kép számának lekérdezése
 | 
				
			||||||
 | 
					    $query = "SELECT COUNT(No) FROM publish_table WHERE Approved;";
 | 
				
			||||||
 | 
					    $ret = (int)mysqli_query($dbconn, $query)->fetch_assoc()["COUNT(No)"];
 | 
				
			||||||
 | 
					    $info["total_artwork_count"] = $ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // bélyegképek hosszabb oldalának nagysága
 | 
				
			||||||
 | 
					    $info["thumb_largest_side"] = THUMB_LARGEST_SIDE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $info;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// egy adagnyi képinformáció szolgáltalása
 | 
				
			||||||
 | 
					function get_batch($offset, $n)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    global $dbconn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $batch = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // kívánt mennyiségű képinformáció lekérdezése
 | 
				
			||||||
 | 
					    $query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,Title,Description,UID FROM publish_table WHERE Approved ORDER BY No DESC Limit $n OFFSET $offset;";
 | 
				
			||||||
 | 
					    $ret = mysqli_query($dbconn, $query);
 | 
				
			||||||
 | 
					    while (($row = $ret->fetch_assoc()) != NULL) {
 | 
				
			||||||
 | 
					        $batch[] = $row;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $batch;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// az utolsó ismert UID-óta keletkezett sorokat kéri le
 | 
				
			||||||
 | 
					function get_update_batch($last_uid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    global $dbconn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $batch = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // az utolsó UID óta érkezett sorok kiválogatása
 | 
				
			||||||
 | 
					    $query = "SELECT Image_FileName,AspectRatio,ColorMean,Author,Description,Title,UID FROM publish_table WHERE No > (SELECT No FROM publish_table WHERE UID = '$last_uid')";
 | 
				
			||||||
 | 
					    $ret = mysqli_query($dbconn, $query);
 | 
				
			||||||
 | 
					    while (($row = $ret->fetch_assoc()) != NULL) {
 | 
				
			||||||
 | 
					        $batch[] = $row;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $batch;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (!isset($_POST["action"])) {
 | 
				
			||||||
 | 
					    exit(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$action = only_alpha_numeric($_POST["action"]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$ret = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// parancs kiválasztása
 | 
				
			||||||
 | 
					switch ($action) {
 | 
				
			||||||
 | 
					    case "upload": // fájl feltöltése
 | 
				
			||||||
 | 
					        if (isset($_FILES["image"]) && $_FILES["image"]["error"] === 0) {
 | 
				
			||||||
 | 
					            $ret = process_uploaded_file($_FILES["image"]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case "publish": // kép publikálása
 | 
				
			||||||
 | 
					        if (isset($_POST["details"])) {
 | 
				
			||||||
 | 
					            $details = json_decode($_POST["details"], true);
 | 
				
			||||||
 | 
					            $ret = publish_image($details);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case "general_info": // általános információ lekérése
 | 
				
			||||||
 | 
					        $ret = json_encode(get_general_info());
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case "batch": // egy adagnyi kép lekérése
 | 
				
			||||||
 | 
					        if (isset($_POST["offset"]) && isset($_POST["n"])) {
 | 
				
			||||||
 | 
					            $ret = json_encode(get_batch($_POST["offset"], $_POST["n"]));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    case "update": // új képek betöltése
 | 
				
			||||||
 | 
					        if (isset($_POST["last_uid"])) {
 | 
				
			||||||
 | 
					            $ret = json_encode(get_update_batch(json_decode($_POST["last_uid"])));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// válasz küldése
 | 
				
			||||||
 | 
					echo $ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mysqli_close($dbconn);
 | 
				
			||||||
							
								
								
									
										8
									
								
								js/o.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								js/o.js
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					function o(input) {
 | 
				
			||||||
 | 
					    var o;
 | 
				
			||||||
 | 
					    if (typeof input === "string")
 | 
				
			||||||
 | 
					        o = document.getElementById(input);
 | 
				
			||||||
 | 
					    else if (typeof input === "object")
 | 
				
			||||||
 | 
					        o = input;
 | 
				
			||||||
 | 
					    return o;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										477
									
								
								js/phw.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										477
									
								
								js/phw.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,477 @@
 | 
				
			|||||||
 | 
					// megjelenítés / eltüntetés
 | 
				
			||||||
 | 
					function show(obj) {
 | 
				
			||||||
 | 
					    o(obj).setAttribute("shown", "true");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function hide(obj) {
 | 
				
			||||||
 | 
					    o(obj).setAttribute("shown", "false");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function toggle_show(obj) {
 | 
				
			||||||
 | 
					    o(obj).setAttribute("shown", o(obj).getAttribute("shown") === "false");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function scroll_enable(on) {
 | 
				
			||||||
 | 
					    document.body.style.overflow = on ? "auto" : "hidden";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var slide_unit = 504;
 | 
				
			||||||
 | 
					var slider_id = "pupslider";
 | 
				
			||||||
 | 
					var upload_popup_id = "uploadpup";
 | 
				
			||||||
 | 
					var publish_btn_id = "publishbtn";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var image_uid = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pup_slide(units) {
 | 
				
			||||||
 | 
					    slider_slide(slider_id, -slide_unit * units);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function pup_reset() {
 | 
				
			||||||
 | 
					    hide(upload_popup_id); // ablak eltüntetése
 | 
				
			||||||
 | 
					    reset_slider(slider_id); // slider visszaállítása
 | 
				
			||||||
 | 
					    o(publish_btn_id).innerText = "Mehet!"; // gombfelirat visszaállítása
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// kép publikálása
 | 
				
			||||||
 | 
					function publish() {
 | 
				
			||||||
 | 
					    if (image_uid == null) { // csak, ha érvényes...
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // mezők kinyerése
 | 
				
			||||||
 | 
					    let author = o("author").value;
 | 
				
			||||||
 | 
					    let title = o("imgtitle").value;
 | 
				
			||||||
 | 
					    let desc = o("description").value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha a kötelező mezők nincsenek kitöltve, akkor nem lehet beküldeni
 | 
				
			||||||
 | 
					    if (author.trim() === "" || title.trim() === "") {
 | 
				
			||||||
 | 
					        alert("Alkotó és cím megadása kötelező!");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // struktúra összeállítása
 | 
				
			||||||
 | 
					    let details = {
 | 
				
			||||||
 | 
					        uid: image_uid,
 | 
				
			||||||
 | 
					        author: author,
 | 
				
			||||||
 | 
					        title: title,
 | 
				
			||||||
 | 
					        desc: desc
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // küldés
 | 
				
			||||||
 | 
					    let formData = new FormData();
 | 
				
			||||||
 | 
					    formData.append("action", "publish");
 | 
				
			||||||
 | 
					    formData.append("details", JSON.stringify(details));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let req = new XMLHttpRequest();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    req.onreadystatechange = state => {
 | 
				
			||||||
 | 
					        if (req.status === 200 && req.readyState === 4) {
 | 
				
			||||||
 | 
					            pup_reset(); // popup resetelése
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (Number(req.response) === 0) {
 | 
				
			||||||
 | 
					                alert("Sikeres feltöltés!");
 | 
				
			||||||
 | 
					                req_update();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                alert("Ugyanezt képet már korábban feltöltötték!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    req.open("POST", "interface.php");
 | 
				
			||||||
 | 
					    req.send(formData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // UID elfelejtése
 | 
				
			||||||
 | 
					    image_uid = null;
 | 
				
			||||||
 | 
					    o(publish_btn_id).innerText = "Türelem..."
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feltöltés után kapott válasz feldolgozása
 | 
				
			||||||
 | 
					function process_upload_response(resp) {
 | 
				
			||||||
 | 
					    if (!isNaN(Number(resp))) { // ha szám a válasz, akkor biztosan hibás az eredmény
 | 
				
			||||||
 | 
					        let resp_num = Number(resp);
 | 
				
			||||||
 | 
					        switch (resp_num) {
 | 
				
			||||||
 | 
					            case -1:
 | 
				
			||||||
 | 
					                alert("Hiba a feldolgozás során!");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case -2:
 | 
				
			||||||
 | 
					                alert("A feltöltött fájl formátuma nem megfelelő, csak JPG- vagy PNG-képek elfogadottak!")
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case -3:
 | 
				
			||||||
 | 
					                alert("Mérethiba: a kép hosszabb oldalának legalább 2000 pixel szélesnek kell lennie!");
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        pup_slide(-1); // visszalépés
 | 
				
			||||||
 | 
					    } else { // ha kaptunk UID-t
 | 
				
			||||||
 | 
					        image_uid = resp;
 | 
				
			||||||
 | 
					        pup_slide(1); // előrelépés
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// fájl feltöltése
 | 
				
			||||||
 | 
					function upload_file(f) {
 | 
				
			||||||
 | 
					    let formData = new FormData();
 | 
				
			||||||
 | 
					    formData.append("image", f);
 | 
				
			||||||
 | 
					    formData.append("action", "upload");
 | 
				
			||||||
 | 
					    let req = new XMLHttpRequest();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    req.onreadystatechange = state => {
 | 
				
			||||||
 | 
					        if (req.status === 200 && req.readyState === 4) {
 | 
				
			||||||
 | 
					            process_upload_response(req.response);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    req.open("POST", "interface.php");
 | 
				
			||||||
 | 
					    req.send(formData);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feltöltés eszközről
 | 
				
			||||||
 | 
					function upload_from_device() {
 | 
				
			||||||
 | 
					    let file_selector = o("fileselector");
 | 
				
			||||||
 | 
					    if (file_selector.files.length > 0) {
 | 
				
			||||||
 | 
					        pup_slide(1); // görgetés jobbra
 | 
				
			||||||
 | 
					        upload_file(file_selector.files[0]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feltöltőablak megnyitása
 | 
				
			||||||
 | 
					function open_upload_pup() {
 | 
				
			||||||
 | 
					    show(upload_popup_id);
 | 
				
			||||||
 | 
					    let display = o("display");
 | 
				
			||||||
 | 
					    display.style.filter = "blur(10px)";
 | 
				
			||||||
 | 
					    scroll_enable(false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feltöltőablak bezárása
 | 
				
			||||||
 | 
					function close_upload_pup() {
 | 
				
			||||||
 | 
					    hide(upload_popup_id);
 | 
				
			||||||
 | 
					    let display = o("display");
 | 
				
			||||||
 | 
					    display.style.filter = "";
 | 
				
			||||||
 | 
					    scroll_enable(true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// -----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function async_req(action, cb, add_data = null) {
 | 
				
			||||||
 | 
					    xhr = new XMLHttpRequest();
 | 
				
			||||||
 | 
					    fd = new FormData();
 | 
				
			||||||
 | 
					    fd.append("action", action);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xhr.onreadystatechange = state => {
 | 
				
			||||||
 | 
					        if (xhr.status === 200 && xhr.readyState === 4 && cb != null) {
 | 
				
			||||||
 | 
					            cb(state, xhr.response);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // további adatok hozzáfűzése a kéréshez
 | 
				
			||||||
 | 
					    if (add_data != null) {
 | 
				
			||||||
 | 
					        for (let prop in add_data) {
 | 
				
			||||||
 | 
					            if (Object.prototype.hasOwnProperty.call(add_data, prop)) {
 | 
				
			||||||
 | 
					                fd.append(prop, JSON.stringify(add_data[prop]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    xhr.open("POST", "interface.php");
 | 
				
			||||||
 | 
					    xhr.send(fd)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var total_artwork_count = 0; // összes kép alkotás száma
 | 
				
			||||||
 | 
					var thumb_largest_side = 400; // a bélyegkép hosszabb oldala 400 pixel
 | 
				
			||||||
 | 
					var batch_loading_quantity = 10; // egyszerre betöltött képek mennyisége
 | 
				
			||||||
 | 
					var autoload_enabled = false; // automatikus betöltés
 | 
				
			||||||
 | 
					var artworks_loaded_n = 0; // ennyi kép van betöltve a megjelenítőbe
 | 
				
			||||||
 | 
					var thumbnail_padding = 8; // kép körüli margó
 | 
				
			||||||
 | 
					var extra_margin = 10; // extra margó, amire számítani kell a fal generálásakor
 | 
				
			||||||
 | 
					var last_uid = ""; // utolsó UID
 | 
				
			||||||
 | 
					var wall_height = 0; // a fal magassága, pixelben
 | 
				
			||||||
 | 
					var dynamic_load_distance = 200; // ennyi pixellel a fal alja előtt indítja a dinamikus betöltést
 | 
				
			||||||
 | 
					var dynamic_loading_under_way = false; // dinamikus töltés folyamatban, ne indítsunk új requestet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var thumbnails = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// fotófal inicializálása
 | 
				
			||||||
 | 
					function init_photowall() {
 | 
				
			||||||
 | 
					    init_drag_and_drop();
 | 
				
			||||||
 | 
					    req_general_info();
 | 
				
			||||||
 | 
					    init_dynamic_loading();
 | 
				
			||||||
 | 
					    init_viewer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        compose_wall();
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// inicializálási lánc
 | 
				
			||||||
 | 
					function req_general_info() {
 | 
				
			||||||
 | 
					    async_req("general_info", recv_general_info);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function recv_general_info(state, resp) {
 | 
				
			||||||
 | 
					    // általános adatok mentése
 | 
				
			||||||
 | 
					    let resp_obj = JSON.parse(resp);
 | 
				
			||||||
 | 
					    total_artwork_count = resp_obj["total_artwork_count"];
 | 
				
			||||||
 | 
					    thumb_largest_side = resp_obj["thumb_largest_side"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // első adag képe betöltése
 | 
				
			||||||
 | 
					    req_batch();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// egy adag kép lekérése
 | 
				
			||||||
 | 
					function req_batch() {
 | 
				
			||||||
 | 
					    async_req("batch", recv_batch, {offset: artworks_loaded_n, n: batch_loading_quantity});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function recv_batch(state, resp) {
 | 
				
			||||||
 | 
					    let img_batch = JSON.parse(resp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // utolsó UID mentése, ha most történt az első letöltés
 | 
				
			||||||
 | 
					    if (artworks_loaded_n === 0) {
 | 
				
			||||||
 | 
					        last_uid = img_batch[0].UID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // betöltött művek számának növelése
 | 
				
			||||||
 | 
					    artworks_loaded_n += img_batch.length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha van még mit letölteni, akkor engedélyezzük az automatikus betöltést
 | 
				
			||||||
 | 
					    autoload_enabled = total_artwork_count > artworks_loaded_n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // újonnan kapott képek befűzése a lista ELEJÉRE!
 | 
				
			||||||
 | 
					    thumbnails = thumbnails.concat(img_batch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // fotófal összeállítása
 | 
				
			||||||
 | 
					    compose_wall();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha nem töltődött be elég kép... VIGYÁZAT: rekurzív, mint állat!
 | 
				
			||||||
 | 
					    if (wall_height < window.innerHeight) {
 | 
				
			||||||
 | 
					        req_batch();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // töltés kész
 | 
				
			||||||
 | 
					    dynamic_loading_under_way = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// fotófal összeállítása
 | 
				
			||||||
 | 
					function compose_wall() {
 | 
				
			||||||
 | 
					    // görgetési pozíció mentése
 | 
				
			||||||
 | 
					    let scroll_pos = window.scrollY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // nézőfelület szélessége és magassága
 | 
				
			||||||
 | 
					    let display = o("display");
 | 
				
			||||||
 | 
					    display.innerHTML = ""; // fal törlése
 | 
				
			||||||
 | 
					    wall_height = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let width = display.clientWidth;
 | 
				
			||||||
 | 
					    //let height = display.clientHeight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // bélyegképek méreteinek meghatározása
 | 
				
			||||||
 | 
					    for (let i = 0; i < thumbnails.length; i++) {
 | 
				
			||||||
 | 
					        let thumbnail = thumbnails[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // ha kell, akkor kiszámoljuk a kép méretét
 | 
				
			||||||
 | 
					        if (!(thumbnail.hasOwnProperty("width") && thumbnail.hasOwnProperty("height"))) {
 | 
				
			||||||
 | 
					            let ar = Number(thumbnail["AspectRatio"]);
 | 
				
			||||||
 | 
					            if (ar >= 1.0) { // a kép fekvő vagy négyzet, ezért a SZÉLESSÉG a nagyobb
 | 
				
			||||||
 | 
					                thumbnail.width = thumb_largest_side;
 | 
				
			||||||
 | 
					                thumbnail.height = thumb_largest_side / ar;
 | 
				
			||||||
 | 
					            } else { // a kép álló, ezért a MAGASSÁG a nagyobb
 | 
				
			||||||
 | 
					                thumbnail.height = thumb_largest_side;
 | 
				
			||||||
 | 
					                thumbnail.width = thumb_largest_side * ar;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // sorok előállítása
 | 
				
			||||||
 | 
					    let processed_n = 0;
 | 
				
			||||||
 | 
					    while (processed_n < artworks_loaded_n) { // amíg van még kép
 | 
				
			||||||
 | 
					        // egy sornyi kép összegyűjtése
 | 
				
			||||||
 | 
					        let total_width = 0;
 | 
				
			||||||
 | 
					        let max_thumbnail_height = 0; // maximális bélyegkép-magasság
 | 
				
			||||||
 | 
					        let line_entries = [];
 | 
				
			||||||
 | 
					        for (let i = processed_n; i < artworks_loaded_n && total_width < width; i++) { // futtatás a lista végéig, vagy amíg be nem telik a sok
 | 
				
			||||||
 | 
					            line_entries.push(thumbnails[i]); // hozzáadás a listához
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // maximális hossz növelése
 | 
				
			||||||
 | 
					            total_width += thumbnails[i].width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // (1. lépés) maximális magasság keresése
 | 
				
			||||||
 | 
					            max_thumbnail_height = thumbnails[i].height > max_thumbnail_height ? thumbnails[i].height : max_thumbnail_height;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 2. lépés: a maximális magasságnál kisebb képek felskálázása
 | 
				
			||||||
 | 
					        let total_scaled_width = 0;
 | 
				
			||||||
 | 
					        for (let i = 0; i < line_entries.length; i++) {
 | 
				
			||||||
 | 
					            let thumbnail = line_entries[i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // skálafaktor
 | 
				
			||||||
 | 
					            let K = max_thumbnail_height / thumbnail.height;
 | 
				
			||||||
 | 
					            thumbnail.scale_factor = K;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // skálázott méret kiszámítása
 | 
				
			||||||
 | 
					            thumbnail.scaledHeight = thumbnail.height * K;
 | 
				
			||||||
 | 
					            thumbnail.scaledWidth = thumbnail.width * K;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            total_scaled_width += thumbnail.scaledWidth;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 3. lépés: visszaskálázás a sor hosszára
 | 
				
			||||||
 | 
					        let summed_padding = (line_entries.length + 1) * thumbnail_padding + extra_margin; // sorhossz kiszámítása margókkal együtt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // a képeknek az ablakszélesség-összes margó helyre be kell férni, ezért:
 | 
				
			||||||
 | 
					        let k = (width - summed_padding) / total_scaled_width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (let i = 0; i < line_entries.length; i++) {
 | 
				
			||||||
 | 
					            line_entries[i].scale_factor *= k;
 | 
				
			||||||
 | 
					            line_entries[i].scale_factor = Math.round(line_entries[i].scale_factor * 1000) / 1000; // kerekítés ezredekre
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // képek elhelyzése
 | 
				
			||||||
 | 
					        for (let i = 0; i < line_entries.length; i++) {
 | 
				
			||||||
 | 
					            let container_section = document.createElement("section");
 | 
				
			||||||
 | 
					            container_section.style.backgroundColor = line_entries[i].ColorMean;
 | 
				
			||||||
 | 
					            container_section.classList.add("thumbnail-container");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            console.log(line_entries[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            let img = document.createElement("img");
 | 
				
			||||||
 | 
					            img.classList.add("thumbnail");
 | 
				
			||||||
 | 
					            container_section.style.width = img.style.width = `${line_entries[i].width * line_entries[i].scale_factor}px`;
 | 
				
			||||||
 | 
					            container_section.style.height = img.style.height = `${line_entries[i].height * line_entries[i].scale_factor}px`;
 | 
				
			||||||
 | 
					            img.src = `ARTWORKS/thumbnails/${line_entries[i].Image_FileName}`;
 | 
				
			||||||
 | 
					            img.addEventListener("load", (e) => {
 | 
				
			||||||
 | 
					                img.style.opacity = "100%";
 | 
				
			||||||
 | 
					            }, false);
 | 
				
			||||||
 | 
					            img.details = line_entries[i];
 | 
				
			||||||
 | 
					            img.addEventListener("click", (e) => {
 | 
				
			||||||
 | 
					                open_viewer(img.details);
 | 
				
			||||||
 | 
					            }, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            container_section.appendChild(img);
 | 
				
			||||||
 | 
					            display.appendChild(container_section);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // falmagasság számítása
 | 
				
			||||||
 | 
					        wall_height += 2 * thumbnail_padding + max_thumbnail_height * k;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // feldolgozottság léptetése
 | 
				
			||||||
 | 
					        processed_n += line_entries.length;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // görgetés oda, ahol eredetileg álltunk
 | 
				
			||||||
 | 
					    window.scrollTo(0, scroll_pos);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// frissítés lekérése
 | 
				
			||||||
 | 
					function req_update() {
 | 
				
			||||||
 | 
					    async_req("update", recv_update, {last_uid: last_uid});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// frissítés fogadása
 | 
				
			||||||
 | 
					function recv_update(state, resp) {
 | 
				
			||||||
 | 
					    let img_update_batch = JSON.parse(resp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // növeljük az összes és a betöltött művek számát
 | 
				
			||||||
 | 
					    artworks_loaded_n += img_update_batch.length;
 | 
				
			||||||
 | 
					    total_artwork_count += img_update_batch.length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ha van még mit letölteni, akkor engedélyezzük az automatikus betöltést
 | 
				
			||||||
 | 
					    autoload_enabled = total_artwork_count > artworks_loaded_n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // újonnan kapott képek befűzése a lista ELEJÉRE!
 | 
				
			||||||
 | 
					    thumbnails = img_update_batch.concat(thumbnails);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // utolsó UID mentése
 | 
				
			||||||
 | 
					    last_uid = thumbnails[0].UID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // fal összeállítása
 | 
				
			||||||
 | 
					    compose_wall();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DnD inicializálása
 | 
				
			||||||
 | 
					function init_drag_and_drop() {
 | 
				
			||||||
 | 
					    let drop_area = o("uploadtype");
 | 
				
			||||||
 | 
					    drop_area.addEventListener("dragover", (e) => {
 | 
				
			||||||
 | 
					        e.stopPropagation();
 | 
				
			||||||
 | 
					        e.preventDefault();
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    drop_area.addEventListener("drop", (e) => {
 | 
				
			||||||
 | 
					        e.stopPropagation();
 | 
				
			||||||
 | 
					        e.preventDefault();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (e.dataTransfer.files.length > 0) {
 | 
				
			||||||
 | 
					            pup_slide(1);
 | 
				
			||||||
 | 
					            upload_file(e.dataTransfer.files[0]);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dinamikus betöltés inicializálása
 | 
				
			||||||
 | 
					function init_dynamic_loading() {
 | 
				
			||||||
 | 
					    document.addEventListener("scroll", (e) => {
 | 
				
			||||||
 | 
					        if (autoload_enabled && !dynamic_loading_under_way) { // ha az automatikus töltés engedélyezett
 | 
				
			||||||
 | 
					            if (window.scrollY + window.innerHeight > wall_height - dynamic_load_distance) {
 | 
				
			||||||
 | 
					                dynamic_loading_under_way = true;
 | 
				
			||||||
 | 
					                req_batch();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// képnézegető inicializálása
 | 
				
			||||||
 | 
					function init_viewer() {
 | 
				
			||||||
 | 
					    let img = o("viewerimg");
 | 
				
			||||||
 | 
					    let caption_sect = o("artcaptions");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // betöltéskor a felirat megjelenítése
 | 
				
			||||||
 | 
					    img.addEventListener("load", (e) => {
 | 
				
			||||||
 | 
					        img.style.opacity='100%'
 | 
				
			||||||
 | 
					        place_artcaptions();
 | 
				
			||||||
 | 
					        show(caption_sect);
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					        setTimeout(() => {
 | 
				
			||||||
 | 
					            place_artcaptions();
 | 
				
			||||||
 | 
					        }, 400);
 | 
				
			||||||
 | 
					    }, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO görgetéskor nagyítás
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// feliratok elhelyezése
 | 
				
			||||||
 | 
					function place_artcaptions() {
 | 
				
			||||||
 | 
					    let img = o("viewerimg");
 | 
				
			||||||
 | 
					    let caption_sect = o("artcaptions");
 | 
				
			||||||
 | 
					    let brect = img.getBoundingClientRect();
 | 
				
			||||||
 | 
					    caption_sect.style.left = brect.x + "px";
 | 
				
			||||||
 | 
					    caption_sect.style.width = img.clientWidth + "px";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// képnézegető megynitása
 | 
				
			||||||
 | 
					function open_viewer(details) {
 | 
				
			||||||
 | 
					    let img = o("viewerimg");
 | 
				
			||||||
 | 
					    img.style.opacity = "0";
 | 
				
			||||||
 | 
					    img.src = "ARTWORKS/published/" + details.Image_FileName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // feliratok kiírása
 | 
				
			||||||
 | 
					    o("arttitle").innerText = details.Title;
 | 
				
			||||||
 | 
					    o("artauthor").innerText = details.Author;
 | 
				
			||||||
 | 
					    o("artdesc").innerText = details.Description;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ...
 | 
				
			||||||
 | 
					    scroll_enable(false);
 | 
				
			||||||
 | 
					    show("viewersect");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// képnézegető bezárása
 | 
				
			||||||
 | 
					function close_viewer() {
 | 
				
			||||||
 | 
					    scroll_enable(true);
 | 
				
			||||||
 | 
					    hide("viewersect");
 | 
				
			||||||
 | 
					    hide("artcaptions");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								js/slider.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								js/slider.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					function slider_slide(slider, d) {
 | 
				
			||||||
 | 
					    let slider_obj = o(slider);
 | 
				
			||||||
 | 
					    let left = slider_obj.style.left;
 | 
				
			||||||
 | 
					    let left_px = Number(left.substr(0, left.length - 2));
 | 
				
			||||||
 | 
					    left_px += d;
 | 
				
			||||||
 | 
					    slider_obj.style.left = left_px + "px";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function reset_slider(slider) {
 | 
				
			||||||
 | 
					    o(slider).style.left = "0px";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										46
									
								
								js/socket.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								js/socket.js
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *  Epagris, 2016-2017
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*AJAX socket, mindent url-encodedként [key]=adat formában küld, data csak string lehet*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ESocket {
 | 
				
			||||||
 | 
					    /*url-re rááll*/
 | 
				
			||||||
 | 
					    constructor(url) {
 | 
				
			||||||
 | 
					        this.url = url;
 | 
				
			||||||
 | 
					        this.ajaxObject = new XMLHttpRequest();
 | 
				
			||||||
 | 
					        this.lastResponse = "";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					        this.ajaxObject.open("POST", this.url, false); //szinkron!!
 | 
				
			||||||
 | 
					        this.ajaxObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /*írás parancsot ad ki*/
 | 
				
			||||||
 | 
					    send(data) {
 | 
				
			||||||
 | 
					        this.init(); //meg kell nyitni a kapcsolatot
 | 
				
			||||||
 | 
					        this.ajaxObject.send(data);
 | 
				
			||||||
 | 
					        this.lastResponse = this.ajaxObject.responseText;
 | 
				
			||||||
 | 
					        return this.lastResponse;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    /*átállítja a foglalat url-jét*/
 | 
				
			||||||
 | 
					    setURL(url) {
 | 
				
			||||||
 | 
					        this.url = url;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*socket, ami data-t EPS-be konvertálja*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*class EPSSocket extends ESocket {
 | 
				
			||||||
 | 
					    constructor(url, key) {
 | 
				
			||||||
 | 
					        super(url, key);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // adatot küld, objektumot EPS-be konvertál, ha respondingEPS = true, akkor a választ visszakonvertálja is EPS-ből
 | 
				
			||||||
 | 
					    send(data, respondingEPS = true) {
 | 
				
			||||||
 | 
					        data = EPS_encode(data);
 | 
				
			||||||
 | 
					        var escdata = data.replace(/&/g, "%26");
 | 
				
			||||||
 | 
					        var result = super.send(escdata);
 | 
				
			||||||
 | 
					        if (respondingEPS === true)
 | 
				
			||||||
 | 
					            result = EPS_decode(result);
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}*/
 | 
				
			||||||
							
								
								
									
										14
									
								
								media/loading.svg
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								media/loading.svg
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<svg width="148" height="148" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 | 
					    <circle cx="71" cy="71" r="62" stroke="#198786" stroke-width="15" fill="none" />
 | 
				
			||||||
 | 
					    <path d="M 9 78
 | 
				
			||||||
 | 
					             A 62 62 0 0 1 75 9"
 | 
				
			||||||
 | 
					            fill="none" stroke="#90dedd" stroke-width="15">
 | 
				
			||||||
 | 
					        <animateTransform attributeType="xml"
 | 
				
			||||||
 | 
					                    attributeName="transform"
 | 
				
			||||||
 | 
					                    type="rotate"
 | 
				
			||||||
 | 
					                    from="0 71 71"
 | 
				
			||||||
 | 
					                    to="360 71 71"
 | 
				
			||||||
 | 
					                    dur="1s"
 | 
				
			||||||
 | 
					                    repeatCount="indefinite"/>
 | 
				
			||||||
 | 
					    </path>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 594 B  | 
							
								
								
									
										1
									
								
								media/upload_glyph.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								media/upload_glyph.svg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?> <!--?xml version="1.0" encoding="UTF-8" standalone="no"?--> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 17 16" class="si-glyph si-glyph-inbox-upload"><!-- Generator: Sketch 3.0.3 (7891) - http://www.bohemiancoding.com/sketch --><title>843</title><defs></defs><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(1.000000, 0.000000)" fill="#434343"><path d="M10.768,2.757 L8.579,0.244 C8.264,-0.07 7.753,-0.07 7.436,0.244 L5.247,2.757 C4.932,3.072 4.884,3.633 5.198,3.947 L7,3.947 L7,5.869 C7,6.428 7.434,6.879 7.969,6.879 C8.504,6.879 8.938,6.428 8.938,5.869 L8.938,3.947 L10.719,3.947 C11.034,3.632 11.083,3.072 10.768,2.757 L10.768,2.757 Z" class="si-glyph-fill"></path><path d="M13.993,1.006 L10.703,1.006 L11.594,1.981 L13.177,1.981 L14.54,9.01 L1.505,9.01 L2.912,1.981 L4.594,1.981 L5.36,1.006 L2.073,1.006 L0.013,9.761 L0.013,13.931 C0.013,15.265 0.485,15.959 1.817,15.959 L14.097,15.959 C15.343,15.959 15.982,15.432 15.982,13.848 L15.982,9.761 L13.993,1.006 L13.993,1.006 Z M10.016,11 L5.985,11 L5.985,9.969 L10.016,9.969 L10.016,11 L10.016,11 Z" class="si-glyph-fill"></path></g></g></svg> 
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
							
								
								
									
										83
									
								
								media/upload_glyph_white.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								media/upload_glyph_white.svg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
				
			||||||
 | 
					<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<svg
 | 
				
			||||||
 | 
					   xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
				
			||||||
 | 
					   xmlns:cc="http://creativecommons.org/ns#"
 | 
				
			||||||
 | 
					   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 | 
				
			||||||
 | 
					   xmlns:svg="http://www.w3.org/2000/svg"
 | 
				
			||||||
 | 
					   xmlns="http://www.w3.org/2000/svg"
 | 
				
			||||||
 | 
					   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
 | 
				
			||||||
 | 
					   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
 | 
				
			||||||
 | 
					   viewBox="0 0 15.969 15.9505"
 | 
				
			||||||
 | 
					   class="si-glyph si-glyph-inbox-upload"
 | 
				
			||||||
 | 
					   version="1.1"
 | 
				
			||||||
 | 
					   id="svg14"
 | 
				
			||||||
 | 
					   sodipodi:docname="upload_glyph_white.svg"
 | 
				
			||||||
 | 
					   width="15.969"
 | 
				
			||||||
 | 
					   height="15.9505"
 | 
				
			||||||
 | 
					   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
 | 
				
			||||||
 | 
					  <metadata
 | 
				
			||||||
 | 
					     id="metadata18">
 | 
				
			||||||
 | 
					    <rdf:RDF>
 | 
				
			||||||
 | 
					      <cc:Work
 | 
				
			||||||
 | 
					         rdf:about="">
 | 
				
			||||||
 | 
					        <dc:format>image/svg+xml</dc:format>
 | 
				
			||||||
 | 
					        <dc:type
 | 
				
			||||||
 | 
					           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
 | 
				
			||||||
 | 
					        <dc:title>843</dc:title>
 | 
				
			||||||
 | 
					      </cc:Work>
 | 
				
			||||||
 | 
					    </rdf:RDF>
 | 
				
			||||||
 | 
					  </metadata>
 | 
				
			||||||
 | 
					  <sodipodi:namedview
 | 
				
			||||||
 | 
					     pagecolor="#ffffff"
 | 
				
			||||||
 | 
					     bordercolor="#666666"
 | 
				
			||||||
 | 
					     borderopacity="1"
 | 
				
			||||||
 | 
					     objecttolerance="10"
 | 
				
			||||||
 | 
					     gridtolerance="10"
 | 
				
			||||||
 | 
					     guidetolerance="10"
 | 
				
			||||||
 | 
					     inkscape:pageopacity="0"
 | 
				
			||||||
 | 
					     inkscape:pageshadow="2"
 | 
				
			||||||
 | 
					     inkscape:window-width="1680"
 | 
				
			||||||
 | 
					     inkscape:window-height="984"
 | 
				
			||||||
 | 
					     id="namedview16"
 | 
				
			||||||
 | 
					     showgrid="false"
 | 
				
			||||||
 | 
					     fit-margin-top="0"
 | 
				
			||||||
 | 
					     fit-margin-left="0"
 | 
				
			||||||
 | 
					     fit-margin-right="0"
 | 
				
			||||||
 | 
					     fit-margin-bottom="0"
 | 
				
			||||||
 | 
					     inkscape:zoom="20.85965"
 | 
				
			||||||
 | 
					     inkscape:cx="19.810335"
 | 
				
			||||||
 | 
					     inkscape:cy="10.309202"
 | 
				
			||||||
 | 
					     inkscape:window-x="0"
 | 
				
			||||||
 | 
					     inkscape:window-y="150"
 | 
				
			||||||
 | 
					     inkscape:window-maximized="1"
 | 
				
			||||||
 | 
					     inkscape:current-layer="g10" />
 | 
				
			||||||
 | 
					  <!-- Generator: Sketch 3.0.3 (7891) - http://www.bohemiancoding.com/sketch -->
 | 
				
			||||||
 | 
					  <title
 | 
				
			||||||
 | 
					     id="title2">843</title>
 | 
				
			||||||
 | 
					  <defs
 | 
				
			||||||
 | 
					     id="defs4" />
 | 
				
			||||||
 | 
					  <g
 | 
				
			||||||
 | 
					     id="g12"
 | 
				
			||||||
 | 
					     style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1"
 | 
				
			||||||
 | 
					     transform="translate(-1.013,-0.0085)">
 | 
				
			||||||
 | 
					    <g
 | 
				
			||||||
 | 
					       transform="translate(1)"
 | 
				
			||||||
 | 
					       id="g10"
 | 
				
			||||||
 | 
					       style="fill:#434343">
 | 
				
			||||||
 | 
					      <path
 | 
				
			||||||
 | 
					         d="M 10.768,2.757 8.579,0.244 C 8.264,-0.07 7.753,-0.07 7.436,0.244 L 5.247,2.757 C 4.932,3.072 4.884,3.633 5.198,3.947 H 7 v 1.922 c 0,0.559 0.434,1.01 0.969,1.01 0.535,0 0.969,-0.451 0.969,-1.01 V 3.947 h 1.781 c 0.315,-0.315 0.364,-0.875 0.049,-1.19 z"
 | 
				
			||||||
 | 
					         class="si-glyph-fill"
 | 
				
			||||||
 | 
					         id="path6"
 | 
				
			||||||
 | 
					         inkscape:connector-curvature="0"
 | 
				
			||||||
 | 
					         style="fill:#ffffff" />
 | 
				
			||||||
 | 
					      <path
 | 
				
			||||||
 | 
					         d="m 13.993,1.006 h -3.29 l 0.891,0.975 h 1.583 L 14.54,9.01 H 1.505 L 2.912,1.981 H 4.594 L 5.36,1.006 H 2.073 l -2.06,8.755 v 4.17 c 0,1.334 0.472,2.028 1.804,2.028 h 12.28 c 1.246,0 1.885,-0.527 1.885,-2.111 V 9.761 Z M 10.016,11 H 5.985 V 9.969 h 4.031 z"
 | 
				
			||||||
 | 
					         class="si-glyph-fill"
 | 
				
			||||||
 | 
					         id="path8"
 | 
				
			||||||
 | 
					         inkscape:connector-curvature="0"
 | 
				
			||||||
 | 
					         style="fill:#ffffff" />
 | 
				
			||||||
 | 
					    </g>
 | 
				
			||||||
 | 
					  </g>
 | 
				
			||||||
 | 
					</svg>
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 2.8 KiB  | 
							
								
								
									
										243
									
								
								phw.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								phw.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,243 @@
 | 
				
			|||||||
 | 
					@import url('https://fonts.googleapis.com/css2?family=Texturina:ital,wght@0,200;1,200&display=swap');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					    font-family: 'Texturina', serif;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    --PUP-BGCOLOR: #EFEFEF;
 | 
				
			||||||
 | 
					    --PAGE-BGCOLOR: #EFEFEF;
 | 
				
			||||||
 | 
					    --BTN-INACT-BGCOLOR: #28C1C0;
 | 
				
			||||||
 | 
					    --BTN-HOV-BGCOLOR: #198786;
 | 
				
			||||||
 | 
					    --BTN-ACT-BGCOLOR: #90dedd;
 | 
				
			||||||
 | 
					    --INPUT-INACT-BORDERCOLOR: lightgray;
 | 
				
			||||||
 | 
					    --INPUT-ACT-BORDERCOLOR: var(--BTN-HOV-BGCOLOR);
 | 
				
			||||||
 | 
					    --INPUT-BGCOLOR: var(--PUP-BGCOLOR);
 | 
				
			||||||
 | 
					    --LABEL-TCOLOR: #0d4c4b;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    --TITLE-COLOR: white;
 | 
				
			||||||
 | 
					    --AUTHOR-COLOR: lightgray;
 | 
				
			||||||
 | 
					    --DESC-COLOR: white;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    background-color: var(--PAGE-BGCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input, textarea {
 | 
				
			||||||
 | 
					    font-family: 'Texturina', serif;
 | 
				
			||||||
 | 
					    font-size: 16px;
 | 
				
			||||||
 | 
					    background-color: var(--INPUT-BGCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					label {
 | 
				
			||||||
 | 
					    text-transform: uppercase;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.upload-popup {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: fixed;
 | 
				
			||||||
 | 
					    width: 500px;
 | 
				
			||||||
 | 
					    height: 500px;
 | 
				
			||||||
 | 
					    left: calc(50vw - 250px);
 | 
				
			||||||
 | 
					    top: calc(50vh - 250px);
 | 
				
			||||||
 | 
					    background-color: var(--PUP-BGCOLOR);
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    border-radius: 0.5em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.upload-popup-slider {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    width: 1600px;
 | 
				
			||||||
 | 
					    height: 500px;
 | 
				
			||||||
 | 
					    background-color: var(--PUP-BGCOLOR);
 | 
				
			||||||
 | 
					    left: 0px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    transition: 0.3s ease-in-out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.upload-popup-inner-container {
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    width: 460px;
 | 
				
			||||||
 | 
					    height: 460px;
 | 
				
			||||||
 | 
					    margin: 10px;
 | 
				
			||||||
 | 
					    padding: 10px;
 | 
				
			||||||
 | 
					    vertical-align: bottom;
 | 
				
			||||||
 | 
					    background-color: var(--PUP-BGCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.btn,
 | 
				
			||||||
 | 
					section.upload-btn {
 | 
				
			||||||
 | 
					    padding: 0.8em 1.2em;
 | 
				
			||||||
 | 
					    background-color: var(--BTN-INACT-BGCOLOR);
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					    text-transform: uppercase;
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    border-radius: 0.2em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.btn:hover,
 | 
				
			||||||
 | 
					section.upload-btn:hover {
 | 
				
			||||||
 | 
					    background-color: var(--BTN-HOV-BGCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.btn:active,
 | 
				
			||||||
 | 
					section.upload-btn:active {
 | 
				
			||||||
 | 
					    background-color: var(--BTN-ACT-BGCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.upload-btn {
 | 
				
			||||||
 | 
					    padding: 1em 1em;
 | 
				
			||||||
 | 
					    background-color: gray;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    height: 2.4em;
 | 
				
			||||||
 | 
					    width: 2.4em;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*[shown="false"] {
 | 
				
			||||||
 | 
					    visibility: hidden;
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					    opacity: 0%;
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*[shown="true"] {
 | 
				
			||||||
 | 
					    opacity: 100%;
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					label {
 | 
				
			||||||
 | 
					    color: var(--LABEL-TCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type="text"],
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					    margin-left: 20px;
 | 
				
			||||||
 | 
					    border: 0;
 | 
				
			||||||
 | 
					    border-bottom: 2px solid var(--INPUT-INACT-BORDERCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type="text"]:focus,
 | 
				
			||||||
 | 
					textarea:focus {
 | 
				
			||||||
 | 
					    border-bottom-color: var(--INPUT-ACT-BORDERCOLOR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.upload-popup-closebtn {
 | 
				
			||||||
 | 
					    font-size: 24px;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    float: right;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    z-index: 1000;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    right: 0.5em;
 | 
				
			||||||
 | 
					    color: #c15353;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.display {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    width: calc(100vw - 10px);
 | 
				
			||||||
 | 
					    margin: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img.thumbnail {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    /*max-width: 600px;*/
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img.thumbnail:hover {
 | 
				
			||||||
 | 
					    filter: brightness(130%);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.thumbnail-container {
 | 
				
			||||||
 | 
					    margin: 4px 4px;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.viewer {
 | 
				
			||||||
 | 
					    position: fixed;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    z-index: 2000;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    height: 100vh;
 | 
				
			||||||
 | 
					    width: 100vw;
 | 
				
			||||||
 | 
					    background-color: rgba(0,0,0,0.9);
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.viewer[shown="true"]
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    opacity: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img.viewer {
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					    max-height: 100%;
 | 
				
			||||||
 | 
					    z-index: 3000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					span.art-title,
 | 
				
			||||||
 | 
					span.art-author,
 | 
				
			||||||
 | 
					span.art-desc {
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					span.art-title {
 | 
				
			||||||
 | 
					    left: 1em;
 | 
				
			||||||
 | 
					    color: var(--TITLE-COLOR);
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    font-size: 32px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					span.art-author {
 | 
				
			||||||
 | 
					    left: 2.5em;
 | 
				
			||||||
 | 
					    top: 45px;
 | 
				
			||||||
 | 
					    color: var(--AUTHOR-COLOR);
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					span.art-desc {
 | 
				
			||||||
 | 
					    left: 2.2em;
 | 
				
			||||||
 | 
					    right: 1em;
 | 
				
			||||||
 | 
					    top: 85px;
 | 
				
			||||||
 | 
					    color: var(--DESC-COLOR);
 | 
				
			||||||
 | 
					    font-size: 16px;
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section.art-captions {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    z-index: 4000;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    height: 200px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    transition: 0.3s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					section[shown="true"] {
 | 
				
			||||||
 | 
					    opacity: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user