commit d2635610a477db3edc9292d8573aa8df29d7baa9 Author: dsyoon Date: Wed Feb 25 19:12:32 2026 +0900 Initial commit after re-install diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7023b07 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.idea +.idea/* +.DS_Store +Thumbs.db +*.swp +*.swo +*.tmp + diff --git a/api/list_images.php b/api/list_images.php new file mode 100644 index 0000000..0d91473 --- /dev/null +++ b/api/list_images.php @@ -0,0 +1,35 @@ + false, 'error' => 'img directory not found']); + exit; +} + +$allowedExt = ['jpg','jpeg','png','gif','webp']; +$images = []; + +$files = scandir($imgDir); +if ($files === false) $files = []; + +foreach ($files as $f) { + if ($f === '.' || $f === '..') continue; + $path = $imgDir . DIRECTORY_SEPARATOR . $f; + if (!is_file($path)) continue; + $ext = strtolower(pathinfo($f, PATHINFO_EXTENSION)); + if (!in_array($ext, $allowedExt, true)) continue; + $images[] = $f; +} + +// stable order +natcasesort($images); +$images = array_values($images); + +echo json_encode(['ok' => true, 'images' => $images], JSON_UNESCAPED_UNICODE); + + diff --git a/api/upload_image.php b/api/upload_image.php new file mode 100644 index 0000000..ec67fe2 --- /dev/null +++ b/api/upload_image.php @@ -0,0 +1,89 @@ + false, 'error' => 'No file uploaded']); + exit; +} + +$file = $_FILES['image']; +if (!is_array($file) || !isset($file['error'])) { + http_response_code(400); + echo json_encode(['ok' => false, 'error' => 'Invalid upload']); + exit; +} + +if ($file['error'] !== UPLOAD_ERR_OK) { + http_response_code(400); + echo json_encode(['ok' => false, 'error' => 'Upload error: ' . $file['error']]); + exit; +} + +if (!isset($file['size']) || $file['size'] <= 0 || $file['size'] > $maxBytes) { + http_response_code(400); + echo json_encode(['ok' => false, 'error' => 'File too large (max 10MB)']); + exit; +} + +// Validate image content +$tmp = $file['tmp_name']; +$info = @getimagesize($tmp); +if ($info === false) { + http_response_code(400); + echo json_encode(['ok' => false, 'error' => 'Not a valid image']); + exit; +} + +$mime = isset($info['mime']) ? strtolower($info['mime']) : ''; +$allowedMimeToExt = [ + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + 'image/gif' => 'gif', + 'image/webp' => 'webp', +]; +if (!isset($allowedMimeToExt[$mime])) { + http_response_code(400); + echo json_encode(['ok' => false, 'error' => 'Unsupported image type']); + exit; +} + +$imgDir = realpath(__DIR__ . '/../img'); +if ($imgDir === false || !is_dir($imgDir)) { + http_response_code(500); + echo json_encode(['ok' => false, 'error' => 'img directory not found']); + exit; +} + +// Generate safe unique filename +$ext = $allowedMimeToExt[$mime]; +$base = 'upload_' . date('Ymd_His') . '_' . bin2hex(random_bytes(4)); +$filename = $base . '.' . $ext; +$dest = $imgDir . DIRECTORY_SEPARATOR . $filename; + +// Ensure we don't overwrite (extremely unlikely) +$tries = 0; +while (file_exists($dest) && $tries < 5) { + $filename = $base . '_' . bin2hex(random_bytes(2)) . '.' . $ext; + $dest = $imgDir . DIRECTORY_SEPARATOR . $filename; + $tries++; +} + +if (!move_uploaded_file($tmp, $dest)) { + http_response_code(500); + echo json_encode(['ok' => false, 'error' => 'Failed to save file (check permissions)']); + exit; +} + +// Conservative permissions +@chmod($dest, 0644); + +echo json_encode(['ok' => true, 'filename' => $filename], JSON_UNESCAPED_UNICODE); + + diff --git a/auth/auth.php b/auth/auth.php new file mode 100644 index 0000000..4297716 --- /dev/null +++ b/auth/auth.php @@ -0,0 +1,159 @@ + 0, + 'path' => '/', + 'httponly' => true, + 'samesite' => 'Lax', + 'secure' => $secure, + ]); + + session_start(); +} + +function dreamgirl_is_logged_in(): bool { + dreamgirl_session_start(); + // Try NCue SSO once per session (if available) + if (!isset($_SESSION['dreamgirl_sso_checked'])) { + $_SESSION['dreamgirl_sso_checked'] = true; + dreamgirl_try_ncue_sso_login(); + } + return isset($_SESSION['dreamgirl_user']) && $_SESSION['dreamgirl_user'] === 'admin'; +} + +function dreamgirl_check_credentials(string $username, string $password): bool { + if ($username !== 'admin') return false; + + // sha256("admin5004!") + $expectedSha256 = 'adcda104b73b73f8cddf5c8047a6bc0e5e1388265ed4bf0f31f704c13cbc11b7'; + $gotSha256 = hash('sha256', $password); + + return hash_equals($expectedSha256, $gotSha256); +} + +function dreamgirl_base_path(): string { + // If deployed under /dreamgirl, SCRIPT_NAME is like /dreamgirl/index.php + // If at web root, SCRIPT_NAME is like /index.php + $script = isset($_SERVER['SCRIPT_NAME']) ? (string)$_SERVER['SCRIPT_NAME'] : ''; + $dir = rtrim(str_replace('\\', '/', dirname($script)), '/'); + return ($dir === '' || $dir === '.') ? '' : $dir; +} + +function dreamgirl_url(string $path): string { + $base = dreamgirl_base_path(); + $p = ltrim($path, '/'); + return $base . '/' . $p; +} + +function dreamgirl_try_ncue_sso_login(): bool { + // If already logged in, nothing to do. + if (isset($_SESSION['dreamgirl_user']) && $_SESSION['dreamgirl_user'] === 'admin') return true; + + // Only accept SSO for the known NCue account (Google login). + $allowedEmails = ['dosangyoon2@gmail.com']; + + // Endpoint commonly provided by NextAuth/Auth.js style setups. + $endpointPath = '/api/auth/session'; + + $host = isset($_SERVER['HTTP_HOST']) ? (string)$_SERVER['HTTP_HOST'] : ''; + if ($host === '') return false; + + $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; + $url = $scheme . '://' . $host . $endpointPath; + + $cookieHeader = isset($_SERVER['HTTP_COOKIE']) ? (string)$_SERVER['HTTP_COOKIE'] : ''; + if ($cookieHeader === '') return false; + + $json = null; + + // Prefer cURL if available + if (function_exists('curl_init')) { + $ch = curl_init(); + if ($ch === false) return false; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); + curl_setopt($ch, CURLOPT_TIMEOUT, 2); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Accept: application/json', + 'Cookie: ' . $cookieHeader, + ]); + // Do not follow redirects to avoid loops + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + + $resp = curl_exec($ch); + $code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($resp !== false && $code >= 200 && $code < 300) { + $json = $resp; + } else { + return false; + } + } else { + // Fallback using stream context + $ctx = stream_context_create([ + 'http' => [ + 'method' => 'GET', + 'header' => "Accept: application/json\r\nCookie: {$cookieHeader}\r\n", + 'timeout' => 2, + 'ignore_errors' => true, + ] + ]); + $resp = @file_get_contents($url, false, $ctx); + if ($resp !== false) $json = $resp; + } + + if ($json === null) return false; + + $data = json_decode($json, true); + if (!is_array($data)) return false; + + // NextAuth shape: { user: { email: ... }, expires: ... } + $email = ''; + if (isset($data['user']) && is_array($data['user']) && isset($data['user']['email'])) { + $email = (string)$data['user']['email']; + } elseif (isset($data['email'])) { + // Alternate shape + $email = (string)$data['email']; + } + + if ($email === '' || !in_array($email, $allowedEmails, true)) return false; + + // SSO accepted: mark session as logged-in for DreamGirl. + $_SESSION['dreamgirl_user'] = 'admin'; + $_SESSION['dreamgirl_sso_email'] = $email; + $_SESSION['dreamgirl_sso_at'] = time(); + return true; +} + +function dreamgirl_require_login_page(): void { + if (dreamgirl_is_logged_in()) return; + header('Location: ' . dreamgirl_url('login.php')); + exit; +} + +function dreamgirl_require_login_json(): void { + if (dreamgirl_is_logged_in()) return; + http_response_code(401); + header('Content-Type: application/json; charset=utf-8'); + echo json_encode(['ok' => false, 'error' => 'Unauthorized'], JSON_UNESCAPED_UNICODE); + exit; +} + diff --git a/css/basic.css b/css/basic.css new file mode 100644 index 0000000..d2cfce7 --- /dev/null +++ b/css/basic.css @@ -0,0 +1,66 @@ +html, body { + margin:0; + padding:0; +} +body{ + text-align: center; + font-family: "Lucida Grande", "Lucida Sans Unicode", Verdana, Helvetica, Arial, sans-serif; + background-color: #eee; + color: #444; + font-size: 75%; +} +a{ + color: #27D; + text-decoration: none; +} +a:focus, a:hover, a:active { + text-decoration: underline; +} +p, li { + line-height: 1.8em; +} +h1, h2 { + font-family: "Trebuchet MS", Verdana, sans-serif; + margin: 0 0 10px 0; + letter-spacing:-1px; +} +h1 { + padding: 0; + font-size: 3em; + color: #333; +} +h2 { + padding-top: 10px; + font-size:2em; +} +pre { + font-size: 1.2em; + line-height: 1.2em; + overflow-x: auto; +} +div#page { + /* Full-width, responsive container */ + width: 100%; + max-width: none; + background-color: #fff; + margin: 0 auto; + text-align: left; + border-color: #ddd; + border-style: none solid solid; + border-width: medium 1px 1px; + box-sizing: border-box; +} +div#container { + padding: 20px; +} +div#ads { + clear: both; + padding: 12px 0 12px 66px; +} +div#footer { + clear: both; + color: #777; + margin: 0 auto; + padding: 20px 0 40px; + text-align: center; +} diff --git a/css/galleriffic-2.css b/css/galleriffic-2.css new file mode 100644 index 0000000..9a9058b --- /dev/null +++ b/css/galleriffic-2.css @@ -0,0 +1,324 @@ +div.content { + /* The display of content is enabled using jQuery so that the slideshow content won't display unless javascript is enabled. */ + display: none; + float: none; + flex: 1 1 auto; + min-width: 0; +} +div.content a, div.navigation a { + text-decoration: none; + color: #777; +} +div.content a:focus, div.content a:hover, div.content a:active { + text-decoration: underline; +} +div.controls { + margin-top: 5px; + height: 23px; +} +div.controls a { + padding: 5px; +} +div.ss-controls { + float: left; +} +div.nav-controls { + float: right; +} +div.slideshow-container { + position: relative; + clear: both; + /* Fill available screen height more aggressively on large displays */ + height: clamp(700px, calc(100vh - 220px), 980px); + max-width: 1100px; +} +div.loader { + position: absolute; + top: 0; + left: 0; + background-image: url('loader.gif'); + background-repeat: no-repeat; + background-position: center; + width: 100%; + height: 100%; +} +div.slideshow { + +} +div.slideshow span.image-wrapper { + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +div.slideshow a.advance-link { + display: block; + width: 100%; + height: 100%; + line-height: 1; + text-align: center; +} +div.slideshow a.advance-link:hover, div.slideshow a.advance-link:active, div.slideshow a.advance-link:visited { + text-decoration: none; +} +div.slideshow img { + vertical-align: middle; + border: 1px solid #ccc; + max-width: 100%; + max-height: 100%; + height: auto; +} +div.download { + float: right; +} +div.caption-container { + position: relative; + clear: left; + height: 75px; +} +span.image-caption { + display: block; + position: absolute; + width: 100%; + top: 0; + left: 0; +} +div.caption { + padding: 12px; +} +div.image-title { + font-weight: bold; + font-size: 1.4em; +} +div.image-desc { + line-height: 1.3em; + padding-top: 12px; +} +div.navigation { + /* The navigation style is set using jQuery so that the javascript specific styles won't be applied unless javascript is enabled. */ +} + +/* Ensure thumbnail list area clears its floated children (thumbs + pagination) */ +#thumbs-list::after { + content: ""; + display: block; + clear: both; +} + +/* Upload panel under thumbnails */ +.upload-panel { + clear: both; /* never overlap floated thumbnails/pagination */ + margin-top: 14px; + padding-top: 12px; + border-top: 1px solid #e5e5e5; +} +.upload-title { + font-weight: bold; + color: #333; + margin-bottom: 8px; +} +.dropzone { + position: relative; + border: 2px dashed #cfcfcf; + border-radius: 8px; + padding: 14px 12px; + background: #fafafa; + cursor: pointer; +} +.dropzone:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(46, 131, 255, 0.25); + border-color: #2e83ff; +} +.dropzone.dragover { + border-color: #2e83ff; + background: #f2f7ff; +} +.dropzone-text { + color: #666; + font-size: 12px; +} +.file-input { + position: absolute; + inset: 0; + opacity: 0; + width: 100%; + height: 100%; + cursor: pointer; +} +.upload-preview { + margin-top: 10px; +} +.upload-preview img { + max-width: 100%; + max-height: 160px; + border: 1px solid #ddd; + background: #fff; + display: block; +} +.preview-meta { + font-size: 11px; + color: #666; + margin-top: 6px; + word-break: break-all; +} +.upload-actions { + margin-top: 10px; + display: flex; + align-items: center; + gap: 10px; +} +.upload-actions button { + padding: 7px 12px; + border-radius: 6px; + border: 1px solid #cfcfcf; + background: #fff; + cursor: pointer; +} +.upload-actions button:disabled { + opacity: 0.5; + cursor: not-allowed; +} +.upload-status { + font-size: 12px; + color: #666; +} + +/* Fullscreen lightbox */ +.lightbox { + position: fixed; + inset: 0; + z-index: 99999; +} +.lightbox-backdrop { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.85); + z-index: 0; +} +.lightbox-content { + position: absolute; + inset: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 12px; + box-sizing: border-box; +} +.lightbox-content img { + /* Fill the dark area as much as possible while keeping aspect ratio */ + width: 98vw; + height: 98vh; + object-fit: contain; + border: 1px solid rgba(255, 255, 255, 0.2); + background: #000; +} +.lightbox-close { + position: absolute; + top: 14px; + right: 14px; + z-index: 2; /* ensure clickable above .lightbox-content */ + width: 44px; + height: 44px; + border-radius: 999px; + border: 1px solid rgba(255, 255, 255, 0.25); + background: rgba(0, 0, 0, 0.35); + color: #fff; + font-size: 28px; + line-height: 42px; + text-align: center; + cursor: pointer; +} +.lightbox-close:hover { + background: rgba(0, 0, 0, 0.55); +} + +/* ---- Layout: slideshow (left) + thumbs (right), full width ---- */ +.gallery-wrap { + display: flex; + gap: 20px; + align-items: flex-start; +} + +.gallery-wrap > #gallery.content { + flex: 1 1 auto; + min-width: 0; + order: 2; +} + +.gallery-wrap > #thumbs.navigation { + flex: 0 0 380px; + max-width: 38vw; + order: 1; +} + +@media (max-width: 900px) { + .gallery-wrap { + flex-direction: column; + } + .gallery-wrap > #thumbs.navigation { + flex: 1 1 auto; + max-width: none; + order: 2; + } +} +ul.thumbs { + clear: both; + margin: 0; + padding: 0; +} +ul.thumbs li { + float: left; + padding: 0; + margin: 5px 10px 5px 0; + list-style: none; +} +a.thumb { + padding: 2px; + display: block; + border: 1px solid #ccc; +} +ul.thumbs li.selected a.thumb { + background: #000; +} +a.thumb:focus { + outline: none; +} +ul.thumbs img { + border: none; + display: block; +} +div.pagination { + clear: both; +} +div.navigation div.top { + margin-bottom: 12px; + height: 11px; +} +div.navigation div.bottom { + margin-top: 12px; +} +div.pagination a, div.pagination span.current, div.pagination span.ellipsis { + display: block; + float: left; + margin-right: 2px; + padding: 4px 7px 2px 7px; + border: 1px solid #ccc; +} +div.pagination a:hover { + background-color: #eee; + text-decoration: none; +} +div.pagination span.current { + font-weight: bold; + background-color: #000; + border-color: #000; + color: #fff; +} +div.pagination span.ellipsis { + border: none; + padding: 5px 0 3px 2px; +} diff --git a/css/loader.gif b/css/loader.gif new file mode 100644 index 0000000..36b04f2 Binary files /dev/null and b/css/loader.gif differ diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..e5133a2 Binary files /dev/null and b/favicon.ico differ diff --git a/img/0.jpg b/img/0.jpg new file mode 100644 index 0000000..d5d2412 Binary files /dev/null and b/img/0.jpg differ diff --git a/img/0153F35051A0C0211B8BD3.jpg b/img/0153F35051A0C0211B8BD3.jpg new file mode 100644 index 0000000..ac398a1 Binary files /dev/null and b/img/0153F35051A0C0211B8BD3.jpg differ diff --git a/img/025B7F39519C5F6B044AF3.jpg b/img/025B7F39519C5F6B044AF3.jpg new file mode 100644 index 0000000..c86514a Binary files /dev/null and b/img/025B7F39519C5F6B044AF3.jpg differ diff --git a/img/034C3235519C8CD00742EC.jpg b/img/034C3235519C8CD00742EC.jpg new file mode 100644 index 0000000..051cdf7 Binary files /dev/null and b/img/034C3235519C8CD00742EC.jpg differ diff --git a/img/0c.jpg b/img/0c.jpg new file mode 100644 index 0000000..35bf71a Binary files /dev/null and b/img/0c.jpg differ diff --git a/img/0ceb20aedffea866c20b5a49f299945b_JYkaEVOxYvJ4FzuyiMQdM.png b/img/0ceb20aedffea866c20b5a49f299945b_JYkaEVOxYvJ4FzuyiMQdM.png new file mode 100644 index 0000000..df71903 Binary files /dev/null and b/img/0ceb20aedffea866c20b5a49f299945b_JYkaEVOxYvJ4FzuyiMQdM.png differ diff --git a/img/1.jpg b/img/1.jpg new file mode 100644 index 0000000..f7a3718 Binary files /dev/null and b/img/1.jpg differ diff --git a/img/12123.png b/img/12123.png new file mode 100644 index 0000000..21a633a Binary files /dev/null and b/img/12123.png differ diff --git a/img/14 (2).jpg b/img/14 (2).jpg new file mode 100644 index 0000000..660aed2 Binary files /dev/null and b/img/14 (2).jpg differ diff --git a/img/146B934A4F5306BB0F1386.jpg b/img/146B934A4F5306BB0F1386.jpg new file mode 100644 index 0000000..f9bf336 Binary files /dev/null and b/img/146B934A4F5306BB0F1386.jpg differ diff --git a/img/154CA4335051D4480CC608.jpg b/img/154CA4335051D4480CC608.jpg new file mode 100644 index 0000000..a584b6b Binary files /dev/null and b/img/154CA4335051D4480CC608.jpg differ diff --git a/img/15595D394F2D6E1108DE66.jpg b/img/15595D394F2D6E1108DE66.jpg new file mode 100644 index 0000000..433f268 Binary files /dev/null and b/img/15595D394F2D6E1108DE66.jpg differ diff --git a/img/17030D4E5047116A279BEA.jpg b/img/17030D4E5047116A279BEA.jpg new file mode 100644 index 0000000..310bfae Binary files /dev/null and b/img/17030D4E5047116A279BEA.jpg differ diff --git a/img/182bda86caced6a47e504fe4b517a3e4_YLO52GqfWYVF1q3NyrVuEVr4Tyh.jpg b/img/182bda86caced6a47e504fe4b517a3e4_YLO52GqfWYVF1q3NyrVuEVr4Tyh.jpg new file mode 100644 index 0000000..7da1a65 Binary files /dev/null and b/img/182bda86caced6a47e504fe4b517a3e4_YLO52GqfWYVF1q3NyrVuEVr4Tyh.jpg differ diff --git a/img/1893082628_4qQJ81me_0022-16.jpg b/img/1893082628_4qQJ81me_0022-16.jpg new file mode 100644 index 0000000..99c2147 Binary files /dev/null and b/img/1893082628_4qQJ81me_0022-16.jpg differ diff --git a/img/1893432958_eef8ba17_1.jpg b/img/1893432958_eef8ba17_1.jpg new file mode 100644 index 0000000..16b55c3 Binary files /dev/null and b/img/1893432958_eef8ba17_1.jpg differ diff --git a/img/19.PNG b/img/19.PNG new file mode 100644 index 0000000..9998e75 Binary files /dev/null and b/img/19.PNG differ diff --git a/img/19087D434FB861602E1A0A.jpg b/img/19087D434FB861602E1A0A.jpg new file mode 100644 index 0000000..5ab86c0 Binary files /dev/null and b/img/19087D434FB861602E1A0A.jpg differ diff --git a/img/1994171862_t9boCwEX_image.jpg b/img/1994171862_t9boCwEX_image.jpg new file mode 100644 index 0000000..1a1fc06 Binary files /dev/null and b/img/1994171862_t9boCwEX_image.jpg differ diff --git a/img/2.jpg b/img/2.jpg new file mode 100644 index 0000000..dbe80a6 Binary files /dev/null and b/img/2.jpg differ diff --git a/img/20.jpg b/img/20.jpg new file mode 100644 index 0000000..572107e Binary files /dev/null and b/img/20.jpg differ diff --git a/img/2012-07-23_10%3B55%3B38.jpg b/img/2012-07-23_10%3B55%3B38.jpg new file mode 100644 index 0000000..778830a Binary files /dev/null and b/img/2012-07-23_10%3B55%3B38.jpg differ diff --git a/img/2012030900889_0.png b/img/2012030900889_0.png new file mode 100644 index 0000000..d1f50ad Binary files /dev/null and b/img/2012030900889_0.png differ diff --git a/img/20130724192905_1543.jpg b/img/20130724192905_1543.jpg new file mode 100644 index 0000000..a850a60 Binary files /dev/null and b/img/20130724192905_1543.jpg differ diff --git a/img/20131120184957_8180.jpg b/img/20131120184957_8180.jpg new file mode 100644 index 0000000..c6094e8 Binary files /dev/null and b/img/20131120184957_8180.jpg differ diff --git a/img/206b6298c87612f682b5ef97772eb8a0_ET5lfVASQdpLm3lh4J9TDQd.jpg b/img/206b6298c87612f682b5ef97772eb8a0_ET5lfVASQdpLm3lh4J9TDQd.jpg new file mode 100644 index 0000000..bb0d02d Binary files /dev/null and b/img/206b6298c87612f682b5ef97772eb8a0_ET5lfVASQdpLm3lh4J9TDQd.jpg differ diff --git a/img/206b6298c87612f682b5ef97772eb8a0_dwHUQsoPAfLrJPdnQQllJyn.jpg b/img/206b6298c87612f682b5ef97772eb8a0_dwHUQsoPAfLrJPdnQQllJyn.jpg new file mode 100644 index 0000000..3654749 Binary files /dev/null and b/img/206b6298c87612f682b5ef97772eb8a0_dwHUQsoPAfLrJPdnQQllJyn.jpg differ diff --git a/img/212ACF4D53582D1716FD72.jpg b/img/212ACF4D53582D1716FD72.jpg new file mode 100644 index 0000000..a2f031b Binary files /dev/null and b/img/212ACF4D53582D1716FD72.jpg differ diff --git a/img/213D44455359A914075427.jpg b/img/213D44455359A914075427.jpg new file mode 100644 index 0000000..f0e0549 Binary files /dev/null and b/img/213D44455359A914075427.jpg differ diff --git a/img/2147B2455303422E2BFF66.jpg b/img/2147B2455303422E2BFF66.jpg new file mode 100644 index 0000000..ceabaab Binary files /dev/null and b/img/2147B2455303422E2BFF66.jpg differ diff --git a/img/216b0df4bffefb913a1bb76f7addd355_jKYSjW5li4iTsBG.jpg b/img/216b0df4bffefb913a1bb76f7addd355_jKYSjW5li4iTsBG.jpg new file mode 100644 index 0000000..3d85739 Binary files /dev/null and b/img/216b0df4bffefb913a1bb76f7addd355_jKYSjW5li4iTsBG.jpg differ diff --git a/img/2205084253577CA410D389.jpg b/img/2205084253577CA410D389.jpg new file mode 100644 index 0000000..d300b2e Binary files /dev/null and b/img/2205084253577CA410D389.jpg differ diff --git a/img/222C1842532C05C4082DE6.jpg b/img/222C1842532C05C4082DE6.jpg new file mode 100644 index 0000000..cd4abb6 Binary files /dev/null and b/img/222C1842532C05C4082DE6.jpg differ diff --git a/img/22338F4A52F9C7B9024DFA.jpg b/img/22338F4A52F9C7B9024DFA.jpg new file mode 100644 index 0000000..f8e3ef6 Binary files /dev/null and b/img/22338F4A52F9C7B9024DFA.jpg differ diff --git a/img/2314.png b/img/2314.png new file mode 100644 index 0000000..882978e Binary files /dev/null and b/img/2314.png differ diff --git a/img/234234.jpg b/img/234234.jpg new file mode 100644 index 0000000..d443b2b Binary files /dev/null and b/img/234234.jpg differ diff --git a/img/234234.png b/img/234234.png new file mode 100644 index 0000000..423a004 Binary files /dev/null and b/img/234234.png differ diff --git a/img/2353454545.jpg b/img/2353454545.jpg new file mode 100644 index 0000000..06f526e Binary files /dev/null and b/img/2353454545.jpg differ diff --git a/img/24.jpg b/img/24.jpg new file mode 100644 index 0000000..bf35695 Binary files /dev/null and b/img/24.jpg differ diff --git a/img/244A134D53582DA01782A7.jpg b/img/244A134D53582DA01782A7.jpg new file mode 100644 index 0000000..5116891 Binary files /dev/null and b/img/244A134D53582DA01782A7.jpg differ diff --git a/img/247536425359AC0434BDE7.jpg b/img/247536425359AC0434BDE7.jpg new file mode 100644 index 0000000..516c879 Binary files /dev/null and b/img/247536425359AC0434BDE7.jpg differ diff --git a/img/25.jpg b/img/25.jpg new file mode 100644 index 0000000..217a2f3 Binary files /dev/null and b/img/25.jpg differ diff --git a/img/2558D23E53577D7A11F4BB.jpg b/img/2558D23E53577D7A11F4BB.jpg new file mode 100644 index 0000000..b11f909 Binary files /dev/null and b/img/2558D23E53577D7A11F4BB.jpg differ diff --git a/img/26.jpg b/img/26.jpg new file mode 100644 index 0000000..71fa684 Binary files /dev/null and b/img/26.jpg differ diff --git a/img/260DBD44535780E91FFCD9.jpg b/img/260DBD44535780E91FFCD9.jpg new file mode 100644 index 0000000..66d7cf7 Binary files /dev/null and b/img/260DBD44535780E91FFCD9.jpg differ diff --git a/img/261A7B4E53582CC515DA55.jpg b/img/261A7B4E53582CC515DA55.jpg new file mode 100644 index 0000000..49a7bd3 Binary files /dev/null and b/img/261A7B4E53582CC515DA55.jpg differ diff --git a/img/26555839519C5F6A0ED774.jpg b/img/26555839519C5F6A0ED774.jpg new file mode 100644 index 0000000..d70a113 Binary files /dev/null and b/img/26555839519C5F6A0ED774.jpg differ diff --git a/img/267F854B527209130C24AC.jpg b/img/267F854B527209130C24AC.jpg new file mode 100644 index 0000000..f09e3e0 Binary files /dev/null and b/img/267F854B527209130C24AC.jpg differ diff --git a/img/27578E4551891D5228260D.jpg b/img/27578E4551891D5228260D.jpg new file mode 100644 index 0000000..35d0317 Binary files /dev/null and b/img/27578E4551891D5228260D.jpg differ diff --git a/img/28.jpg b/img/28.jpg new file mode 100644 index 0000000..8d2c41e Binary files /dev/null and b/img/28.jpg differ diff --git a/img/2956682.jpg b/img/2956682.jpg new file mode 100644 index 0000000..a2f1b0d Binary files /dev/null and b/img/2956682.jpg differ diff --git a/img/3 (1).jpg b/img/3 (1).jpg new file mode 100644 index 0000000..045835b Binary files /dev/null and b/img/3 (1).jpg differ diff --git a/img/3034777999_c116a29b_L2SbhZV.jpg b/img/3034777999_c116a29b_L2SbhZV.jpg new file mode 100644 index 0000000..ac9a6b9 Binary files /dev/null and b/img/3034777999_c116a29b_L2SbhZV.jpg differ diff --git a/img/3067451955_ObKEcQVZ_DkOcfiv25iBihDUYJnM.jpg b/img/3067451955_ObKEcQVZ_DkOcfiv25iBihDUYJnM.jpg new file mode 100644 index 0000000..888fbda Binary files /dev/null and b/img/3067451955_ObKEcQVZ_DkOcfiv25iBihDUYJnM.jpg differ diff --git a/img/32423.jpg b/img/32423.jpg new file mode 100644 index 0000000..6025228 Binary files /dev/null and b/img/32423.jpg differ diff --git a/img/32434.jpg b/img/32434.jpg new file mode 100644 index 0000000..903c1e7 Binary files /dev/null and b/img/32434.jpg differ diff --git a/img/3416945753_wSFky1gb_1318008149_201110080222298449200101_700_0.jpg b/img/3416945753_wSFky1gb_1318008149_201110080222298449200101_700_0.jpg new file mode 100644 index 0000000..f3b7304 Binary files /dev/null and b/img/3416945753_wSFky1gb_1318008149_201110080222298449200101_700_0.jpg differ diff --git a/img/342.png b/img/342.png new file mode 100644 index 0000000..c24445f Binary files /dev/null and b/img/342.png differ diff --git a/img/34234.png b/img/34234.png new file mode 100644 index 0000000..65decef Binary files /dev/null and b/img/34234.png differ diff --git a/img/34234234234234.jpg b/img/34234234234234.jpg new file mode 100644 index 0000000..ac012e4 Binary files /dev/null and b/img/34234234234234.jpg differ diff --git a/img/3434.png b/img/3434.png new file mode 100644 index 0000000..550409c Binary files /dev/null and b/img/3434.png differ diff --git a/img/343415.jpg b/img/343415.jpg new file mode 100644 index 0000000..ae263a3 Binary files /dev/null and b/img/343415.jpg differ diff --git a/img/3434234.png b/img/3434234.png new file mode 100644 index 0000000..36c953b Binary files /dev/null and b/img/3434234.png differ diff --git a/img/34342423.png b/img/34342423.png new file mode 100644 index 0000000..1e97c78 Binary files /dev/null and b/img/34342423.png differ diff --git a/img/3454546.jpg b/img/3454546.jpg new file mode 100644 index 0000000..720c938 Binary files /dev/null and b/img/3454546.jpg differ diff --git a/img/3553406573_5RFBE8Oq_1.jpg b/img/3553406573_5RFBE8Oq_1.jpg new file mode 100644 index 0000000..32333bc Binary files /dev/null and b/img/3553406573_5RFBE8Oq_1.jpg differ diff --git a/img/36.jpg b/img/36.jpg new file mode 100644 index 0000000..ac9cd59 Binary files /dev/null and b/img/36.jpg differ diff --git a/img/366554286.jpg b/img/366554286.jpg new file mode 100644 index 0000000..e92c03f Binary files /dev/null and b/img/366554286.jpg differ diff --git a/img/42e90b3a5a56ed41e8ac4eb64932a58d_1424309196.1739.jpg b/img/42e90b3a5a56ed41e8ac4eb64932a58d_1424309196.1739.jpg new file mode 100644 index 0000000..91aa6c2 Binary files /dev/null and b/img/42e90b3a5a56ed41e8ac4eb64932a58d_1424309196.1739.jpg differ diff --git a/img/4354545.jpg b/img/4354545.jpg new file mode 100644 index 0000000..4015370 Binary files /dev/null and b/img/4354545.jpg differ diff --git a/img/4411.jpg b/img/4411.jpg new file mode 100644 index 0000000..c3f9a66 Binary files /dev/null and b/img/4411.jpg differ diff --git a/img/4545452.png b/img/4545452.png new file mode 100644 index 0000000..e70f456 Binary files /dev/null and b/img/4545452.png differ diff --git a/img/480c0382e3b20b536b4de59878d72b8c_o2qdyx7gy28gqvtgck.jpg b/img/480c0382e3b20b536b4de59878d72b8c_o2qdyx7gy28gqvtgck.jpg new file mode 100644 index 0000000..d927726 Binary files /dev/null and b/img/480c0382e3b20b536b4de59878d72b8c_o2qdyx7gy28gqvtgck.jpg differ diff --git a/img/49aa448a29f219c560fdba087e094308_QgVwz9TmaLdD2uNq1hOxS4kNI8mu.jpg b/img/49aa448a29f219c560fdba087e094308_QgVwz9TmaLdD2uNq1hOxS4kNI8mu.jpg new file mode 100644 index 0000000..d3f730a Binary files /dev/null and b/img/49aa448a29f219c560fdba087e094308_QgVwz9TmaLdD2uNq1hOxS4kNI8mu.jpg differ diff --git a/img/5345.png b/img/5345.png new file mode 100644 index 0000000..6884e9f Binary files /dev/null and b/img/5345.png differ diff --git a/img/54440DE7503BC90019.jpg b/img/54440DE7503BC90019.jpg new file mode 100644 index 0000000..7f0c11d Binary files /dev/null and b/img/54440DE7503BC90019.jpg differ diff --git a/img/598340912_e4782152_1.jpg b/img/598340912_e4782152_1.jpg new file mode 100644 index 0000000..52fe99d Binary files /dev/null and b/img/598340912_e4782152_1.jpg differ diff --git a/img/598340923_665dda78_1.jpg b/img/598340923_665dda78_1.jpg new file mode 100644 index 0000000..7975c47 Binary files /dev/null and b/img/598340923_665dda78_1.jpg differ diff --git a/img/66.jpg b/img/66.jpg new file mode 100644 index 0000000..5df9855 Binary files /dev/null and b/img/66.jpg differ diff --git a/img/7.jpg b/img/7.jpg new file mode 100644 index 0000000..de077a5 Binary files /dev/null and b/img/7.jpg differ diff --git a/img/7_1.jpg b/img/7_1.jpg new file mode 100644 index 0000000..99c2147 Binary files /dev/null and b/img/7_1.jpg differ diff --git a/img/8283.png b/img/8283.png new file mode 100644 index 0000000..d17d2f1 Binary files /dev/null and b/img/8283.png differ diff --git a/img/831477005_71IGxrfy_EC82ACEBB3B8_-dp034_2_1100_08.jpg b/img/831477005_71IGxrfy_EC82ACEBB3B8_-dp034_2_1100_08.jpg new file mode 100644 index 0000000..2169396 Binary files /dev/null and b/img/831477005_71IGxrfy_EC82ACEBB3B8_-dp034_2_1100_08.jpg differ diff --git a/img/831477202_AumDRJtz_4.jpg b/img/831477202_AumDRJtz_4.jpg new file mode 100644 index 0000000..ac2b5ef Binary files /dev/null and b/img/831477202_AumDRJtz_4.jpg differ diff --git a/img/831477202_KAneU1sl_EC82ACEBB3B8_-page1_1_21.jpg b/img/831477202_KAneU1sl_EC82ACEBB3B8_-page1_1_21.jpg new file mode 100644 index 0000000..be2a882 Binary files /dev/null and b/img/831477202_KAneU1sl_EC82ACEBB3B8_-page1_1_21.jpg differ diff --git a/img/8346.png b/img/8346.png new file mode 100644 index 0000000..3ba97f0 Binary files /dev/null and b/img/8346.png differ diff --git a/img/87347878.png b/img/87347878.png new file mode 100644 index 0000000..5a3dc84 Binary files /dev/null and b/img/87347878.png differ diff --git a/img/96e0df2ab94ab2739e9ab2beee5a32e1_K3l2etyAjILwnN7.jpg b/img/96e0df2ab94ab2739e9ab2beee5a32e1_K3l2etyAjILwnN7.jpg new file mode 100644 index 0000000..037571c Binary files /dev/null and b/img/96e0df2ab94ab2739e9ab2beee5a32e1_K3l2etyAjILwnN7.jpg differ diff --git a/img/96e0df2ab94ab2739e9ab2beee5a32e1_ofGsnGhKoWPYk4DGlD.jpg b/img/96e0df2ab94ab2739e9ab2beee5a32e1_ofGsnGhKoWPYk4DGlD.jpg new file mode 100644 index 0000000..3eb0c53 Binary files /dev/null and b/img/96e0df2ab94ab2739e9ab2beee5a32e1_ofGsnGhKoWPYk4DGlD.jpg differ diff --git a/img/A1_840x1270.jpg b/img/A1_840x1270.jpg new file mode 100644 index 0000000..8941012 Binary files /dev/null and b/img/A1_840x1270.jpg differ diff --git a/img/ARA54590812a33e1.jpg b/img/ARA54590812a33e1.jpg new file mode 100644 index 0000000..f4b0862 Binary files /dev/null and b/img/ARA54590812a33e1.jpg differ diff --git a/img/ASSA0130-2.jpg b/img/ASSA0130-2.jpg new file mode 100644 index 0000000..023825e Binary files /dev/null and b/img/ASSA0130-2.jpg differ diff --git a/img/AsRhOZM.jpg b/img/AsRhOZM.jpg new file mode 100644 index 0000000..6e24a33 Binary files /dev/null and b/img/AsRhOZM.jpg differ diff --git a/img/GH0L8mN.jpg b/img/GH0L8mN.jpg new file mode 100644 index 0000000..7cbfee2 Binary files /dev/null and b/img/GH0L8mN.jpg differ diff --git a/img/Hww50700e9c8ecbf.jpg b/img/Hww50700e9c8ecbf.jpg new file mode 100644 index 0000000..2fe21c4 Binary files /dev/null and b/img/Hww50700e9c8ecbf.jpg differ diff --git a/img/K-36.jpg b/img/K-36.jpg new file mode 100644 index 0000000..5ab86c0 Binary files /dev/null and b/img/K-36.jpg differ diff --git a/img/PS13070600051.jpg b/img/PS13070600051.jpg new file mode 100644 index 0000000..a9d3cd4 Binary files /dev/null and b/img/PS13070600051.jpg differ diff --git a/img/PZsDRjz.jpg b/img/PZsDRjz.jpg new file mode 100644 index 0000000..1ccd61b Binary files /dev/null and b/img/PZsDRjz.jpg differ diff --git a/img/RabeKCQ.jpg b/img/RabeKCQ.jpg new file mode 100644 index 0000000..717dc79 Binary files /dev/null and b/img/RabeKCQ.jpg differ diff --git a/img/ZHhGdW6.jpg b/img/ZHhGdW6.jpg new file mode 100644 index 0000000..b9f2e0e Binary files /dev/null and b/img/ZHhGdW6.jpg differ diff --git a/img/b2d73d1f835b4523b2c682977320e7be.jpg b/img/b2d73d1f835b4523b2c682977320e7be.jpg new file mode 100644 index 0000000..ad5e49c Binary files /dev/null and b/img/b2d73d1f835b4523b2c682977320e7be.jpg differ diff --git a/img/b7ee1a6b6ac9b10834dcb8c8abecce5c_1413457332.6963.jpg b/img/b7ee1a6b6ac9b10834dcb8c8abecce5c_1413457332.6963.jpg new file mode 100644 index 0000000..62e63b2 Binary files /dev/null and b/img/b7ee1a6b6ac9b10834dcb8c8abecce5c_1413457332.6963.jpg differ diff --git a/img/c890ef952be19a70e81c502be9677853.jpg b/img/c890ef952be19a70e81c502be9677853.jpg new file mode 100644 index 0000000..f3b4f24 Binary files /dev/null and b/img/c890ef952be19a70e81c502be9677853.jpg differ diff --git a/img/e4ca9abba368879f6aca7cd1d729f19a_8BKsdpBoACKViz.jpg b/img/e4ca9abba368879f6aca7cd1d729f19a_8BKsdpBoACKViz.jpg new file mode 100644 index 0000000..9908ebe Binary files /dev/null and b/img/e4ca9abba368879f6aca7cd1d729f19a_8BKsdpBoACKViz.jpg differ diff --git a/img/ed45b969941ae4557b188e3c9a988378_mbkWhm1o1RkhXbXaqd5rDFuF9fPTzl.png b/img/ed45b969941ae4557b188e3c9a988378_mbkWhm1o1RkhXbXaqd5rDFuF9fPTzl.png new file mode 100644 index 0000000..e444940 Binary files /dev/null and b/img/ed45b969941ae4557b188e3c9a988378_mbkWhm1o1RkhXbXaqd5rDFuF9fPTzl.png differ diff --git a/img/f336e3e1d493d849e03f49cdb1545ce7.png b/img/f336e3e1d493d849e03f49cdb1545ce7.png new file mode 100644 index 0000000..5162ded Binary files /dev/null and b/img/f336e3e1d493d849e03f49cdb1545ce7.png differ diff --git a/img/fQPhXge.jpg b/img/fQPhXge.jpg new file mode 100644 index 0000000..489c9bb Binary files /dev/null and b/img/fQPhXge.jpg differ diff --git a/img/fhgdiufvu.jpg b/img/fhgdiufvu.jpg new file mode 100644 index 0000000..35d0317 Binary files /dev/null and b/img/fhgdiufvu.jpg differ diff --git a/img/i3791025749.jpg b/img/i3791025749.jpg new file mode 100644 index 0000000..2fe104b Binary files /dev/null and b/img/i3791025749.jpg differ diff --git a/img/jLjiN8t.jpg b/img/jLjiN8t.jpg new file mode 100644 index 0000000..841a802 Binary files /dev/null and b/img/jLjiN8t.jpg differ diff --git a/img/kimseehyang_006_07.jpg b/img/kimseehyang_006_07.jpg new file mode 100644 index 0000000..a9ca863 Binary files /dev/null and b/img/kimseehyang_006_07.jpg differ diff --git a/img/nice_362700_187164.jpg b/img/nice_362700_187164.jpg new file mode 100644 index 0000000..05f19b4 Binary files /dev/null and b/img/nice_362700_187164.jpg differ diff --git a/img/rbD6f3.jpg b/img/rbD6f3.jpg new file mode 100644 index 0000000..ceabaab Binary files /dev/null and b/img/rbD6f3.jpg differ diff --git a/img/ro-bl-0199page_05.png b/img/ro-bl-0199page_05.png new file mode 100644 index 0000000..62ea48c Binary files /dev/null and b/img/ro-bl-0199page_05.png differ diff --git a/img/ro-op-0547page_07.png b/img/ro-op-0547page_07.png new file mode 100644 index 0000000..6b6f42e Binary files /dev/null and b/img/ro-op-0547page_07.png differ diff --git a/img/ro-op-0747page_04.png b/img/ro-op-0747page_04.png new file mode 100644 index 0000000..f28276b Binary files /dev/null and b/img/ro-op-0747page_04.png differ diff --git a/img/ro-op-0747page_07.png b/img/ro-op-0747page_07.png new file mode 100644 index 0000000..e3aacd7 Binary files /dev/null and b/img/ro-op-0747page_07.png differ diff --git a/img/ro-op-0752page_04.png b/img/ro-op-0752page_04.png new file mode 100644 index 0000000..8d3f61e Binary files /dev/null and b/img/ro-op-0752page_04.png differ diff --git a/img/ro-op-0778page_05.png b/img/ro-op-0778page_05.png new file mode 100644 index 0000000..93860dd Binary files /dev/null and b/img/ro-op-0778page_05.png differ diff --git a/img/ro-op-0778page_10.png b/img/ro-op-0778page_10.png new file mode 100644 index 0000000..736c6f5 Binary files /dev/null and b/img/ro-op-0778page_10.png differ diff --git a/img/ro-op-0779page_04.png b/img/ro-op-0779page_04.png new file mode 100644 index 0000000..b4796b2 Binary files /dev/null and b/img/ro-op-0779page_04.png differ diff --git a/img/ro-op-0779page_10.png b/img/ro-op-0779page_10.png new file mode 100644 index 0000000..2ab14e7 Binary files /dev/null and b/img/ro-op-0779page_10.png differ diff --git a/img/ro-op-0782page_04.png b/img/ro-op-0782page_04.png new file mode 100644 index 0000000..6b90a87 Binary files /dev/null and b/img/ro-op-0782page_04.png differ diff --git a/img/ro-op-0782page_05.png b/img/ro-op-0782page_05.png new file mode 100644 index 0000000..5987d53 Binary files /dev/null and b/img/ro-op-0782page_05.png differ diff --git a/img/ro-op-0789page_04.png b/img/ro-op-0789page_04.png new file mode 100644 index 0000000..7137b44 Binary files /dev/null and b/img/ro-op-0789page_04.png differ diff --git a/img/s1.jpg b/img/s1.jpg new file mode 100644 index 0000000..e82dc14 Binary files /dev/null and b/img/s1.jpg differ diff --git a/img/s2.jpg b/img/s2.jpg new file mode 100644 index 0000000..4028f2a Binary files /dev/null and b/img/s2.jpg differ diff --git a/img/s3.png b/img/s3.png new file mode 100644 index 0000000..6b2b66c Binary files /dev/null and b/img/s3.png differ diff --git a/img/s4.jpg b/img/s4.jpg new file mode 100644 index 0000000..e11ee4a Binary files /dev/null and b/img/s4.jpg differ diff --git a/img/sdsdgdg.jpg b/img/sdsdgdg.jpg new file mode 100644 index 0000000..5f02375 Binary files /dev/null and b/img/sdsdgdg.jpg differ diff --git a/img/thumb_0604d49000a8fd30b9202892098ec407_1024.jpg b/img/thumb_0604d49000a8fd30b9202892098ec407_1024.jpg new file mode 100644 index 0000000..945eaa4 Binary files /dev/null and b/img/thumb_0604d49000a8fd30b9202892098ec407_1024.jpg differ diff --git a/img/thumb_1893082628_tnqU7Ii1_0022-01_1024.jpg b/img/thumb_1893082628_tnqU7Ii1_0022-01_1024.jpg new file mode 100644 index 0000000..dd12301 Binary files /dev/null and b/img/thumb_1893082628_tnqU7Ii1_0022-01_1024.jpg differ diff --git a/img/thumb_2308B24F5343ABF722B7C8_1024.jpg b/img/thumb_2308B24F5343ABF722B7C8_1024.jpg new file mode 100644 index 0000000..4110b5e Binary files /dev/null and b/img/thumb_2308B24F5343ABF722B7C8_1024.jpg differ diff --git a/img/thumb_2376BA485386EE8D06461F_1024.png b/img/thumb_2376BA485386EE8D06461F_1024.png new file mode 100644 index 0000000..ef2f208 Binary files /dev/null and b/img/thumb_2376BA485386EE8D06461F_1024.png differ diff --git a/img/thumb_237AF437535F7A4A13BC88_1024.jpg b/img/thumb_237AF437535F7A4A13BC88_1024.jpg new file mode 100644 index 0000000..245e5b7 Binary files /dev/null and b/img/thumb_237AF437535F7A4A13BC88_1024.jpg differ diff --git a/img/thumb_245CF53B51D3EA2B278B1D_1024.jpg b/img/thumb_245CF53B51D3EA2B278B1D_1024.jpg new file mode 100644 index 0000000..30eadb3 Binary files /dev/null and b/img/thumb_245CF53B51D3EA2B278B1D_1024.jpg differ diff --git a/img/thumb_480c0382e3b20b536b4de59878d72b8c_qVyZglE9OHGbVY_1024.jpg b/img/thumb_480c0382e3b20b536b4de59878d72b8c_qVyZglE9OHGbVY_1024.jpg new file mode 100644 index 0000000..019d22d Binary files /dev/null and b/img/thumb_480c0382e3b20b536b4de59878d72b8c_qVyZglE9OHGbVY_1024.jpg differ diff --git a/img/thumb_pGvtK7H_1024.jpg b/img/thumb_pGvtK7H_1024.jpg new file mode 100644 index 0000000..7f6b5dc Binary files /dev/null and b/img/thumb_pGvtK7H_1024.jpg differ diff --git a/img/upload_20251227_161807_21ae894c.png b/img/upload_20251227_161807_21ae894c.png new file mode 100644 index 0000000..ff0168e Binary files /dev/null and b/img/upload_20251227_161807_21ae894c.png differ diff --git a/img/upload_20260208_094657_4163a395.png b/img/upload_20260208_094657_4163a395.png new file mode 100644 index 0000000..65bef19 Binary files /dev/null and b/img/upload_20260208_094657_4163a395.png differ diff --git a/img/upload_20260208_095526_2a24ad50.png b/img/upload_20260208_095526_2a24ad50.png new file mode 100644 index 0000000..be6ce84 Binary files /dev/null and b/img/upload_20260208_095526_2a24ad50.png differ diff --git a/img/upload_20260208_095642_504d53eb.png b/img/upload_20260208_095642_504d53eb.png new file mode 100644 index 0000000..725007b Binary files /dev/null and b/img/upload_20260208_095642_504d53eb.png differ diff --git a/img/upload_20260208_100149_eada50b5.png b/img/upload_20260208_100149_eada50b5.png new file mode 100644 index 0000000..3c7f3ae Binary files /dev/null and b/img/upload_20260208_100149_eada50b5.png differ diff --git a/img/upload_20260208_100259_89d6959a.png b/img/upload_20260208_100259_89d6959a.png new file mode 100644 index 0000000..c935ea5 Binary files /dev/null and b/img/upload_20260208_100259_89d6959a.png differ diff --git a/img/upload_20260208_100419_fa0d84e0.png b/img/upload_20260208_100419_fa0d84e0.png new file mode 100644 index 0000000..139894f Binary files /dev/null and b/img/upload_20260208_100419_fa0d84e0.png differ diff --git a/img/upload_20260208_100529_f0d79e2e.png b/img/upload_20260208_100529_f0d79e2e.png new file mode 100644 index 0000000..65fec76 Binary files /dev/null and b/img/upload_20260208_100529_f0d79e2e.png differ diff --git a/img/upload_20260208_100630_8c6a8e62.png b/img/upload_20260208_100630_8c6a8e62.png new file mode 100644 index 0000000..1a6175a Binary files /dev/null and b/img/upload_20260208_100630_8c6a8e62.png differ diff --git a/img/upload_20260208_100723_1e43a6ce.png b/img/upload_20260208_100723_1e43a6ce.png new file mode 100644 index 0000000..7c4d5e6 Binary files /dev/null and b/img/upload_20260208_100723_1e43a6ce.png differ diff --git a/img/upload_20260208_100823_d606cd2c.png b/img/upload_20260208_100823_d606cd2c.png new file mode 100644 index 0000000..c3ee0fb Binary files /dev/null and b/img/upload_20260208_100823_d606cd2c.png differ diff --git a/img/upload_20260208_204054_dc382fd5.png b/img/upload_20260208_204054_dc382fd5.png new file mode 100644 index 0000000..849a0a6 Binary files /dev/null and b/img/upload_20260208_204054_dc382fd5.png differ diff --git a/img/upload_20260214_113121_26be4ce8.png b/img/upload_20260214_113121_26be4ce8.png new file mode 100644 index 0000000..b215d15 Binary files /dev/null and b/img/upload_20260214_113121_26be4ce8.png differ diff --git a/img/upload_20260214_113244_04d444f6.png b/img/upload_20260214_113244_04d444f6.png new file mode 100644 index 0000000..ecc302f Binary files /dev/null and b/img/upload_20260214_113244_04d444f6.png differ diff --git a/img/upload_20260214_123220_619246a1.png b/img/upload_20260214_123220_619246a1.png new file mode 100644 index 0000000..787302c Binary files /dev/null and b/img/upload_20260214_123220_619246a1.png differ diff --git a/img/upload_20260214_123919_9ffa059d.png b/img/upload_20260214_123919_9ffa059d.png new file mode 100644 index 0000000..3885268 Binary files /dev/null and b/img/upload_20260214_123919_9ffa059d.png differ diff --git a/img/upload_20260214_124131_63a70e9c.png b/img/upload_20260214_124131_63a70e9c.png new file mode 100644 index 0000000..4c5c7dd Binary files /dev/null and b/img/upload_20260214_124131_63a70e9c.png differ diff --git a/img/upload_20260214_211101_065895a5.png b/img/upload_20260214_211101_065895a5.png new file mode 100644 index 0000000..b65ad56 Binary files /dev/null and b/img/upload_20260214_211101_065895a5.png differ diff --git a/img/upload_20260214_215432_62af454f.png b/img/upload_20260214_215432_62af454f.png new file mode 100644 index 0000000..aa8dc7e Binary files /dev/null and b/img/upload_20260214_215432_62af454f.png differ diff --git a/img/upload_20260214_224206_a37be705.png b/img/upload_20260214_224206_a37be705.png new file mode 100644 index 0000000..c8fad13 Binary files /dev/null and b/img/upload_20260214_224206_a37be705.png differ diff --git a/img/upload_20260215_041401_1d1e2699.png b/img/upload_20260215_041401_1d1e2699.png new file mode 100644 index 0000000..752f7a0 Binary files /dev/null and b/img/upload_20260215_041401_1d1e2699.png differ diff --git a/img/upload_20260215_041457_3ce21e30.png b/img/upload_20260215_041457_3ce21e30.png new file mode 100644 index 0000000..804512f Binary files /dev/null and b/img/upload_20260215_041457_3ce21e30.png differ diff --git a/img/upload_20260216_100513_c08fe579.png b/img/upload_20260216_100513_c08fe579.png new file mode 100644 index 0000000..1f11de2 Binary files /dev/null and b/img/upload_20260216_100513_c08fe579.png differ diff --git a/img/upload_20260216_100643_603e1485.png b/img/upload_20260216_100643_603e1485.png new file mode 100644 index 0000000..f40c48b Binary files /dev/null and b/img/upload_20260216_100643_603e1485.png differ diff --git a/img/upload_20260216_100738_970784e8.png b/img/upload_20260216_100738_970784e8.png new file mode 100644 index 0000000..2f79740 Binary files /dev/null and b/img/upload_20260216_100738_970784e8.png differ diff --git a/img/upload_20260216_100906_5f08cab5.png b/img/upload_20260216_100906_5f08cab5.png new file mode 100644 index 0000000..2e71f3b Binary files /dev/null and b/img/upload_20260216_100906_5f08cab5.png differ diff --git a/img/upload_20260216_100948_4b21d9d4.png b/img/upload_20260216_100948_4b21d9d4.png new file mode 100644 index 0000000..9515e40 Binary files /dev/null and b/img/upload_20260216_100948_4b21d9d4.png differ diff --git a/img/upload_20260216_101032_689f041f.png b/img/upload_20260216_101032_689f041f.png new file mode 100644 index 0000000..f215085 Binary files /dev/null and b/img/upload_20260216_101032_689f041f.png differ diff --git a/img/upload_20260216_101155_9a92692c.png b/img/upload_20260216_101155_9a92692c.png new file mode 100644 index 0000000..84f0175 Binary files /dev/null and b/img/upload_20260216_101155_9a92692c.png differ diff --git a/img/upload_20260216_101457_48de6274.png b/img/upload_20260216_101457_48de6274.png new file mode 100644 index 0000000..829309a Binary files /dev/null and b/img/upload_20260216_101457_48de6274.png differ diff --git a/img/upload_20260216_101603_2eb3a2bb.png b/img/upload_20260216_101603_2eb3a2bb.png new file mode 100644 index 0000000..c99a1fc Binary files /dev/null and b/img/upload_20260216_101603_2eb3a2bb.png differ diff --git a/img/upload_20260216_102128_10a968c5.png b/img/upload_20260216_102128_10a968c5.png new file mode 100644 index 0000000..953092f Binary files /dev/null and b/img/upload_20260216_102128_10a968c5.png differ diff --git a/img/upload_20260216_102338_69f7a31c.png b/img/upload_20260216_102338_69f7a31c.png new file mode 100644 index 0000000..db67495 Binary files /dev/null and b/img/upload_20260216_102338_69f7a31c.png differ diff --git a/img/upload_20260219_093131_15a59b33.png b/img/upload_20260219_093131_15a59b33.png new file mode 100644 index 0000000..2dc4d8a Binary files /dev/null and b/img/upload_20260219_093131_15a59b33.png differ diff --git a/img/upload_20260219_093404_6e1ceebf.png b/img/upload_20260219_093404_6e1ceebf.png new file mode 100644 index 0000000..ac6ec98 Binary files /dev/null and b/img/upload_20260219_093404_6e1ceebf.png differ diff --git a/img/ㄱㄷㅅ45.jpg b/img/ㄱㄷㅅ45.jpg new file mode 100644 index 0000000..e85c58d Binary files /dev/null and b/img/ㄱㄷㅅ45.jpg differ diff --git a/img/다운로드 (18).jpg b/img/다운로드 (18).jpg new file mode 100644 index 0000000..9813b97 Binary files /dev/null and b/img/다운로드 (18).jpg differ diff --git a/img/다운로드 (19).jpg b/img/다운로드 (19).jpg new file mode 100644 index 0000000..e2501d6 Binary files /dev/null and b/img/다운로드 (19).jpg differ diff --git a/img/다운로드 (23).jpg b/img/다운로드 (23).jpg new file mode 100644 index 0000000..c63eb41 Binary files /dev/null and b/img/다운로드 (23).jpg differ diff --git a/img/다운로드 (6).jpg b/img/다운로드 (6).jpg new file mode 100644 index 0000000..1b9dbe3 Binary files /dev/null and b/img/다운로드 (6).jpg differ diff --git a/img/다운로드 (8).jpg b/img/다운로드 (8).jpg new file mode 100644 index 0000000..986c087 Binary files /dev/null and b/img/다운로드 (8).jpg differ diff --git a/img/다운로드 (9).jpg b/img/다운로드 (9).jpg new file mode 100644 index 0000000..9629090 Binary files /dev/null and b/img/다운로드 (9).jpg differ diff --git a/img/모델주빈01.jpg b/img/모델주빈01.jpg new file mode 100644 index 0000000..defe8bf Binary files /dev/null and b/img/모델주빈01.jpg differ diff --git a/img/지혜88.jpg b/img/지혜88.jpg new file mode 100644 index 0000000..051cdf7 Binary files /dev/null and b/img/지혜88.jpg differ diff --git a/img/최슬기1.jpg b/img/최슬기1.jpg new file mode 100644 index 0000000..4d317d3 Binary files /dev/null and b/img/최슬기1.jpg differ diff --git a/img/하나54.jpg b/img/하나54.jpg new file mode 100644 index 0000000..6abb104 Binary files /dev/null and b/img/하나54.jpg differ diff --git a/img/회색원피스녀0.jpg b/img/회색원피스녀0.jpg new file mode 100644 index 0000000..2d5efde Binary files /dev/null and b/img/회색원피스녀0.jpg differ diff --git a/img/회색원피스녀3.jpg b/img/회색원피스녀3.jpg new file mode 100644 index 0000000..cbba717 Binary files /dev/null and b/img/회색원피스녀3.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..102e7ba --- /dev/null +++ b/index.html @@ -0,0 +1,15 @@ + + + + + + + Redirecting... + + + + Continue + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..35ee73c --- /dev/null +++ b/index.php @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + +  stop + +
+
+
+

NCue

+
Logout
+
+ + +
+
+ + + + + + diff --git a/js/bestpic.js b/js/bestpic.js new file mode 100644 index 0000000..646fae2 --- /dev/null +++ b/js/bestpic.js @@ -0,0 +1,181 @@ +var refreshIntervalId = null; +// Prefer same-origin relative paths so HTTPS doesn't break due to mixed-content / upgrade rules. +var imgurl = "img/"; + +function getApiUrl() { + // Use scheme-relative URL so it matches http/https of the current page. + // NOTE: if the API does not support https, consider proxying it via Apache and pointing to a same-origin endpoint. + return "//api.martn.ncue.net/dreamgirl.ncue"; +} + +function getRandomIndex(n) { + var arr = new Array(); + var temp; + var rnum; + + for(var i=0; i"; + text += " girl" + (i+1) + ""; + text += " "; + text += "
"; + text += ""; + } + text += ""; + $("#thumbs-list").html(text); + initGallery(); + } + + function tryLoadFromLocalListApi() { + return $.ajax({ + url: 'api/list_images.php', + type: 'GET', + dataType: 'json', + cache: false, + timeout: 8000 + }); + } + + function fallbackToLocalManifest() { + if (window.DREAMGIRL_IMAGES && window.DREAMGIRL_IMAGES.length) { + buildThumbsFromList(window.DREAMGIRL_IMAGES); + return true; + } + // Minimal fallback if manifest is missing for some reason + buildThumbsFromList(['0.jpg','1.jpg','2.jpg','3.jpg','20.jpg','24.jpg','25.jpg','26.jpg','28.jpg','36.jpg','66.jpg']); + return true; + } + + // Prefer same-origin dynamic list (so newly uploaded images appear on refresh). + tryLoadFromLocalListApi() + .done(function(resp) { + if (resp && resp.ok && resp.images && resp.images.length) { + buildThumbsFromList(resp.images); + } else { + fallbackToLocalManifest(); + } + }) + .fail(function() { + // If local list API is unavailable, try remote JSONP API, then fall back to static manifest. + $.ajax({ + url : getApiUrl(), + type: 'GET', + data : "id=user", + dataType : "jsonp", + jsonp : "callback", + cache : false, + timeout: 15000, + success: function(data) { + try { + var filelist = data && data.filelist ? data.filelist : null; + if (!filelist || !filelist.length) return fallbackToLocalManifest(); + var names = []; + for (var i=0; i"); + }, 3000); + */ + $("#toggle").html("stop"); + } +} diff --git a/js/common.js b/js/common.js new file mode 100644 index 0000000..3e657a1 --- /dev/null +++ b/js/common.js @@ -0,0 +1,1001 @@ +/** + * @file common.js + * @author NAVER (developers@xpressengine.com) + * @brief 몇가지 유용한 & 기본적으로 자주 사용되는 자바스크립트 함수들 모음 + **/ + +/* jQuery 참조변수($) 제거 */ +if(jQuery) jQuery.noConflict(); + +(function($) { + /* OS check */ + var UA = navigator.userAgent.toLowerCase(); + $.os = { + Linux: /linux/.test(UA), + Unix: /x11/.test(UA), + Mac: /mac/.test(UA), + Windows: /win/.test(UA) + }; + $.os.name = ($.os.Windows) ? 'Windows' : + ($.os.Linux) ? 'Linux' : + ($.os.Unix) ? 'Unix' : + ($.os.Mac) ? 'Mac' : ''; + + /** + * @brief XE 공용 유틸리티 함수 + * @namespace XE + */ + window.XE = { + loaded_popup_menus : [], + addedDocument : [], + /** + * @brief 특정 name을 가진 체크박스들의 checked 속성 변경 + * @param [itemName='cart',][options={}] + */ + checkboxToggleAll : function(itemName) { + if(!is_def(itemName)) itemName='cart'; + var obj; + var options = { + wrap : null, + checked : 'toggle', + doClick : false + }; + + switch(arguments.length) { + case 1: + if(typeof(arguments[0]) == "string") { + itemName = arguments[0]; + } else { + $.extend(options, arguments[0] || {}); + itemName = 'cart'; + } + break; + case 2: + itemName = arguments[0]; + $.extend(options, arguments[1] || {}); + } + + if(options.doClick === true) options.checked = null; + if(typeof(options.wrap) == "string") options.wrap ='#'+options.wrap; + + if(options.wrap) { + obj = $(options.wrap).find('input[name="'+itemName+'"]:checkbox'); + } else { + obj = $('input[name="'+itemName+'"]:checkbox'); + } + + if(options.checked == 'toggle') { + obj.each(function() { + $(this).attr('checked', ($(this).attr('checked')) ? false : true); + }); + } else { + if(options.doClick === true) { + obj.click(); + } else { + obj.attr('checked', options.checked); + } + } + }, + + /** + * @brief 문서/회원 등 팝업 메뉴 출력 + */ + displayPopupMenu : function(ret_obj, response_tags, params) { + var target_srl = params.target_srl; + var menu_id = params.menu_id; + var menus = ret_obj.menus; + var html = ""; + + if(this.loaded_popup_menus[menu_id]) { + html = this.loaded_popup_menus[menu_id]; + + } else { + if(menus) { + var item = menus.item; + if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item); + if(item.length) { + for(var i=0;i'+str+' '; + } + } + } + this.loaded_popup_menus[menu_id] = html; + } + + /* 레이어 출력 */ + if(html) { + var area = $('#popup_menu_area').html('
    '+html+'
'); + var areaOffset = {top:params.page_y, left:params.page_x}; + + if(area.outerHeight()+areaOffset.top > $(window).height()+$(window).scrollTop()) + areaOffset.top = $(window).height() - area.outerHeight() + $(window).scrollTop(); + if(area.outerWidth()+areaOffset.left > $(window).width()+$(window).scrollLeft()) + areaOffset.left = $(window).width() - area.outerWidth() + $(window).scrollLeft(); + + area.css({ top:areaOffset.top, left:areaOffset.left }).show().focus(); + } + } + }; +}) (jQuery); + + + +/* jQuery(document).ready() */ +jQuery(function($) { + + /* select - option의 disabled=disabled 속성을 IE에서도 체크하기 위한 함수 */ + if($.browser.msie) { + $('select').each(function(i, sels) { + var disabled_exists = false; + var first_enable = []; + + for(var j=0; j < sels.options.length; j++) { + if(sels.options[j].disabled) { + sels.options[j].style.color = '#CCCCCC'; + disabled_exists = true; + }else{ + first_enable[i] = (first_enable[i] > -1) ? first_enable[i] : j; + } + } + + if(!disabled_exists) return; + + sels.oldonchange = sels.onchange; + sels.onchange = function() { + if(this.options[this.selectedIndex].disabled) { + + this.selectedIndex = first_enable[i]; + /* + if(this.options.length<=1) this.selectedIndex = -1; + else if(this.selectedIndex < this.options.length - 1) this.selectedIndex++; + else this.selectedIndex--; + */ + + } else { + if(this.oldonchange) this.oldonchange(); + } + }; + + if(sels.selectedIndex >= 0 && sels.options[ sels.selectedIndex ].disabled) sels.onchange(); + + }); + } + + /* 단락에디터 fold 컴포넌트 펼치기/접기 */ + var drEditorFold = $('.xe_content .fold_button'); + if(drEditorFold.size()) { + var fold_container = $('div.fold_container', drEditorFold); + $('button.more', drEditorFold).click(function() { + $(this).hide().next('button').show().parent().next(fold_container).show(); + }); + $('button.less', drEditorFold).click(function() { + $(this).hide().prev('button').show().parent().next(fold_container).hide(); + }); + } + + jQuery('input[type="submit"],button[type="submit"]').click(function(ev){ + var $el = jQuery(ev.currentTarget); + + setTimeout(function(){ + return function(){ + $el.attr('disabled', 'disabled'); + }; + }(), 0); + + setTimeout(function(){ + return function(){ + $el.removeAttr('disabled'); + }; + }(), 3000); + }); +}); + +(function(){ // String extension methods + function isSameUrl(a,b) { + return (a.replace(/#.*$/, '') === b.replace(/#.*$/, '')); + } + var isArray = Array.isArray || function(obj){ return Object.prototype.toString.call(obj)=='[object Array]'; }; + + /** + * @brief location.href에서 특정 key의 값을 return + **/ + String.prototype.getQuery = function(key) { + var loc = isSameUrl(this, window.location.href) ? current_url : this; + var idx = loc.indexOf('?'); + if(idx == -1) return null; + var query_string = loc.substr(idx+1, this.length), args = {}; + query_string.replace(/([^=]+)=([^&]*)(&|$)/g, function() { args[arguments[1]] = arguments[2]; }); + + var q = args[key]; + if(typeof(q)=='undefined') q = ''; + + return q; + }; + + /** + * @brief location.href에서 특정 key의 값을 return + **/ + String.prototype.setQuery = function(key, val) { + var loc = isSameUrl(this, window.location.href) ? current_url : this; + var idx = loc.indexOf('?'); + var uri = loc.replace(/#$/, ''); + var act, re, v, toReplace, query_string; + + if (typeof(val)=='undefined') val = ''; + + if (idx != -1) { + var args = {}, q_list = []; + query_string = uri.substr(idx + 1, loc.length); + uri = loc.substr(0, idx); + query_string.replace(/([^=]+)=([^&]*)(&|$)/g, function(all,key,val) { args[key] = val; }); + + args[key] = val; + + for (var prop in args) { + if (!args.hasOwnProperty(prop)) continue; + if (!(v = String(args[prop]).trim())) continue; + q_list.push(prop+'='+decodeURI(v)); + } + + query_string = q_list.join('&'); + uri = uri + (query_string ? '?' + encodeURI(query_string) : ''); + } else { + if (String(val).trim()) { + query_string = '?' + key + '=' + val; + uri = uri + encodeURI(query_string); + } + } + + var bUseSSL = !!window.enforce_ssl; + if (!bUseSSL && isArray(window.ssl_actions) && (act=uri.getQuery('act'))) { + for (var i=0,c=ssl_actions.length; i < c; i++) { + if (ssl_actions[i] === act) { + bUseSSL = true; + break; + } + } + } + + re = /https?:\/\/([^:\/]+)(:\d+|)/i; + if (bUseSSL && re.test(uri)) { + toReplace = 'https://'+RegExp.$1; + if (window.https_port && https_port != 443) toReplace += ':' + https_port; + uri = uri.replace(re, toReplace); + } + if (!bUseSSL && re.test(uri)) { + toReplace = 'http://'+RegExp.$1; + if (window.http_port && http_port != 80) toReplace += ':' + http_port; + uri = uri.replace(re, toReplace); + } + + // insert index.php if it isn't included + uri = uri.replace(/\/(index\.php)?\?/, '/index.php?'); + + return uri; + }; + + /** + * @brief string prototype으로 trim 함수 추가 + **/ + String.prototype.trim = function() { + return this.replace(/(^\s*)|(\s*$)/g, ""); + }; + +})(); + +/** + * @brief xSleep(micro time) + **/ +function xSleep(sec) { + sec = sec / 1000; + var now = new Date(); + var sleep = new Date(); + while( sleep.getTime() - now.getTime() < sec) { + sleep = new Date(); + } +} + +/** + * @brief 주어진 인자가 하나라도 defined되어 있지 않으면 false return + **/ +function isDef() { + for(var i=0; i < arguments.length; ++i) { + if(typeof(arguments[i]) == "undefined") return false; + } + return true; +} + +/** + * @brief 윈도우 오픈 + * 열려진 윈도우의 관리를 통해 window.focus()등을 FF에서도 비슷하게 구현함 + **/ +var winopen_list = []; +function winopen(url, target, attribute) { + if(typeof(xeVid)!='undefined' && url.indexOf(request_uri)>-1 && !url.getQuery('vid')) url = url.setQuery('vid',xeVid); + try { + if(target != "_blank" && winopen_list[target]) { + winopen_list[target].close(); + winopen_list[target] = null; + } + } catch(e) { + } + + if(typeof(target) == 'undefined') target = '_blank'; + if(typeof(attribute) == 'undefined') attribute = ''; + var win = window.open(url, target, attribute); + win.focus(); + if(target != "_blank") winopen_list[target] = win; +} + +/** + * @brief 팝업으로만 띄우기 + * common/tpl/popup_layout.html이 요청되는 XE내의 팝업일 경우에 사용 + **/ +function popopen(url, target) { + if(typeof(target) == "undefined") target = "_blank"; + if(typeof(xeVid)!='undefined' && url.indexOf(request_uri)>-1 && !url.getQuery('vid')) url = url.setQuery('vid',xeVid); + winopen(url, target, "width=800,height=600,scrollbars=yes,resizable=yes,toolbars=no"); +} + +/** + * @brief 메일 보내기용 + **/ +function sendMailTo(to) { + location.href="mailto:"+to; +} + +/** + * @brief url이동 (open_window 값이 N 가 아니면 새창으로 띄움) + **/ +function move_url(url, open_window) { + if(!url) return false; + if(typeof(open_window) == 'undefined') open_window = 'N'; + if(open_window=='N') { + open_window = false; + } else { + open_window = true; + } + + if(/^\./.test(url)) url = request_uri+url; + + if(open_window) { + winopen(url); + } else { + location.href=url; + } + + return false; +} + +/** + * @brief 멀티미디어 출력용 (IE에서 플래쉬/동영상 주변에 점선 생김 방지용) + **/ +function displayMultimedia(src, width, height, options) { + /*jslint evil: true */ + var html = _displayMultimedia(src, width, height, options); + if(html) document.writeln(html); +} +function _displayMultimedia(src, width, height, options) { + if(src.indexOf('files') === 0) src = request_uri + src; + + var defaults = { + wmode : 'transparent', + allowScriptAccess : 'never', + quality : 'high', + flashvars : '', + autostart : false + }; + + var params = jQuery.extend(defaults, options || {}); + var autostart = (params.autostart && params.autostart != 'false') ? 'true' : 'false'; + delete(params.autostart); + + var clsid = ""; + var codebase = ""; + var html = ""; + + if(/\.(gif|jpg|jpeg|bmp|png)$/i.test(src)){ + html = ''; + } else if(/\.flv$/i.test(src) || /\.mov$/i.test(src) || /\.moov$/i.test(src) || /\.m4v$/i.test(src)) { + html = ''; + } else if(/\.swf/i.test(src)) { + clsid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; + + if(typeof(enforce_ssl)!='undefined' && enforce_ssl){ codebase = "https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"; } + else { codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"; } + html = ''; + html += ''; + for(var name in params) { + if(params[name] != 'undefined' && params[name] !== '') { + html += ''; + } + } + html += '' + '' + ''; + } else { + if (jQuery.browser.mozilla || jQuery.browser.opera) { + // firefox and opera uses 0 or 1 for autostart parameter. + autostart = (params.autostart && params.autostart != 'false') ? '1' : '0'; + } + + html = '.popup'), w, h, dw, dh, offset; + + offset = $pc.css({overflow:'scroll'}).offset(); + + w = $pc.width(10).height(10000).get(0).scrollWidth + offset.left*2; + h = $pc.height(10).width(10000).get(0).scrollHeight + offset.top*2; + + if(w < 800) w = 800 + offset.left*2; + + dw = $win.width(); + dh = $win.height(); + + if(w != dw) window.resizeBy(w - dw, 0); + if(h != dh) window.resizeBy(0, h - dh); + + $pc.width(w-offset.left*2).css({overflow:'',height:''}); +} + +/** + * @brief 추천/비추천,스크랩,신고기능등 특정 srl에 대한 특정 module/action을 호출하는 함수 + **/ +function doCallModuleAction(module, action, target_srl) { + var params = { + target_srl : target_srl, + cur_mid : current_mid, + mid : current_mid + }; + exec_xml(module, action, params, completeCallModuleAction); +} + +function completeCallModuleAction(ret_obj, response_tags) { + if(ret_obj.message!='success') alert(ret_obj.message); + location.reload(); +} + +function completeMessage(ret_obj) { + alert(ret_obj.message); + location.reload(); +} + + + +/* 언어코드 (lang_type) 쿠키값 변경 */ +function doChangeLangType(obj) { + if(typeof(obj) == "string") { + setLangType(obj); + } else { + var val = obj.options[obj.selectedIndex].value; + setLangType(val); + } + location.href = location.href.setQuery('l', ''); +} +function setLangType(lang_type) { + var expire = new Date(); + expire.setTime(expire.getTime()+ (7000 * 24 * 3600000)); + setCookie('lang_type', lang_type, expire, '/'); +} + +/* 미리보기 */ +function doDocumentPreview(obj) { + var fo_obj = obj; + while(fo_obj.nodeName != "FORM") { + fo_obj = fo_obj.parentNode; + } + if(fo_obj.nodeName != "FORM") return; + var editor_sequence = fo_obj.getAttribute('editor_sequence'); + + var content = editorGetContent(editor_sequence); + + var win = window.open("", "previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes"); + + var dummy_obj = jQuery("#previewDocument"); + + if(!dummy_obj.length) { + jQuery( + '
'+ + ''+ + ''+ + ''+ + '
' + ).appendTo(document.body); + + dummy_obj = jQuery("#previewDocument")[0]; + } else { + dummy_obj = dummy_obj[0]; + } + + if(dummy_obj) { + dummy_obj.content.value = content; + dummy_obj.submit(); + } +} + +/* 게시글 저장 */ +function doDocumentSave(obj) { + var editor_sequence = obj.form.getAttribute('editor_sequence'); + var prev_content = editorRelKeys[editor_sequence].content.value; + if(typeof(editor_sequence)!='undefined' && editor_sequence && typeof(editorRelKeys)!='undefined' && typeof(editorGetContent)=='function') { + var content = editorGetContent(editor_sequence); + editorRelKeys[editor_sequence].content.value = content; + } + + var params={}, responses=['error','message','document_srl'], elms=obj.form.elements, data=jQuery(obj.form).serializeArray(); + jQuery.each(data, function(i, field){ + var val = jQuery.trim(field.value); + if(!val) return true; + if(/\[\]$/.test(field.name)) field.name = field.name.replace(/\[\]$/, ''); + if(params[field.name]) params[field.name] += '|@|'+val; + else params[field.name] = field.value; + }); + + exec_xml('document','procDocumentTempSave', params, completeDocumentSave, responses, params, obj.form); + + editorRelKeys[editor_sequence].content.value = prev_content; + return false; +} + +function completeDocumentSave(ret_obj) { + jQuery('input[name=document_srl]').eq(0).val(ret_obj.document_srl); + alert(ret_obj.message); +} + +/* 저장된 게시글 불러오기 */ +var objForSavedDoc = null; +function doDocumentLoad(obj) { + // 저장된 게시글 목록 불러오기 + objForSavedDoc = obj.form; + popopen(request_uri.setQuery('module','document').setQuery('act','dispTempSavedList')); +} + +/* 저장된 게시글의 선택 */ +function doDocumentSelect(document_srl, module) { + if(!opener || !opener.objForSavedDoc) { + window.close(); + return; + } + + if(module===undefined) { + module = 'document'; + } + + // 게시글을 가져와서 등록하기 + switch(module) { + case 'page' : + var url = opener.current_url; + url = url.setQuery('document_srl', document_srl); + + if(url.getQuery('act') === 'dispPageAdminMobileContentModify') + { + url = url.setQuery('act', 'dispPageAdminMobileContentModify'); + } + else + { + url = url.setQuery('act', 'dispPageAdminContentModify'); + } + opener.location.href = url; + break; + default : + opener.location.href = opener.current_url.setQuery('document_srl', document_srl).setQuery('act', 'dispBoardWrite'); + break; + } + window.close(); +} + + +/* 스킨 정보 */ +function viewSkinInfo(module, skin) { + popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+module+"&skin="+skin, 'SkinInfo'); +} + + +/* 관리자가 문서를 관리하기 위해서 선택시 세션에 넣음 */ +var addedDocument = []; +function doAddDocumentCart(obj) { + var srl = obj.value; + addedDocument[addedDocument.length] = srl; + setTimeout(function() { callAddDocumentCart(addedDocument.length); }, 100); +} + +function callAddDocumentCart(document_length) { + if(addedDocument.length<1 || document_length != addedDocument.length) return; + var params = []; + params.srls = addedDocument.join(","); + exec_xml("document","procDocumentAddCart", params, null); + addedDocument = []; +} + +/* ff의 rgb(a,b,c)를 #... 로 변경 */ +function transRGB2Hex(value) { + if(!value) return value; + if(value.indexOf('#') > -1) return value.replace(/^#/, ''); + + if(value.toLowerCase().indexOf('rgb') < 0) return value; + value = value.replace(/^rgb\(/i, '').replace(/\)$/, ''); + value_list = value.split(','); + + var hex = ''; + for(var i = 0; i < value_list.length; i++) { + var color = parseInt(value_list[i], 10).toString(16); + if(color.length == 1) color = '0'+color; + hex += color; + } + return hex; +} + +/* 보안 로그인 모드로 전환 */ +function toggleSecuritySignIn() { + var href = location.href; + if(/https:\/\//i.test(href)) location.href = href.replace(/^https/i,'http'); + else location.href = href.replace(/^http/i,'https'); +} + +function reloadDocument() { + location.reload(); +} + + +/** +* +* Base64 encode / decode +* http://www.webtoolkit.info/ +* +**/ + +var Base64 = { + + // private property + _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + + // public method for encoding + encode : function (input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + input = Base64._utf8_encode(input); + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + + this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) + + this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4); + + } + + return output; + }, + + // public method for decoding + decode : function (input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + enc1 = this._keyStr.indexOf(input.charAt(i++)); + enc2 = this._keyStr.indexOf(input.charAt(i++)); + enc3 = this._keyStr.indexOf(input.charAt(i++)); + enc4 = this._keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + + output = Base64._utf8_decode(output); + + return output; + + }, + + // private method for UTF-8 encoding + _utf8_encode : function (string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + + return utftext; + }, + + // private method for UTF-8 decoding + _utf8_decode : function (utftext) { + var string = ""; + var i = 0; + var c = 0, c1 = 0, c2 = 0, c3 = 0; + + while ( i < utftext.length ) { + c = utftext.charCodeAt(i); + + if (c < 128) { + string += String.fromCharCode(c); + i++; + } + else if((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i+1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } + else { + c2 = utftext.charCodeAt(i+1); + c3 = utftext.charCodeAt(i+2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + + return string; + } +}; + + + + + + +/* ---------------------------------------------- + * DEPRECATED + * 하위호환용으로 남겨 놓음 + * ------------------------------------------- */ + +if(typeof(resizeImageContents) == 'undefined') { + window.resizeImageContents = function() {}; +} + +if(typeof(activateOptionDisabled) == 'undefined') { + window.activateOptionDisabled = function() {}; +} + +objectExtend = jQuery.extend; + +/** + * @brief 특정 Element의 display 옵션 토글 + **/ +function toggleDisplay(objId) { + jQuery('#'+objId).toggle(); +} + +/** + * @brief 에디터에서 사용하되 내용 여닫는 코드 (zb5beta beta 호환용으로 남겨 놓음) + **/ +function svc_folder_open(id) { + jQuery("#_folder_open_"+id).hide(); + jQuery("#_folder_close_"+id).show(); + jQuery("#_folder_"+id).show(); +} +function svc_folder_close(id) { + jQuery("#_folder_open_"+id).show(); + jQuery("#_folder_close_"+id).hide(); + jQuery("#_folder_"+id).hide(); +} + +/** + * @brief 날짜 선택 (달력 열기) + **/ +function open_calendar(fo_id, day_str, callback_func) { + if(typeof(day_str)=="undefined") day_str = ""; + + var url = "./common/tpl/calendar.php?"; + if(fo_id) url+="fo_id="+fo_id; + if(day_str) url+="&day_str="+day_str; + if(callback_func) url+="&callback_func="+callback_func; + + popopen(url, 'Calendar'); +} + +var loaded_popup_menus = XE.loaded_popup_menus; +function createPopupMenu() {} +function chkPopupMenu() {} +function displayPopupMenu(ret_obj, response_tags, params) { + XE.displayPopupMenu(ret_obj, response_tags, params); +} + +function GetObjLeft(obj) { + return jQuery(obj).offset().left; +} +function GetObjTop(obj) { + return jQuery(obj).offset().top; +} + +function replaceOuterHTML(obj, html) { + jQuery(obj).replaceWith(html); +} + +function getOuterHTML(obj) { + return jQuery(obj).html().trim(); +} + +function setCookie(name, value, expire, path) { + var s_cookie = name + "=" + escape(value) + + ((!expire) ? "" : ("; expires=" + expire.toGMTString())) + + "; path=" + ((!path) ? "/" : path); + + document.cookie = s_cookie; +} + +function getCookie(name) { + var match = document.cookie.match(new RegExp(name+'=(.*?)(?:;|$)')); + if(match) return unescape(match[1]); +} + +function is_def(v) { + return (typeof(v)!='undefined'); +} + +function ucfirst(str) { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +function get_by_id(id) { + return document.getElementById(id); +} + +jQuery(function($){ + // display popup menu that contains member actions and document actions + $(document).on('click', function(evt) { + var $area = $('#popup_menu_area'); + if(!$area.length) $area = $('