diff --git a/README.rst b/README.rst index add2b63..e336720 100644 --- a/README.rst +++ b/README.rst @@ -90,13 +90,13 @@ Download by character name: .. code-block:: bash - nhentai --character kuro von einsbern --download + nhentai --character "kuro von einsbern" --download Download by parody name: .. code-block:: bash - nhentai --parody the idolmaster --download + nhentai --parody "the idolmaster" --download Download by group name: @@ -108,7 +108,7 @@ Download using multiple tags (--tag, --character, --paordy and --group supported .. code-block:: bash - nhentai --tag lolicon, teasing --artist tamano kedama, atte nanakusa + nhentai --tag "lolicon, teasing" --artist "tamano kedama, atte nanakusa" Download your favorites with delay: diff --git a/nhentai/command.py b/nhentai/command.py index 2dad43f..41ba40e 100644 --- a/nhentai/command.py +++ b/nhentai/command.py @@ -71,7 +71,7 @@ def main(): doujinshi_ids = [i['id'] for i in doujinshis] elif options.language: - doujinshis = tag_parser(options.group, max_page=options.max_page, index=5) + doujinshis = tag_parser(options.language, max_page=options.max_page, index=5) print_doujinshi(doujinshis) if options.is_download and doujinshis: doujinshi_ids = [i['id'] for i in doujinshis] diff --git a/nhentai/constant.py b/nhentai/constant.py index ecbee17..5641618 100644 --- a/nhentai/constant.py +++ b/nhentai/constant.py @@ -21,7 +21,8 @@ TAG_URL = ['%s/tag' % BASE_URL, '%s/artist' % BASE_URL, '%s/character' % BASE_URL, '%s/parody' % BASE_URL, - '%s/group' % BASE_URL] + '%s/group' % BASE_URL, + '%s/language' % BASE_URL] TAG_API_URL = '%s/api/galleries/tagged' % BASE_URL LOGIN_URL = '%s/login/' % BASE_URL diff --git a/nhentai/parser.py b/nhentai/parser.py index 081e85a..3c01af1 100644 --- a/nhentai/parser.py +++ b/nhentai/parser.py @@ -134,7 +134,7 @@ def doujinshi_parser(id_): doujinshi['subtitle'] = subtitle.text if subtitle else '' doujinshi_cover = html.find('div', attrs={'id': 'cover'}) - img_id = re.search('/galleries/([\d]+)/cover\.(jpg|png)$', doujinshi_cover.a.img.attrs['data-src']) + img_id = re.search('/galleries/([\d]+)/cover\.(jpg|png|gif)$', doujinshi_cover.a.img.attrs['data-src']) ext = [] for i in html.find_all('div', attrs={'class': 'thumb-container'}): @@ -198,7 +198,7 @@ def tag_parser(tag_name, sorting='date', max_page=1, index=0): if ',' in tag_name: tag_name = [i.strip().replace(' ', '-') for i in tag_name.split(',')] else: - tag_name = tag_name.replace(' ', '-') + tag_name = tag_name.strip().replace(' ', '-') if sorting == 'date': sorting = '' diff --git a/nhentai/serializer.py b/nhentai/serializer.py index 5b5675c..357da6c 100644 --- a/nhentai/serializer.py +++ b/nhentai/serializer.py @@ -1,24 +1,79 @@ # coding: utf-8 +import json +import os - -def serialize(doujinshi): - metadata = {'Title' : doujinshi.name, - 'Subtitle' : doujinshi.info.subtitle} +def serialize(doujinshi, dir): + metadata = {'title' : doujinshi.name, + 'subtitle' : doujinshi.info.subtitle} if doujinshi.info.date: - metadata['Upload_Date'] = doujinshi.info.date + metadata['upload_date'] = doujinshi.info.date if doujinshi.info.parodies: - metadata['Parodies'] = [i.strip() for i in doujinshi.info.parodies.split(',')] + metadata['parody'] = [i.strip() for i in doujinshi.info.parodies.split(',')] if doujinshi.info.characters: - metadata['Characters'] = [i.strip() for i in doujinshi.info.characters.split(',')] + metadata['character'] = [i.strip() for i in doujinshi.info.characters.split(',')] if doujinshi.info.tags: - metadata['Tags'] = [i.strip() for i in doujinshi.info.tags.split(',')] + metadata['tag'] = [i.strip() for i in doujinshi.info.tags.split(',')] if doujinshi.info.artists: - metadata['Artists'] = [i.strip() for i in doujinshi.info.artists.split(',')] + metadata['artist'] = [i.strip() for i in doujinshi.info.artists.split(',')] if doujinshi.info.groups: - metadata['Groups'] = [i.strip() for i in doujinshi.info.groups.split(',')] + metadata['group'] = [i.strip() for i in doujinshi.info.groups.split(',')] if doujinshi.info.languages: - metadata['Languages'] = [i.strip() for i in doujinshi.info.languages.split(',')] - metadata['Categories'] = doujinshi.info.categories + metadata['language'] = [i.strip() for i in doujinshi.info.languages.split(',')] + metadata['category'] = doujinshi.info.categories metadata['URL'] = doujinshi.url metadata['Pages'] = doujinshi.pages - return metadata + with open(os.path.join(dir, 'metadata.json'), 'w', encoding="raw_unicode_escape") as f: + json.dump(metadata, f, separators=','':') + + +def merge_json(): + lst = [] + output_dir = "./" + os.chdir(output_dir) + doujinshi_dirs = next(os.walk('.'))[1] + for folder in doujinshi_dirs: + files = os.listdir(folder) + if 'metadata.json' not in files: + continue + data_folder = output_dir + folder + '/' + 'metadata.json' + json_file = open(data_folder, 'r') + json_dict = {} + json_dict = json.load(json_file) + json_dict['Folder'] = folder + lst.append(json_dict) + return lst + + +def serialize_unique(lst): + dictionary = {} + parody = [] + character = [] + tag = [] + artist = [] + group = [] + for dic in lst: + if 'parody' in dic: + parody.extend([i for i in dic['parody']]) + if 'character' in dic: + character.extend([i for i in dic['character']]) + if 'tag' in dic: + tag.extend([i for i in dic['tag']]) + if 'artist' in dic: + artist.extend([i for i in dic['artist']]) + if 'group' in dic: + group.extend([i for i in dic['group']]) + dictionary['parody'] = list(set(parody)) + dictionary['character'] = list(set(character)) + dictionary['tag'] = list(set(tag)) + dictionary['artist'] = list(set(artist)) + dictionary['group'] = list(set(group)) + return dictionary + + +def set_js_database(): + with open('data.js', 'w') as f: + indexed_json = merge_json() + unique_json = json.dumps(serialize_unique(indexed_json), separators=','':') + indexed_json = json.dumps(indexed_json, separators=','':') + f.write('var data = '+indexed_json) + f.write(';\nvar tags = '+unique_json) diff --git a/nhentai/utils.py b/nhentai/utils.py index 4af629d..16f8bdf 100644 --- a/nhentai/utils.py +++ b/nhentai/utils.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals, print_function import sys import re import os -import json import string import zipfile import shutil @@ -12,7 +11,7 @@ import requests from nhentai import constant from nhentai.logger import logger -from nhentai.serializer import serialize +from nhentai.serializer import serialize, set_js_database def request(method, url, **kwargs): @@ -81,22 +80,19 @@ def generate_html(output_dir='.', doujinshi_obj=None): image_html += '<img src="{0}" class="image-item"/>\n'\ .format(image) - html = readfile('viewer/index.html') css = readfile('viewer/styles.css') js = readfile('viewer/scripts.js') if doujinshi_obj is not None: - metadata = serialize(doujinshi_obj) + serialize(doujinshi_obj, doujinshi_dir) + name = doujinshi_obj.name if sys.version_info < (3, 0): - metadata['Title'] = doujinshi_obj.name.encode('utf-8') - metadata['Subtitle'] = doujinshi_obj.info.subtitle.encode('utf-8') - with open(os.path.join(doujinshi_dir, 'metadata.json'), 'w') as f: - json.dump(metadata, f, separators=','':') + name = doujinshi_obj.name.encode('utf-8') else: - metadata= {'Title': 'nHentai HTML Viewer'} + name = {'title': 'nHentai HTML Viewer'} - data = html.format(TITLE=metadata['Title'], IMAGES=image_html, SCRIPTS=js, STYLES=css) + data = html.format(TITLE=name, IMAGES=image_html, SCRIPTS=js, STYLES=css) try: if sys.version_info < (3, 0): with open(os.path.join(doujinshi_dir, 'index.html'), 'w') as f: @@ -117,10 +113,12 @@ def generate_main_html(output_dir='./'): Default output folder will be the CLI path. """ - count = 0 image_html = '' + main = readfile('viewer/main.html') css = readfile('viewer/main.css') + js = readfile('viewer/main.js') + element = '\n\ <div class="gallery-favorite">\n\ <div class="gallery">\n\ @@ -135,12 +133,10 @@ def generate_main_html(output_dir='./'): doujinshi_dirs = next(os.walk('.'))[1] for folder in doujinshi_dirs: - files = os.listdir(folder) files.sort() if 'index.html' in files: - count += 1 logger.info('Add doujinshi \'{}\''.format(folder)) else: continue @@ -152,18 +148,19 @@ def generate_main_html(output_dir='./'): title = 'nHentai HTML Viewer' image_html += element.format(FOLDER=folder, IMAGE=image, TITLE=title) - if image_html == '': logger.warning('None index.html found, --gen-main paused.') return try: - data = main.format(STYLES=css, COUNT=count, PICTURE=image_html) + data = main.format(STYLES=css, SCRIPTS=js, PICTURE=image_html) if sys.version_info < (3, 0): with open('./main.html', 'w') as f: f.write(data) else: with open('./main.html', 'wb') as f: f.write(data.encode('utf-8')) + shutil.copy(os.path.dirname(__file__)+'/viewer/logo.png', './') + set_js_database() logger.log( 15, 'Main Viewer has been write to \'{0}main.html\''.format(output_dir)) except Exception as e: @@ -217,5 +214,3 @@ an invalid filename. def signal_handler(signal, frame): logger.error('Ctrl-C signal received. Stopping...') exit(1) - - diff --git a/nhentai/viewer/logo.png b/nhentai/viewer/logo.png new file mode 100644 index 0000000..c613209 Binary files /dev/null and b/nhentai/viewer/logo.png differ diff --git a/nhentai/viewer/main.css b/nhentai/viewer/main.css index 60494e3..b621234 100644 --- a/nhentai/viewer/main.css +++ b/nhentai/viewer/main.css @@ -1,79 +1,14 @@ /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ /* Original from https://static.nhentai.net/css/main_style.9bb9b703e601.css */ -html { - font-family: sans-serif; - line-height: 1.15; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100% -} - -body { - margin: 0 -} - -h1 { - font-size: 2em; - margin: .67em 0 -} - a { background-color: transparent; -webkit-text-decoration-skip: objects } -a:active,a:hover { - outline-width: 0 -} - -abbr[title] { - border-bottom: none; - text-decoration: underline; - text-decoration: underline dotted -} - -b,strong { - font-weight: inherit -} - -b,strong { - font-weight: bolder -} - -code,kbd,samp { - font-family: monospace,monospace; - font-size: 1em -} - -small { - font-size: 80% -} - -sub,sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline -} - -sub { - bottom: -.25em -} - -sup { - top: -.5em -} - img { border-style: none } -label { - display: block; - font-weight: 700; - text-align: justify; - white-space: nowrap -} - html { box-sizing: border-box } @@ -82,10 +17,6 @@ html { box-sizing: inherit } -h1,h2,h3,h4,h5,h6 { - font-weight: 700 -} - body,html { font-family: 'Noto Sans',sans-serif; font-size: 14px; @@ -104,25 +35,6 @@ a { color: #34495e } -a:hover { - text-decoration: none; - color: #ed2553 -} - -a.count { - color: #999 -} - -a.bold { - font-weight: 700 -} - -code { - color: #ed2553; - border: 1px solid #fbd3dd; - background-color: #fef0f3 -} - blockquote { border: 0 } @@ -130,15 +42,15 @@ blockquote { .container { display: block; clear: both; - margin-left: auto; - margin-right: auto; - margin-bottom: 10px; - margin-top: 10px; - padding: 10px; + margin-left: 15rem; + margin-right: 0.5rem; + margin-bottom: 5px; + margin-top: 5px; + padding: 4px; border-radius: 9px; background-color: #ecf0f1; - width: 100%; - max-width: 1200px + width: 100% - 15rem; + max-width: 1500px } .gallery,.gallery-favorite,.thumb-container { @@ -156,7 +68,6 @@ blockquote { .gallery,.gallery-favorite,.thumb-container { width:19%; margin: 3px; - margin-bottom: 8px } } @@ -222,6 +133,186 @@ blockquote { width: 100% } +.sidenav { + height: 100%; + width: 15rem; + position: fixed; + z-index: 1; + top: 0; + left: 0; + background-color: #0d0d0d; + overflow: hidden; + + padding-top: 20px; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Old versions of Firefox */ + ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; +} + +.sidenav a { + background-color: #eee; + padding: 5px 0px 5px 15px; + text-decoration: none; + font-size: 15px; + color: #0d0d0d9; + display: block; + text-align: left; +} +.sidenav img { + width:100%; + padding: 0px 5px 0px 5px; + +} + +.sidenav h1 { + font-size: 1.5em; + margin: 0px 0px 10px; +} + +.sidenav a:hover { + color: white; + background-color: #EC2754; +} + +.accordion { + font-weight: bold; + background-color: #eee; + color: #444; + padding: 10px 0px 5px 8px; + width: 100%; + border: none; + text-align: left; + outline: none; + font-size: 15px; + transition: 0.4s; + cursor:pointer; +} + +.accordion:hover { + background-color: #ddd; +} + +.accordion.active{ + background-color:#ddd; +} + +.nav-btn { + font-weight: bold; + background-color: #eee; + color: #444; + padding: 8px 8px 5px 9px; + width: 100%; + border: none; + text-align: left; + outline: none; + font-size: 15px; +} + +.hidden { + display:none; +} + +.nav-btn a{ + font-weight: normal; + padding-right: 10px; + border-radius: 15px; + cursor: crosshair +} + +.options { + display:block; + padding: 0px 0px 0px 0px; + background-color: #eee; + max-height: 0; + overflow: hidden; + transition: max-height 0.2s ease-out; + cursor:pointer; +} + +.search{ + background-color: #eee; + padding-right:40px; + white-space: nowrap; + padding-top: 5px; + height:43px; + +} + +.search input{ + border-top-right-radius:10px; + padding-top:0; + padding-bottom:0; + font-size:1em; + width:100%; + height:38px; + vertical-align:top; +} + +.btn{ + border-top-left-radius:10px; + color:#fff; + font-size:100%; + padding: 8px; + width:38px; + background-color:#ed2553; +} + +#tags{ + text-align:left; + display: flex; + width:15rem; + justify-content: start; + margin: 2px 2px 2px 0px; + flex-wrap: wrap; +} + +.btn-2{ + font-weight:700; + padding-right:0.5rem; + padding-left:0.5rem; + color:#fff; + border:0; + font-size:100%; + height:1.25rem; + outline: 0; + border-radius: 0.3rem; + cursor: pointer; + margin:0.15rem; + transition: all 1s linear; +} + +.btn-2#parody{ + background-color: red; +} + +.btn-2#character{ + background-color: blue; +} + +.btn-2#tag{ + background-color: green; +} + +.btn-2#artist{ + background-color: fuchsia; +} + +.btn-2#group{ + background-color: teal; +} + +.btn-2.hover{ + filter: saturate(20%) +} + +input,input:focus{ + border:none; + outline:0; +} + html.theme-black,html.theme-black body { color: #d9d9d9; background-color: #0d0d0d @@ -231,14 +322,6 @@ html.theme-black #thumbnail-container,html.theme-black .container { background-color: #1f1f1f } -html.theme-black #thumbnail-container .lazyload,html.theme-black .lazyload { - background-color: #262626 -} - -html.theme-black #thumbnail-container .lazyload-loading,html.theme-black .lazyload-loading { - background-color: #2e2e2e -} - html.theme-black .gallery:hover .caption { box-shadow: 0 10px 20px rgba(0,0,0,.5) } @@ -246,10 +329,4 @@ html.theme-black .gallery:hover .caption { html.theme-black .caption { background-color: #404040; color: #d9d9d9 -} - -html.theme-black code { - color: #ed2553; - border: none; - background-color: #292929 } \ No newline at end of file diff --git a/nhentai/viewer/main.html b/nhentai/viewer/main.html index b966780..af911cb 100644 --- a/nhentai/viewer/main.html +++ b/nhentai/viewer/main.html @@ -5,7 +5,8 @@ <meta charset="utf-8" /> <meta name="theme-color" content="#1f1f1f" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes, viewport-fit=cover" /> - <title>nHentai » Viewer</title> + <title>nHentai Viewer</title> + <script type="text/javascript" src="data.js"></script> <!-- <link rel="stylesheet" href="./main.css"> --> <style> {STYLES} @@ -14,9 +15,27 @@ <body> <div id="content"> - - <h1>Main Folder({COUNT})</h1> - + <nav class="sidenav"> + <img src="logo.png"> + <h1>nHentai Viewer</h1> + <button class="accordion">Language</button> + <div class="options" id="language"> + <a>English</a> + <a>Japanese</a> + <a>Chinese</a> + </div> + <button class="accordion">Category</button> + <div class="options" id ="category"> + <a>Doujinshi</a> + <a>Manga</a> + </div> + <button class="nav-btn hidden">Filters</button> + <div class="search"> + <input autocomplete="off" type="search" id="tagfilter" name="q" value="" autocapitalize="none" required=""> + <svg class="btn" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="white" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg> + <div id="tags"> + </div> + </nav> <div class="container" id="favcontainer"> {PICTURE} @@ -24,7 +43,9 @@ </div> <!-- container --> </div> - +<script> + {SCRIPTS} +</script> </body> </html> \ No newline at end of file diff --git a/nhentai/viewer/main.js b/nhentai/viewer/main.js new file mode 100644 index 0000000..5a314fc --- /dev/null +++ b/nhentai/viewer/main.js @@ -0,0 +1,177 @@ + //------------------------------------navbar script------------------------------------ +var menu = document.getElementsByClassName("accordion"); +for (var i = 0; i < menu.length; i++) { + menu[i].addEventListener("click", function() { + var panel = this.nextElementSibling; + if (panel.style.maxHeight) { + this.classList.toggle("active"); + panel.style.maxHeight = null; + } else { + panel.style.maxHeight = panel.scrollHeight + "px"; + this.classList.toggle("active"); + } + }); +} +var language = document.getElementById("language").children; +for (var i = 0; i < language.length; i++){ + language[i].addEventListener("click", function() { + toggler = document.getElementById("language") + toggler.style.maxHeight = null; + document.getElementsByClassName("accordion")[0].classList.toggle("active"); + filter_maker(this.innerText, "language"); +}); +} +var category = document.getElementById("category").children; +for (var i = 0; i < category.length; i++){ + category[i].addEventListener("click", function() { + document.getElementById("category").style.maxHeight = null; + document.getElementsByClassName("accordion")[1].classList.toggle("active"); + filter_maker(this.innerText, "category"); +}); +} +//----------------------------------------------------------------------------------- +//----------------------------------Tags Script-------------------------------------- +tag_maker(tags); + +var tag = document.getElementsByClassName("btn-2"); +for (var i = 0; i < tag.length; i++){ + tag[i].addEventListener("click", function() { + filter_maker(this.innerText, this.id); +}); +} + +var input = document.getElementById("tagfilter"); +input.addEventListener("input", function() { + var tags = document.querySelectorAll(".btn-2"); + if (this.value.length > 0) { + for (var i = 0; i < tags.length; i++) { + var tag = tags[i]; + var nome = tag.innerText; + var exp = new RegExp(this.value, "i");; + if (exp.test(nome)) { + tag.classList.remove("hidden"); + } + else { + tag.classList.add("hidden"); + } + } + } else { + for (var i = 0; i < tags.length; i++) { + var tag = tags[i]; + tag.classList.add('hidden'); + } + } +}); +input.addEventListener('keypress', function (e) { + enter_search(e, this.value); +}); +//----------------------------------------------------------------------------------- +//------------------------------------Functions-------------------------------------- +function enter_search(e, input){ + var count = 0; + var key = e.which || e.keyCode; + if (key === 13 && input.length > 0) { + var all_tags = document.getElementById("tags").children; + for(i = 0; i < all_tags.length; i++){ + if (!all_tags[i].classList.contains("hidden")){ + count++; + var tag_name = all_tags[i].innerText; + var tag_id = all_tags[i].id; + if (count>1){break} + } + } + if (count == 1){ + filter_maker(tag_name, tag_id); + } + } +} +function filter_maker(text, class_value){ + var check = filter_checker(text); + var nav_btn = document.getElementsByClassName("nav-btn")[0]; + if (nav_btn.classList.contains("hidden")){ + nav_btn.classList.toggle("hidden"); + } + if (check == true){ + var node = document.createElement("a"); + var textnode = document.createTextNode(text); + node.appendChild(textnode); + node.classList.add(class_value); + nav_btn.appendChild(node); + filter_searcher(); + } +} + +function filter_searcher(){ + var verifier = null; + var tags_filter = []; + var doujinshi_id = []; + var filter_tag = document.getElementsByClassName("nav-btn")[0].children; + filter_tag[filter_tag.length-1].addEventListener("click", function() { + this.remove(); + try{ + filter_searcher(); + } + catch{ + var gallery = document.getElementsByClassName("gallery-favorite"); + for (var i = 0; i < gallery.length; i++){ + gallery[i].classList.remove("hidden"); + } + } + }); + for (var i=0; i < filter_tag.length; i++){ + var fclass = filter_tag[i].className; + var fname = filter_tag[i].innerText.toLowerCase(); + tags_filter.push([fclass, fname]) + } + for (var i=0; i < data.length; i++){ + for (var j=0; j < tags_filter.length; j++){ + try{ + if(data[i][tags_filter[j][0]].includes(tags_filter[j][1])){ + verifier = true; + } + else{ + verifier = false; + break + } + } + catch{ + verifier = false; + break + } + } + if (verifier){doujinshi_id.push(data[i].Folder);} + } + var gallery = document.getElementsByClassName("gallery-favorite"); + for (var i = 0; i < gallery.length; i++){ + gtext = gallery [i].children[0].children[0].children[1].innerText; + if(doujinshi_id.includes(gtext)){ + gallery[i].classList.remove("hidden"); + } + else{ + gallery[i].classList.add("hidden"); + } + } +} + +function filter_checker(text){ + var filter_tags = document.getElementsByClassName("nav-btn")[0].children; + if (filter_tags == null){return true;} + for (var i=0; i < filter_tags.length; i++){ + if (filter_tags[i].innerText == text){return false;} + } + return true; +} + +function tag_maker(data){ + for (i in data){ + for (j in data[i]){ + var node = document.createElement("button"); + var textnode = document.createTextNode(data[i][j]); + node.appendChild(textnode); + node.classList.add("btn-2"); + node.setAttribute('id', i); + node.classList.add("hidden"); + document.getElementById("tags").appendChild(node); + } + } +} \ No newline at end of file diff --git a/nhentai/viewer/scripts.js b/nhentai/viewer/scripts.js index 8e3f8bf..6fea1c2 100644 --- a/nhentai/viewer/scripts.js +++ b/nhentai/viewer/scripts.js @@ -47,6 +47,9 @@ document.onkeypress = event => { switch (event.key.toLowerCase()) { // Previous Image case 'w': + document.getElementById("dest").style.height = "200%"; + document.getElementById("list").style.height = "200%"; + break; case 'a': changePage(currentPage - 1); break; @@ -57,6 +60,9 @@ document.onkeypress = event => { // Next Image case ' ': case 's': + document.getElementById("dest").style.height = "100%"; + document.getElementById("list").style.height = "100%"; + break; case 'd': changePage(currentPage + 1); break; @@ -68,14 +74,8 @@ document.onkeydown = event =>{ case 37: //left changePage(currentPage - 1); break; - case 38: //up - changePage(currentPage - 1); - break; case 39: //right changePage(currentPage + 1); break; - case 40: //down - changePage(currentPage + 1); - break; } }; \ No newline at end of file diff --git a/nhentai/viewer/styles.css b/nhentai/viewer/styles.css index f9830dc..abc219a 100644 --- a/nhentai/viewer/styles.css +++ b/nhentai/viewer/styles.css @@ -38,7 +38,7 @@ html, body { #image-container { flex: auto; height: 100vh; - background: #222; + background: #000; color: #fff; text-align: center; cursor: pointer; @@ -48,6 +48,7 @@ html, body { } #image-container #dest { + background: #000; height: 100%; width: 100%; background-size: contain;