Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
09b2b4be10 | |||
f331de4134 | |||
7760072e8e | |||
626bf592de | |||
d550de0e27 | |||
367efb4b53 | |||
4a82c62958 | |||
891aa66bff | |||
2513b60c1b | |||
31cca481f9 |
@ -2,6 +2,7 @@
|
||||
"ar": "العربية [ar]",
|
||||
"bg": "Български [bg]",
|
||||
"cs": "Čeština (CZ) [cs]",
|
||||
"da": "Dansk [da]",
|
||||
"de": "Deutsch [de]",
|
||||
"el": "Ελληνικά [el]",
|
||||
"en": "English (US) [en]",
|
||||
|
1284
_locales/da/messages.json
Normal file
1284
_locales/da/messages.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -191,6 +191,22 @@
|
||||
"message": "삭제",
|
||||
"description": "button text"
|
||||
},
|
||||
"deletefiles": {
|
||||
"message": "파일 삭제",
|
||||
"description": "menu action"
|
||||
},
|
||||
"deletefiles_button": {
|
||||
"message": "삭제",
|
||||
"description": "button text"
|
||||
},
|
||||
"deletefiles_text": {
|
||||
"message": "정말 다음 파일(들)을 삭제하시겠습니까?",
|
||||
"description": "messagebox text"
|
||||
},
|
||||
"deletefiles_title": {
|
||||
"message": "파일 삭제",
|
||||
"description": "messagebox title"
|
||||
},
|
||||
"description": {
|
||||
"message": "설명",
|
||||
"description": "Description (keep it short); e.g. the description column in select"
|
||||
@ -275,10 +291,34 @@
|
||||
"message": "잘못된 URL",
|
||||
"description": "Error message; single window"
|
||||
},
|
||||
"error_noabsolutepath": {
|
||||
"message": "하위 폴더의 절대 경로는 브라우저에서 지원되지 않습니다",
|
||||
"description": "Error Message; select/single window"
|
||||
},
|
||||
"error_nodotsinpath": {
|
||||
"message": "하위 폴더의 점(.)은 브라우저에서 지원되지 않습니다",
|
||||
"description": "Error Message; select/single window"
|
||||
},
|
||||
"error_noItemsSelected": {
|
||||
"message": "선택된 항목 없음",
|
||||
"description": "Error Message; select window"
|
||||
},
|
||||
"export": {
|
||||
"message": "파일로 내보내기",
|
||||
"description": "menu text"
|
||||
},
|
||||
"export_aria2": {
|
||||
"message": "aria2 리스트로 내보내기",
|
||||
"description": "menu text"
|
||||
},
|
||||
"export_metalink": {
|
||||
"message": "메타링크로 내보내기",
|
||||
"description": "menu text"
|
||||
},
|
||||
"export_text": {
|
||||
"message": "텍스트로 내보내기",
|
||||
"description": "menu text"
|
||||
},
|
||||
"extensionDescription": {
|
||||
"message": "브라우저용 대량 다운로더",
|
||||
"description": "DownThemAll! tagline, displayed in about:addons; Please do NOT refer to a specific browser such as firefox, as we will probably support more than one"
|
||||
@ -331,6 +371,10 @@
|
||||
"message": "강제 시작",
|
||||
"description": "Menu text"
|
||||
},
|
||||
"import": {
|
||||
"message": "파일에서 가져오기",
|
||||
"description": "menu text"
|
||||
},
|
||||
"information_title": {
|
||||
"message": "정보",
|
||||
"description": "Used in message boxes"
|
||||
@ -529,6 +573,26 @@
|
||||
"message": "새 다운로드를 즉시 시작하는 대신 일시중지로 추가",
|
||||
"description": "Preferences/General"
|
||||
},
|
||||
"pref_button_type": {
|
||||
"message": "DownThemAll! 버튼:",
|
||||
"description": "label"
|
||||
},
|
||||
"pref_button_type_dta": {
|
||||
"message": "DownThemAll! 선택",
|
||||
"description": "label"
|
||||
},
|
||||
"pref_button_type_manager": {
|
||||
"message": "관리자 열기",
|
||||
"description": "label"
|
||||
},
|
||||
"pref_button_type_popup": {
|
||||
"message": "팝업 메뉴",
|
||||
"description": "label"
|
||||
},
|
||||
"pref_button_type_turbo": {
|
||||
"message": "OneClick!",
|
||||
"description": "label"
|
||||
},
|
||||
"pref_concurrent_downloads": {
|
||||
"message": "동시 다운로드",
|
||||
"description": "Preferences/Network"
|
||||
@ -537,10 +601,6 @@
|
||||
"message": "다운로드 대기열이 끝나면 알림 표시",
|
||||
"description": "Preferences/General"
|
||||
},
|
||||
"pref_global_turbo": {
|
||||
"message": "브라우저 버튼을 OneClick!으로 작동",
|
||||
"description": "Preferences/General"
|
||||
},
|
||||
"pref_hide_context": {
|
||||
"message": "일반 컨텍스트 메뉴 항목 표시 안 함",
|
||||
"description": "Preferences/General"
|
||||
@ -549,6 +609,10 @@
|
||||
"message": "관리자",
|
||||
"description": "Preferences/General; group text"
|
||||
},
|
||||
"pref_manager_in_popup": {
|
||||
"message": "새 팝업 창에 관리자 열기",
|
||||
"description": "checkbox text"
|
||||
},
|
||||
"pref_manager_tooltip": {
|
||||
"message": "관리자 탭에서 툴팁 표시",
|
||||
"description": "Preferences/General"
|
||||
@ -573,10 +637,22 @@
|
||||
"message": "다시 시작한 후 누락된 다운로드 제거",
|
||||
"description": "Preferences/General"
|
||||
},
|
||||
"pref_retries": {
|
||||
"message": "일시적인 오류에 대한 다운로드 재시도 횟수",
|
||||
"description": "pref text"
|
||||
},
|
||||
"pref_retry_time": {
|
||||
"message": "재시도 간격 (분)",
|
||||
"description": "pref text"
|
||||
},
|
||||
"pref_show_urls": {
|
||||
"message": "이름 대신 URL 표시",
|
||||
"description": "Preferences/General"
|
||||
},
|
||||
"pref_sounds": {
|
||||
"message": "소리 재생",
|
||||
"description": "checkbox text"
|
||||
},
|
||||
"pref_text_links": {
|
||||
"message": "웹 사이트 텍스트에서 링크를 찾도록 시도 (느림)",
|
||||
"description": "Preferences/General"
|
||||
@ -895,6 +971,20 @@
|
||||
"message": "계속",
|
||||
"description": "Action for resuming a download"
|
||||
},
|
||||
"retrying": {
|
||||
"message": "재시도중",
|
||||
"description": "Status text"
|
||||
},
|
||||
"retrying_error": {
|
||||
"message": "재시도중 - $ERROR$",
|
||||
"description": "status text",
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"content": "$1",
|
||||
"example": "Server Error"
|
||||
}
|
||||
}
|
||||
},
|
||||
"running": {
|
||||
"message": "실행중",
|
||||
"description": "Status text"
|
||||
@ -943,6 +1033,18 @@
|
||||
"message": "이름 바꾸기 마스크 설정",
|
||||
"description": "Menu text; select window"
|
||||
},
|
||||
"set_mask_text": {
|
||||
"message": "새 이름 바꾸기 마스크 설정",
|
||||
"description": "dialog text"
|
||||
},
|
||||
"set_referrer": {
|
||||
"message": "참조 페이지 설정",
|
||||
"description": "menu text"
|
||||
},
|
||||
"set_referrer_text": {
|
||||
"message": "새 참조 페이지 설정",
|
||||
"description": "dialog text"
|
||||
},
|
||||
"single_batchexamples": {
|
||||
"message": "일괄 처리가 지원됩니다, 예:",
|
||||
"description": "Header text; single window"
|
||||
@ -1123,6 +1225,14 @@
|
||||
"message": "새 다운로드가 시작되지 않습니다",
|
||||
"description": "Status bar tooltip; manager network icon"
|
||||
},
|
||||
"subfolder": {
|
||||
"message": "하위 폴더",
|
||||
"description": "label text"
|
||||
},
|
||||
"subfolder_placeholder": {
|
||||
"message": "다운로드 디렉토리 내의 이 하위 폴더에 파일을 저장합니다",
|
||||
"description": "placeholder text within an input box"
|
||||
},
|
||||
"title": {
|
||||
"message": "제목",
|
||||
"description": "Column text; Title label (short)"
|
||||
@ -1166,5 +1276,9 @@
|
||||
"useonlyonce": {
|
||||
"message": "한번만",
|
||||
"description": "Label for Use-Once checkboxes"
|
||||
},
|
||||
"USER_CANCELED": {
|
||||
"message": "사용자 취소",
|
||||
"description": "Error message"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
4
lib/ipreg.ts
Normal file
4
lib/ipreg.ts
Normal file
@ -0,0 +1,4 @@
|
||||
"use strict";
|
||||
// License: MIT
|
||||
|
||||
export const IPReg = /^(?:(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$|^(?:(?:(?:[0-9a-fA-F]{1,4}):){7}(?:(?:[0-9a-fA-F]{1,4})|:)|(?:(?:[0-9a-fA-F]{1,4}):){6}(?:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|:(?:[0-9a-fA-F]{1,4})|:)|(?:(?:[0-9a-fA-F]{1,4}):){5}(?::((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(:(?:[0-9a-fA-F]{1,4})){1,2}|:)|(?:(?:[0-9a-fA-F]{1,4}):){4}(?:(:(?:[0-9a-fA-F]{1,4})){0,1}:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(:(?:[0-9a-fA-F]{1,4})){1,3}|:)|(?:(?:[0-9a-fA-F]{1,4}):){3}(?:(:(?:[0-9a-fA-F]{1,4})){0,2}:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(:(?:[0-9a-fA-F]{1,4})){1,4}|:)|(?:(?:[0-9a-fA-F]{1,4}):){2}(?:(:(?:[0-9a-fA-F]{1,4})){0,3}:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(:(?:[0-9a-fA-F]{1,4})){1,5}|:)|(?:(?:[0-9a-fA-F]{1,4}):){1}(?:(:(?:[0-9a-fA-F]{1,4})){0,4}:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(:(?:[0-9a-fA-F]{1,4})){1,6}|:)|(?::((?::(?:[0-9a-fA-F]{1,4})){0,5}:((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|(?::(?:[0-9a-fA-F]{1,4})){1,7}|:)))(%[0-9a-zA-Z]{1,})?$/;
|
@ -3,6 +3,7 @@
|
||||
|
||||
import * as psl from "psl";
|
||||
import { identity, memoize } from "./memoize";
|
||||
import { IPReg } from "./ipreg";
|
||||
export { debounce } from "../uikit/lib/util";
|
||||
|
||||
export class Promised {
|
||||
@ -237,7 +238,10 @@ export interface URLd extends URL {
|
||||
Object.defineProperty(URL.prototype, "domain", {
|
||||
get() {
|
||||
try {
|
||||
return hostToDomain(this.host) || this.host;
|
||||
const {hostname} = this;
|
||||
return IPReg.test(hostname) ?
|
||||
hostname :
|
||||
hostToDomain(hostname) || hostname;
|
||||
}
|
||||
catch (ex) {
|
||||
console.error(ex);
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "DownThemAll!",
|
||||
"version": "4.1.1",
|
||||
"version": "4.1.2",
|
||||
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"homepage_url": "https://downthemall.org/",
|
||||
|
@ -344,6 +344,7 @@ body > * {
|
||||
height: 16px;
|
||||
-moz-appearance: none;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
background: transparent;
|
||||
width: calc(100% - 28px);
|
||||
}
|
||||
|
43
tests/test_urld.js
Normal file
43
tests/test_urld.js
Normal file
@ -0,0 +1,43 @@
|
||||
/* eslint-env node */
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */
|
||||
"use strict";
|
||||
// License: CC0 1.0
|
||||
|
||||
require("../lib/util");
|
||||
|
||||
describe("URLd", function() {
|
||||
it("basic domain", function() {
|
||||
let u = new URL("https://www.google.de");
|
||||
expect(u.domain).to.equal("google.de");
|
||||
u = new URL("https://www.google.de:8443");
|
||||
expect(u.domain).to.equal("google.de");
|
||||
});
|
||||
|
||||
it("plain basic domain", function() {
|
||||
const u = new URL("https://google.de");
|
||||
expect(u.domain).to.equal("google.de");
|
||||
});
|
||||
|
||||
it("special domain", function() {
|
||||
let u = new URL("https://www.google.co.uk");
|
||||
expect(u.domain).to.equal("google.co.uk");
|
||||
u = new URL("https://google.co.uk");
|
||||
expect(u.domain).to.equal("google.co.uk");
|
||||
u = new URL("https://www.google.co.uk:8443");
|
||||
expect(u.domain).to.equal("google.co.uk");
|
||||
});
|
||||
|
||||
it("ipv4", function() {
|
||||
let u = new URL("https://127.0.0.1:8443");
|
||||
expect(u.domain).to.equal("127.0.0.1");
|
||||
u = new URL("https://0.0.0.0:8443");
|
||||
expect(u.domain).to.equal("0.0.0.0");
|
||||
});
|
||||
|
||||
it("ipv6", function() {
|
||||
let u = new URL("https://[::1]:8443");
|
||||
expect(u.domain).to.equal("[::1]");
|
||||
u = new URL("https://[2a00:1450:4005:800::2003]:8443");
|
||||
expect(u.domain).to.equal("[2a00:1450:4005:800::2003]");
|
||||
});
|
||||
});
|
@ -8,6 +8,7 @@ import PORT from "./manager/port";
|
||||
import { runtime } from "../lib/browser";
|
||||
import { Promised } from "../lib/util";
|
||||
import { PromiseSerializer } from "../lib/pserializer";
|
||||
import { Keys } from "./keys";
|
||||
|
||||
const $ = document.querySelector.bind(document);
|
||||
|
||||
@ -120,6 +121,11 @@ addEventListener("DOMContentLoaded", function dom() {
|
||||
statusNetwork.setAttribute("title", _("statusNetwork-inactive.title"));
|
||||
}
|
||||
});
|
||||
|
||||
Keys.on("ACCEL-KeyF", () => {
|
||||
$("#filter").focus();
|
||||
return true;
|
||||
});
|
||||
});
|
||||
|
||||
addEventListener("contextmenu", event => {
|
||||
|
Reference in New Issue
Block a user