From 6a8a6872880729685b06d2e46ed0654e13402e18 Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Sun, 17 Feb 2019 14:31:46 -0800 Subject: [PATCH] else. --- AHK/custom hangul.ahk | 12 ++++ Javascript/opendir_image.js | 140 +++++++++++++++++++----------------- Toolbox/resize.py | 62 ++++++++-------- 3 files changed, 116 insertions(+), 98 deletions(-) create mode 100644 AHK/custom hangul.ahk diff --git a/AHK/custom hangul.ahk b/AHK/custom hangul.ahk new file mode 100644 index 0000000..3001ca5 --- /dev/null +++ b/AHK/custom hangul.ahk @@ -0,0 +1,12 @@ +#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. +SendMode Input ; Recommended for new scripts due to its superior speed and reliability. +SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. + +; I don't like any of Windows's provided IME key layouts because they use key +; combinations that I already have mapped. +; vk15 is latin/hangul toggle. +; vk19 is hanja convert. +; AppsKey is the context menu button, so combining it with right alt and ctrl is convenient for me. + +>!AppsKey:: sendInput, {vk15} +>^AppsKey:: sendInput, {vk19} diff --git a/Javascript/opendir_image.js b/Javascript/opendir_image.js index 4974865..b46fe84 100644 --- a/Javascript/opendir_image.js +++ b/Javascript/opendir_image.js @@ -17,31 +17,31 @@ VIDEO_TYPES = new RegExp(VIDEO_TYPES, "i"); var has_started = false; -var CSS = "" -+ "body { background-color: #fff; }" -+ "audio, video { display: block; }" -+ "audio { width: $audio_width$px; }" -+ "video { height: $video_height$px; }" -+ "img { display: block; height: $image_height$px; max-width: 100%; }" -+ "a { color: #000 !important; }" -+ ".control_panel { position: relative; background-color: #aaa; min-height: 10px; width: 100%; }" -+ ".workspace { background-color: #ddd; min-height: 10px; float: left; }" -+ ".arealabel { position:absolute; right: 0; bottom: 0; opacity: 0.8; background-color: #000; color: #fff; }" -+ ".delete_button { color: #d00; font-family: Arial; font-size: 11px; left: 0; position: absolute; top: 0; width: 25px; }" -+ ".ingest { position:absolute; right: 5px; top: 5px; height: 100%; width: 30% }" -+ ".ingestbox { position:relative; height: 75%; width:100%; box-sizing: border-box; }" -+ ".urldumpbox { overflow-y: scroll; height: 300px; width: 90% }" -+ ".load_button { position: absolute; top: 10%; width: 100%; height: 80%; word-wrap: break-word; }" -+ ".odi_anchor { display: block; }" -+ ".odi_image_div, .odi_media_div { display: inline-block; margin: 5px; float: left; position: relative; background-color: #aaa; }" -+ ".odi_image_div { min-width: $image_height$px; }" -; +var CSS = ` +body { background-color: #fff; } +audio, video { display: block; } +audio { width: ${audio_width}px; } +video { height: ${video_height}px; } +img { display: block; height: ${image_height}px; max-width: 100%; } +a { color: #000 !important; } +.control_panel { position: relative; background-color: #aaa; min-height: 10px; width: 100%; } +.workspace { background-color: #ddd; min-height: 10px; float: left; } +.arealabel { position:absolute; right: 0; bottom: 0; opacity: 0.8; background-color: #000; color: #fff; } +.delete_button { color: #d00; font-family: Arial; font-size: 11px; left: 0; position: absolute; top: 0; width: 25px; } +.ingest { position:absolute; right: 5px; top: 5px; height: 100%; width: 30% } +.ingestbox { position:relative; height: 75%; width:100%; box-sizing: border-box; } +.urldumpbox { overflow-y: scroll; height: 300px; width: 90% } +.load_button { position: absolute; top: 10%; width: 100%; height: 80%; word-wrap: break-word; } +.odi_anchor { display: block; } +.odi_image_div, .odi_media_div { display: inline-block; margin: 5px; float: left; position: relative; background-color: #aaa; } +.odi_image_div { min-width: ${image_height}px; } +`; function apply_css() { console.log("applying CSS"); var css = document.createElement("style"); - css.innerHTML = format_css(); + css.innerHTML = CSS; document.head.appendChild(css); } @@ -133,8 +133,16 @@ function create_command_box_button(boxname, label, operation) function create_odi_div(url) { + var div = null; - var paramless_url = url.split("?")[0]; + + var mediatype; + if (url["mediatype"] !== undefined) + { + mediatype = url["mediatype"]; + url = url["url"]; + } + try { var basename = decodeURI(get_basename(url)); @@ -145,7 +153,34 @@ function create_odi_div(url) return; } - if (paramless_url.match(IMAGE_TYPES)) + var paramless_url = url.split("?")[0]; + if (!paramless_url) + { + return; + } + + if (mediatype) + { + ; + } + else if (paramless_url.match(IMAGE_TYPES)) + { + mediatype = "image"; + } + else if (paramless_url.match(AUDIO_TYPES)) + { + mediatype = "audio"; + } + else if (paramless_url.match(VIDEO_TYPES)) + { + mediatype = "video"; + } + + if (mediatype == null) + { + return; + } + if (mediatype === "image") { console.log("Creating image div for " + paramless_url); var div = document.createElement("div"); @@ -192,18 +227,6 @@ function create_odi_div(url) } else { - if (paramless_url.match(AUDIO_TYPES)) - { - var mediatype = "audio"; - } - else if (paramless_url.match(VIDEO_TYPES)) - { - var mediatype = "video"; - } - else - { - return null; - } console.log("Creating " + mediatype + " div for " + paramless_url); var div = document.createElement("div"); @@ -271,7 +294,6 @@ function create_odi_divs(urls) for (var index = 0; index < urls.length; index += 1) { url = urls[index]; - var paramless_url = url.split("?")[0]; if (!url) { continue; @@ -442,37 +464,11 @@ function filter_re(pattern, do_delete) } } -function format_css() -{ - console.log("Formatting CSS variables"); - var css = CSS; - while (true) - { - matches = css.match("\\$.+?\\$"); - if (!matches) - { - break; - } - console.log(matches); - matches = new Set(matches); - /* Originally used Array.from(set) and did regular iteration, but I found - that sites can override and break that conversion. */ - matches.forEach( - function(injector) - { - var injected = injector.replace(new RegExp("\\$", 'g'), ""); - css = css.replace(injector, this[injected]); - } - ); - } - return css; -} - function get_all_urls() { console.log("Collecting urls"); var urls = []; - function include(source, attr) + function include(source, attr, force_mediatype) { for (var index = 0; index < source.length; index += 1) { @@ -506,7 +502,14 @@ function get_all_urls() if (seen_urls.has(sub_url)) {continue;} - urls.push(sub_url); + if (force_mediatype !== undefined) + { + urls.push({"url": sub_url, "mediatype": force_mediatype}); + } + else + { + urls.push(sub_url); + } seen_urls.add(sub_url); } seen_urls.add(url); @@ -519,9 +522,9 @@ function get_all_urls() { var d = docs.pop(); include(d.links, "href"); - include(d.images, "src"); - include(d.getElementsByTagName("audio"), "src"); - include(d.getElementsByTagName("video"), "src"); + include(d.images, "src", "image"); + include(d.getElementsByTagName("audio"), "src", "audio"); + include(d.getElementsByTagName("video"), "src", "video"); include(d.getElementsByTagName("source"), "src"); } console.log("collected " + urls.length + " urls."); @@ -778,6 +781,11 @@ function normalize_url(url) url = get_gfycat_video(gfy_id); } } + + else if (url.indexOf("commons.wikimedia.org/wiki/File:") >= 0) + { + url = url.replace("commons.wikimedia.org/wiki/File:", "commons.wikimedia.org/wiki/Special:FilePath/"); + } return [url]; } diff --git a/Toolbox/resize.py b/Toolbox/resize.py index 67b8a52..5c28f84 100644 --- a/Toolbox/resize.py +++ b/Toolbox/resize.py @@ -1,24 +1,8 @@ +import glob +import os from PIL import Image import sys -filename = sys.argv[1] -try: - newname = sys.argv[4] -except IndexError: - newname = None -i = Image.open(filename) -if all(x.isdigit() for x in sys.argv[2:3]): - new_x = int(sys.argv[2]) - new_y = int(sys.argv[3]) -else: - try: - ratio = float(sys.argv[2]) - new_x = int(i.size[0] * ratio) - new_y = int(i.size[1] * ratio) - except ValueError: - print('you did it wrong') - quit() - def fit_into_bounds(image_width, image_height, frame_width, frame_height): ''' Given the w+h of the image and the w+h of the frame, @@ -36,19 +20,33 @@ def fit_into_bounds(image_width, image_height, frame_width, frame_height): return (new_width, new_height) -(image_width, image_height) = i.size +filenames = sys.argv[1] -if new_x == 0: - (new_x, new_y) = fit_into_bounds(image_width, image_height, 10000000, new_y) -if new_y == 0: - (new_x, new_y) = fit_into_bounds(image_width, image_height, new_x, 10000000) - -print(i.size, new_x, new_y) -i = i.resize( (new_x, new_y), Image.ANTIALIAS) -if newname is None: - if '.' in filename: - suffix = '_{width}x{height}'.format(width=new_x, height=new_y) - newname = filename.replace('.', suffix + '.') +filenames = glob.glob(filenames) +for filename in filenames: + i = Image.open(filename) + if all(x.isdigit() for x in sys.argv[2:3]): + new_x = int(sys.argv[2]) + new_y = int(sys.argv[3]) else: - newname += suffix -i.save(newname, quality=100) + try: + ratio = float(sys.argv[2]) + new_x = int(i.size[0] * ratio) + new_y = int(i.size[1] * ratio) + except ValueError: + print('you did it wrong') + quit() + + (image_width, image_height) = i.size + + if new_x == 0: + (new_x, new_y) = fit_into_bounds(image_width, image_height, 10000000, new_y) + if new_y == 0: + (new_x, new_y) = fit_into_bounds(image_width, image_height, new_x, 10000000) + + print(i.size, new_x, new_y) + i = i.resize( (new_x, new_y), Image.ANTIALIAS) + suffix = '_{width}x{height}'.format(width=new_x, height=new_y) + (base, extension) = os.path.splitext(filename) + newname = base + suffix + extension + i.save(newname, quality=100)