Compare commits

...

445 Commits
v1 ... master

Author SHA1 Message Date
James Feng Cao cad15caa9a selection menu: notems for cloud sharing 2024-05-24 09:44:51 +08:00
James Feng Cao 561c618cf6 revert back selection menu: netcut 2024-05-23 16:34:04 +08:00
James Feng Cao 4844f0cb42 add selection menu netcut for cloud sharing 2024-05-23 15:45:56 +08:00
James Feng Cao a4c5482286 update tiangong AI 2024-05-20 11:30:05 +08:00
James Feng Cao a36d892846 add eweb for Windows, MacOS and Linux 2024-05-19 22:31:23 +08:00
James Feng Cao e16ae4bfd9 enhance latest.html 2024-05-07 09:30:31 +08:00
James Feng Cao a0f510ca9a readme update 2024-05-06 08:41:51 +08:00
James Feng Cao 5f260a728d fix downloading failure for a few sites 2024-05-05 18:17:42 +08:00
James Feng Cao f75b1ed6f2 associate bookmark file to search engine file if file names only differ in extensions 2024-04-30 20:54:17 +08:00
James Feng Cao 0d2f4adee1 enhance i:0m to support negative uplevel 2024-04-30 14:38:08 +08:00
James Feng Cao f61e10f836 update bookmarks 2024-04-20 09:20:00 +08:00
James Feng Cao 0dc5a32fa4 add force encoding support for sites with wrong encodings 2024-04-19 16:11:12 +08:00
James Feng Cao e7c63d0df2 add more AI engines 2024-04-18 15:14:13 +08:00
James Feng Cao 94cc23df0a fix typos 2024-04-08 20:24:06 +08:00
James Feng Cao b4c443b85c add associated bookmarks 2024-04-08 09:01:20 +08:00
James Feng Cao 271c6b869d add atomgit pages 2024-04-07 10:02:50 +08:00
James Feng Cao 851d92a3b6 add atomgit pages 2024-04-07 10:02:12 +08:00
James Feng Cao d1b5317474 update mirrors 2024-04-05 16:22:25 +08:00
James Feng Cao 7ebb517e24 version 1042 2024-04-04 21:28:55 +08:00
James Feng Cao 93cccb211b add copyright notice 2024-04-03 09:47:35 +08:00
James Feng Cao ed565d9960 update mirrors 2024-04-02 19:38:45 +08:00
James Feng Cao 75cb8c0c1e cleanup README 2024-04-02 14:09:11 +08:00
James Feng Cao 21e0757831 reorg 2024-04-02 13:42:43 +08:00
James Feng Cao 4b66fe2881 update mirrors 2024-04-02 09:39:01 +08:00
James Feng Cao b7b4361758 fix links for tags 2024-04-01 21:51:55 +08:00
James Feng Cao 8e88f74c4e remove mirrors 2024-04-01 11:18:05 +08:00
James Feng Cao ed527c7bf1 add metaso.cn 2024-03-31 11:33:16 +08:00
James Feng Cao 922481d142 add metaso chatbot 2024-03-29 10:32:37 +08:00
James Feng Cao f8c5a9312e add 360AI & tiangong chatbots 2024-03-29 10:18:02 +08:00
James Feng Cao f86d763d67 add notes for search engine file format 2024-03-25 11:06:58 +08:00
James Feng Cao 67b2f74f41 update mirror repository links 2024-03-25 08:27:16 +08:00
James Feng Cao 1fa57a6ca4 update repositories 2024-03-24 11:50:35 +08:00
James Feng Cao 0ecceefb88 update repositories 2024-03-24 11:44:40 +08:00
James Feng Cao fa8bedbedb fix README links 2024-03-24 09:47:50 +08:00
James Feng Cao ee1356f7d0 fix README links 2024-03-24 09:42:35 +08:00
James Feng Cao 5442aa85ef fix README links 2024-03-24 09:39:48 +08:00
James Feng Cao 36008d74e6 fix mirror links 2024-03-24 08:50:22 +08:00
James Feng Cao 0b0584e39d add more AI chatbot as search engines 2024-03-23 16:59:54 +08:00
James Feng Cao 1502209acb README update 2024-03-23 16:13:29 +08:00
James Feng Cao b9d6b27bee add XunFei xinghuo chatbot as search engine 2024-03-23 15:57:06 +08:00
James Feng Cao af87a9130d fix redirect.html 2024-03-23 11:38:38 +08:00
James Feng Cao c0a6690dd8 hugo to use relative path 2024-03-23 10:50:14 +08:00
James Feng Cao d4d932689d README link fix 2024-03-22 17:36:11 +08:00
James Feng Cao b65e9b48ca fix links in README for websites 2024-03-22 16:51:20 +08:00
James Feng Cao 0a5707bb0d revert back README w/o frontmatter 2024-03-22 16:37:51 +08:00
James Feng Cao 4aceddcd7c add frontmatter in README 2024-03-22 16:12:03 +08:00
James Feng Cao 1106e4b018 README visitable in all cases 2024-03-22 11:47:19 +08:00
James Feng Cao f84f7442eb add repositories to mirrors.md 2024-03-22 10:46:37 +08:00
James Feng Cao c2174435e7 fix extra mirror links in README 2024-03-22 10:21:38 +08:00
James Feng Cao d9497853ad fix README 2024-03-22 09:29:33 +08:00
James Feng Cao b4ceca9041 fix README 2024-03-22 09:12:29 +08:00
James Feng Cao 534cf21eb0 add mirrors.md 2024-03-22 09:10:12 +08:00
James Feng Cao 5c230a12c2 version 1038 to support chatBots as search engines 2024-03-21 17:56:09 +08:00
James Feng Cao 94dedf19c6 remove gitee commenting 2024-03-21 09:04:37 +08:00
James Feng Cao 7d1b8278b9 fix gitee commenting 2024-03-21 08:35:08 +08:00
James Feng Cao 1744d90c59 update READEME 2024-03-20 08:39:14 +08:00
James Feng Cao e381ccbf2d update READEME 2024-03-17 14:14:14 +08:00
James Feng Cao 2e6ca5bed4 add deno site 2024-03-17 13:55:46 +08:00
James Feng Cao 8199f16d10 fix deno.js to deploy static site 2024-03-17 13:42:27 +08:00
James Feng Cao 6e8ede8dd8 fix deno.js to deploy static site 2024-03-17 13:31:45 +08:00
James Feng Cao 9f8edef028 deno.js to deploy static site 2024-03-17 12:23:44 +08:00
James Feng Cao 22277c08c3 add global redirection example 2024-03-17 10:36:18 +08:00
James Feng Cao 68fa9617be make config.js robust 2024-03-10 13:14:14 +08:00
James Feng Cao a894ae8777 fix config.js chinese version 2024-03-10 11:25:42 +08:00
James Feng Cao f308403a3e optimize config.js 2024-03-10 10:59:50 +08:00
James Feng Cao 9628d3785f add google search deno mirror 2024-03-08 14:44:37 +08:00
James Feng Cao fff6341182 add deno deploy url 2024-03-07 17:01:23 +08:00
James Feng Cao e51739f1be add global redirection with deno 2024-03-05 17:47:46 +08:00
James Feng Cao 6433faf02d add zeabur 2024-03-04 11:03:48 +08:00
James Feng Cao ddd20f6bc8 remove build.gradle 2024-03-04 10:25:39 +08:00
James Feng Cao a83084f300 add AI search engines 2024-02-26 20:08:08 +08:00
James Feng Cao a0e5977a59 add AI engines 2024-02-04 22:38:28 +08:00
James Feng Cao 892c611c60 termux.boot to make crontab valid after OS rebooting 2024-01-04 18:15:25 +08:00
James Feng Cao e4962ac9fb version 1037: enhance andvanced configuration 2023-12-19 17:16:21 +08:00
James Feng Cao bf47ae2390 latest.html works for all cases 2023-12-18 18:02:48 +08:00
James Feng Cao 6db5a47d1a latest.html works for all cases 2023-12-18 16:42:36 +08:00
James Feng Cao 515787c68d fix genApk() 2023-12-11 18:55:49 +08:00
James Feng Cao a494f53d9a fix update checking links 2023-12-11 17:04:15 +08:00
James Feng Cao 8a811bf2e4 fix update checking links 2023-12-11 16:49:57 +08:00
James Feng Cao df638a8b49 remove rss button 2023-12-11 16:34:00 +08:00
James Feng Cao 7dfc274768 change 'site map' to 'configuration' 2023-12-11 16:15:51 +08:00
James Feng Cao 225fd5c802 add RSS 2023-12-11 15:23:07 +08:00
James Feng Cao 951d607c7c 'engine.search' reused as live TV channel urls 2023-12-09 17:53:37 +08:00
James Feng Cao faeac627be version 1035 2023-12-06 19:56:12 +08:00
James Feng Cao 809dd08489 add i:0/js/ support 2023-12-06 09:45:57 +08:00
James Feng Cao 9edd84c037 add i:0/js/ support 2023-12-06 09:06:02 +08:00
James Feng Cao dec6cd1ab9 remove i:5g links 2023-12-05 08:58:02 +08:00
James Feng Cao 3715fd6cb5 1034: enhancing share button for clipboard text processing 2023-12-03 11:16:31 +08:00
James Feng Cao 5979fc0d80 sync README.zh.md 2023-12-01 16:29:35 +08:00
James Feng Cao ac37de825e rename pccopy to textprocess 2023-12-01 16:09:30 +08:00
James Feng Cao 7adfd0f544 version 1032 2023-12-01 10:42:31 +08:00
James Feng Cao 914d1cfca2 update to version 1031 2023-11-28 22:07:15 +08:00
James Feng Cao 9f3fdb6d20 1030: allow downloading with global redirection 2023-11-28 16:01:09 +08:00
James Feng Cao d15c4e25d0 1029: allow share huge images 2023-11-24 08:10:29 +08:00
James Feng Cao 8393f2652c add crontab example to sign in automatically 2023-11-23 11:33:46 +08:00
James Feng Cao 12b3563708 add crontab example to sign in automatically 2023-11-23 10:08:41 +08:00
James Feng Cao 36182a2a88 enhance security 2023-11-21 16:23:28 +08:00
James Feng Cao 4039a5b8ec 8x file saving performance improvement 2023-11-21 10:53:50 +08:00
James Feng Cao 1234ce175a test automation: scripting mode for i:0 urls 2023-11-14 13:22:15 +08:00
James Feng Cao fa884c32a7 update to version 1025 2023-11-14 08:42:56 +08:00
James Feng Cao b8d5451d77 latest version: 1022 2023-11-05 22:24:17 +08:00
James Feng Cao 1ae8341d4a enhance internal links 2023-11-04 21:01:19 +08:00
James Feng Cao 301b52f556 remove :002 2023-11-04 19:43:06 +08:00
James Feng Cao 139cf75218 test automation scripting support 2023-11-04 08:02:46 +08:00
James Feng Cao a511f972c8 . 2023-11-02 11:17:18 +08:00
James Feng Cao 0a4c6a9474 . 2023-11-02 11:04:16 +08:00
James Feng Cao 8fcac14ac0 . 2023-11-02 11:02:30 +08:00
James Feng Cao b17aaf4116 . 2023-11-02 10:57:14 +08:00
James Feng Cao bfb5e7c079 . 2023-11-02 10:39:16 +08:00
James Feng Cao f88fab17b2 . 2023-11-02 09:51:06 +08:00
James Feng Cao 8e42c8b7ac enhance crontab support 2023-10-30 23:43:08 +08:00
James Feng Cao 63eee8ebb5 'am broadcast' to execute internal links 2023-10-28 20:37:53 +08:00
James Feng Cao e42712c71a the sixth field of crontab to support internal links 2023-10-26 19:01:39 +08:00
James Feng Cao 074affaa54 internal links as sixth field in crontab 2023-10-26 07:37:29 +08:00
James Feng Cao 8c6754186c add crontab support as alarm clock 2023-10-25 13:09:25 +08:00
James Feng Cao 1fb143ab1b add charset to config.html 2023-09-15 15:42:00 +08:00
James Feng Cao 437fc7a2b4 fix note taking menu 2023-09-08 15:16:23 +08:00
James Feng Cao f93cedd1dd address bar to work better with more input methods 2023-08-20 15:00:30 +08:00
James Feng Cao 6304d5594a update termux doc 2023-08-20 09:20:24 +08:00
James Feng Cao 3239bb8dec update termux doc 2023-08-20 09:11:48 +08:00
James Feng Cao 33d2db03b7 use redirect for bingAI 2023-07-18 10:54:53 +08:00
James Feng Cao a2c2729725 update README.zh.md 2023-07-05 12:19:39 +08:00
James Feng Cao 940df7475f add muweb.cyclic.app 2023-07-05 09:11:58 +08:00
James Feng Cao 58edc855cd add muweb.cyclic.app 2023-07-05 09:10:06 +08:00
James Feng Cao ef45cb87c9 add toolbar autohide 2023-06-28 18:28:29 +08:00
James Feng Cao 2c2f15bfa9 redirect bingai to cloudflare challenge if needed 2023-06-19 20:55:00 +08:00
James Feng Cao 63077ffe8f adjust latest.html 2023-06-17 19:39:06 +08:00
James Feng Cao f736bbfd88 add i:8d[url] to force downloading 2023-06-17 16:03:34 +08:00
James Feng Cao a548a5d8a5 minor adjust for updates checking 2023-06-17 11:58:51 +08:00
James Feng Cao 57dc4d61f8 add updates checking 2023-06-17 11:21:08 +08:00
James Feng Cao 3a3118c61a add link to check for updates 2023-06-17 09:56:11 +08:00
James Feng Cao fbf6635c1a adjust mirror order in README 2023-06-12 10:36:13 +08:00
James Feng Cao 21600e4acf update README 2023-06-07 17:46:25 +08:00
James Feng Cao 6aab9abf2c add long screenshot mode 2023-06-05 08:30:00 +08:00
James Feng Cao c533099e82 add long screenshot mode 2023-06-05 07:58:25 +08:00
James Feng Cao 840fca625b auto reload after configuration save 2023-06-02 10:44:29 +08:00
James Feng Cao 08959823db Advanced customization configuration to auto reload after changes 2023-06-02 10:07:46 +08:00
James Feng Cao 88c107828b enhance url bundles i:1b with callback 2023-06-01 21:46:11 +08:00
James Feng Cao 7d27ea2485 config: add downloadpath 2023-06-01 16:22:41 +08:00
James Feng Cao 7f43a7d7d4 update bingAI api 2023-05-29 21:01:22 +08:00
James Feng Cao d43d3e3dfc add udrop 2023-05-26 15:48:51 +08:00
James Feng Cao f536c6eb78 bingAI always uses magicUrl for wss:// 2023-05-24 22:58:18 +08:00
James Feng Cao a1f7adb7f0 revert bing.js changes 2023-05-24 21:53:27 +08:00
James Feng Cao 594fcf767d simplify bing.js 2023-05-24 21:45:46 +08:00
James Feng Cao 087b9df6b6 enhance default.select with clipboard output 2023-05-23 16:43:54 +08:00
James Feng Cao a8700372f4 update bingAI api 2023-05-19 15:09:14 +08:00
James Feng Cao 2d72f7825a add link to magic urls 2023-05-13 20:12:55 +08:00
James Feng Cao 7e7871f764 fix en/cmds 2023-05-12 14:05:43 +08:00
James Feng Cao 54c1db0255 fix bingAI draw 2023-05-10 09:02:04 +08:00
James Feng Cao f8529dc7de fix bingAI draw 2023-05-10 07:29:46 +08:00
James Feng Cao eb328d7609 add bingAI image creator 2023-05-09 23:00:28 +08:00
James Feng Cao a413b5f1d0 add bingAI draw 2023-05-09 21:56:08 +08:00
James Feng Cao e4906dfd26 add gissues 2023-05-09 11:11:05 +08:00
James Feng Cao 78552b5e5a add 4everland 2023-05-08 08:54:03 +08:00
James Feng Cao d082e9cf5b add 4everland 2023-05-07 23:25:05 +08:00
James Feng Cao 56a0c2f36f add giscus to all mirrors 2023-05-06 10:49:29 +08:00
James Feng Cao a9bdb08c77 add giscus 2023-05-06 09:56:44 +08:00
James Feng Cao dfc14dae10 add giscus 2023-05-06 09:40:28 +08:00
James Feng Cao 398ba8c89a add google translate bookmarklets 2023-04-29 21:48:40 +08:00
James Feng Cao e9ecf66872 add google translate bookmarklets 2023-04-29 21:12:12 +08:00
James Feng Cao 99f6e7d2c7 local bookmarklets to support CSP sites 2023-04-29 19:24:02 +08:00
James Feng Cao bef3445154 add test/alert.js 2023-04-29 17:47:59 +08:00
James Feng Cao 830c97bf91 encoding '+' in links 2023-04-29 15:01:22 +08:00
James Feng Cao 64224d5cc6 minor changes 2023-04-29 14:29:14 +08:00
James Feng Cao 6e30989d56 add google translate menus 2023-04-29 14:05:37 +08:00
James Feng Cao df40846eb5 add google translate menus 2023-04-29 13:54:40 +08:00
James Feng Cao fc717a7c90 add google translate menus 2023-04-29 13:37:17 +08:00
James Feng Cao 50c0037c97 fix google translate in censored area 2023-04-29 13:08:57 +08:00
James Feng Cao 9f7bb0ba52 add google translate for censored area 2023-04-29 12:17:33 +08:00
James Feng Cao c2b605ec3b reorg tips 2023-04-27 23:24:59 +08:00
James Feng Cao a3dc816f34 link changes in config.html 2023-04-27 09:24:01 +08:00
James Feng Cao 7a254b0d0e add .codechina-ci.yml 2023-04-26 17:55:46 +08:00
James Feng Cao ae108ac8bb bingAI fix 2023-04-25 22:28:16 +08:00
James Feng Cao ad4cc42d67 bingAI fix 2023-04-25 19:34:37 +08:00
James Feng Cao 8f2c1c9ad0 bingAI fix 2023-04-25 19:08:18 +08:00
James Feng Cao 6ae4b1bb30 load .js files under 'css' folder at earliest time 2023-04-20 10:23:42 +08:00
James Feng Cao b21c1074d7 support bundled installation 2023-04-18 16:08:42 +08:00
James Feng Cao acef3cbd59 add mimetype uwebA 2023-04-17 11:23:49 +08:00
James Feng Cao d71ea8e173 add mimetype uwebA 2023-04-17 11:15:40 +08:00
James Feng Cao c29eb47b8b add bingWrite 2023-04-17 07:28:21 +08:00
James Feng Cao 5951fe139a refine bingWrite UI 2023-04-16 17:05:06 +08:00
James Feng Cao cad6049847 add bingWrite UI 2023-04-16 16:26:24 +08:00
James Feng Cao 6f832ad3d9 sync bingAI 2023-04-15 22:05:31 +08:00
James Feng Cao 8ea7d1e5a9 sync bingAI 2023-04-15 21:43:30 +08:00
James Feng Cao 577cf5c6f6 sync bingAI 2023-04-15 20:50:39 +08:00
James Feng Cao a81920a1a5 enhance redirection cookie support 2023-04-15 20:12:02 +08:00
James Feng Cao 18b9609a23 add option: 'forward cookies' 2023-04-14 16:06:13 +08:00
James Feng Cao ed25fd1dd7 simplify bingAI installation 2023-04-13 11:13:46 +08:00
James Feng Cao a7caf970e6 update global redirection docs 2023-04-12 13:56:43 +08:00
James Feng Cao 2704b2f1cc fix config.js completely 2023-04-12 13:16:15 +08:00
James Feng Cao 032723db19 use innerHTML in config.js 2023-04-12 10:55:29 +08:00
James Feng Cao 1239ef166c use outerHTML in config.js 2023-04-12 10:34:12 +08:00
James Feng Cao 13fbe1c9af use view-source: in config.js 2023-04-12 10:25:48 +08:00
James Feng Cao 0e70132833 minor typos 2023-04-12 09:52:15 +08:00
James Feng Cao 8998d08b42 bingAI: add optionsSet.js 2023-04-12 09:39:41 +08:00
James Feng Cao 1ba51cb179 minor typos 2023-04-12 08:30:25 +08:00
James Feng Cao e35f094c97 add global redirect url support 2023-04-12 08:07:52 +08:00
James Feng Cao 96b13242b5 add global redirect url support 2023-04-12 07:40:52 +08:00
James Feng Cao 668562f292 adapt bingChatHub.js 2023-04-10 22:30:26 +08:00
James Feng Cao cb565e5567 enhance :0cc cookie copy 2023-04-10 08:23:51 +08:00
James Feng Cao 6a726e893c add deno/bing.js 2023-04-07 21:38:56 +08:00
James Feng Cao 441db3a1f4 add workers for bingAI 2023-04-07 18:07:09 +08:00
James Feng Cao 95c5410f00 hosts to support both ip address and response headers 2023-04-07 15:32:34 +08:00
James Feng Cao e8b5f412f0 bingAI: use https://mybing2.xn--xyza.top as default 2023-04-07 14:43:41 +08:00
James Feng Cao 9ea6258d40 bingAI: revert back bing.js change 2023-04-06 23:34:50 +08:00
James Feng Cao c9f0db1c34 bingAI: minor optimization 2023-04-06 23:26:29 +08:00
James Feng Cao 3672627e81 bingAI: remove chatmessages.js 2023-04-06 17:20:51 +08:00
James Feng Cao bfa1a68ed2 bingAI: completed 2023-04-06 09:05:34 +08:00
James Feng Cao 2ac6107614 fix typos 2023-04-05 12:09:09 +08:00
James Feng Cao 74511d89e0 simplify bingAI 2023-04-04 21:09:06 +08:00
James Feng Cao e3f545c03f simplify bingAI 2023-04-04 20:43:47 +08:00
James Feng Cao fcc8fe4f5e update bingAI 2023-04-04 16:03:14 +08:00
James Feng Cao 89edcd3d46 bingAI: supports cors with cookies 2023-04-04 14:51:30 +08:00
James Feng Cao a853a7bb2b add option to disable gestures for volumn & ligntness 2023-04-03 21:06:19 +08:00
James Feng Cao ed2b96f46c bingAI: supports cors with cookies 2023-04-03 17:51:28 +08:00
James Feng Cao 37e1fae65a add enhanced hosts support to README 2023-04-03 09:13:07 +08:00
James Feng Cao ed7de221d0 enhance hosts to add attributes for domains 2023-04-03 08:22:41 +08:00
James Feng Cao 23e9a9179d bingAI: avoid gitee for js issues 2023-04-02 20:54:32 +08:00
James Feng Cao 50f156dc6b bingAI: avoid gitee css mimetype issue, and repo utf issue for js files 2023-04-02 20:35:35 +08:00
James Feng Cao e20a424290 update bing.html 2023-04-02 11:33:29 +08:00
James Feng Cao cd7f1f9cea minor changes in tips 2023-04-02 10:39:13 +08:00
James Feng Cao b01672cb48 refine bingAI UI 2023-04-02 09:52:12 +08:00
James Feng Cao 25bb54f62c add config for bingChat UI 2023-04-01 23:40:13 +08:00
James Feng Cao c8a8b0214f add config for bingChat UI 2023-04-01 23:34:44 +08:00
James Feng Cao 9ec7186e34 add bingChat UI for censored area 2023-04-01 21:07:20 +08:00
James Feng Cao 5dcba20904 use [ipv6] in hosts 2023-04-01 15:15:10 +08:00
James Feng Cao 62f3a10994 domain changes 2023-03-30 21:42:36 +08:00
James Feng Cao 4f5a15cb23 domain changes 2023-03-30 21:08:09 +08:00
James Feng Cao 7146aff7c9 add Encrypted Client Hello (ECH) support for hosts 2023-03-30 16:47:03 +08:00
James Feng Cao 8741779b66 refine hosts supports 2023-03-23 22:46:40 +08:00
James Feng Cao 5b3b3fe5d1 supports ctrl-a to ctrl-z with i:56 urls 2023-03-22 19:03:02 +08:00
James Feng Cao 9dc075503b supports hosts 2023-03-21 13:34:59 +08:00
James Feng Cao 4e8ff416e7 supports hosts 2023-03-20 22:31:36 +08:00
James Feng Cao ddc9c8c16d supports hosts for local domain name resolving 2023-03-20 11:57:14 +08:00
James Feng Cao 2817b68a19 newbing for censored area with super bookmarks 2023-03-16 15:49:27 +08:00
jamesfengcao 6acc1ed1aa Update .gitlab-ci.yml 2023-03-15 00:30:54 +00:00
James Feng Cao cb2324e4c2 newbing for censored area with super bookmarks 2023-03-14 18:53:00 +08:00
James Feng Cao 925e3f6299 superbookmark to use newbing from censored area 2023-03-14 11:02:46 +08:00
James Feng Cao decb1cf49e superbookmark to use newbing from censored area 2023-03-14 10:18:41 +08:00
James Feng Cao 400048f1d9 superbookmark to use newbing from censored area 2023-03-14 10:02:25 +08:00
James Feng Cao 56efdbbe18 superbookmark to use newbing from censored area 2023-03-14 08:25:50 +08:00
James Feng Cao cd0754d0ff add bingChat tips 2023-03-13 21:38:48 +08:00
James Feng Cao 0c9c73951d add bingChat 2023-03-12 22:09:00 +08:00
James Feng Cao be15410d97 add donation link 2023-03-09 06:37:11 +08:00
James Feng Cao 6f2aa9ea4d add uweb.epizy.com 2023-03-08 20:37:51 +08:00
James Feng Cao 3e389ad454 newbing for censored area 2023-03-08 15:29:31 +08:00
James Feng Cao 024fa60e19 newbing support with more explanation 2023-03-08 12:31:39 +08:00
James Feng Cao 75faa15b83 newbing support 2023-03-07 13:36:52 +08:00
James Feng Cao a6aabed862 add revision history 2023-03-07 10:07:05 +08:00
James Feng Cao 425e0c74d1 refine newbing 2023-03-06 11:37:59 +08:00
James Feng Cao 673e457978 bingUS engine could be default 2023-03-06 07:21:18 +08:00
James Feng Cao 57a397d7a3 bingUS engine could be default 2023-03-06 06:46:51 +08:00
James Feng Cao 71c2987cf9 optimize bingUS engine 2023-03-05 21:07:47 +08:00
James Feng Cao 94bf28a6ba simple modification info 2023-03-05 11:17:42 +08:00
James Feng Cao e7afdd0dae simple modification info 2023-03-05 11:14:49 +08:00
James Feng Cao e50056c68d append simpe modification info 2023-03-05 11:12:05 +08:00
James Feng Cao e6f0ef87e5 add charset for advanced config 2023-03-04 22:17:12 +08:00
James Feng Cao d6a016d487 add modified dates 2023-03-04 18:22:18 +08:00
James Feng Cao e367af94be supports new bing (chatgpt) 2023-03-04 10:56:24 +08:00
James Feng Cao 457e012713 enhance user defined extra http request headers 2023-03-04 09:43:13 +08:00
James Feng Cao 0d9d30d783 supports user defined extra http request headers 2023-03-04 06:57:28 +08:00
James Feng Cao b0147c8c85 refine markdeep.html 2023-02-25 11:46:02 +08:00
James Feng Cao 8fde5df446 use relative path 2023-02-20 22:03:43 +08:00
James Feng Cao cd12841352 add markdeep styling for bookmarks 2023-02-17 21:11:35 +08:00
James Feng Cao 1ed0b0c7ca styling bookmark, markdown or other files 2023-02-16 14:20:01 +08:00
James Feng Cao 5838a014cf add 'More bookmarks' menu to apply css styling 2023-02-14 23:07:43 +08:00
James Feng Cao c124197dbe use relative path 2023-02-14 16:55:34 +08:00
James Feng Cao e7700877a8 Multiple type profiles: switch any data including website logins, user configurations orthogonally. 2023-02-13 16:11:39 +08:00
James Feng Cao 3b6a36a2fa Add profile switching for user configurations/http auth etc. 2023-02-12 22:03:54 +08:00
James Feng Cao d4bc203492 fix README links 2023-02-04 11:21:53 +08:00
James Feng Cao 0d1241bec5 multiple links support for single menu/(new)button/gesture definition 2023-02-03 17:06:25 +08:00
James Feng Cao 8d64d0ede0 add perplexity.ai 2023-02-01 22:29:25 +08:00
James Feng Cao af3cad969b add UI config link 2023-02-01 10:39:40 +08:00
James Feng Cao 491856eb1f add menu for selection: search with home screen 2023-01-31 19:54:36 +08:00
James Feng Cao 6c53b64adf add menu for selection: search with home screen 2023-01-31 19:40:46 +08:00
James Feng Cao 668af3d194 fix generated apk path 2023-01-31 09:35:45 +08:00
James Feng Cao bc8110325b fix broken links 2023-01-31 09:19:11 +08:00
James Feng Cao 7399d1b5cd add links to README 2023-01-30 12:44:53 +08:00
James Feng Cao f5d2345718 README update 2023-01-29 19:19:15 +08:00
James Feng Cao 287897b960 preprocessing before rendering with siteextra 2023-01-28 09:52:52 +08:00
James Feng Cao 612af3a880 preprocessing before rendering with siteextra 2023-01-28 09:41:12 +08:00
James Feng Cao 349e7e629d fix errors for siteextra 2023-01-28 08:40:29 +08:00
James Feng Cao 3eacdfbe86 siteextra to support site source html preprocessing before rendering 2023-01-27 09:57:17 +08:00
James Feng Cao 7c38fa2615 add webdav cloud storage support for upload, backup/restore, delete, mkcol 2023-01-22 17:27:29 +08:00
James Feng Cao 53d34196b6 webdav/http file upload support 2023-01-19 17:38:17 +08:00
James Feng Cao b3d7263d59 webdav/http file upload support 2023-01-19 17:29:17 +08:00
James Feng Cao a3147eaa1a webdav/http file upload support 2023-01-19 17:24:07 +08:00
James Feng Cao 3ecbea5097 fix backup.html 2023-01-18 20:48:03 +08:00
James Feng Cao 632302bd68 use .search file as bookmarks to auto login 2023-01-16 22:35:51 +08:00
James Feng Cao 472a62a35b apply same folder home.css to search engines 2023-01-16 22:25:09 +08:00
James Feng Cao 36012141dd address bar: support ! command line 2023-01-14 17:19:47 +08:00
James Feng Cao 77a7fc60be update README 2023-01-13 18:00:48 +08:00
James Feng Cao b96d51b85d enhance web.js for ':! ' 2023-01-12 16:28:30 +08:00
James Feng Cao d05e18ea53 add more search engines 2023-01-12 09:45:05 +08:00
James Feng Cao db629abf0f address bar: :! command line doc 2023-01-09 08:03:02 +08:00
James Feng Cao cd87cc793c address bar: :! to add example command line file web.js & web.sh 2023-01-08 19:59:57 +08:00
James Feng Cao aeec3960f5 :! support for .sh files 2023-01-08 09:16:44 +08:00
James Feng Cao 92b697afe2 option to keep playing audio when screen off 2023-01-06 21:58:00 +08:00
James Feng Cao e45e124b2a add :! command line support, js file as command line executable 2023-01-06 13:19:45 +08:00
James Feng Cao 738ded93be add :! command line support, js file as command line executable 2023-01-06 13:18:15 +08:00
James Feng Cao 035797ab60 add video urls 2023-01-03 16:52:58 +08:00
James Feng Cao e76d93f0d1 add video urls 2023-01-03 16:51:01 +08:00
James Feng Cao dca1cb1170 google translation: revert to non-hack 2022-12-17 16:57:01 +08:00
James Feng Cao f6d1022757 enhance config.js 2022-12-16 17:48:23 +08:00
James Feng Cao 75546688a1 addressbar: auto hide 2022-12-16 09:21:18 +08:00
James Feng Cao e9f6a03637 support: custo pdf export and long vector screenshot 2022-12-12 12:23:02 +08:00
James Feng Cao ed6f827379 Address bar: ':p [width]x[height im milliinch]' 2022-12-11 09:23:44 +08:00
James Feng Cao 732adfa362 generate PDF for custom paper size 2022-12-08 16:15:22 +08:00
James Feng Cao b0aaa72b31 use relative path template for backup.html 2022-11-25 13:25:29 +08:00
James Feng Cao 68014621bb add ddns support 2022-11-24 08:32:31 +08:00
James Feng Cao 79f9980fb5 add ddns support 2022-11-23 13:52:03 +08:00
James Feng Cao 71fb1c09eb add POST bookmarks (with secrets) 2022-11-18 13:49:57 +08:00
James Feng Cao 439cf52e37 enhance multiple home screens UI 2022-11-17 15:12:59 +08:00
James Feng Cao 8a502e4532 add multiple home screens support for .mht files 2022-11-17 09:10:03 +08:00
James Feng Cao 228a6ea84c multiple home screens to support .mht files 2022-11-16 23:16:30 +08:00
James Feng Cao 1a202f5bfc add smiles2structure bookmark 2022-11-13 20:51:09 +08:00
James Feng Cao 7b4e088180 readme change 2022-11-11 10:15:39 +08:00
James Feng Cao cfd4961502 add more academic search engines 2022-11-11 09:09:24 +08:00
James Feng Cao 8e7b56a157 i:0m to support local file 2022-11-08 11:06:46 +08:00
James Feng Cao ec4d107f65 i:0m to support local file 2022-11-08 09:51:57 +08:00
James Feng Cao 7765bb0ccb rebuilding Tue Nov 8 09:51:19 AM CST 2022 2022-11-08 09:51:19 +08:00
James Feng Cao 4d933cd0fe add flg for not following sys night mode 2022-11-06 14:38:10 +08:00
James Feng Cao 7b97504629 style.css adaptable for all kind of sites 2022-10-31 15:48:14 +08:00
James Feng Cao f7374ef3b7 style.css adaptable for all kind of sites 2022-10-31 15:44:05 +08:00
James Feng Cao e1bebd1fdd fix style.css 2022-10-31 15:28:14 +08:00
James Feng Cao 64ee36ca58 add more search engines 2022-10-29 16:14:47 +08:00
James Feng Cao 4a71bfda3b remove CORS doc 2022-10-27 10:08:38 +08:00
James Feng Cao d559a9b550 add netcut.cn 2022-10-26 23:25:11 +08:00
James Feng Cao 46de690e7b add CSP & CORS white list support 2022-10-26 23:19:54 +08:00
James Feng Cao 8bb1645e7c add CSP & CORS white list support 2022-10-26 22:43:36 +08:00
James Feng Cao 2d016e3fdb add web extension support 2022-10-22 06:47:01 +08:00
James Feng Cao 939b257389 adjust UI links in sitemap 2022-10-21 15:22:54 +08:00
James Feng Cao c0e90a6090 enable html5 apps from sitecache/local 2022-10-21 09:45:05 +08:00
James Feng Cao 3cb1a66d80 add md+katex huge txt viewer 2022-10-20 17:04:24 +08:00
James Feng Cao 1ca754c378 serverless local sites 2022-10-19 23:10:42 +08:00
James Feng Cao 89b2e24890 i:6i to use existing tab for the same url with different url hash 2022-10-17 23:23:29 +08:00
James Feng Cao 7eddea74b8 add search engines 2022-10-17 08:01:26 +08:00
James Feng Cao 9038a9df17 fix type 2022-10-16 11:45:18 +08:00
James Feng Cao 073f5f94c3 add mdict scanning bookmark 2022-10-16 11:41:23 +08:00
James Feng Cao 3d6951e99a add command bookmarks 2022-10-15 08:55:26 +08:00
James Feng Cao a79d00b323 add command bookmarks 2022-10-15 08:47:23 +08:00
James Feng Cao c408fd8407 more doc for mdict engines 2022-10-13 16:24:40 +08:00
James Feng Cao b5462e600b add doc for mdict engines 2022-10-13 16:17:19 +08:00
James Feng Cao 22d028d2dd add option for webview debug 2022-10-13 15:44:47 +08:00
James Feng Cao 708290b421 mdict: fix selectize css path 2022-10-13 15:27:00 +08:00
James Feng Cao b4cd28c645 mdict: support css 2022-10-13 08:39:50 +08:00
James Feng Cao ad2ad04b47 html5 app: files://....?app= 2022-10-12 22:57:01 +08:00
James Feng Cao eb30780475 revert to use pathname 2022-10-12 22:41:45 +08:00
James Feng Cao ddcf396b11 location.pathname not work for file:// urls 2022-10-12 22:01:03 +08:00
James Feng Cao f82c34ba62 simplify mdict parser 2022-10-12 17:43:25 +08:00
James Feng Cao e707f7a0d4 update bookmarks 2022-10-07 10:39:52 +08:00
James Feng Cao 8d1c9b7e05 rebuilding Thu Oct 6 02:06:26 PM CST 2022 2022-10-06 14:06:27 +08:00
James Feng Cao d860ea6c4c minor changes 2022-10-04 13:42:48 +08:00
James Feng Cao e9c8492f9d fix typos 2022-10-02 17:17:22 +08:00
James Feng Cao 2f3eee32c2 html5 application to support file urls by appending '?app=' 2022-10-02 14:55:36 +08:00
James Feng Cao 716e044ad5 fix remote file decompressing 2022-09-29 09:45:51 +08:00
James Feng Cao cd9dfe966d add dictionaries with local indexes and remote content 2022-09-27 17:36:44 +08:00
James Feng Cao 91ee053229 add dictionaries with local indexes and remote content 2022-09-27 17:33:31 +08:00
James Feng Cao 7c345eaa89 fix tdict links 2022-09-27 09:39:45 +08:00
James Feng Cao 5a69ed9e76 fix tdict links 2022-09-27 09:37:37 +08:00
James Feng Cao fb32812e7b fix typos from torinfo to torapp 2022-09-24 14:19:26 +08:00
James Feng Cao 28da258433 fix typos from torinfo to torapp 2022-09-24 14:12:26 +08:00
James Feng Cao 5bcae803c8 update links 2022-09-23 11:13:35 +08:00
James Feng Cao 8a9d4b8284 minor changes 2022-09-22 16:08:03 +08:00
James Feng Cao dc877d91b0 minor changes 2022-09-22 16:06:58 +08:00
James Feng Cao 57b3a69535 minor changes 2022-09-22 16:05:22 +08:00
James Feng Cao 1a813a7bd4 update titles 2022-09-22 07:07:51 +08:00
James Feng Cao 7df4f9b034 add download links 2022-09-19 14:19:33 +08:00
James Feng Cao 312bc28def add download links 2022-09-19 14:15:57 +08:00
James Feng Cao 4fd4f72264 enhance any links as websites: regex replacement 2022-09-18 21:45:26 +08:00
James Feng Cao 1399e83305 Enhance any links as website: regex replacement 2022-09-18 17:19:25 +08:00
James Feng Cao 4212feb617 make uweb private folder managable by 3rd-party file managers 2022-09-17 21:41:13 +08:00
James Feng Cao 70b828eba7 enhance code editor 2022-09-17 08:35:41 +08:00
James Feng Cao 197aded3ca add mirrors 2022-09-16 22:33:16 +08:00
James Feng Cao 8367fd641a default to en 2022-09-16 21:44:03 +08:00
James Feng Cao 258e18ffd5 add download links 2022-09-16 16:09:19 +08:00
James Feng Cao d129d310c9 fix code editor 2022-09-15 16:12:42 +08:00
James Feng Cao 5fdd9e45f6 add link to address bar command mode 2022-09-15 10:07:06 +08:00
James Feng Cao dc5bab9f17 fix address bar command mode 2022-09-15 09:58:13 +08:00
James Feng Cao d9de58e5e5 fix mdict engine url 2022-09-15 09:48:22 +08:00
James Feng Cao fa127bb88e rebuilding Thu Sep 15 09:46:08 AM CST 2022 2022-09-15 09:46:08 +08:00
James Feng Cao cf79a7086b minor changes 2022-09-14 08:37:06 +08:00
James Feng Cao 154e688892 use relative path for one-click config 2022-09-13 17:29:06 +08:00
James Feng Cao fe41bb41a4 add offline cache 2022-09-13 16:33:31 +08:00
James Feng Cao ad12551ed7 add resource redirection 2022-09-13 16:13:02 +08:00
James Feng Cao 765740a73f fix path in pdfviewer.html 2022-09-13 13:53:31 +08:00
James Feng Cao a0bd1d23c8 rebuilding Tue Sep 13 10:26:00 AM CST 2022 2022-09-13 10:26:01 +08:00
James Feng Cao cdbea0e775 minor changes 2022-09-12 14:28:30 +08:00
James Feng Cao c40f3d056d minor changes 2022-09-11 19:59:26 +08:00
James Feng Cao 75a1ce6f8a add README.zh_hans.md 2022-09-11 19:54:21 +08:00
James Feng Cao 936181547e re-implement mdict lookup support 2022-09-11 19:44:16 +08:00
James Feng Cao c033aee378 rebuilding Sat Sep 10 08:55:34 PM CST 2022 2022-09-10 20:55:34 +08:00
James Feng Cao 32fb5a8ee2 rebuilding Sat Sep 10 08:06:12 PM CST 2022 2022-09-10 20:06:12 +08:00
James Feng Cao 323189f48d rebuilding Sat Sep 10 07:44:17 PM CST 2022 2022-09-10 19:44:17 +08:00
James Feng Cao 0728ce81f7 rebuilding Sat Sep 10 07:25:14 PM CST 2022 2022-09-10 19:25:14 +08:00
James Feng Cao e82c754b00 rebuilding Sat Sep 10 06:53:01 PM CST 2022 2022-09-10 18:53:02 +08:00
James Feng Cao b6eb718e75 rebuilding Fri Sep 9 03:43:09 PM CST 2022 2022-09-09 15:43:09 +08:00
James Feng Cao bc83b5c0f9 rebuilding Tue Sep 6 05:48:18 PM CST 2022 2022-09-06 17:48:18 +08:00
James Feng Cao da31e9824f rebuilding Mon Sep 5 04:31:45 PM CST 2022 2022-09-05 16:31:45 +08:00
James Feng Cao 896eb174d3 rebuilding Mon Sep 5 10:44:12 AM CST 2022 2022-09-05 10:44:13 +08:00
James Feng Cao 66a1f529f6 rebuilding site Sat Sep 3 11:10:42 PM CST 2022 2022-09-03 23:10:42 +08:00
James Feng Cao aab85e6670 rebuilding site Fri Sep 2 11:07:40 PM CST 2022 2022-09-02 23:07:40 +08:00
James Feng Cao 062a4023a2 rebuilding site Fri Sep 2 11:04:01 PM CST 2022 2022-09-02 23:04:01 +08:00
James Feng Cao a2ad390c55 rebuilding site Fri Sep 2 10:55:54 PM CST 2022 2022-09-02 22:55:54 +08:00
James Feng Cao e1b83a0c77 rebuilding site Sun Aug 28 11:23:20 PM CST 2022 2022-08-28 23:23:20 +08:00
James Feng Cao ab3dc78bb1 rebuilding site Sun Aug 28 11:17:31 PM CST 2022 2022-08-28 23:17:32 +08:00
James Feng Cao 0816b56023 rebuilding site Sun Aug 28 05:12:28 PM CST 2022 2022-08-28 17:12:29 +08:00
James Feng Cao c07bb20e5c rebuilding site Fri Aug 26 08:21:46 AM CST 2022 2022-08-26 08:21:46 +08:00
James Feng Cao 74d676ab67 rebuilding site Thu Aug 25 10:40:28 AM CST 2022 2022-08-25 10:40:29 +08:00
James Feng Cao ce8624c4f5 rebuilding site Wed Aug 17 11:16:48 AM CST 2022 2022-08-17 11:16:49 +08:00
James Feng Cao 9dab7fa895 rebuilding site Sat Aug 13 09:36:58 AM CST 2022 2022-08-13 09:36:59 +08:00
James Feng Cao a97710929d rebuilding site Fri Aug 12 05:13:05 PM CST 2022 2022-08-12 17:13:06 +08:00
James Feng Cao d8c79c22e0 rebuilding site Fri Aug 12 11:37:00 AM CST 2022 2022-08-12 11:37:01 +08:00
James Feng Cao 3c1095936f rebuilding site Thu Aug 11 08:34:47 PM CST 2022 2022-08-11 20:34:47 +08:00
James Feng Cao c5845bc3dd rebuilding site Thu Aug 11 08:29:16 PM CST 2022 2022-08-11 20:29:16 +08:00
James Feng Cao a93ccd08d3 rebuilding site Thu Aug 11 07:14:34 PM CST 2022 2022-08-11 19:14:34 +08:00
James Feng Cao a31c2f276c rebuilding site Thu Aug 11 04:10:43 PM CST 2022 2022-08-11 16:10:44 +08:00
James Feng Cao 0694165c0a rebuilding site Sun Aug 7 09:51:21 AM CST 2022 2022-08-07 09:51:21 +08:00
James Feng Cao eb59eb477e rebuilding site Sun Aug 7 09:20:50 AM CST 2022 2022-08-07 09:20:50 +08:00
James Feng Cao 0460249b84 rebuilding site Thu Aug 4 02:31:38 PM CST 2022 2022-08-04 14:31:39 +08:00
James Feng Cao d432ee2d46 rebuilding site Thu Aug 4 09:41:27 AM CST 2022 2022-08-04 09:41:27 +08:00
James Feng Cao ff9f26ebbc rebuilding site Wed Aug 3 04:57:06 PM CST 2022 2022-08-03 16:57:07 +08:00
James Feng Cao 3d731c7e4a rebuilding site Tue Aug 2 05:59:44 PM CST 2022 2022-08-02 17:59:45 +08:00
James Feng Cao 6081e5c1af rebuilding site Mon Aug 1 10:59:35 PM CST 2022 2022-08-01 22:59:35 +08:00
James Feng Cao a35c3ed6a9 rebuilding site Mon Aug 1 10:52:46 PM CST 2022 2022-08-01 22:52:46 +08:00
James Feng Cao 3bf02f77a7 rebuilding site Mon Aug 1 10:48:03 PM CST 2022 2022-08-01 22:48:03 +08:00
James Feng Cao 47c46dc01a rebuilding site Mon Aug 1 08:22:51 PM CST 2022 2022-08-01 20:22:51 +08:00
James Feng Cao 26bfc316fc rebuilding site Mon Aug 1 09:37:00 AM CST 2022 2022-08-01 09:37:01 +08:00
James Feng Cao 1d24854e0b rebuilding site Sun Jul 31 04:18:31 PM CST 2022 2022-07-31 16:18:31 +08:00
James Feng Cao 4087db750e rebuilding site Sat Jul 30 04:35:05 PM CST 2022 2022-07-30 16:35:05 +08:00
James Feng Cao c6909f2fbb rebuilding site Sat Jul 30 08:43:49 AM CST 2022 2022-07-30 08:43:49 +08:00
James Feng Cao 368ab38699 rebuilding site Sat Jul 30 08:20:36 AM CST 2022 2022-07-30 08:20:36 +08:00
James Feng Cao d6fae7beef rebuilding site Sat Jul 30 08:19:14 AM CST 2022 2022-07-30 08:19:14 +08:00
James Feng Cao 04912cdc03 rebuilding site Sat Jul 30 07:53:52 AM CST 2022 2022-07-30 07:53:52 +08:00
James Feng Cao f43b1ebbaf rebuilding site Fri Jul 29 10:45:12 PM CST 2022 2022-07-29 22:45:13 +08:00
James Feng Cao a17b53dc11 rebuilding site Fri Jul 29 05:28:24 PM CST 2022 2022-07-29 17:28:24 +08:00
James Feng Cao feabfe5407 rebuilding site Fri Jul 29 12:46:00 PM CST 2022 2022-07-29 12:46:00 +08:00
James Feng Cao a64fc68def rebuilding site Fri Jul 29 12:32:43 PM CST 2022 2022-07-29 12:32:43 +08:00
James Feng Cao 6302501dca rebuilding site Fri Jul 29 09:00:37 AM CST 2022 2022-07-29 09:00:37 +08:00
James Feng Cao 7ebcc56f11 rebuilding site Fri Jul 29 08:50:13 AM CST 2022 2022-07-29 08:50:13 +08:00
James Feng Cao 9e3c8143b9 rebuilding site Fri Jul 29 08:13:45 AM CST 2022 2022-07-29 08:13:45 +08:00
James Feng Cao 69b8d15a8c rebuilding site Thu Jul 28 11:46:23 AM CST 2022 2022-07-28 11:46:23 +08:00
James Feng Cao 9ee06e8a09 rebuilding site Thu Jul 28 08:41:56 AM CST 2022 2022-07-28 08:41:56 +08:00
James Feng Cao 358bb90db0 rebuilding site Wed Jul 27 08:45:19 PM CST 2022 2022-07-27 20:45:20 +08:00
James Feng Cao ac3c78e978 rebuilding site Tue Jul 26 05:05:34 PM CST 2022 2022-07-26 17:05:35 +08:00
260 changed files with 15018 additions and 5163 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.apk filter=lfs diff=lfs merge=lfs -text

10
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,10 @@
pages:
stage: deploy
script:
- rm -rf public
- mkdir tpublic
- ls | grep -v tpublic | xargs cp -r -t tpublic
- mv tpublic public
artifacts:
paths:
- public

0
LICENSE Normal file
View File

View File

@ -1,6 +1,54 @@
#### Uweb browser
[Uweb browser: updates, plugins and tips](https://torappinfo.github.io/uwebzh/en)
### Uweb browser: unlimited power
<a href="README.zh-Hans.md" onclick="if(notRepo()){location='../../zh/readme/index.html#';return false;}">中文</a>
(Mirrors: [vercel](https://uweb-zh.vercel.app/en)
[netlify](https://uwebzh.netlify.app/en)
[pages](https://uwebzh.pages.dev/en))
[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5)
[Galaxy.Store](https://galaxy.store/uweb)
<a href="en/download.md" onclick="if(notRepo()){location='../../en/changelog/index.html#';return false;}">Downloads</a>
[Uweb browser: downloads, plugins and tips](https://torappinfo.github.io/uweb/en/)
(Mirrors: [gitlab](https://jamesfengcao.gitlab.io/uweb/en/) [codeberg](https://jamesfengcao.codeberg.page/en/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/en/index.html) [4everland](https://uweb.4everland.app/en/) [fleek](https://uweb.on-fleek.app/en/) [cyclic](https://muweb.cyclic.app/en/) [netlify](https://uwebzh.netlify.app/en/) [surge](https://uweb.surge.sh/en/) [kinsta](https://uwebbrowser-t27o4.kinsta.page) [zeabur](https://uweb.zeabur.app/en/) [deno](https://posh-crab-23.deno.dev/en/) [bitbucket](https://torappinfo.bitbucket.io/en/) [pages](https://muweb.pages.dev/en/) [vercel](https://uweb.vercel.app/en/) [render](https://uweb.onrender.com/en/) [glitch](https://uweb.glitch.me/en/) <a href="en/mirrors.md" onclick="if(notRepo()){location='../../en/mirrors/index.html#';return false;}">More...</a>)
- Powerful: any native functionality with html5 enhancement and still secure; any urls to host website; javascript and shell scripting for general processing; piping between console and GUI and more with Termux.
- Customizable: user-defined menus, (new) buttons and gestures for user agents, bookmarklets, url services, shell commands, internal functionality links and text processing etc.
- Convenient: Any AI chatbot/book (pdf/djvu)/dictionary (mdict)/txt/command line/app/webapp (web extensions) can be search engine.
- Tiny: less than 250k.
- Fast: run fast, even with thousands of user provided css/scripts/htmls.
- Efficient: less touches, one click to reach any number of search engines without repeated input; automate online services.
- URL bar command line support ("!" and .js file as command).
- Site-specific JS/CSS/HTML/preprocessing.
- Online play/preview/preprocess for downloadable resources.
- Multiple type profiles: switch any data including website logins, user configurations orthogonally.
- Supports enhanced user "hosts" file. Empty IP address to lift all server-imposed limitations.
- Website test automation scripting. crontab support (alarm clock and more).
#### Main features
Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup & restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.).
- User-defined global and site-specific CSS and javascript.
- Bookmarklets (works for CSP sites and with option to auto apply to similar sites)
- AD blocking (block whole root domain trees etc.)
- Customization (define extra menus/buttons/gestures with user-defined functionalities)
- Support shell scripts, javascript for general processing, other languages (python etc.) are also supported by installing uweb compatible Termux versions.
- Serverless local sites: PWA-kind web extension (chrome .crx & firefox .xpi) support.
- Piping between console and uweb tabs.
- Resizable floating video support.
#### Screenshots
![](https://i.postimg.cc/rsL9G5N1/home1.png)
![](https://i.postimg.cc/9QxJ3Rc2/globalcss.png)
![](https://i.postimg.cc/VksDHBQ4/globaljs.png)
![](https://i.postimg.cc/HLV3TYLy/longclick.png)
![](https://i.postimg.cc/XJ58ysdN/option1.png)
![](https://i.postimg.cc/0NFnQT6H/option2.png)
#### [Eweb browser](https://github.com/torappinfo/eweb) for Windows, MacOS and Linux
Eweb is less mature open source browser with the same philosophy of uweb.
#### Help with localization
We encourage everyone to help with localization. The following is how to do.
- Fork this repository
- Copy res/values/strings.xml to path like res/values-%(lang)/, replace %(lang) with [the ISO 639-1 language code](http://www.loc.gov/standards/iso639-2/php/code_list.php).
- Translate res/values-%(lang)/strings.xml
- Translate assets/help_%(lang).html from assets/help_en.html
- Make a Pull Request

55
README.zh-Hans.md Normal file
View File

@ -0,0 +1,55 @@
### 超微浏览器 (uweb browser): 释放无尽威能,微、威、快、高效、极致优化
<a href="README.md" onclick="if(notRepo()){location='../../en/readme/index.html#';return false;}">English</a>
<a href="zh/donate.md" onclick="if(notRepo()){location='../searchurl/donate.html#';return false;}">捐赠</a>
[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5)
[Galaxy.Store](https://galaxy.store/uweb)
<a href="en/download.md" onclick="if(notRepo()){location='../../en/changelog/index.html#';return false;}">下载</a>
[超微浏览器下载及使用技巧](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html)
(镜像: [atomgit](https://uweb.atomgit.net/uweb/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://jamesfengcao.codeberg.page/zh/) [4everland](https://uweb.4everland.app/zh/) [cyclic](https://muweb.cyclic.app/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [deno](https://posh-crab-23.deno.dev/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [fleek](https://uweb.on-fleek.app/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [glitch](https://uweb.glitch.me/zh/) [zeabur](https://uweb.zeabur.app/zh/) [vercel](https://uweb.vercel.app/zh/) <a href="en/mirrors.md" onclick="if(notRepo()){location='../../en/mirrors/index.html#';return false;}">专用镜像...</a>)
- <span style="color:red">免魔法国内直接访问英文技术网站如<a href="zh/tips.md" onclick="if(notRepo()){location='../tips/index.html#';return false;}">google、翻译、百科等</a></span>
- AI聊天可作为搜索引擎来使用。
- 完善的下载支持,部分网站下载其它浏览器无法成功。
- 微不到250K。
- 威无穷无尽的功能使用增强后的html5可以实现任何本地应用功能。支持使用js脚本、url服务、shell命令、内部功能链接定制菜单按钮手势; 远程数据皆可成网站。
- 便捷AI聊天/图书pdf/djvu/txt/词典mdict,kiwix/命令行/APP/webapp(web extensions)可作为搜索引擎使用。
- 快:手机越慢,脚本插件越多越明显。
- 高效:最少的操作,在线服务全自动(参看常用链接网页)。
- 极致优化:最少存储写操作,比如浏览器转到后台前配置变化如恢复成原样则无写操作。
- 地址栏支持命令行 ("!", 物理键盘支持更佳)
- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理
- 支持用户定义域名属性。
- 下载资源在线播放/预览/预处理。
- 独立切换网站登录、配置文件。
- 支持网站测试自动化脚本 (可用于app服务端测试)。支持crontab(闹钟、定时任务等)。
#### 截屏
![](https://i.postimg.cc/rsL9G5N1/home1.png)
![](https://i.postimg.cc/9QxJ3Rc2/globalcss.png)
![](https://i.postimg.cc/VksDHBQ4/globaljs.png)
![](https://i.postimg.cc/HLV3TYLy/longclick.png)
![](https://i.postimg.cc/XJ58ysdN/option1.png)
![](https://i.postimg.cc/0NFnQT6H/option2.png)
#### 软件功能
输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置ua禁用脚本无图激活脚本、行编辑器、代码编辑器支持120多种语言语法高亮、错误提示、自动提示、直接运行测试、其它网页上直接测试。通过安装html5应用可预览阅读本地或在线任意格式文件pdf,djvu,epub,mdx/mdd,docx等
修仙小说里面有一种异能,叫做“成功可以复制”,只要成功一次,就能无限复制。超微浏览器中这种异能叫"超级书签"。成功使用时保存,需要时就可以无限恢复。
小书签(bookmarklet)再也不用手工输入,直接将小书签网站加入书签即可。运行时长按出菜单后选择“在新窗口中打开”,小书签将作用于最后一个窗口。
独创不良信息绝杀:阻止指定根域名的一切子域名、孙域名...,不良信息一网打尽。 支持根域名前缀、网址路径正则表达式。
独创脚本激活模式,脚本执行后被激活,此后自动作用于同类网址。
支持全局用户脚本/样式,可任意叠加,轻松切换。
支持网址特定脚本/样式,可轻松支持百万以上不同脚本。
支持自定义任意多个搜索引擎; 支持执行用户提供任何js文件; 支持用户定义任意多个useragent; 长按链接支持运行第三方程序; 长按链接支持运行用户js文件。
配套安装uWeb定制Termux应用可用地址栏作图类似matlab功能、超级计算器无限精度/π的前万位或更多、无限函数、无限常量、符号演算解方程、分解因式、求积分导数、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码才能真正发挥出uWeb的潜能。

55
README.zh.md Normal file
View File

@ -0,0 +1,55 @@
### 超微浏览器 (uweb browser): 释放无尽威能,微、威、快、高效、极致优化
<a href="README.md" onclick="if(notRepo()){location='../../en/readme/index.html#';return false;}">English</a>
<a href="zh/donate.md" onclick="if(notRepo()){location='../searchurl/donate.html#';return false;}">捐赠</a>
[Amazon appstore](https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5)
[Galaxy.Store](https://galaxy.store/uweb)
<a href="en/download.md" onclick="if(notRepo()){location='../../en/changelog/index.html#';return false;}">下载</a>
[超微浏览器下载及使用技巧](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html)
(镜像: [atomgit](https://uweb.atomgit.net/uweb/zh/) [gitlab](https://jamesfengcao.gitlab.io/uweb/zh/) [repo](https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html) [codeberg](https://jamesfengcao.codeberg.page/zh/) [4everland](https://uweb.4everland.app/zh/) [cyclic](https://muweb.cyclic.app/zh/) [github](https://torappinfo.github.io/uweb/zh/) [render](https://uweb.onrender.com/zh/) [surge](https://uweb.surge.sh/zh/) [netlify](https://uwebzh.netlify.app/zh/) [deno](https://posh-crab-23.deno.dev/zh/) [kinsta](https://uwebbrowser-t27o4.kinsta.page/zh/) [fleek](https://uweb.on-fleek.app/zh/) [pages](https://muweb.pages.dev/zh/) [bitbucket](https://torappinfo.bitbucket.io/zh/) [torapp](https://torapp.eu.org/zh/) [torappv](https://uweb.torapp.eu.org/zh/) [glitch](https://uweb.glitch.me/zh/) [zeabur](https://uweb.zeabur.app/zh/) [vercel](https://uweb.vercel.app/zh/) <a href="en/mirrors.md" onclick="if(notRepo()){location='../../en/mirrors/index.html#';return false;}">专用镜像...</a>)
- <span style="color:red">免魔法国内直接访问英文技术网站如<a href="zh/tips.md" onclick="if(notRepo()){location='../tips/index.html#';return false;}">google、翻译、百科等</a></span>
- AI聊天可作为搜索引擎来使用。
- 完善的下载支持,部分网站下载其它浏览器无法成功。
- 微不到250K。
- 威无穷无尽的功能使用增强后的html5可以实现任何本地应用功能。支持使用js脚本、url服务、shell命令、内部功能链接定制菜单按钮手势; 远程数据皆可成网站。
- 便捷AI聊天/图书pdf/djvu/txt/词典mdict,kiwix/命令行/APP/webapp(web extensions)可作为搜索引擎使用。
- 快:手机越慢,脚本插件越多越明显。
- 高效:最少的操作,在线服务全自动(参看常用链接网页)。
- 极致优化:最少存储写操作,比如浏览器转到后台前配置变化如恢复成原样则无写操作。
- 地址栏支持命令行 ("!", 物理键盘支持更佳)
- 指定域名: 用户定义JS/CSS/HTML/显示前源码预处理
- 支持用户定义域名属性。
- 下载资源在线播放/预览/预处理。
- 独立切换网站登录、配置文件。
- 支持网站测试自动化脚本 (可用于app服务端测试)。支持crontab(闹钟、定时任务等)。
#### 截屏
![](https://i.postimg.cc/rsL9G5N1/home1.png)
![](https://i.postimg.cc/9QxJ3Rc2/globalcss.png)
![](https://i.postimg.cc/VksDHBQ4/globaljs.png)
![](https://i.postimg.cc/HLV3TYLy/longclick.png)
![](https://i.postimg.cc/XJ58ysdN/option1.png)
![](https://i.postimg.cc/0NFnQT6H/option2.png)
#### 软件功能
输出自定义页面大小PDF、矢量图长截屏、朗读、文本重排、嗅探、比价、翻译、视频解析、离线保存、阅读模式(推荐与脚本激活模式配合)、网址重定向至国内、多帐号切换、网盘离线下载、文件管理、webdav/http空间备份/恢复任何指定文件集、智能翻页、目录文件传送、网站独立设置ua禁用脚本无图激活脚本、行编辑器、代码编辑器支持120多种语言语法高亮、错误提示、自动提示、直接运行测试、其它网页上直接测试。通过安装html5应用可预览阅读本地或在线任意格式文件pdf,djvu,epub,mdx/mdd,docx等
修仙小说里面有一种异能,叫做“成功可以复制”,只要成功一次,就能无限复制。超微浏览器中这种异能叫"超级书签"。成功使用时保存,需要时就可以无限恢复。
小书签(bookmarklet)再也不用手工输入,直接将小书签网站加入书签即可。运行时长按出菜单后选择“在新窗口中打开”,小书签将作用于最后一个窗口。
独创不良信息绝杀:阻止指定根域名的一切子域名、孙域名...,不良信息一网打尽。 支持根域名前缀、网址路径正则表达式。
独创脚本激活模式,脚本执行后被激活,此后自动作用于同类网址。
支持全局用户脚本/样式,可任意叠加,轻松切换。
支持网址特定脚本/样式,可轻松支持百万以上不同脚本。
支持自定义任意多个搜索引擎; 支持执行用户提供任何js文件; 支持用户定义任意多个useragent; 长按链接支持运行第三方程序; 长按链接支持运行用户js文件。
配套安装uWeb定制Termux应用可用地址栏作图类似matlab功能、超级计算器无限精度/π的前万位或更多、无限函数、无限常量、符号演算解方程、分解因式、求积分导数、离线字典查找等。譬如地址栏输入sin(x)**5就直接得到函数图形。利用好第三方代码才能真正发挥出uWeb的潜能。

112
assets/help_en.html Normal file
View File

@ -0,0 +1,112 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width" /><base href=../en/><title>Manual</title></head><body>
<center><b>Manual</b> <a href="i:1fhelp_zh">中文</a></center>
<b>Frequently visited links::</b><br>
<a href="index.html">Updates, plugins and tips</a> (
<a href="https://torappinfo.github.io/uweb/en/">github</a>
<a href="https://jamesfengcao.gitlab.io/uweb/en/">gitlab</a>
<a href="https://uweb.4everland.app/en/">4everland</a>
<a href="https://repo.or.cz/uweb.git/blob_plain/HEAD:/en/index.html">repo</a>
<a href="https://torappinfo.bitbucket.io/en/">bitbucket</a>
<a href="https://uweb.vercel.app/en/">vercel</a>
<a href="https://uwebzh.netlify.app/en/">netlify</a>
<a href="https://muweb.pages.dev/en/">pages</a>
<a href="https://jamesfengcao.codeberg.page/en/">codeberg</a>
<a href="https://uweb.surge.sh/en/">surge</a>
<a href="https://uweb.onrender.com/en">render</a>
<a href="javascript:" onclick="document.location.hash='#mirrors'">More...</a>
)<br>
<p>
<a href="i:61ver:https://uwebzh.netlify.app/latest.html">Check for updates</a><br>
<a href="i:61:https://fastly.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/func.html">UI configuration</a>(<a href="i:61:https://gitee.com/jamesfengcao/uweb/raw/master/en/searchurl/func.html">gitee</a>)<br>
<a href="i:60/data/data/info.torapp.uweb/files/config.html:https://jamesfengcao.codeberg.page/en/searchurl/config.html">Advanced customization</a><br>
</p>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/">App folder</a><br>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/bookmark/">More bookmarks</a>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/offline/">Offline</a>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/sbookmark/">Super bookmarks</a><br>
<a target="_blank" href="file:///sdcard/Download/">Download</a>
<a target="_blank" href="i:1e">sdcard Download</a><br>
<a target="_blank" href="file:///sdcard/Download/uweb.log">Error log</a><br>
<br>
<b>Use multiple engines::</b><br>
Type in main screen input or address bar, then click on any search engine.<br>
<br>
<b>Toolbar::</b><br>
Swipe down at top or swipe at any bottom corner to show.<br>
<ul>
<li>[⟳] reload/stop web page; long press for <a href="javascript:" onclick="document.location.hash='spinneroptions'">spinner options</a>.</li>
<li><- : long press for auto page turning</li>
<li>-> : long press for app menu.</li>
<li>[⚙️]Settings: long press for <a href="javascript:" onclick="document.location.hash='options'">options</a>.</li>
<li>[□] tab management; long press for <a target="_blank" href="file:///data/data/info.torapp.uweb/files/css/">global css</a>.</li>
<li>[🏠]Home screen: long press for new tab. </li>
<li>[☰] more tools; long pressed to configure <a target="_blank" href="file:///data/data/info.torapp.uweb/files/js/">global javascripts</a>.</li>
</ul>
<b>More tools::</b><br>
<ul>
<li>[🖥️]PC: fake as desktop PC; long press for <a href=file:///data/data/info.torapp.uweb/files/default.uas>more UAs</a>.</li>
<li>[JS] disable/enable javascript; long press for <a target="_blank" href="file:///data/data/info.torapp.uweb/files/bookmarklet/">more javascripts</a>.</li>
<li>[IMG] hide/show images; long press for <a href=file:///data/data/info.torapp.uweb/files/default.urls>more services</a>. <a href="urls/index.html">details</a></li>
<li>[☆] add bookmark; long press for <a href=file:///data/data/info.torapp.uweb/files/default.link>links menu</a>. <a href="links/index.html">details</a></li>
<li>[🕔] history, long press for <a href=file:///data/data/info.torapp.uweb/files/default.cmds>user defined commands</a>. <a href="cmds/index.html">details</a></li>
<li>[🔍 Magnifier] search in the current page; long press for <a href=file:///data/data/info.torapp.uweb/files/default.rjs>remote scripts</a>. <a href="rjs/index.html">details</a></li>
<li>[🔗]Copy link, long press for <a href=file:///data/data/info.torapp.uweb/files/default.select>menus for text selection</a>. <a href="textprocess/index.html">details</a></li>
<li>[X]Exit browser, long press for <a href=file:///data/data/info.torapp.uweb/files/default.input>input phrases</a>.</li>
<li>[▽]Go to the bottom.</li>
<li>[△]Go to the top.</li>
<li>[🔊]Speak: non-url address bar texts/selected texts/whole web page.</li>
<li>Share the url: <a href="textprocess/index.html">process clipboard text</a> when in home screen, otherwise share the page url.</li>
<li>[📃]Text reflow.</li>
<li>[☁]Download/Copy local files.</li>
<li>[👤]Switch profile.</li>
</ul>
<b><a id="options">Options</a>::</b><br>
Long press "settings" button to configure options.
<ul>
<li>adblock: block all subdomains.<br>
Need hosts file <a href=file:///data/data/info.torapp.uweb/files/default.hosts>default.hosts</a>.
</li>
<li>Activate user script: when activated, the script will be run on similiar sites, until another script is activated or app exits.</li>
<li><a href="http://jamesfengcao.gitee.io/uweb/sitejs/">Run user scripts for sites</a>.</li>
<li>Resource sniffer: Show results when deselected. Use file <a href=file:///data/data/info.torapp.uweb/files/types.sniff>types.sniff</a> to sniff specified file types. Empty file to sniff all kinds.</li>
</ul>
<b><a id="spinneroptions">Spinner options</a>::</b>
<ul>
<li><a href=file:///data/data/info.torapp.uweb/files/colors.txt>Background color</a></li>
<li><a href=file:///data/data/info.torapp.uweb/files/default.uas>User agent</a></li>
<li><a href=file:///data/data/info.torapp.uweb/files/default.acmd>Address bar mode</a></li>
</ul>
<b><a id="mirrors">More mirrors</a>::</b><br>
<a href="i:0mi:5h:https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html">Test1</a>
<a href="i:0m?:https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html">Test2</a>
<a href="i:0mi:5h?format=raw::https://sourceforge.net/p/uwebbrowser/code/ci/master/tree/redirect.html">Test3</a>
<a href="i:0mi:5h?format=raw::https://rocketgit.com/user/torappinfo/uweb/source/tree/branch/master/blob_download/redirect.html">Test4</a>
<a href="i:0m?:https://notabug.org/torappinfo/uweb/raw/master/redirect.html">Test5</a>
<a href="i:0mi:5h:https://git.launchpad.net/uweb/plain/redirect.html">Test6</a>
<a href="i:0m?:https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html">Test7</a>
<a href="i:0m?:https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html">Test8</a>
<a href="i:0m?:https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html">Test9</a>
<a href="i:0m?:https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html">Test10</a>
<a href="i:0m?:https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html">Test11</a>
<a href="i:0mi:5h:https://pagure.io/uweb/raw/master/f/redirect.html">Test12</a>
<a href="i:0mi:5h/xxxx/?path=::https://dev.azure.com/jamesfengcao/1d8bf6c7-7c24-4441-bc5e-9709dcaf37fc/_apis/git/repositories/2a588d9b-f25a-46c0-bb3b-f685c635fcf8/itemsxxxx/redirect.html">Test14</a>
<a href="i:0m?:https://gitcode.net/uweb/uweb/-/raw/master/redirect.html">Test15</a>
<a href="i:0mi:5h:https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html">Test17</a>
<a href="i:0m?:https://dagshub.com/torappinfo/uweb/raw/master/redirect.html">dagshub</a>
<a href="i:0mi:5h:https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html">gitgud</a>
<br><br>
<a href="https://github.com/torappinfo/uweb">Project home</a><br>
</body></html>

167
assets/help_zh.html Normal file
View File

@ -0,0 +1,167 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width" /><base href=../zh/><title>使用攻略</title></head><body>
<center><b>使用攻略</b> <a href="i:1fhelp_en">English</a></center>
<a href="i:0mi:5h:https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html">更新、插件、设置及技巧</a> (
<a href="https://jamesfengcao.gitlab.io/uweb/zh/">gitlab</a>
<a href="https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/index.html">repo</a>
<a href="https://jamesfengcao.codeberg.page/zh/">codeberg</a>
<a href="https://uweb.surge.sh/zh/">surge</a>
<a href="https://torappinfo.github.io/uweb/zh/">github</a>
<a href="https://uweb.4everland.app/zh/">4everland</a>
<a href="https://muweb.cyclic.app/zh/">cyclic</a>
<a href="https://posh-crab-23.deno.dev/zh/">deno</a>
<a href="https://uwebzh.netlify.app/zh/">netlify</a>
<a href="https://uwebbrowser-t27o4.kinsta.page/zh/">kinsta</a>
<a href="https://uweb.on-fleek.app/zh/">fleek</a>
<a href="https://uweb.onrender.com/zh/">render</a>
<a href="https://torapp.eu.org/zh/">torapp</a>
<a href="https://muweb.pages.dev/zh/">pages</a>
<a href="javascript:" onclick="document.location.hash='#mirrors'">...</a>
)<br>
<b>常用链接::</b><br>
<a href="i:61ver:https://gitee.com/jamesfengcao/uweb/raw/master/latest.html">检测并下载最新版</a><br>
<a href="i:61:https://repo.or.cz/uweb.git/blob_plain/HEAD:/zh/searchurl/func.html">界面配置及杂项</a>(<a href="i:61:https://gitee.com/jamesfengcao/uweb/raw/master/zh/searchurl/func.html">gitee镜像</a>)<br>
<a href="i:60/data/data/info.torapp.uweb/files/config.html:https://gitee.com/jamesfengcao/uweb/raw/master/zh/searchurl/config.html">高级个性化定制</a><br>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/">内部目录</a>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/bookmark/">分类书签</a>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/offline/">离线网页</a>
<a target="_blank" href="file:///data/data/info.torapp.uweb/files/sbookmark/">超级书签</a><br>
<a target="_blank" href="file:///sdcard/Download/">下载</a>
<a target="_blank" href="i:1e">sd卡下载目录</a><br>
<a target="_blank" href="data:text/html;charset=utf-8,<body contenteditable%3E">空白便签</a><br>
<a target="_blank" href="file:///sdcard/Download/uweb.log">出错报告</a><br>
<br>
<b>主屏查询举例::</b><br>
在主屏中间输入框或顶部地址栏内输入“牛奶”,再点击上面“值得买”。<br>
<br>
<b>提示::</b>
<ul>
<li>底部工具条更多工具可左右滑动。</li>
<li>连点‘后退’按钮退出当前窗口。</li>
</ul>
<b>顶部工具条::</b><br>
从浏览器顶部往下拉或短按底部工具条页面搜索可显示。<br>
<br>
<b>底部工具条::</b><br>
左/右下角滑动或顶部/地址栏下方下拉可显示。<br>
<ul>
<li>[⟳] 刷新/中断网页;长按出现<a href="javascript:" onclick="document.location.hash='spinneroptions'">功能选择</a></li>
<li>后退: 长按智能翻页。</li>
<li>前进: 无前进历史时智能翻页。长按弹出系统菜单。</li>
<li>[⚙️]设置: 长按显示<a href="javascript:" onclick="document.location.hash='#options'">系统设置</a></li>
<li>[□] 窗口管理;长按打开<a target="_blank" href="file:///data/data/info.torapp.uweb/files/css/">全局用户css样式选项</a></li>
<li>主屏,长按打开新窗口。</li>
<li>[☰] 更多工具;长按弹出<a target="_blank" href="file:///data/data/info.torapp.uweb/files/js/">全局js脚本设置</a></li>
</ul>
更多工具:
<ul>
<li>[🖥️]PC: 伪装成桌面浏览器;长按则在左上角弹出菜单显示更多<a href=file:///data/data/info.torapp.uweb/files/default.uas>用户配置UA</a></li>
<li>[JS] 关闭/打开javascript支持长按显示<a target="_blank" href="file:///data/data/info.torapp.uweb/files/bookmarklet/">更多脚本功能</a></li>
<li>[IMG] 关闭/打开图像显示;长按显示更多<a href=file:///data/data/info.torapp.uweb/files/default.urls>特色服务</a><a href="urls/index.html">攻略</a></li>
<li>[☆] 添加书签;长按显示常用链接。<a href="links/index.html">攻略</a></li>
<li>[🕔] 访问历史,长按显示<a href=file:///data/data/info.torapp.uweb/files/default.cmds>预定义命令</a>菜单。<a href="cmds/index.html">攻略</a></li>
<li>[🔍]页面搜索:长按唤出<a href=file:///data/data/info.torapp.uweb/files/default.rjs>远程脚本菜单</a><a href="rjs/index.html">攻略</a></li>
<li>[🔗]复制链接:长按显示菜单,<a href=file:///data/data/info.torapp.uweb/files/default.select>对选中内容作用户定义操作</a><a href="textprocess/index.html">攻略</a></li>
<li>[X]退出浏览器:长按显示<a href=file:///data/data/info.torapp.uweb/files/default.input>输入法短语</a>.</li>
<li>[▽]底部</li>
<li>[△]顶部</li>
<li>[🔊]朗读: 优先朗读顶部工具条搜索栏非网址内容、网页选中内容,最后为整个网页。再次朗读可中断上次朗读操作,地址栏朗读专为学习外语单词发音而设计。</li>
<li>网址分享:主屏下对剪贴板数据进行<a href="textprocess/index.html">文本处理</a></li>
<li>[📃]文本重排</li>
<li>[☁]保存在线网页/复制本地内容到目录</li>
<li>[👤]账户切换</li>
</ul>
注:可通过关闭[JS]/[IMG]来屏蔽广告,这种屏蔽方式没有性能损失。<br>
<br>
<b><a id="options">系统设置</a>::</b><br>
<ul>
<li>不良信息拦截:与其它应用不同,此选项拦截一切子域名、孙域名......。<br>
需hosts文件<a href=file:///data/data/info.torapp.uweb/files/default.hosts>default.hosts</a>
每行一个域名。<br>
<a href="adblock/">攻略</a>
</li>
<li>缓存优先:优先使用缓存内容,可在离线状态下访问已缓存网页。</li>
<li>激活用户脚本:首次执行用户脚本后,访问同类网站时会自动执行此脚本,直至清空后台或另一脚本被激活。</li>
<li><a href="sitejs/">执行网站用户脚本</a></li>
<li>概览模式: 显示完整页面宽度,有时字体会比较小。</li>
<li>离线资源: 使用用户自备数据代替网站内容。</li>
<li>资源嗅探:取消选项时显示嗅探结果。可用<a href=file:///data/data/info.torapp.uweb/files/types.sniff>types.sniff</a>控制嗅探类型,空文件嗅探一切。</li>
<li>弹出视频地址: <a href=file:///data/data/info.torapp.uweb/files/types.sniff>types.sniff</a>控制嗅探类型。</li>
</ul>
<b><a id="spinneroptions">功能选择</a>::</b>
<ul>
<li><a href=file:///data/data/info.torapp.uweb/files/colors.txt>背景色</a></li>
<li><a href=file:///data/data/info.torapp.uweb/files/default.acmd>地址栏功能选择</a></li>
</ul>
<b>书签文件::</b><br>
用户可随意编辑文件<a href=file:///data/data/info.torapp.uweb/files/bookmark.html>bookmark.html</a>插入CSS样式。但最好仍然让每个书签占一行可简化管理。<br>
<br>
<b>长按链接::</b>
<ul>
<li>新窗口打开:当链接为小书签时,小书签将作用于除本窗口外的最后一个窗口。</li>
<li>屏蔽根域名:屏蔽当前链接的根域名,可能的话建议用户取域名的最后两部分。</li>
</ul>
<b>高级配置::</b><br>
点击本页面文件名链接弹出文本编辑器,部分链接为文件目录,长按可显示目录路径; 如果目录存在,点击可进入。使用底部下载按钮复制文件或目录至应用内部目录,可以扩展浏览器功能。
<ul>
<li>如果存在文件<a href=file:///data/data/info.torapp.uweb/files/home5.html>home5.html</a>,就以此为主屏。</li>
<li>运行用户javascript 长按底部工具条[JS]按钮则弹出菜单显示<a target="_blank" href="file:///data/data/info.torapp.uweb/files/bookmarklet/">bookmarklet</a>目录下所有js文件供用户挑选执行。</li>
<li>用户代理(user agent)配置: <a href=file:///data/data/info.torapp.uweb/files/default.uas>default.uas</a>。文件每行以回车结尾,格式为:<br>
[UA名]:[UA字符串]</li>
<li><a href="search.html">搜索引擎配置</a> <a href=file:///data/data/info.torapp.uweb/files/home5.search>home5.search</a>。文件每行以回车结尾,格式为:<br>
[引擎名]:[引擎url] </li>
<li>长按底部工具条[IMG]按钮弹出菜单显示<a href=file:///data/data/info.torapp.uweb/files/default.urls>default.urls</a>中辅助功能,配置文件格式与搜索引擎完全相同,每行格式如下:<br>
[功能名]:[提供功能网址] </li>
</ul>
<b><a id="mirrors">更多镜像</a>::</b><br>
<a href="i:0mi:5h:https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html">试验1</a>
<a href="i:0m?:https://gitcode.net/uweb/uweb/-/raw/master/redirect.html">2</a>
<a href="i:0m?:https://raw.gitcode.com/uweb/uweb/raw/master/redirect.html">4</a>
<a href="i:0m?:https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html">5</a>
<a href="i:0mi:5h?format=raw::https://sourceforge.net/p/uwebbrowser/code/ci/master/tree/redirect.html">6</a>
<a href="i:0mi:5h?format=raw::https://rocketgit.com/user/torappinfo/uweb/source/tree/branch/master/blob_download/redirect.html">7</a>
<a href="i:0m?:https://notabug.org/torappinfo/uweb/raw/master/redirect.html">8</a>
<a href="i:0mi:5h:https://git.launchpad.net/uweb/plain/redirect.html">9</a>
<a href="i:0m?:https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html">10</a>
<a href="i:0m?:https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html">11</a>
<a href="i:0m?:https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html">12</a>
<a href="i:0m?:https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html">13</a>
<a href="i:0m?:https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html">14</a>
<a href="i:0mi:5h/xxxx/?path=::https://dev.azure.com/jamesfengcao/1d8bf6c7-7c24-4441-bc5e-9709dcaf37fc/_apis/git/repositories/2a588d9b-f25a-46c0-bb3b-f685c635fcf8/itemsxxxx/redirect.html">15</a>
<a href="i:0mi:5h:https://pagure.io/uweb/raw/master/f/redirect.html">16</a>
<a href="i:0m?:https://bitbucket.org/torappinfo/torappinfo.bitbucket.io/raw/master/redirect.html">17</a>
<a href="i:0mi:5h:https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html">18</a>
<a href="i:0m?:https://dagshub.com/torappinfo/uweb/raw/master/redirect.html">19</a>
<a href="i:0mi:5h:https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html">20</a>
<a href="i:0m?:https://gitly.org/jamesfengcao/uweb/raw/master/redirect.html">gitly</a>
<a href="i:0m?:https://gitnet.fr/jamesfengcao/uweb/raw/branch/master/redirect.html">gitnet</a>
<a href="i:0m?:https://repo.palemoon.org/jamesfengcao/uweb/raw/branch/master/redirect.html ">palemoon</a>
<a href="i:0m?:https://tildegit.org/jamesfengcao/uweb/raw/branch/master/redirect.html">tilde</a>
<a href="i:0m?:https://git.dotclear.org/jamesfengcao/uweb/raw/branch/master/redirect.html">dotclear</a>
<a href="i:0m?:https://git.minetest.land/jamesfengcao/uweb/raw/branch/master/redirect.html ">minetest</a>
<a href="i:0m?:https://forge.chapril.org/jamesfengcao/uweb/raw/branch/master/redirect.html">chapril</a>
<a href="i:0m?:https://git.cryto.net/jamesfengcao/uweb/raw/branch/master/redirect.html ">cryto</a>
<a href="i:0m?:https://code.antopie.org/jamesfengcao/uweb/raw/branch/master/redirect.html">antopie</a>
<a href="https://uweb.zeabur.app/zh/">zeabur</a>
<a href="https://torappinfo.bitbucket.io/zh/">bitbucket</a>
<a href="https://uweb.vercel.app/zh/">vercel</a>
<br><br>
<a href="https://gitee.com/jamesfengcao/uweb">项目主页</a><br>
</body></html>

View File

@ -1,188 +1,173 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>_posts on </title>
<title>_Posts on uweb browser: unlimited power</title>
<link>/en/_posts/</link>
<description>Recent content in _posts on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Sat, 02 Jul 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/_posts/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in _Posts on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 30 Apr 2024 20:46:47 +0800</lastBuildDate>
<atom:link href="/en/_posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Site map</title>
<link>/en/sitemap/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>/en/sitemap/</guid>
<description>UI Search engines Home screen Quick start UI (gitee) Backup and restore Customization Bottom toolbar button long pressing menus User agents Javascript Url services Links Commands Remote javascript Menu for selections Menu for long pressing hypertext Toolbar Gestures Font settings Advanced Content AD blocking CSS styles redirection Javascript and CSS for domains Offline cache Tools Bookmarklets Custom file handling Html5 application File manager Tools Termux GNU bc Gnuplot tcron Offline download Miscellaneous Configuration files Plugins Tips Tips Video Debug </description>
<title>Text selection/processing</title>
<link>/en/textprocess/</link>
<pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
<guid>/en/textprocess/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:&#xA;Copy selected text with html format to clipboard&#xA;Search with home screen&#xA;google Translate&#xA;bing translate&#xA;deepL&#xA;The file &amp;quot;default.select&amp;quot; defines text processing menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:&#xA;[Name]:[mimetype]:[command line]&#xA;[mimetype] specifies input/output for [command line].</description>
</item>
<item>
<title>Links</title>
<link>/en/links/</link>
<pubDate>Sat, 28 Oct 2023 00:00:00 +0000</pubDate>
<guid>/en/links/</guid>
<description>Click the following links to install menus popped by long pressing the bookmark button (with star as icon):&#xA;Capture long screenshot (need long screenshot mode)&#xA;Select All:CTRL-A/undo:CTRL-Z/Redo:CTRL-Y&#xA;Extend site cookies to 10 years&#xA;Clear site cookies&#xA;VPN&#xA;Switch configuration&#xA;Wait for network msg&#xA;Certificate info&#xA;Backup to box.com&#xA;Restore from box.com&#xA;upload to box.com&#xA;More webdav link menu items&#xA;Web fullscreen&#xA;Long pressing the bookmark button in uweb browser will popup menus defined in file &amp;quot;default.</description>
</item>
<item>
<title>cron</title>
<link>/en/tcron/</link>
<pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate>
<guid>/en/tcron/</guid>
<description>crontab (with enhanced semantics) For performance, the file &amp;quot;crontab&amp;quot; uses single space as field separator. Letters are not suppored currently. So use &amp;quot;1&amp;quot; for &amp;quot;January&amp;quot; and 2 for &amp;quot;Tuesday&amp;quot; etc.&#xA;The sixth field in crontab file could be in the format of internal links. Specifically, &amp;quot;c:&amp;quot; to execute the following commands in termux and &amp;quot;!&amp;quot; to execute commands directly. If the sixth field is not in any of above formats, then the field will appear as the message of alarm clock.</description>
</item>
<item>
<title>Offline resources</title>
<link>/en/offlinecache/</link>
<pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
<guid>/en/offlinecache/</guid>
<description>Offline resources locate in the folder &amp;quot;sitecache&amp;quot;. With the option &amp;quot;use offline resources&amp;quot; enabled, the corresponding files in &amp;quot;sitecache/[domain name]/[full path including filename, the url path part]&amp;quot; are loaded first before reaching the network.&#xA;Serverless local sites Click to install url service that extracts web apps to the folder &amp;quot;sitecache/local/&amp;quot;: support web extensions (.crx for chrome &amp;amp; .xpi for firefox).&#xA;Any folder under &amp;quot;sitecache&amp;quot; can be visited as a local site.</description>
</item>
<item>
<title>Resource redirection</title>
<link>/en/redirect/</link>
<pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
<guid>/en/redirect/</guid>
<description>Redirection forwards cookies with the setting option &amp;quot;Redirect cookies&amp;quot; enabled, so use the options with care.&#xA;Setting options: &amp;quot;Url redirection&amp;quot; vs. &amp;quot;Resource redirection&amp;quot; &amp;quot;Url redirection&amp;quot; redirects the main/page url only while &amp;quot;Resource redirection&amp;quot; is for all urls in the page.&#xA;Global redirection Global redirection is enabled with the setting option &amp;quot;Resource redirection&amp;quot; or both &amp;quot;Url redirection&amp;quot; and &amp;quot;Redirect cookies&amp;quot;.&#xA;When a valid global redirection url is set, the &amp;quot;default.redirect&amp;quot; has no effect, and any url resource is fetched with the new url by appending the original url to the global redirection url.</description>
</item>
<item>
<title>Hosts files</title>
<link>/en/adblock_domain/</link>
<pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate>
<guid>/en/adblock_domain/</guid>
<description>The enhanced hosts files &amp;quot;hosts&amp;quot; and &amp;quot;default.hosts&amp;quot; take effect with the setting option &amp;quot;use hosts&amp;quot;.&#xA;hosts The enhanced file &amp;quot;hosts&amp;quot; defines IP addresses/attributes for domains. Each line has the following format:&#xA;[[IP address][attributes]][single space][domain name]&#xA;where &amp;quot;[[IP address][attributes]]&amp;quot; could be:&#xA;ipv4 address such as:&#xA;172.67.157.211 torapp.eu.org&#xA;ipv6 address, Ex.:&#xA;[2606:4700:3037::6815:8c3] torapp.eu.org&#xA;empty, that would lift all server-imposed limitations. Ex.:&#xA;[single space]gitee.com&#xA;which will make all git repositories on the domain visitable as websites with raw file access url.</description>
</item>
<item>
<title>JS/CSS/HTML/preprocessing for domains</title>
<link>/en/sitejs/</link>
<pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss). Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
<item>
<title>Bookmarks</title>
<link>/en/bookmark/</link>
<pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/bookmark/</guid>
<description>AI, chatgpt etc.&#xA;google gemini komo andi devv.ai iaskAI poe thinkany freegpt teach-anything magickpen note.ms&#xA;rentry&#xA;Wait for url from other devices&#xA;berify: reverse image search for video&#xA;Associated bookmarks Search engine files associate with bookmarks with extension &amp;quot;.html&amp;quot;, which means the bookmark file if existing is appended to the page when the search engine file is on screen.&#xA;&amp;quot;help_en.html&amp;quot; bookmark associates with the user manual in English. Similarly, &amp;quot;help_zh.html&amp;quot; is for Chinese manual.</description>
</item>
<item>
<title>Tips</title>
<link>/en/tips/</link>
<pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/tips/</guid>
<description>Text processing for clipboard data:&#xA;On home screen, pressing the sharing button of the bottom toolbar popups the text processing menu for clipboard data.&#xA;To show web pages in desktop mode:&#xA;PC button + option &amp;quot;wide viewport&amp;quot; + global js &amp;quot;force page resizable&amp;quot;.&#xA;Playing audio when screen off&#xA;Option &amp;quot;Floating video&amp;quot; + video fullscreen playing&#xA;Multiple home screens and Next/Prev page:&#xA;home5.html, home6.mht(or .search or .html), home7.mht(or .search or .html), .</description>
</item>
<item>
<title>Address bar command line</title>
<link>/en/acmd/</link>
<pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/acmd/</guid>
<description>&amp;quot;:!&amp;quot; ( or &amp;quot;!&amp;quot;) command line Pressing &amp;quot;:&amp;quot; or &amp;quot;!&amp;quot; with hardware keyboard sets focus on the address bar.&#xA;The command line could be a &amp;quot;.js&amp;quot;, &amp;quot;.sh&amp;quot; or other executable with arguments. Ex. &amp;quot;:!s g keyword&amp;quot; could invoke &amp;quot;s.js&amp;quot; executable with the whole string as arguments (&amp;quot;s.sh&amp;quot; or &amp;quot;s&amp;quot; if file exists, here &amp;quot;g&amp;quot; as google search engine); &amp;quot;:! g keyword&amp;quot; would invoke the file &amp;quot;.js&amp;quot; or &amp;quot;.sh&amp;quot; as executable.</description>
</item>
<item>
<title>Any url as website</title>
<link>/en/url2site/</link>
<pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate>
<guid>/en/url2site/</guid>
<description>The uweb internal link &amp;quot;i:0m&amp;quot; make any url such as download or indirect links visitable as a website. The second part of mirrors has examples using the following tricks:&#xA;&amp;quot;i:0m04:[url]&amp;quot;: to treat the [url] content as html with bookmarklet. &amp;quot;i:0m?:[url]&amp;quot;: to treat the [url] content as html, handling css/js properly. &amp;quot;i:0m?[postfix]:[url]&amp;quot;: auto append query postfix to url to retrieve content. &amp;quot;i:0mi:5h:[url]&amp;quot;: similar to &amp;quot;i:0m?:[url]&amp;quot;, to treat the [url] content as html (for download or no-script links etc.</description>
</item>
<item>
<title>Html5 applications</title>
<link>/en/html5/</link>
<pubDate>Sun, 02 Oct 2022 00:00:00 +0000</pubDate>
<guid>/en/html5/</guid>
<description>This page is for uweb browser.&#xA;Click to install the following html5 apps:&#xA;Huge markdown file viewer&#xA;Huge markdown+katex file viewer (Tex formulas)&#xA;Huge markdeep file viewer (markdown, latex, diagram,graphviz etc.)&#xA;plyr video player&#xA;dplayer video player&#xA;pdf viewer&#xA;epub reader (authorllili)&#xA;djvu viewer&#xA;The corresponding menus can be installed with url services.&#xA;Features The following mentioned subfolders locate in the configuration folder.&#xA;The following html5 applications are allowed to read local files referred by &amp;quot;https://local/sdcard/.</description>
</item>
<item>
<title>Configuration folders/files</title>
<link>/en/filenames/</link>
<pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/filenames/</guid>
<description>All folders end with character &amp;quot;/&amp;quot; and others are files. All folders/files locate in &amp;quot;/data/data/info.torapp.uweb/files&amp;quot;:
&amp;quot;css/&amp;quot;: global css folder
&amp;quot;js/&amp;quot;: global script folder
&amp;quot;sitejs/&amp;quot;: script folder for domains
&amp;quot;sitecss/&amp;quot;:CSS folder for domains
&amp;quot;bookmarklet/&amp;quot;:bookmarklets, long pressing the &amp;quot;JS&amp;quot; button to execute.
&amp;quot;offline/&amp;quot;: to save offline pages
&amp;quot;sbookmark/&amp;quot;: to save super bookmarks
&amp;quot;sitecache/&amp;quot;:offline cache
&amp;quot;longclick/&amp;quot;: menus to appear when long-pressing hypertext (js files)
&amp;quot;icon/&amp;quot;:customized icons
&amp;quot;app[XXX]/&amp;quot;:html5 applications
&amp;quot;default.longclick&amp;quot;: to configure menus when long-pressing hypertext.</description>
<description>All folders end with character &amp;quot;/&amp;quot; and others are files. All folders/files locate in &amp;quot;/data/data/info.torapp.uweb/files&amp;quot;:&#xA;&amp;quot;css/&amp;quot;: global css folder&#xA;&amp;quot;js/&amp;quot;: global script folder&#xA;&amp;quot;sitejs/&amp;quot;: script folder for domains&#xA;&amp;quot;sitecss/&amp;quot;:CSS folder for domains&#xA;&amp;quot;bookmarklet/&amp;quot;:bookmarklets, long pressing the &amp;quot;JS&amp;quot; button to execute.&#xA;&amp;quot;offline/&amp;quot;: to save offline pages&#xA;&amp;quot;sbookmark/&amp;quot;: to save super bookmarks&#xA;&amp;quot;sitecache/&amp;quot;:offline cache&#xA;&amp;quot;longclick/&amp;quot;: menus to appear when long-pressing hypertext (js files)&#xA;&amp;quot;icon/&amp;quot;:customized icons&#xA;&amp;quot;app[XXX]/&amp;quot;:html5 applications&#xA;&amp;quot;default.longclick&amp;quot;: to configure menus when long-pressing hypertext.</description>
</item>
<item>
<title>Links</title>
<link>/en/links/</link>
<pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/links/</guid>
<description>Clicking the following hypertext will install menus for long pressing the bookmark button (with star as icon):
Certificate info
Web fullscreen
Long pressing the bookmark button in uweb browser will popup menus defined in file &amp;quot;default.link&amp;quot;. The file format is as follows:
[Menu name]:[url][space][javascript code]
in which space and later parts are optional. url and later parts support &amp;quot;%u&amp;quot;,&amp;quot;%s&amp;quot; etc.. The javascript code will be executed after url is fully loaded.</description>
</item>
<item>
<title>AD blocking</title>
<link>/en/adblock/</link>
<pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/adblock/</guid>
<description>Host blocking。
Use bookmarklet &amp;quot;list all script urls&amp;quot; to generate url links, long pressing dubious script (usually 3rd-party library) link, click &amp;quot;Block domain root&amp;quot;. Javascript and CSS for domains。
Long press the button &amp;quot;js&amp;quot;, click the menu &amp;quot;MarkAD mode&amp;quot;. In &amp;quot;markAD mode&amp;quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &amp;quot;display:none&amp;quot; is used. If &amp;quot;display&amp;quot; appears in the attribute information, recommend to use &amp;quot;transform:scale(0)!</description>
<description>Host blocking。&#xA;Use bookmarklet &amp;quot;list all script urls&amp;quot; to generate url links, long pressing dubious script (usually 3rd-party library) link, click &amp;quot;Block domain root&amp;quot;. Javascript and CSS for domains。&#xA;Long press the button &amp;quot;js&amp;quot;, click the menu &amp;quot;MarkAD mode&amp;quot;. In &amp;quot;markAD mode&amp;quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &amp;quot;display:none&amp;quot; is used. If &amp;quot;display&amp;quot; appears in the attribute information, recommend to use &amp;quot;transform:scale(0)!</description>
</item>
<item>
<title>Bookmarklets</title>
<link>/en/bookmarklet/</link>
<pubDate>Fri, 24 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/bookmarklet/</guid>
<description>With a href=&amp;quot;../index.html&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.
List all script urls
User agent
Cookie
Source code
Last modified date
Eruda: mobile console
QR code generation
Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;
Shows all form elements
Enables all form elements
Toggle checkboxes
Check all checkboxes
Uncheck all checkboxes
Toggle all checkboxes in forms
Enable selection</description>
<description>With a href=&amp;quot;../index.html#&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.&#xA;List all script urls&#xA;User agent&#xA;Cookie&#xA;Source code&#xA;Last modified date&#xA;Eruda: mobile console&#xA;QR code generation&#xA;Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;&#xA;Shows all form elements&#xA;Enables all form elements&#xA;Toggle checkboxes&#xA;Check all checkboxes&#xA;Uncheck all checkboxes&#xA;Toggle all checkboxes in forms&#xA;Enable selection</description>
</item>
<item>
<title>Text selection</title>
<link>/en/pccopy/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/pccopy/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:
google Translate
bing translate
deepL
The file &amp;quot;default.select&amp;quot; defines menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:
[Name]:[mimetype]:[command line]
[mimetype] specifies input/output for [command line].
It formats as &amp;quot;[input mimetype]/[output mimetype]&amp;quot;.
[input mimetype] can be the following:
&amp;quot;html&amp;quot;: rich text &amp;quot;&amp;quot; (empty): text &amp;quot;.</description>
</item>
<item>
<title>CSS样式</title>
<title>CSS styles</title>
<link>/en/globalcss/</link>
<pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/globalcss/</guid>
<description>Uweb browser loads all &amp;quot;.css&amp;quot; files under the folder &amp;quot;css&amp;quot; as global css. Click the following links to install global css files:
Clearing font settings
The file &amp;quot;night.css&amp;quot; is used as night mode, click the following links to install one:
webview 81+ night mode
webview 80- night mode</description>
<description>Uweb browser loads all &amp;quot;.css&amp;quot; files under the folder &amp;quot;css&amp;quot; as global css. Click the following links to install global css files:&#xA;Clearing font settings&#xA;The file &amp;quot;night.css&amp;quot; is used as night mode, click the following links to install one:&#xA;webview 81+ night mode&#xA;webview 80- night mode&#xA;Earliest loaded global js The &amp;quot;.js&amp;quot; files under the folder &amp;quot;css&amp;quot; are loaded as earlier as possible on the page.</description>
</item>
<item>
<title>Toolbar customization</title>
<link>/en/icons/</link>
<pubDate>Sun, 06 Feb 2022 00:00:00 +0000</pubDate>
<guid>/en/icons/</guid>
<description>If subfolder &amp;quot;icon&amp;quot; exists, then files named as &amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;...
are used for icons in the bottom toolbar. file &amp;quot;0&amp;quot; to replace the left arrow button, &amp;quot;1&amp;quot; for right arrow button, &amp;quot;2&amp;quot; for the setting button,&amp;quot;3&amp;quot; for the home screen button,...
If a new button is defined (file name &amp;quot;20&amp;quot; exists), uweb also supports VectorDrawable with &amp;quot;android compiled XML&amp;quot; format. All icon files must be all VectorDrawables or 此时所有图标文件必须都是compiled XML格式或都是普通的图像格式png,jpg,gif等。用户可将VectorDrawable XML文件放到安卓项目目录assets下面重新生成apk文件以后将apk文件解压即可得compiled XML格式图标文件。</description>
<description>If subfolder &amp;quot;icon&amp;quot; exists, then files named as &amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;...&#xA;are used for icons in the bottom toolbar. file &amp;quot;0&amp;quot; to replace the left arrow button, &amp;quot;1&amp;quot; for right arrow button, &amp;quot;2&amp;quot; for the setting button,&amp;quot;3&amp;quot; for the home screen button,...&#xA;If a new button is defined (file name &amp;quot;20&amp;quot; exists), uweb also supports VectorDrawable with &amp;quot;android compiled XML&amp;quot; format. All icon files must be either all compiled VectorDrawables or common image formats.</description>
</item>
<item>
<title>Search engine files</title>
<link>/en/searchcat/</link>
<pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate>
<guid>/en/searchcat/</guid>
<description>Search engine file names have &amp;quot;.search&amp;quot; as postfix. When they are clicked, the associated bookmark files with postfix &amp;quot;.search.html&amp;quot; would be appended. Ex: the associated bookmark for &amp;quot;foo.search&amp;quot; is &amp;quot;foo.search.html&amp;quot;.&#xA;Any &amp;quot;.search&amp;quot; file can be opened as search engine file, each line of which has one of the following formats:&#xA;[Engine name]:[url without &#39;%s&#39; inside]&#xA;[Engine name]:[url with &#39;%s&#39; as keyword]&#xA;[Engine name]:POST:[post params with &#39;%s&#39; as keyword]:[url]&#xA;[Engine name]:[Extra request headers]:[post params with &#39;%s&#39; as keyword]:[url]</description>
</item>
<item>
<title>Termux</title>
<link>/en/termux/</link>
<pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate>
<guid>/en/termux/</guid>
<description>Only the termux versions provided along with uweb browser can work seamlessly. For android 10+, please install termux before installing uweb browser. If uweb is already installed, users can uninstall it first, then install termux and reinstall uweb browser.&#xA;Termux bookmarks Long pressing the following links then either &amp;quot;commands&amp;quot;-&amp;gt;&amp;quot;bookmark&amp;quot; to add bookmarks or &amp;quot;open in new tab&amp;quot; to execute.&#xA;GNU bc (basic calculator)&#xA;bc with all extensions&#xA;Click the following links to install termux configurations: .</description>
</item>
<item>
<title>Long pressed link menu</title>
<link>/en/longclick/</link>
<pubDate>Fri, 06 Nov 2020 00:00:00 +0000</pubDate>
<guid>/en/longclick/</guid>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)
[Name]:[mimetype]:[command line]
in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.
To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.
These javascript files are in the following format:
The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)&#xA;[Name]:[mimetype]:[command line]&#xA;in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.&#xA;To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.&#xA;These javascript files are in the following format:&#xA;The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
</item>
<item>
<title>Tools</title>
<link>/en/tools/</link>
<pubDate>Sun, 06 Sep 2020 00:00:00 +0000</pubDate>
<guid>/en/tools/</guid>
<description>This page is for uweb browser.&#xA;install tdict_local (search with local indexes and remote content) Click to install the following local indexes with corresponding search engines (for test only).&#xA;install the indexes for &amp;quot;American heritage dictionary (en-en&amp;amp;zh with AHD/D.J./K.K. pronunciation)&amp;quot;&#xA;Install AHD to home screen&#xA;Indexes for &amp;quot;研究社新編英和活用大辞典(English usage: en-en&amp;amp;ja)&amp;quot;&#xA;Install &amp;quot;English usage (en-en&amp;amp;ja)&amp;quot;&#xA;Indexes for SOED6&#xA;install SOED&#xA;The following dictionaries work better with markdown processor.&#xA;Install markdown processor</description>
</item>
<item>
<title>Custom file handling</title>
<link>/en/filecap/</link>
<pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
<guid>/en/filecap/</guid>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.
The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:
[file extension]:[mimetype]:[command line]
The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.
&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.
&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.&#xA;The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:&#xA;[file extension]:[mimetype]:[command line]&#xA;The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.&#xA;&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.&#xA;&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
</item>
<item>
<title>Blocking domain trees</title>
<link>/en/adblock_domain/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/adblock_domain/</guid>
<description>hosts blocks whole domain trees including all descedant domains. The domains in the hosts file must be 2 or 3 segment domains, such as &amp;quot;yahoo.com&amp;quot; and &amp;quot;finance.yahoo.com&amp;quot;. If the length of the last 2 segments is less than 7, such as &amp;quot;com.pl&amp;quot;, then it is treated as one segment, so domains like &amp;quot;xxx.xxx.com.pl&amp;quot; are also valid in the hosts file.
Each line of the hosts file has the following format:</description>
<title>Gestures</title>
<link>/en/gesture/</link>
<pubDate>Thu, 18 Jun 2020 00:00:00 +0000</pubDate>
<guid>/en/gesture/</guid>
<description>Swipe down from the top to show the address bar; swipe up to the top to hide the address bar. Swipe down to the bottom to hide the toolbar with option &amp;quot;swipe to hide tools&amp;quot;; swipe on the bottom corners to show the toolbar.&#xA;Swipe left/right near the toolbar to switch window; fling left/right to switch to the last/first window.&#xA;Swiping on the top part of content window (near the top address bar by default) triggers corresponding link in the file &amp;quot;default.</description>
</item>
<item>
<title>Change log</title>
<link>/en/changelog/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/changelog/</guid>
<description>901: Use in-app files folder for configuration</description>
</item>
<item>
<title>Javascript and CSS for domains</title>
<link>/en/sitejs/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss).
Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
</channel>
</rss>

97
en/acmd/index.html Normal file
View File

@ -0,0 +1,97 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Address bar command line</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Address bar command line
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<h3 id="--or--command-line">&quot;:!&quot; ( or &quot;!&quot;) command line</h3>
<p>Pressing &quot;:&quot; or &quot;!&quot; with hardware keyboard sets focus on the address bar.<br>
The command line could be a &quot;.js&quot;, &quot;.sh&quot; or other executable with arguments. Ex. &quot;:!s g keyword&quot; could invoke &quot;s.js&quot; executable with the whole string as arguments (&quot;s.sh&quot; or &quot;s&quot; if file exists, here &quot;g&quot; as google search engine); &quot;:! g keyword&quot; would invoke the file &quot;.js&quot; or &quot;.sh&quot; as executable.</p>
<p>For regular (non-js) executables, the standard output of the command line could be treated as lines of urls (or html, plain text).</p>
<p><a href="i:0h.js:../searchurl/txt/web.js">Install the example file &quot;.js&quot; (supporting search engine bundle)</a><br>
<a href="i:0hs.sh:../searchurl/txt/web.sh">Install the example file &quot;s.sh&quot;</a></p>
<p>Click the following links to make commands appear in address bar, then press &quot;enter&quot; to execute:<br>
<a href="i:15:!cd /data/data/com.termux/files/home;ln -s ../../../info.torapp.uweb/files uweb">Make uweb configuration folder accessible by file managers with termux installed</a><br>
(<a href="https://wiki.termux.com/wiki/Internal_and_external_storage">File manager list at end of the page</a>)</p>
<h3 id="address-bar-command-modes">Address bar command modes</h3>
<p><a href="../cmds/index.html#">Commands</a> are the best for repeated execution of an instruction. Address bar command modes provide ways to run different commands in the same category easily.</p>
<p>The configure file &quot;default.acmd&quot; has the exactly same format as <a href="../cmds/index.html#">default.cmds</a>. Click the following links to install new modes (cold start the app to take effect, then long click the &quot;refresh&quot; button to switch modes):</p>
<p><a href="i:0gdefault.acmd::shell:text/plain:%25s%0A">Shell command mode</a></p>
<p><a href="i:0gdefault.acmd::bc:text/plain:echo '%25s'|bc -l -q%0A">GNU bc (basic calculator) command mode (need termux for Android 10- )</a></p>
<p><a href="i:0gdefault.acmd::plot 2D function:image/svg%2Bxml:gnuplot -e 'set term svg;set
output;plot %25s'%0A">GNUPlot plot (2D function), needs uweb adapted termux &amp; gnuplot</a></p>
<p><a href="i:0gdefault.acmd::plot 3D function:image/svg%2Bxml:gnuplot -e 'set term svg;set
output;splot %25s'%0A">GNUPlot plot (3D function), needs uweb adapted termux &amp; gnuplot</a></p>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>AD blocking</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -49,13 +49,13 @@
</ul>
<ul>
<li>
<p><a href="../adblock_domain/index.html">Host blocking</a></p>
<p><a href="../adblock_domain/index.html#">Host blocking</a></p>
<ul>
<li>Use <a href="../bookmarklet/index.html">bookmarklet &quot;list all script urls&quot;</a> to generate url links, long pressing dubious script (usually 3rd-party library) link, click &quot;Block domain root&quot;.</li>
<li>Use <a href="../bookmarklet/index.html#">bookmarklet &quot;list all script urls&quot;</a> to generate url links, long pressing dubious script (usually 3rd-party library) link, click &quot;Block domain root&quot;.</li>
</ul>
</li>
<li>
<p><a href="../sitejs/index.html">Javascript and CSS for domains</a></p>
<p><a href="../sitejs/index.html#">Javascript and CSS for domains</a></p>
<ul>
<li>Long press the button &quot;js&quot;, click the menu &quot;MarkAD mode&quot;. In &quot;markAD mode&quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &quot;display:none&quot; is used. If &quot;display&quot; appears in the attribute information, recommend to use &quot;transform:scale(0)!important&quot; instead.</li>
</ul>
@ -68,7 +68,7 @@
</ul>
</li>
<li>
<p>Long press the setting button, check the option &quot;Block external scripts&quot;. <a href="i:61:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/en/searchurl/func.html">UI</a> website has option to also block dubious 3rd party resources. <a href="file:///data/data/info.torinfo.uweb/files/js.allow">js.allow</a> whitelists js libraries.</p>
<p>Long press the setting button, check the option &quot;Block external scripts&quot;. <a href="i:61:../searchurl/func.html">UI</a> website has option to also block dubious 3rd party resources. <a href="file:///data/data/info.torapp.uweb/files/js.allow">js.allow</a> whitelists js libraries.</p>
</li>
<li>
<p>Long press the button [☰], &quot;Disable floating ADs&quot;, &quot;Disable banners&quot;, &quot;clear all timers&quot;, &quot;stop events&quot; and &quot;Sleep ...&quot; are also available.</p>
@ -80,11 +80,40 @@
<p>Click the button &quot;JS&quot; to disable javascript.</p>
</li>
<li>
<p><a href="file:///data/data/info.torinfo.uweb/files/url.deny">url.deny</a>: one giant regular expression for blocked urls (java grammar), in which carriage returns (CR or newline) are ignored and &quot;#&quot; is for comments.</p>
<p><a href="file:///data/data/info.torapp.uweb/files/url.deny">url.deny</a>: one giant regular expression for blocked urls (java grammar), in which carriage returns (CR or newline) are ignored and &quot;#&quot; is for comments.</p>
</li>
</ul>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,8 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>Blocking domain trees</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Hosts files</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,21 +40,86 @@
<br />
<div class="container">
<h1 class="title">Blocking domain trees
<h1 class="title">Hosts files
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
<li><a href="../tags/adblock">adblock</a> </li>
<li><a href="../tags/adblock/index.html#">adblock</a> </li>
</ul>
<p><a href="file:///data/data/info.torinfo.uweb/files/default.hosts">hosts</a> blocks whole domain trees including all descedant domains. The domains in the hosts file must be 2 or 3 segment domains, such as &quot;yahoo.com&quot; and &quot;finance.yahoo.com&quot;. If the length of the last 2 segments is less than 7, such as &quot;com.pl&quot;, then it is treated as one segment, so domains like &quot;xxx.xxx.com.pl&quot; are also valid in the hosts file.</p>
<p>The enhanced hosts files &quot;hosts&quot; and &quot;default.hosts&quot; take effect with the setting option &quot;use hosts&quot;.</p>
<h4 id="hosts">hosts</h4>
<p>The <span style="color:red">enhanced</span> file <a href="file:///data/data/info.torapp.uweb/files/hosts">&quot;hosts&quot;</a> defines IP addresses/attributes for domains. Each line has the following format:<br>
[[IP address][attributes]][single space][domain name]</p>
<p>where &quot;[[IP address][attributes]]&quot; could be:</p>
<ul>
<li>
<p>ipv4 address such as:<br>
172.67.157.211 torapp.eu.org</p>
</li>
<li>
<p>ipv6 address, Ex.:<br>
[2606:4700:3037::6815:8c3] torapp.eu.org</p>
</li>
<li>
<p>empty, that would lift all server-imposed limitations. Ex.:<br>
[single space]gitee.com</p>
<p>which will make all git repositories on the domain visitable as websites with raw file access url.</p>
</li>
<li>
<p>response headers, separeded by ';', Ex.:<br>
Access-Control-Allow-Origin;https://www.bing.com;Access-Control-Allow-Credentials;true mybing.xn--xyza.top</p>
<p>which makes &quot;mybing2.xn--xyza.top&quot; to accept CORS requests with cookies.</p>
</li>
<li>
<p>IP address and response headers, separeded by ';', Ex.:<br>
104.21.8.195;Access-Control-Allow-Origin;https://www.bing.com;Access-Control-Allow-Credentials;true uweb.torapp.eu.org</p>
</li>
<li>
<p>IP address, real domain name and response headers (Experimental), separeded by ';', Ex.:<br>
104.21.8.195;www.bing.com uweb.torapp.eu.org</p>
<p>which indicates the domain &quot;uweb.torapp.eu.org&quot; is just a proxy of &quot;www.bing.com&quot;, and as such, the cookies of &quot;www.bing.com&quot; would be used for &quot;uweb.torapp.eu.org&quot;.</p>
<p>To make life easier, use lower-case domain name (the first letter should not be a digital) and capitalize the first letter of response header names.</p>
</li>
</ul>
<h4 id="defaulthosts">default.hosts</h4>
<p><a href="file:///data/data/info.torapp.uweb/files/default.hosts">&quot;default.hosts&quot;</a> blocks whole domain trees including all descendant domains. The domains in the hosts file must be 2 or 3 segment domains, such as &quot;yahoo.com&quot; and &quot;finance.yahoo.com&quot;. If the length of the last 2 segments is less than 7, such as &quot;com.pl&quot;, then it is treated as one segment, so domains like &quot;xxx.xxx.com.pl&quot; are also valid in the hosts file.</p>
<p>Each line of the hosts file has the following format:<br>
[rootDomain][space][regex for domain prefix before rootDomain][space][regex for the whole url without &quot;http(s)://&quot;]<br>
The first part [rootDomain] is required and the others are optional. regex is java-grammar regular expression. If the second regex is used, it is recommended to merge the first regex to the second one for performance.</p>
</div>
<p>Last Modified: 2 April 2024<br>
update bingAI/js/optionsSets.js<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

130
en/bookmark/index.html Normal file
View File

@ -0,0 +1,130 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Bookmarks</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Bookmarks
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>AI, chatgpt etc.</p>
<ul>
<li><a href="https://gemini.google.com/app">google gemini</a></li>
<li><a href="https://komo.ai">komo</a></li>
<li><a href="https://andisearch.com">andi</a></li>
<li><a href="https://devv.ai">devv.ai</a></li>
<li><a href="https://iask.ai">iaskAI</a></li>
<li><a href="https://poe.com">poe</a></li>
<li><a href="https://thinkany.ai">thinkany</a></li>
<li><a href="https://freegpt.cc">freegpt</a></li>
<li><a href="https://www.teach-anything.com/">teach-anything</a></li>
<li><a href="https://magickpen.com/">magickpen</a></li>
</ul>
<p><a href="https://note.ms">note.ms</a><br>
<a href="https://rentry.org">rentry</a><br>
<a href="i:1w">Wait for url from other devices</a><br>
<a href="https://berify.com">berify: reverse image search for video</a></p>
<h3 id="associated-bookmarks">Associated bookmarks</h3>
<p><a href="../searchcat/index.html#">Search engine files</a> associate with bookmarks with extension &quot;.html&quot;, which means the bookmark file if existing is appended to the page when the search engine file is on screen.</p>
<p>&quot;help_en.html&quot; bookmark associates with the user manual in English. Similarly, &quot;help_zh.html&quot; is for Chinese manual. Whenever user manual is open, the associated bookmark appears before the manual.</p>
<h3 id="tips">Tips</h3>
<h4 id="file-handling-and-styling-with-homecss">File handling and styling with home.css</h4>
<p>&quot;home.css&quot; (in current folder, parent folder or the &quot;bookmark&quot; folder) styles bookmarks, search engines and the folder itself. The file is in html format instead of CSS, so it needs &quot;&lt;style&gt;&quot; tag for CSS.</p>
<p><a href="i:0hbookmark/home.css:../searchurl/txt/markdeep.html">Install markdeep styling for markdown files</a></p>
<h3 id="bookmarks-with-secrets-post-instead-of-get">Bookmarks with secrets (POST instead of GET)</h3>
<p>The <a href="../links/index.html#">internal link</a> &quot;i:a1[url]?[post data]&quot; sends http &quot;POST&quot; request to server.</p>
<h3 id="commands">Commands</h3>
<p>Clicking to run is only allowed from local pages for bookmarks in this section. Users need to either save the bookmarks to local or long press the link =&gt; &quot;open in new tab&quot; to execute.</p>
<p>To save the bookmarks to local, users firstly need to install &quot;bookmark&quot; menu by clicking corresponding link in the <a href="../urls/index.html#">url services</a> page, then long press the bookmark link =&gt; &quot;open in new tab&quot; =&gt; &quot;Commands&quot; =&gt; &quot;bookmark&quot; to save the bookmark.</p>
<p><a href="d::mkdir -p /sdcard/Download/uweb;cd /data/data/info.torapp.uweb;cp -r files /sdcard/Download/uweb;rm -rf files;ln -s /sdcard/Download/uweb files:">symbolic link configuration folder to &quot;/sdcard/Download/uweb&quot;</a></p>
<p><a href="d::cd /data/data/com.termux/files/home;ln -s ../../../info.torapp.uweb/files uweb:">Make uweb configuration folder accessible by file managers with termux installed</a><br>
(<a href="https://wiki.termux.com/wiki/Internal_and_external_storage">File manager list at end of the page</a>)</p>
<p><a href="d::cd /sdcard/Download/mdict;for i in *.mdx; do b=`basename ${i} .mdx`;fs=%22${i}%22;if [ -f ${b}.mdd ];then fs=${fs}%22,${b}.mdd%22;fi;echo ${b}:i:5ifile:///sdcard/Download/mdict/${fs}?app=https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict.html#word=%25s >>/data/data/info.torapp.uweb/files/home5.search;done:">Scan mdx/mdd files under the folder &quot;/sdcard/Download/mdict&quot; and add search engines</a>.</p>
<h4 id="termux">Termux</h4>
<p>The following bookmarks need termux.<br>
<a href="c:bc -l">GNU bc (basic calculator)</a><br>
<a href="c:bc -l *.bc">bc with all extensions</a></p>
<h3 id="templates">Templates</h3>
<p>Click following links to install bookmark templates, bookmarks saved to the template have corresponding features enabled.<br>
<a href="i:0hbookmark/novel.html:../../zh/searchurl/bookmark/novel.html">&quot;novel.html&quot;: auto reader's mode</a></p>
<h3 id="science">Science</h3>
<h4 id="physics">Physics</h4>
<p><a href="https://www.feynmanlectures.caltech.edu/">Feynman lectures</a></p>
<h4 id="chemistry">Chemistry</h4>
<p><a href="https://www.chemspider.com">chemspider</a><br>
<a href="http://bl.ocks.org/chemplexity/raw/180e960a6d9e68adf28429dd16f05fa0/">molecule SMILES</a><br>
<a href="http://cdb.ics.uci.edu/cgibin/Smi2DepictWeb.py">SMILES2structure</a></p>
</div>
<p>Last Modified: 30 April 2024<br>
urlInc() prefers .search to .html<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Bookmarklets</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -46,10 +46,10 @@
</h1>
<ul class="tags">
<li><a href="../tags/javascript">javascript</a> </li>
<li><a href="../tags/javascript/index.html#">javascript</a> </li>
</ul>
<p>With a href=&quot;../index.html&quot;&gt;uweb browser</a>, long pressing any bookmarklet link, click &quot;Open in new tab&quot;, the bookmarklet will be run on the last other tab.</p>
<p>With a href=&quot;../index.html#&quot;&gt;uweb browser</a>, long pressing any bookmarklet link, click &quot;Open in new tab&quot;, the bookmarklet will be run on the last other tab.</p>
<p><a href="javascript:{let es=document.getElementsByTagName('script');let urls='';for(let i=0;i<es.length;i++){if(es[i].src)urls+=es[i].src+'<br>';}let w=window.open(''),s=w.document;s.write(urls);s.close();w.location.href='i:631:';}">List all script urls</a></p>
<p><a target="_self" href="javascript:alert(navigator.userAgent)">User agent</a><br>
<a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.cookie))})()">Cookie</a><br>
@ -71,6 +71,35 @@
<p><a href="javascript: (function() { var url = ('http://www.bugmenot.com/view/' + escape(location.hostname)); w = open(url, 'w', 'location=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=500,height=400,modal=yes,dependent=yes'); if (w) { setTimeout('w.focus()', 1000) } else { location = url } })();">BugMeNot</a></p>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Categories on </title>
<title>Categories on uweb browser: unlimited power</title>
<link>/en/categories/</link>
<description>Recent content in Categories on </description>
<generator>Hugo -- gohugo.io</generator><atom:link href="/en/categories/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Categories on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<atom:link href="/en/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

View File

@ -4,8 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>Change log</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Downloads</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
@ -36,16 +36,90 @@
<br />
<div class="container">
<h1 class="title">Change log
<h1 class="title">Downloads
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>901: Use in-app files folder for configuration</p>
<p><a href="https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5">Amazon appstore</a></p>
<p><a href="https://galaxy.store/uweb">Galaxy.Store</a></p>
<p><a href="https://s1.asytech.cn/s/tQrgT5kBRg8Trry">uweb, termux &amp; history versions</a></p>
<p><a href="https://github.com/torappinfo/uweb/releases/tag/v1">github</a></p>
<p><a href="https://sourceforge.net/projects/uwebbrowser/files/v1/">sourceforge</a></p>
<p><a href="https://my.powerfolder.com/getlink/fi61cC6VHjK72tfufmnLAz/">powerfolder</a></p>
<p><a href="https://www.udrop.com/folder/08ba413230f465ca0901bef68e857c0b/uweb">udrop</a></p>
<p><a href="https://releases.pagure.org/uwebapk/">pagure</a></p>
<p><a href="http://pan.mcbebbs.cn/s/dJ4t8">mcbebbs</a></p>
<h4 id="main-featuresreadmeindexhtml"><a href="../readme/index.html">Main features</a></h4>
<h4 id="change-logs">Change logs</h4>
<p>1048: enhance file downloading. Previous versions may fail for few sites.<br>
1047: add huge markdown file viewer<br>
1038: support chatBot as search engine with url &quot;i:0/js/hash2textarea.js:https://XXX&quot;<br>
1036: TV mode: reuse &quot;engine.search&quot; as live TV channel urls.<br>
1034: click share button on homescreen to process clipboard text.<br>
1030: Allow downloading with global redirection<br>
1026: Test automation: enable i:0 urls in scripting mode<br>
1017: crontab alarm clock and <a href="../links/index.html">links</a> as sixth field.<br>
1008: Add long screenshot mode<br>
1006: Advanced configuration: auto reload, download path<br>
1004: bookmarklet &quot;Show as html&quot; to support clipboard sites such as &quot;netcut.cn&quot;.<br>
998: <a href="../rjs/index.html">Bookmarklets</a> to support CSP sites.<br>
991: <a href="../redirect/index.html">global url redirection</a> support.<br>
988: <a href="../adblock_domain/index.html">hosts</a> file to support response headers.<br>
985: <a href="../links/index.html">Special urls</a> to support shortcut keys such as ctrl-a to ctrl-z.<br>
983: support <a href="../adblock_domain/index.html">&quot;hosts&quot;</a> file domain name resolving (no root needed), only single space allowed as separator for ip address and domain name.<br>
975: <a href="../bookmark/index.html">Bookmarks</a> to support styling for markdown etc.<br>
971: <a href="../links/index.html">multiple type profiles</a>: switch any data including website logins, user configurations orthogonally.<br>
964: site source html preprocessing before rendering with user <a href="../sitejs/index.html">site extra html</a>.<br>
961: webdav/http file upload support with <a href="../links/index.html">&quot;i:0u&quot; links</a>.<br>
955: Address bar: <a href="../acmd/index.html">&quot;:!&quot; or &quot;!&quot;</a> for command line support (.js/.sh files as executables).<br>
949: Address bar: &quot;:p [width in milliInch]x[height]&quot; to generate PDF in custom size<br>
946: Option &quot;use offline cache&quot; to support serverless local websites.</p>
<p>945: commands to support evaluation of generated js code.</p>
<p>943: Multiple home screens support .mht (offline webpage), .search &amp; .html local files.</p>
<p>940: <a href="../url2site/index.html">Any urls as website</a> with local html processing (<a href="../links/index.html">&quot;i:0m/..../xxx.html:url&quot;</a>)</p>
<p>935:</p>
<ul>
<li>Pipe support: command line output to uweb tabs.</li>
</ul>
<p>934:</p>
<ul>
<li>Serverless local sites: PWA-kind web extension (chrome .crx &amp; firefox .xpi) support.</li>
<li>PWAs and web extensions to be used as search engines, ex. kiwix zim as search engines.</li>
</ul>
</div>
<p>Last Modified: 5 May 2024<br>
enhance downloading<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

143
en/cmds/index.html Normal file
View File

@ -0,0 +1,143 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Commands</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Commands
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>Click the following links to install commands with <a href="../index.html#">uweb browser</a>. <b>Force exit and re-launch the app</b>, then long press the button with clock icon to popup the command menu.</p>
<p>Configuration file &quot;default.cmds&quot; examples:</p>
<p><a href="i:03Clear data::toybox find /data/data/info.torapp.uweb/app_webview ! -name 'Cookies' ! -name '*.cjar' -type f -delete">Clear data::toybox find /data/data/info.torapp.uweb/app_webview ! -name 'Cookies' ! -name '*.cjar' -type f -delete</a></p>
<p><a href="i:03Clear database::rm -rf /data/data/info.torapp.uweb/databases/*">Clear database::rm -rf /data/data/info.torapp.uweb/databases/*</a></p>
<p><a href="i:03Append query to autocomplete:uweb:cd /data/data/info.torapp.uweb/files;cat default.autoc query.log|toybox sort|toybox uniq -i>a.tmp;mv a.tmp default.autoc;>query.log;echo file:///data/data/info.torapp.uweb/files/default.autoc">Append query to autocomplete:uweb:cd /data/data/info.torapp.uweb/files;cat default.autoc query.log|toybox sort|toybox uniq -i&gt;a.tmp;mv a.tmp default.autoc;&gt;query.log;echo file:///data/data/info.torapp.uweb/files/default.autoc</a></p>
<p><a href="i:03Clear cache::toybox rm -rf /data/data/info.torapp.uweb/cache">Clear cache::toybox rm -rf /data/data/info.torapp.uweb/cache</a></p>
<p><a href="i:03Clear logcat::logcat -c">Clear logcat::logcat -c</a></p>
<p><a href="i:03logcat.log::logcat -d > logcat.log">logcat.log::logcat -d &gt; logcat.log</a></p>
<p><a href="i:03copy cookie:/clip:printf '%c'">copy cookie:/clip:printf '%c'</a></p>
<p><a href="i:03config in Download::cd /data/data/info.torapp.uweb;toybox rm -rf files;toybox mkdir -p /sdcard/Download/uweb;toybox ln -s /sdcard/Download/uweb files">config in Download::cd /data/data/info.torapp.uweb;toybox rm -rf files;toybox mkdir -p /sdcard/Download/uweb;toybox ln -s /sdcard/Download/uweb files</a></p>
<p><a href="i:03html5 in Download::cd /data/data/info.torapp.uweb/files;toybox rm -rf app;toybox mkdir -p /sdcard/Download/app;toybox ln -s /sdcard/Download/app">html5 in Download::cd /data/data/info.torapp.uweb/files;toybox rm -rf app;toybox mkdir -p /sdcard/Download/app;toybox ln -s /sdcard/Download/app</a></p>
<p><a href="i:03tgz install::toybox tar -xzf %f -C /">tgz install::toybox tar -xzf %f -C /</a></p>
<p>Users should change the IP addresses in the following menus accordingly. In all cases, TV side needs to execute &quot;<a href="../links/index.html#">wait for network msg</a>&quot; first. Send message to network (ex. for android TVs):<br>
<a href="i:03Send clipboard:clip/uweb:printf 'i:5ji:5b';cat">Send clipboard:clip/uweb:printf 'i:5ji:5b';cat</a></p>
<p><a href="i:03Send url::printf '%u'|/system/bin/toybox nc 192.168.2.155 1500">Send url::printf '%u'|/system/bin/toybox nc 192.168.2.155 1500</a></p>
<p><a href="i:03Sendurl(bookmark)::printf 'i:51../home5:i:0mc16:%u'|/system/bin/toybox nc 192.168.2.155 1500">Sendurl(bookmark)::printf 'i:51../home5:i:0mc16:%u'|/system/bin/toybox nc 192.168.2.155 1500</a></p>
<p><a href="i:03Send url(fullscreen)::printf 'i:5f%u'|/system/bin/toybox nc 192.168.2.155 1500">Send url(fullscreen)::printf 'i:5f%u'|/system/bin/toybox nc 192.168.2.155 1500</a></p>
<p><a href="i:03Send url(video)::printf 'i:0mc16:%u'|/system/bin/toybox nc 192.168.2.155 1500">Send url(video)::printf 'i:0mc16:%u'|/system/bin/toybox nc 192.168.2.155 1500</a></p>
<p><a href="i:03Send url(clipboard):clip:(printf 'i:5b';cat)|/system/bin/toybox nc 192.168.2.155 1500">Send url(clipboard):clip:(printf 'i:5b';cat)|/system/bin/toybox nc 192.168.2.155 1500</a></p>
<p>Modify with your own info:<br>
<a href="i:03dynv6_sim1:uweb:print 'http://dynv6.com/api/update?hostname=&token=&ipv6=';ip addr|grep 'inet6 [^f]'|grep global|grep -v temporary|head -n 1|sed 's/^.*inet6 //'|sed 's/\/.*$//'">Refresh dynv6 ddns for sim card 1</a></p>
<p><a href="i:03dynv6_wifi:uweb:print 'http://dynv6.com/api/update?hostname=&token=&ipv6=';ip addr|grep 'inet6 [^f]'|grep global|grep -v temporary|tail -n 1|sed 's/^.*inet6 //'|sed 's/\/.*$//'">Refresh dynv6 ddns for wifi</a></p>
<p>Need root permissions:</p>
<p>Need termux:<br>
<a href="i:03VPN::am start -a android.net.vpn.SETTINGS">VPN::am start -a android.net.vpn.SETTINGS</a></p>
<p><a href="i:03wireless::am start -a android.settings.WIRELESS_SETTINGS">wireless::am start -a android.settings.WIRELESS_SETTINGS</a></p>
<p><a href="i:03cd:termux/*:cd %f;exit 1">cd:termux/*:cd %f;exit 1</a></p>
<p><a href="i:03vim:termux/*:vim %f">vim:termux/*:vim %f</a></p>
<p><a href="i:03deduplicate history::awk -F'\t' '!s[\$2]++' /data/data/info.torapp.uweb/files/history.rec>/sdcard/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/history.rec">deduplicate history::awk -F'\t' '!s[$2]++' /data/data/info.torapp.uweb/files/history.rec&gt;/sdcard/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/history.rec</a></p>
<p><a href="i:03deduplicate bookmarks::awk '!s[\$0]++' /data/data/info.torapp.uweb/files/bookmark.html>/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/bookmark.html">deduplicate bookmarks::awk '!s[$0]++' /data/data/info.torapp.uweb/files/bookmark.html&gt;/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/bookmark.html</a></p>
<p><a href="i:03deduplicate hosts::toybox tac /data/data/info.torapp.uweb/files/default.hosts|awk -F' ' '!s[\$1]++' |toybox tac>/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/default.hosts">deduplicate hosts::toybox tac /data/data/info.torapp.uweb/files/default.hosts|awk -F' ' '!s[$1]++' |toybox tac&gt;/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/default.hosts</a></p>
<p><a href="i:03deduplicate siteconf::toybox tac /data/data/info.torapp.uweb/files/default.siteconf|awk -F':' '!s[\$1]++' |toybox tac>/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/default.siteconf">deduplicate siteconf::toybox tac /data/data/info.torapp.uweb/files/default.siteconf|awk -F':' '!s[$1]++' |toybox tac&gt;/sdcard/Download/a.tmp;mv /sdcard/Download/a.tmp /data/data/info.torapp.uweb/files/default.siteconf</a></p>
<p><a href="i:03Clipboard2PC:clip:ssh fengcao@192.168.2.120 'DISPLAY=:0 xsel -i'">Clipboard2PC:clip:ssh fengcao@192.168.2.120 'DISPLAY=:0 xsel -i'</a></p>
<p><a href="i:03ClipboardFromPC:/clip:ssh fengcao@192.168.2.120 'DISPLAY=:0 xsel -o'">ClipboardFromPC:/clip:ssh fengcao@192.168.2.120 'DISPLAY=:0 xsel -o'</a></p>
<p><a href="i:03Clipboard broadcast:clip:socat - UDP-DATAGRAM:255.255.255.255:1500,broadcast">Clipboard broadcast:clip:socat - UDP-DATAGRAM:255.255.255.255:1500,broadcast</a></p>
<p><a href="i:03Clipboard from broadcast:/clip:socat -u udp-recvfrom:1500 SYSTEM:'cat;exit'">Clipboard from broadcast:/clip:socat -u udp-recvfrom:1500 SYSTEM:'cat;exit'</a></p>
<p><a href="i:03Clipboard2QR:clip/uweb:qrencode -o /sdcard/Download/a.png;echo file:///sdcard/Download/a.png">Clipboard2QR:clip/uweb:qrencode -o /sdcard/Download/a.png;echo file:///sdcard/Download/a.png</a></p>
<p>Clipboard2PC needs to modify username, PC needs xsel. ssh needs to be installed inside termux (apt install openssh).<br>
Clipboard broadcast needs socatapt install socat)。<br>
Clipboard2QR needs libqrencode.</p>
<h4 id="more-commands-click-to-install">More commands (click to install)</h4>
<p><a href="i:0gdefault.cmds::mdme:text/html:echo %22<script src=https://fastly.jsdelivr.net/npm/mdme></script><textarea>%22;cat %25f%0A">mdme: Show local markdown file</a></p>
<p><a href="i:0gdefault.cmds::texme:text/html:echo %22<script src=https://fastly.jsdelivr.net/npm/texme></script><textarea>%22;cat %25f%0A">texme: Show local tex+markdown file</a></p>
<p><a href="i:0gdefault.cmds::markdeep:text/html:cat %25f;echo %22<style class=fallback>body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src=https://casual-effects.com/markdeep/latest/markdeep.min.js charset=utf-8></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibility=visible)</script>%22%0A">markdeep: Show local markdown+tex+diagrams file</a></p>
<p><a href="i:0gdefault.cmds::markdeep slide:text/html:cat %25f;echo %22<link rel='stylesheet' href='https://casual-effects.com/markdeep/latest/slides.css?'><script>markdeepOptions={tocStyle:'none'}</script><script src=https://casual-effects.com/markdeep/latest/markdeep.min.js charset=utf-8></script>%22%0A">markdeep slide: markdown+tex+diagrams</a></p>
<p><a href="i:0gdefault.cmds::remark slide:text/html:echo %22<script src=https://remarkjs.com/downloads/remark-latest.min.js></script><script>window.onload=function(){var slideshow=remark.create({navigation:{click:true,},});}</script><textarea id=%27source%27>class:middle%22;cat %25f%0A">remark slide: slide show for local markdown file</a></p>
<p><a href="i:0gdefault.cmds:https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/txt/cmds.cfg">Code editor, open url in clipboard etc.</a></p>
<h4 id="cmds-file-format">&quot;.cmds&quot; file format</h4>
<p>Each line has the following format:<br>
[Name]:[mimetype]:[command line]</p>
<p>[command line] can have &quot;%c&quot; (cookie), &quot;%s&quot; (address bar text), &quot;%u&quot; (url), &quot;%t&quot; (title).<br>
[mimetype] have the following formats:</p>
<ul>
<li>regular mimetype such as &quot;text/html&quot; to indicate the content type of the command output. Ex. &quot;text/javascript&quot; makes browser to evaluate the js code.</li>
<li>&quot;clip/clip&quot; to indicate &quot;clipboard&quot; as input and the command output is copied to clipboard.</li>
<li>&quot;/clip&quot;: copy the command output to clipboard.</li>
<li>&quot;clip/text/html&quot; : clipboard as input, and the command output is processed as &quot;text/html&quot;.</li>
<li>&quot;termux/*&quot;: command line is executed under termux.</li>
<li>&quot;/uweb&quot;: the command output is processed as <a href="../links/index.html#">links</a>.</li>
</ul>
</div>
<p>Last Modified: 2 April 2024<br>
add ending # to /index.html<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

15
en/download.md Normal file
View File

@ -0,0 +1,15 @@
**Download links**
[uweb, termux & history versions](https://s1.asytech.cn/s/tQrgT5kBRg8Trry)
[github](https://github.com/torappinfo/uweb/releases/tag/v1)
[sourceforge](https://sourceforge.net/projects/uwebbrowser/files/v1/)
[udrop](https://www.udrop.com/folder/08ba413230f465ca0901bef68e857c0b/uweb)
[powerfolder](https://my.powerfolder.com/getlink/fi61cC6VHjK72tfufmnLAz/)
[pagure](https://releases.pagure.org/uwebapk/)
[mcbebbs](http://pan.mcbebbs.cn/s/dJ4t8)

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Custom file handling</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -46,9 +46,9 @@
</h1>
<ul class="tags">
<li><a href="../tags/termux">termux</a> </li>
<li><a href="../tags/termux/index.html#">termux</a> </li>
<li><a href="../tags/curl">curl</a> </li>
<li><a href="../tags/curl/index.html#">curl</a> </li>
</ul>
<p>Long press the settings button, check the option &quot;custom file handling&quot; to enable the functionality.</p>
@ -56,7 +56,7 @@
[file extension]:[mimetype]:[command line]</p>
<p>The &quot;[file extension]&quot; part can have at most two-segment of extensions such as &quot;txt.xz&quot;,&quot;html.gz&quot;.<br>
&quot;[mimetype]&quot; indicates the type of &quot;[command line]&quot; output.<br>
&quot;[command line]&quot; is same as the one in <a href="../searchurl/cmds.html">default.cmds</a>. The most often used replacements are:<br>
&quot;[command line]&quot; is same as the one in <a href="../cmds/index.html#">default.cmds</a>. The most often used replacements are:<br>
%u (url), %U (urlencoded url), %c (cookie), %p (site password, curl format).</p>
<p>default.filecap example:</p>
<pre><code>txt:text/html:curl %p "%u"
@ -72,12 +72,41 @@ docx:uweb:echo http://docs.google.com/gview?embedded=true&url=%U
xlsx:uweb:echo http://docs.google.com/gview?embedded=true&url=%U
pptx:uweb:echo http://docs.google.com/gview?embedded=true&url=%U
xz:text/plain:curl %p "%u"|xz -d --</code></pre>
<p>Examples for <a href="../html5/index.html">html5 application</a>:</p>
<pre><code>pdf:uweb:echo file:///data/data/info.torinfo.uweb/files/app/pdf.js/web/viewer.html?file=%u
djvu:uweb:echo file:///data/data/info.torinfo.uweb/files/app/djvu.html?url=%u
epub:uweb:echo file:///data/data/info.torinfo.uweb/files/app/reader/index.html?bookPath==%u</code></pre>
<p>Examples for <a href="../html5/index.html#">html5 application</a>:</p>
<pre><code>pdf:uweb:echo file:///data/data/info.torapp.uweb/files/app/pdf.js/web/viewer.html?file=%u
djvu:uweb:echo file:///data/data/info.torapp.uweb/files/app/djvu.html?url=%u
epub:uweb:echo file:///data/data/info.torapp.uweb/files/app/reader/index.html#?bookPath==%u</code></pre>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Configuration folders/files</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -48,58 +48,89 @@
</ul>
<p>All folders end with character &quot;/&quot; and others are files. All folders/files locate in &quot;/data/data/info.torapp.uweb/files&quot;:<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/css/">css/</a>&quot;: <a href="../globalcss/index.html">global css folder</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/js/">js/</a>&quot;: global script folder<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/sitejs/">sitejs/</a>&quot;: <a href="../sitejs/index.html">script folder for domains</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/sitecss/">sitecss/</a>&quot;:<a href="../sitejs/index.html">CSS folder for domains</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/bookmarklet/">bookmarklet/</a>&quot;:bookmarklets, long pressing the &quot;JS&quot; button to execute.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/offline/">offline/</a>&quot;: to save offline pages<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/sbookmark/">sbookmark/</a>&quot;: to save super bookmarks<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/sitecache/">sitecache/</a>&quot;:<a href="../offlinecache/index.html">offline cache</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/longclick/">longclick/</a>&quot;: menus to appear when long-pressing hypertext (js files)<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/icon/">icon/</a>&quot;:<a href="../icons/index.html">customized icons</a><br>
&quot;app[XXX]/&quot;:<a href="../html5/index.html">html5 applications</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.longclick">default.longclick</a>&quot;: to configure menus when long-pressing hypertext.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.uas">default.uas</a>&quot;:<a href="../searchurl/uas.html">user agents</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.urls">default.urls</a>&quot;:<a href="../searchurl/urls.html">service urls</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.acmd">default.acmd</a>&quot;:<a href="../gnuplot/index.html">configure address bar functionalities</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.hosts">default.hosts</a>&quot;:<a href="../adblock_hosts/index.html">hosts not allowed to visit</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.redirect">default.redirect</a>&quot;:<a href="../redirect/index.html">redirect websites</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.cmds">default.cmds</a>&quot;:<a href="../searchurl/cmds.html">commands</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.link">default.link</a>&quot;:<a href="../links/index.html">links</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.rjs">default.rjs</a>&quot;:<a href="../rjs/index.html">Remote javascript</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.select">default.select</a>&quot;:<a href="../pccopy/index.html">menus for selected text</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.input">default.input</a>&quot;: common phrases for user inputs<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.gesture">default.gesture</a>&quot;: to define <a href="../gesture/index.html">gestures on the top part of the content window</a>. The file format is same as <a href="../links/index.html">default.link</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.gesture2">default.gesture2</a>&quot;: gestures on the right side similar to default.gesture.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.button">default.button</a>&quot;: to re-define button pressing functionalities. The file format is same as <a href="../links/index.html">default.link</a>, each line represents action from the last button to the first.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.button2">default.button2</a>&quot;: similar to default.button but for long-pressed buttons.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.filecap">default.filecap</a>&quot;:<a href="../filecap/index.html">custom file handling</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.rc">default.rc</a>&quot;: check the option &quot;custom file handling&quot; to execute the shell script file during uweb launching. <a href="../tools/index.html">tcron</a> provides extra cron tools.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.rc2">default.rc2</a>&quot;: check the option &quot;custom file handling&quot; to execute the shell script file when uweb returns to foreground.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/engine.search">engine.search</a>&quot;: to define quick search engines (pressing right arrow button to use next engine to search). The file format is similar to <a href="../searchurl/search.html">home5.search</a> but using &quot;%s&quot; as search keywords.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.siteconf">default.siteconf</a>&quot;: to save ua, js disabling, no-image mode, forbids 3rd-party resources (js and others), active scripts, global scripts for sites. Only save the difference to default ones.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.playrate">default.playrate</a>&quot;: fullscreen playing menu. The file format is same as <a href="../links/index.html">default.link</a>. Playing ratio menu items should have empty link parts such as &quot;.5x:&quot;, at least one such menu is required. All other menus must be put after playing ratio menus.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.autoc">default.autoc</a>&quot;: address bar autocomplete candidate strings.<br>
&quot;query.autoc&quot;: home screen search autocomplete candidate strings.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/home5.html">home5.html</a>&quot;: user defined home screen. home6.html, home6.search, home7.html ... multiple home screen (pressing right arrow button to visit. &quot;.html&quot; files have priority over &quot;.search&quot; files. home4.html, home4.search, home3.html ... (long pressing left arrow button to access).<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/home5.search">home5.search</a>&quot;:<a href="../searchurl/search.html">search engines</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/home.css">home.css</a>&quot;: <a href="../searchurl/homescreen.html">home screen styles</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/bookmark.html">bookmark.html</a>&quot;: bookmarks<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/quickstart.html">quickstart.html</a>&quot;: <a href="../searchurl/quickstart.html">quick start</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/colors.txt">colors.txt</a>&quot;: background colors<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/default.css">default.css</a>&quot;: <a href="../sitejs/index.html">default CSS style for domains not defined in sitejs folder</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/night.css">night.css</a>&quot;: <a href="../globalcss/index.html">Night mode</a><br>
&quot;bookmarklet/videoplayer.js&quot;: <a href="../video/index.html">fullscreen video player</a><br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/types.sniff">types.sniff</a>&quot;: file types for resource sniffer<br>
&quot;js.allow&quot;: 3rd-party resource white list. One domain per line.<br>
&quot;url.deny&quot;: one giant regular expression for blocked urls (java grammar). &quot;#&quot; to comment and carriage return (CR or new line) is ignored.<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/sniff.log">sniff.log</a>&quot;: resource sniffing result<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/history.rec">history.rec</a>&quot;: visiting history<br>
&quot;<a href="file:///data/data/info.torinfo.uweb/files/query.rec">query.rec</a>&quot;: query history</p>
<p>&quot;shortcut/&quot;: dynamical shortcut, if not exist, then default to &quot;bookmark&quot;.</p>
&quot;<a href="file:///data/data/info.torapp.uweb/files/css/">css/</a>&quot;: <a href="../globalcss/index.html#">global css folder</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/js/">js/</a>&quot;: global script folder<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/sitejs/">sitejs/</a>&quot;: <a href="../sitejs/index.html#">script folder for domains</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/sitecss/">sitecss/</a>&quot;:<a href="../sitejs/index.html#">CSS folder for domains</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/bookmarklet/">bookmarklet/</a>&quot;:bookmarklets, long pressing the &quot;JS&quot; button to execute.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/offline/">offline/</a>&quot;: to save offline pages<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/sbookmark/">sbookmark/</a>&quot;: to save super bookmarks<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/sitecache/">sitecache/</a>&quot;:<a href="../offlinecache/index.html#">offline cache</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/longclick/">longclick/</a>&quot;: menus to appear when long-pressing hypertext (js files)<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/icon/">icon/</a>&quot;:<a href="../icons/index.html#">customized icons</a><br>
&quot;app[XXX]/&quot;:<a href="../html5/index.html#">html5 applications</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>&quot;: to configure menus when long-pressing hypertext.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.uas">default.uas</a>&quot;:<a href="../searchurl/uas.html">user agents</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.urls">default.urls</a>&quot;:<a href="../urls/index.html#">service urls</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.acmd">default.acmd</a>&quot;:<a href="../gnuplot/index.html#">configure address bar functionalities</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/hosts">hosts</a>&quot;: for local <a href="../adblock_domain/index.html#">domain name attributes</a>, only single space is allowed to separate ip address and domain name.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.hosts">default.hosts</a>&quot;:<a href="../adblock_hosts/index.html#">hosts not allowed to visit</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.redirect">default.redirect</a>&quot;:<a href="../redirect/index.html#">redirect websites</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.cmds">default.cmds</a>&quot;:<a href="../cmds/index.html#">commands</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.link">default.link</a>&quot;:<a href="../links/index.html#">links</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.rjs">default.rjs</a>&quot;:<a href="../rjs/index.html#">Remote javascript</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.select">default.select</a>&quot;:<a href="../textprocess/index.html#">menus for selected text</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.input">default.input</a>&quot;: common phrases for user inputs<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.gesture">default.gesture</a>&quot;: to define <a href="../gesture/index.html#">gestures on the top part of the content window</a>. The file format is same as <a href="../links/index.html">default.link</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.gesture2">default.gesture2</a>&quot;: gestures on the right side similar to default.gesture.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.button">default.button</a>&quot;: to re-define button pressing functionalities. The file format is same as <a href="../links/index.html#">default.link</a>, each line represents action from the last button to the first.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.button2">default.button2</a>&quot;: similar to default.button but for long-pressed buttons.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.filecap">default.filecap</a>&quot;:<a href="../filecap/index.html#">custom file handling</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.rc">default.rc</a>&quot;: check the option &quot;custom file handling&quot; to execute the shell script file during uweb launching. <a href="../tools/index.html#">tcron</a> provides extra cron tools.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.rc2">default.rc2</a>&quot;: check the option &quot;custom file handling&quot; to execute the shell script file when uweb returns to foreground.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/crontab">crontab</a>&quot;:<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/engine.search">engine.search</a>&quot;: to define quick search engines (pressing right arrow button to use next engine to search). The file format is similar to <a href="../search/index.html#">home5.search</a> but using &quot;%s&quot; as search keywords. If the search engine urls in &quot;engine.search&quot; are video urls (without %s inside), the file will make uweb browser optimized for TV watching with remote control.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.siteconf">default.siteconf</a>&quot;: to save ua, js disabling, no-image mode, forbids 3rd-party resources (js and others), active scripts, global scripts for sites. Only save the difference to default ones.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.playrate">default.playrate</a>&quot;: fullscreen playing menu. The file format is same as <a href="../links/index.html#">default.link</a>. Playing ratio menu items should have empty link parts such as &quot;.5x:&quot;, at least one such menu is required. All other menus must be put after playing ratio menus.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.autoc">default.autoc</a>&quot;: address bar autocomplete candidate strings.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/query.autoc">query.autoc</a>&quot;: home screen search autocomplete candidate strings.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/home5.html">home5.html</a>&quot;: user defined home screen. home6.mht(or .search or .html), home7.mht(or .search or .html) ... multiple home screen (pressing right arrow button to visit; home4.mht(or .search or .html), home3.mht(or .html or .search) ... (long pressing left arrow button to access).<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/home5.search">home5.search</a>&quot;:<a href="../search/index.html#">search engines</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/home.css">home.css</a>&quot;: <span style="color:red">html</span> file for <a href="../bookmark/index.html#">folder/home screen/bookmark styling</a>, so the css code needs to be inside &quot;&lt;style&gt;&quot; elements. Each &quot;home.css&quot; file is responsible for the current folder and its subfolders.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/bookmark.html">bookmark.html</a>&quot;: bookmarks<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/quickstart.html">quickstart.html</a>&quot;: <a href="../searchurl/quickstart.html">quick start</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/colors.txt">colors.txt</a>&quot;: background colors<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/default.css">default.css</a>&quot;: <a href="../sitejs/index.html#">default CSS style for domains not defined in sitejs folder</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/night.css">night.css</a>&quot;: <a href="../globalcss/index.html#">Night mode</a><br>
&quot;bookmarklet/videoplayer.js&quot;: <a href="../video/index.html#">fullscreen video player</a><br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/types.sniff">types.sniff</a>&quot;: file types for resource sniffer<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/js.allow">js.allow</a>&quot;: 3rd-party resource white list. One domain per line.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/url.deny">url.deny</a>&quot;: one giant regular expression for blocked urls (java grammar). &quot;#&quot; to comment and carriage return (CR or new line) is ignored.<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/sniff.log">sniff.log</a>&quot;: resource sniffing result<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/history.rec">history.rec</a>&quot;: visiting history<br>
&quot;<a href="file:///data/data/info.torapp.uweb/files/query.rec">query.rec</a>&quot;: query history</p>
<p>&quot;<a href="file:///data/data/info.torapp.uweb/files/shortcut/">shortcut/</a>&quot;: dynamical shortcut, if not exist, then default to &quot;bookmark&quot;.</p>
</div>
<p>Last Modified: 30 April 2024<br>
urlInc() prefers .search to .html<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

99
en/gesture/index.html Normal file
View File

@ -0,0 +1,99 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Gestures</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Gestures
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>Swipe down from the top to show the address bar; swipe up to the top to hide the address bar. Swipe down to the bottom to hide the toolbar with option &quot;swipe to hide tools&quot;; swipe on the bottom corners to show the toolbar.</p>
<p>Swipe left/right near the toolbar to switch window; fling left/right to switch to the last/first window.</p>
<p>Swiping on the top part of content window (near the top address bar by default) triggers corresponding link in the file &quot;default.gesture&quot;, which has the same format as <a href="../links/index.html#">default.link</a>.</p>
<p>The algorithm to match swiping gesture to a line in the file &quot;default.gesture&quot; is as follows:</p>
<ul>
<li>Divide the screen width to three parts evenly, assign each part with a number 0, 1, 2 respectively.</li>
<li>Assume &quot;s&quot; and &quot;e&quot; are the above defined numbers for the gesture start point and end point. Let &quot;linenumber = 3*s+e&quot; , if it is equal to 4 and the gesture's first direction is left, then change it to be 9.</li>
<li>For turning back and forth, add &quot;10&quot; each time.</li>
</ul>
<p>The final line number will match the corresponding line in &quot;default.gesture&quot;, 0 to the first line, ...</p>
<p>&quot;default.gesture2&quot; is for the right side gesturs and the algorithm is similar to &quot;default.gesture&quot;.</p>
<p>Example links:<br>
Toggle fullscreen::0003<br>
back:javascript:history.back()<br>
forward:javascript:history.forward()<br>
back2:javascript:history.go(-2)</p>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,8 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>CSS样式</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>CSS styles</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,20 +40,51 @@
<br />
<div class="container">
<h1 class="title">CSS样式
<h1 class="title">CSS styles
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p><a href="../index.html">Uweb browser</a> loads all &quot;.css&quot; files under the folder &quot;css&quot; as global css. Click the following links to install global css files:</p>
<p><a href="i:0hcss/clearfont.css:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/zh/searchurl/txt/clearfont.css">Clearing font settings</a></p>
<p><a href="../index.html#">Uweb browser</a> loads all &quot;.css&quot; files under the folder &quot;css&quot; as global css. Click the following links to install global css files:</p>
<p><a href="i:0hcss/clearfont.css:../../zh/searchurl/txt/clearfont.css">Clearing font settings</a></p>
<p>The file &quot;night.css&quot; is used as night mode, click the following links to install one:<br>
<a href="i:0hnight.css:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/zh/searchurl/txt/night.css">webview 81+ night mode</a><br>
<a href="i:0hnight.css:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/zh/searchurl/txt/night_old.css">webview 80- night mode</a></p>
<a href="i:0hnight.css:../../zh/searchurl/txt/night.css">webview 81+ night mode</a><br>
<a href="i:0hnight.css:../../zh/searchurl/txt/night_old.css">webview 80- night mode</a></p>
<h4 id="earliest-loaded-global-js">Earliest loaded global js</h4>
<p>The &quot;.js&quot; files under the folder &quot;css&quot; are loaded as earlier as possible on the page.</p>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

143
en/html5/index.html Normal file
View File

@ -0,0 +1,143 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Html5 applications</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Html5 applications
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>This page is for <a href="../index.html#">uweb browser</a>.<br>
Click to install the following html5 apps:<br>
<a target="_self" href="i:0happ/txtview.html:../../zh/searchurl/txt/txtview.html">Huge markdown file viewer</a><br>
<a target="_self" href="i:0happ/mdkatex.html:../../zh/searchurl/txt/mdkatex.html">Huge markdown+katex file viewer (Tex formulas)</a><br>
<a target="_self" href="i:0happ/markdeep.html:../../zh/searchurl/txt/markdeep.html">Huge markdeep file viewer (markdown, latex, diagram,graphviz etc.)</a><br>
<a target="_self" href="i:0happ/plyr.html:../../zh/searchurl/txt/plyr.cfg">plyr video player</a><br>
<a target="_self" href="i:0happ/dplayer.html:../../zh/searchurl/txt/dplayer.html">dplayer video player</a><br>
<a target="_self" href="i:0happ/pdfviewer.html:../../zh/searchurl/txt/pdfviewer.html">pdf viewer</a><br>
<a target="_self" href="i:0happ/epub.html:../../zh/searchurl/txt/epub.html">epub reader (authorllili)</a><br>
<a target="_self" href="i:0happ/djvu.html:../../zh/searchurl/txt/djvu.html">djvu viewer</a></p>
<p>The corresponding menus can be installed with <a href="../urls/index.html#">url services</a>.</p>
<h4 id="features">Features</h4>
<p>The following mentioned subfolders locate in the configuration folder.</p>
<ul>
<li>
<p>The following html5 applications are allowed to read local files referred by &quot;https://local/sdcard/...&quot; where the &quot;/sdcard/..&quot; part is the full path of the file. The below applications <span style="color:red">can auto choose any files as file objects</span>.</p>
<ul>
<li>Locating in a subfolder whose name begins with &quot;app&quot; (such as &quot;appPDF&quot;)</li>
<li>&quot;https://local/...&quot; applications (only possible with the option &quot;<a href="../offlinecache/index.html#">use offline resources</a>&quot; and installed under the folder &quot;sitecache/local/&quot;)</li>
</ul>
</li>
<li>
<p><span style="color:red">All files under the subfolder &quot;app&quot; can be automatically choosed as file objects by any web page</span>.</p>
</li>
<li>
<p><span style="color:red">Local files (including binary files) can be processed by appending &quot;?app=[html5 app url]&quot; to the file urls.</span> Ex. &quot;file:///..../xx.md?app=https://...../app.html&quot; loads &quot;app.html&quot; first, then &quot;app.html&quot; processes the local file.</p>
</li>
</ul>
<p>With the first approach, the html5 application is installed locally and can read any file allowed by the OS; while in the second approach, the html5 application can be either local or remote, and only files under the subfolder &quot;app&quot; can be accessed; The third approach allows easy access of other external resources (ex. local media).</p>
<h4 id="open-local-files-with-html5-apps">Open local files with html5 apps</h4>
<p>Click to configure <a href="../filecap/index.html#">default.filecap</a> to open local files, and to open remote files with the option &quot;custom file handling&quot;:<br>
<a target="_self" href="i:0gdefault.filecap:../../zh/searchurl/txt/filecap.cfg">use pdf.js,djvu.js,epub.js, huge markdown viewer for local files</a></p>
<p>url examples are as follows:</p>
<ul>
<li>file:///data/user/0/info.torapp.uweb/files/app/pdfviewer.html?file=[path].pdf#page=[xxx]</li>
<li>file:///data/user/0/info.torapp.uweb/files/app/djvu.html?url=...xx.pdf#page=[xxx]</li>
<li>file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#page=[xxx]</li>
<li>file:///data/user/0/info.torapp.uweb/files/app/txtview.html?url=[url]#offset=[xxxx]&amp;[length]</li>
<li>file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#page=[xxx]</li>
<li>file:///data/user/0/info.torapp.uweb/files/app/markdeep.html?url=[url]#offset=[xxxx]&amp;[length]</li>
</ul>
<p>Ex. &quot;#offset=10000&amp;500&quot; will retrieve 500 bytes from offset 10000. Click the right arrow button to next page in all above file viewers.</p>
<h4 id="configure-html5-app-subfolder-app-optional">Configure html5 app subfolder &quot;app&quot; (optional)</h4>
<p>By default, the subfolder &quot;app&quot; is created by clicking to install any of above html5 applications.</p>
<p>To make file management easier, users can symbolic link the subfolder &quot;app&quot; to any other locations as long as it is readable.</p>
<p>One way to configure &quot;app&quot; subfolder is as follows:</p>
<ul>
<li><a href="i:15d:text/plain:toybox mkdir -p /sdcard/Download/app;toybox ln -s /sdcard/Download/app 2>&1:">Click to copy the command to the address bar</a></li>
<li>Press the home screen button of uweb browser bottom toolbar, so the home screen appears.</li>
<li>If you want &quot;app&quot; to be locations other than &quot;/sdcard/Download/app&quot;, modify as you like.</li>
<li>Press &quot;enter&quot; on the address bar to execute the command.</li>
</ul>
<h4 id="mdict-dictionary-lookup-search-engines">mdict dictionary lookup search engines:</h4>
<p>Note: the following two mdict.html files are different.<br>
i:5ifile:///....../xxx.mdx,xxx.mdd?app=https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict.html#word=%s</p>
<p>in which &quot;/.../xxx.mdx,xxx.mdd&quot; is the full path for the mdict dictionary files.</p>
<p>i:5ihttps://uwebzh.netlify.app/zh/searchurl/txt/mdict.html?file=mdict/xxx.mdx,mdict/xxx.mdd#word=%s</p>
<p>In the above mdict search engine string, the dictionary files (mdx, mdd) must locate in the &quot;app&quot; subfolder under the configuration folder. In above example, the files &quot;xxx.mdx&quot; and &quot;xxx.mdd&quot; locate in the folder &quot;.../app/mdict&quot;.</p>
<p>To make life easier, users can <a href="../acmd/index.html#">link the &quot;app&quot; subfolder</a> to any public accessible folder.</p>
<p>Use the mdx scanning <a href="../bookmark/index.html#">bookmark</a> to add mdict engines automatically, then cold start uweb browser to take effect.</p>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Toolbar customization</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -49,11 +49,39 @@
</ul>
<p>If subfolder &quot;icon&quot; exists, then files named as &quot;0&quot;,&quot;1&quot;,&quot;2&quot;...<br>
are used for icons in the bottom toolbar. file &quot;0&quot; to replace the left arrow button, &quot;1&quot; for right arrow button, &quot;2&quot; for the setting button,&quot;3&quot; for the home screen button,...</p>
<p>If a new button is defined (file name &quot;20&quot; exists), uweb also supports VectorDrawable with &quot;android compiled XML&quot; format. All icon files must be all VectorDrawables or 此时所有图标文件必须都是compiled XML格式或都是普通的图像格式png,jpg,gif等。用户可将VectorDrawable XML文件放到安卓项目目录assets下面重新生成apk文件以后将apk文件解压即可得compiled XML格式图标文件。</p>
<p>用户可定义任意多个按钮(100个按钮毫无压力)其短按长按功能可在文件default.button及default.button2中定义格式与文件<a href="../links">default.link</a>完全相同,每行从最后一个按钮开始重定义功能。</p>
<p>注意:刷新按钮及窗口按钮图标暂时不能重定义。</p>
<p>If a new button is defined (file name &quot;20&quot; exists), uweb also supports VectorDrawable with &quot;android compiled XML&quot; format. All icon files must be either all compiled VectorDrawables or common image formats.</p>
<p>Note: The refresh and tab manager button can not be redefined.</p>
</div>
<p>Last Modified: 2 April 2024<br>
add flg for not following sys night mode<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,12 +1,13 @@
<!doctype html>
<html>
<head>
<meta name="generator" content="Hugo 0.101.0" />
<meta name="generator" content="Hugo 0.125.6">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../en/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title></title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>uweb browser: unlimited power</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -29,7 +30,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -44,115 +45,212 @@
<ul class="posts">
<li class="post">
<a href="https://s1.asytech.cn/s/tQrgT5kBRg8Trry">
<span>Download the uweb browser</span>
<a href="readme/index.html#">
<span>About uweb browser</span>
</a>
</li>
<li class="post">
<a href="searchurl/search.html">
<a href="search/index.html#">
<span>Search engines</span>
</a>
</li>
<li class="post">
<a href="searchurl/urls.html">
<a href="changelog/index.html#">
<span>Downloads</span>
</a>
</li>
<li class="post">
<a href="sitemap/index.html#">
<span>Configuration</span>
</a>
</li>
<li class="post">
<a href="urls/index.html#">
<span>Url services</span>
</a>
</li>
<li class="post">
<a href="sitemap/index.html">
<span>Site map</span>
<a href="cmds/index.html#">
<span>Commands</span>
</a>
</li>
<li class="post">
<a href="filenames/index.html">
<span>Configuration folders/files</span>
<a href="rjs/index.html#">
<span>Execute javascript codes</span>
</a>
</li>
<li class="post">
<a href="i:61:searchurl/func.html#">
<span>UI</span>
</a>
</li>
<li class="post">
<a href="textprocess/index.html#">
<span>Text selection/processing</span>
</a>
</li>
<li class="post">
<a href="links/index.html">
<a href="links/index.html#">
<span>Links</span>
</a>
</li>
<li class="post">
<a href="adblock/index.html">
<a href="tcron/index.html#">
<span>cron</span>
</a>
</li>
<li class="post">
<a href="offlinecache/index.html#">
<span>Offline resources</span>
</a>
</li>
<li class="post">
<a href="redirect/index.html#">
<span>Resource redirection</span>
</a>
</li>
<li class="post">
<a href="adblock_domain/index.html#">
<span>Hosts files</span>
</a>
</li>
<li class="post">
<a href="sitejs/index.html#">
<span>JS/CSS/HTML/preprocessing for domains</span>
</a>
</li>
<li class="post">
<a href="bookmark/index.html#">
<span>Bookmarks</span>
</a>
</li>
<li class="post">
<a href="tips/index.html#">
<span>Tips</span>
</a>
</li>
<li class="post">
<a href="acmd/index.html#">
<span>Address bar command line</span>
</a>
</li>
<li class="post">
<a href="url2site/index.html#">
<span>Any url as website</span>
</a>
</li>
<li class="post">
<a href="html5/index.html#">
<span>Html5 applications</span>
</a>
</li>
<li class="post">
<a href="filenames/index.html#">
<span>Configuration folders/files</span>
</a>
</li>
<li class="post">
<a href="adblock/index.html#">
<span>AD blocking</span>
</a>
</li>
<li class="post">
<a href="bookmarklet/index.html">
<a href="bookmarklet/index.html#">
<span>Bookmarklets</span>
</a>
</li>
<li class="post">
<a href="pccopy/index.html">
<span>Text selection</span>
<a href="globalcss/index.html#">
<span>CSS styles</span>
</a>
</li>
<li class="post">
<a href="globalcss/index.html">
<span>CSS样式</span>
</a>
</li>
<li class="post">
<a href="icons/index.html">
<a href="icons/index.html#">
<span>Toolbar customization</span>
</a>
</li>
<li class="post">
<a href="longclick/index.html">
<a href="searchcat/index.html#">
<span>Search engine files</span>
</a>
</li>
<li class="post">
<a href="termux/index.html#">
<span>Termux</span>
</a>
</li>
<li class="post">
<a href="longclick/index.html#">
<span>Long pressed link menu</span>
</a>
</li>
<li class="post">
<a href="filecap/index.html">
<a href="tools/index.html#">
<span>Tools</span>
</a>
</li>
<li class="post">
<a href="filecap/index.html#">
<span>Custom file handling</span>
</a>
</li>
<li class="post">
<a href="adblock_domain/index.html">
<span>Blocking domain trees</span>
</a>
</li>
<li class="post">
<a href="changelog/index.html">
<span>Change log</span>
</a>
</li>
<li class="post">
<a href="sitejs/index.html">
<span>Javascript and CSS for domains</span>
<a href="gesture/index.html#">
<span>Gestures</span>
</a>
</li>
<li class="post">
<a href="searchurl/rjs.html">
<span>Javascript</span>
</a>
</li>
<li class="post">
<a href="searchurl/cmds.html">
<span>Commands</span>
<a href="searchurl/webdav.html#">
<span>webdav storage menu generator</span>
</a>
</li>
</ul>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,188 +1,229 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title></title>
<title>uweb browser: unlimited power</title>
<link>/en/</link>
<description>Recent content on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Sat, 02 Jul 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Sun, 19 May 2024 22:28:49 +0800</lastBuildDate>
<atom:link href="/en/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Site map</title>
<link>/en/sitemap/</link>
<pubDate>Sat, 02 Jul 2022 00:00:00 +0000</pubDate>
<guid>/en/sitemap/</guid>
<description>UI Search engines Home screen Quick start UI (gitee) Backup and restore Customization Bottom toolbar button long pressing menus User agents Javascript Url services Links Commands Remote javascript Menu for selections Menu for long pressing hypertext Toolbar Gestures Font settings Advanced Content AD blocking CSS styles redirection Javascript and CSS for domains Offline cache Tools Bookmarklets Custom file handling Html5 application File manager Tools Termux GNU bc Gnuplot tcron Offline download Miscellaneous Configuration files Plugins Tips Tips Video Debug </description>
<title>Text selection/processing</title>
<link>/en/textprocess/</link>
<pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
<guid>/en/textprocess/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:&#xA;Copy selected text with html format to clipboard&#xA;Search with home screen&#xA;google Translate&#xA;bing translate&#xA;deepL&#xA;The file &amp;quot;default.select&amp;quot; defines text processing menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:&#xA;[Name]:[mimetype]:[command line]&#xA;[mimetype] specifies input/output for [command line].</description>
</item>
<item>
<title>Links</title>
<link>/en/links/</link>
<pubDate>Sat, 28 Oct 2023 00:00:00 +0000</pubDate>
<guid>/en/links/</guid>
<description>Click the following links to install menus popped by long pressing the bookmark button (with star as icon):&#xA;Capture long screenshot (need long screenshot mode)&#xA;Select All:CTRL-A/undo:CTRL-Z/Redo:CTRL-Y&#xA;Extend site cookies to 10 years&#xA;Clear site cookies&#xA;VPN&#xA;Switch configuration&#xA;Wait for network msg&#xA;Certificate info&#xA;Backup to box.com&#xA;Restore from box.com&#xA;upload to box.com&#xA;More webdav link menu items&#xA;Web fullscreen&#xA;Long pressing the bookmark button in uweb browser will popup menus defined in file &amp;quot;default.</description>
</item>
<item>
<title>cron</title>
<link>/en/tcron/</link>
<pubDate>Wed, 25 Oct 2023 00:00:00 +0000</pubDate>
<guid>/en/tcron/</guid>
<description>crontab (with enhanced semantics) For performance, the file &amp;quot;crontab&amp;quot; uses single space as field separator. Letters are not suppored currently. So use &amp;quot;1&amp;quot; for &amp;quot;January&amp;quot; and 2 for &amp;quot;Tuesday&amp;quot; etc.&#xA;The sixth field in crontab file could be in the format of internal links. Specifically, &amp;quot;c:&amp;quot; to execute the following commands in termux and &amp;quot;!&amp;quot; to execute commands directly. If the sixth field is not in any of above formats, then the field will appear as the message of alarm clock.</description>
</item>
<item>
<title>Offline resources</title>
<link>/en/offlinecache/</link>
<pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
<guid>/en/offlinecache/</guid>
<description>Offline resources locate in the folder &amp;quot;sitecache&amp;quot;. With the option &amp;quot;use offline resources&amp;quot; enabled, the corresponding files in &amp;quot;sitecache/[domain name]/[full path including filename, the url path part]&amp;quot; are loaded first before reaching the network.&#xA;Serverless local sites Click to install url service that extracts web apps to the folder &amp;quot;sitecache/local/&amp;quot;: support web extensions (.crx for chrome &amp;amp; .xpi for firefox).&#xA;Any folder under &amp;quot;sitecache&amp;quot; can be visited as a local site.</description>
</item>
<item>
<title>Resource redirection</title>
<link>/en/redirect/</link>
<pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
<guid>/en/redirect/</guid>
<description>Redirection forwards cookies with the setting option &amp;quot;Redirect cookies&amp;quot; enabled, so use the options with care.&#xA;Setting options: &amp;quot;Url redirection&amp;quot; vs. &amp;quot;Resource redirection&amp;quot; &amp;quot;Url redirection&amp;quot; redirects the main/page url only while &amp;quot;Resource redirection&amp;quot; is for all urls in the page.&#xA;Global redirection Global redirection is enabled with the setting option &amp;quot;Resource redirection&amp;quot; or both &amp;quot;Url redirection&amp;quot; and &amp;quot;Redirect cookies&amp;quot;.&#xA;When a valid global redirection url is set, the &amp;quot;default.redirect&amp;quot; has no effect, and any url resource is fetched with the new url by appending the original url to the global redirection url.</description>
</item>
<item>
<title>Hosts files</title>
<link>/en/adblock_domain/</link>
<pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate>
<guid>/en/adblock_domain/</guid>
<description>The enhanced hosts files &amp;quot;hosts&amp;quot; and &amp;quot;default.hosts&amp;quot; take effect with the setting option &amp;quot;use hosts&amp;quot;.&#xA;hosts The enhanced file &amp;quot;hosts&amp;quot; defines IP addresses/attributes for domains. Each line has the following format:&#xA;[[IP address][attributes]][single space][domain name]&#xA;where &amp;quot;[[IP address][attributes]]&amp;quot; could be:&#xA;ipv4 address such as:&#xA;172.67.157.211 torapp.eu.org&#xA;ipv6 address, Ex.:&#xA;[2606:4700:3037::6815:8c3] torapp.eu.org&#xA;empty, that would lift all server-imposed limitations. Ex.:&#xA;[single space]gitee.com&#xA;which will make all git repositories on the domain visitable as websites with raw file access url.</description>
</item>
<item>
<title>Search engines</title>
<link>/en/search/</link>
<pubDate>Tue, 07 Mar 2023 00:00:00 +0000</pubDate>
<guid>/en/search/</guid>
<description>Clicking the following links to install search engines with uweb browser.&#xA;AI:&#xA;andi:https://andisearch.com/?q=&#xA;phind:https://phind-ai.com/search?q=&#xA;perplexity:https://www.perplexity.ai/?q=&#xA;youChat:https://you.com/search?tbm=youchat&amp;amp;q=&#xA;youWrite:https://you.com/search?tbm=youwrite&amp;amp;q=&#xA;youImagine:https://you.com/search?tbm=imagine&amp;amp;q=&#xA;you:https://you.com/search?q=&#xA;medisearch:https://medisearch.io/results/&#xA;explorer:https://explorer.globe.engineer/?q=&#xA;consensus:https://consensus.app/results/?synthesize=on&amp;amp;q=&#xA;yoursearch:https://app.yoursearch.ai/?q=&#xA;chatGPT:i:0/js/hash2textarea.js:https://chat.openai.com/#%s&#xA;lepton:i:0/js/hash2input.js:https://search.lepton.run/#%s&#xA;Recommended engines (click or append any of the following to the file &amp;quot;home5.search&amp;quot;)&#xA;Engines:i:40%s_00&#xA;bing image:http://bing.com/images/search?q=&#xA;google image:http://www.google.com/images?as_q=&#xA;flickr:http://www.flickr.com/photos/tags/&#xA;Yandex image:https://yandex.com/images/search?text=&#xA;wiki:https://en.wikipedia.org/wiki/Special:Search?search=&#xA;wikipedia:http://en.wikipedia.org/?search=&#xA;wikifull:http://en.wikipedia.org/wiki/Special:Search?fulltext=Search&amp;amp;search=&#xA;Youtube:https://www.youtube.com/results?search_query=&#xA;eBay:https://www.ebay.com/sch/i.html?_nkw=&#xA;Quora:https://www.quora.com/search?q=&#xA;Pinterest:https://www.pinterest.com/search/pins/?q=&#xA;LinkedIn:https://www.linkedin.com/search/results/all/?keywords=&#xA;Netflix:https://www.netflix.com/search?q=&#xA;Spotify:https://open.spotify.com/search/&#xA;Medium:https://medium.com/search?q=&#xA;TripAdvisor:https://www.tripadvisor.com/Search?q=&#xA;incaption:https://incaptions.com/&#xA;answer:http://mobile.answers.com/&#xA;twitter:https://twitter.com/search?q=&#xA;Facebook:https://www.facebook.com/search/str/%s/keywords_search&#xA;Instagram:https://www.instagram.com/explore/tags/%s/&#xA;social-search:https://www.social-searcher.com/social-buzz/?q5=&#xA;reddit:http://reddit.com/search?q=&#xA;boardreader:https://boardreader.com/s/%s.html&#xA;bingvideo:https://www.bing.com/videos/search?q=&#xA;vsearch:https://www.vsearch.me/s?q=&#xA;crowdview:https://crowdview.ai/search?q=&#xA;groups:http://groups.google.com/groups/search?q=</description>
</item>
<item>
<title>JS/CSS/HTML/preprocessing for domains</title>
<link>/en/sitejs/</link>
<pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss). Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
<item>
<title>Bookmarks</title>
<link>/en/bookmark/</link>
<pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/bookmark/</guid>
<description>AI, chatgpt etc.&#xA;google gemini komo andi devv.ai iaskAI poe thinkany freegpt teach-anything magickpen note.ms&#xA;rentry&#xA;Wait for url from other devices&#xA;berify: reverse image search for video&#xA;Associated bookmarks Search engine files associate with bookmarks with extension &amp;quot;.html&amp;quot;, which means the bookmark file if existing is appended to the page when the search engine file is on screen.&#xA;&amp;quot;help_en.html&amp;quot; bookmark associates with the user manual in English. Similarly, &amp;quot;help_zh.html&amp;quot; is for Chinese manual.</description>
</item>
<item>
<title>Tips</title>
<link>/en/tips/</link>
<pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/tips/</guid>
<description>Text processing for clipboard data:&#xA;On home screen, pressing the sharing button of the bottom toolbar popups the text processing menu for clipboard data.&#xA;To show web pages in desktop mode:&#xA;PC button + option &amp;quot;wide viewport&amp;quot; + global js &amp;quot;force page resizable&amp;quot;.&#xA;Playing audio when screen off&#xA;Option &amp;quot;Floating video&amp;quot; + video fullscreen playing&#xA;Multiple home screens and Next/Prev page:&#xA;home5.html, home6.mht(or .search or .html), home7.mht(or .search or .html), .</description>
</item>
<item>
<title>Address bar command line</title>
<link>/en/acmd/</link>
<pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/acmd/</guid>
<description>&amp;quot;:!&amp;quot; ( or &amp;quot;!&amp;quot;) command line Pressing &amp;quot;:&amp;quot; or &amp;quot;!&amp;quot; with hardware keyboard sets focus on the address bar.&#xA;The command line could be a &amp;quot;.js&amp;quot;, &amp;quot;.sh&amp;quot; or other executable with arguments. Ex. &amp;quot;:!s g keyword&amp;quot; could invoke &amp;quot;s.js&amp;quot; executable with the whole string as arguments (&amp;quot;s.sh&amp;quot; or &amp;quot;s&amp;quot; if file exists, here &amp;quot;g&amp;quot; as google search engine); &amp;quot;:! g keyword&amp;quot; would invoke the file &amp;quot;.js&amp;quot; or &amp;quot;.sh&amp;quot; as executable.</description>
</item>
<item>
<title>Any url as website</title>
<link>/en/url2site/</link>
<pubDate>Sun, 30 Oct 2022 00:00:00 +0000</pubDate>
<guid>/en/url2site/</guid>
<description>The uweb internal link &amp;quot;i:0m&amp;quot; make any url such as download or indirect links visitable as a website. The second part of mirrors has examples using the following tricks:&#xA;&amp;quot;i:0m04:[url]&amp;quot;: to treat the [url] content as html with bookmarklet. &amp;quot;i:0m?:[url]&amp;quot;: to treat the [url] content as html, handling css/js properly. &amp;quot;i:0m?[postfix]:[url]&amp;quot;: auto append query postfix to url to retrieve content. &amp;quot;i:0mi:5h:[url]&amp;quot;: similar to &amp;quot;i:0m?:[url]&amp;quot;, to treat the [url] content as html (for download or no-script links etc.</description>
</item>
<item>
<title>Html5 applications</title>
<link>/en/html5/</link>
<pubDate>Sun, 02 Oct 2022 00:00:00 +0000</pubDate>
<guid>/en/html5/</guid>
<description>This page is for uweb browser.&#xA;Click to install the following html5 apps:&#xA;Huge markdown file viewer&#xA;Huge markdown+katex file viewer (Tex formulas)&#xA;Huge markdeep file viewer (markdown, latex, diagram,graphviz etc.)&#xA;plyr video player&#xA;dplayer video player&#xA;pdf viewer&#xA;epub reader (authorllili)&#xA;djvu viewer&#xA;The corresponding menus can be installed with url services.&#xA;Features The following mentioned subfolders locate in the configuration folder.&#xA;The following html5 applications are allowed to read local files referred by &amp;quot;https://local/sdcard/.</description>
</item>
<item>
<title>Downloads</title>
<link>/en/changelog/</link>
<pubDate>Fri, 16 Sep 2022 00:00:00 +0000</pubDate>
<guid>/en/changelog/</guid>
<description>Amazon appstore&#xA;Galaxy.Store&#xA;uweb, termux &amp;amp; history versions&#xA;github&#xA;sourceforge&#xA;powerfolder&#xA;udrop&#xA;pagure&#xA;mcbebbs&#xA;Main features Change logs 1048: enhance file downloading. Previous versions may fail for few sites.&#xA;1047: add huge markdown file viewer&#xA;1038: support chatBot as search engine with url &amp;quot;i:0/js/hash2textarea.js:https://XXX&amp;quot;&#xA;1036: TV mode: reuse &amp;quot;engine.search&amp;quot; as live TV channel urls.&#xA;1034: click share button on homescreen to process clipboard text.&#xA;1030: Allow downloading with global redirection</description>
</item>
<item>
<title>Configuration</title>
<link>/en/sitemap/</link>
<pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate>
<guid>/en/sitemap/</guid>
<description>Mirrors&#xA;Check for updates&#xA;UI Search engines Home screens UI (gitee) webdav install-able menu generator Customization Long pressing menus for toolbar buttons User agents Javascript Url services Links Commands Remote javascript Menu for selections Menu for long pressing hypertext Toolbar Gestures Address bar command modes Advanced Advanced Content AD blocking CSS styles Redirection Offline cache JS/CSS/HTML/preprocessing for domains Any urls as website Tools Bookmarklets Cron &amp;amp; more Custom file handling Html5 application Termux Info Manual Tips Configuration files Bookmarks </description>
</item>
<item>
<title>Configuration folders/files</title>
<link>/en/filenames/</link>
<pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/filenames/</guid>
<description>All folders end with character &amp;quot;/&amp;quot; and others are files. All folders/files locate in &amp;quot;/data/data/info.torapp.uweb/files&amp;quot;:
&amp;quot;css/&amp;quot;: global css folder
&amp;quot;js/&amp;quot;: global script folder
&amp;quot;sitejs/&amp;quot;: script folder for domains
&amp;quot;sitecss/&amp;quot;:CSS folder for domains
&amp;quot;bookmarklet/&amp;quot;:bookmarklets, long pressing the &amp;quot;JS&amp;quot; button to execute.
&amp;quot;offline/&amp;quot;: to save offline pages
&amp;quot;sbookmark/&amp;quot;: to save super bookmarks
&amp;quot;sitecache/&amp;quot;:offline cache
&amp;quot;longclick/&amp;quot;: menus to appear when long-pressing hypertext (js files)
&amp;quot;icon/&amp;quot;:customized icons
&amp;quot;app[XXX]/&amp;quot;:html5 applications
&amp;quot;default.longclick&amp;quot;: to configure menus when long-pressing hypertext.</description>
<description>All folders end with character &amp;quot;/&amp;quot; and others are files. All folders/files locate in &amp;quot;/data/data/info.torapp.uweb/files&amp;quot;:&#xA;&amp;quot;css/&amp;quot;: global css folder&#xA;&amp;quot;js/&amp;quot;: global script folder&#xA;&amp;quot;sitejs/&amp;quot;: script folder for domains&#xA;&amp;quot;sitecss/&amp;quot;:CSS folder for domains&#xA;&amp;quot;bookmarklet/&amp;quot;:bookmarklets, long pressing the &amp;quot;JS&amp;quot; button to execute.&#xA;&amp;quot;offline/&amp;quot;: to save offline pages&#xA;&amp;quot;sbookmark/&amp;quot;: to save super bookmarks&#xA;&amp;quot;sitecache/&amp;quot;:offline cache&#xA;&amp;quot;longclick/&amp;quot;: menus to appear when long-pressing hypertext (js files)&#xA;&amp;quot;icon/&amp;quot;:customized icons&#xA;&amp;quot;app[XXX]/&amp;quot;:html5 applications&#xA;&amp;quot;default.longclick&amp;quot;: to configure menus when long-pressing hypertext.</description>
</item>
<item>
<title>Links</title>
<link>/en/links/</link>
<pubDate>Thu, 30 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/links/</guid>
<description>Clicking the following hypertext will install menus for long pressing the bookmark button (with star as icon):
Certificate info
Web fullscreen
Long pressing the bookmark button in uweb browser will popup menus defined in file &amp;quot;default.link&amp;quot;. The file format is as follows:
[Menu name]:[url][space][javascript code]
in which space and later parts are optional. url and later parts support &amp;quot;%u&amp;quot;,&amp;quot;%s&amp;quot; etc.. The javascript code will be executed after url is fully loaded.</description>
</item>
<item>
<title>AD blocking</title>
<link>/en/adblock/</link>
<pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/adblock/</guid>
<description>Host blocking。
Use bookmarklet &amp;quot;list all script urls&amp;quot; to generate url links, long pressing dubious script (usually 3rd-party library) link, click &amp;quot;Block domain root&amp;quot;. Javascript and CSS for domains。
Long press the button &amp;quot;js&amp;quot;, click the menu &amp;quot;MarkAD mode&amp;quot;. In &amp;quot;markAD mode&amp;quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &amp;quot;display:none&amp;quot; is used. If &amp;quot;display&amp;quot; appears in the attribute information, recommend to use &amp;quot;transform:scale(0)!</description>
<description>Host blocking。&#xA;Use bookmarklet &amp;quot;list all script urls&amp;quot; to generate url links, long pressing dubious script (usually 3rd-party library) link, click &amp;quot;Block domain root&amp;quot;. Javascript and CSS for domains。&#xA;Long press the button &amp;quot;js&amp;quot;, click the menu &amp;quot;MarkAD mode&amp;quot;. In &amp;quot;markAD mode&amp;quot;, click page element to show all attributes and generate CSS AD blocking styles. By default, &amp;quot;display:none&amp;quot; is used. If &amp;quot;display&amp;quot; appears in the attribute information, recommend to use &amp;quot;transform:scale(0)!</description>
</item>
<item>
<title>Bookmarklets</title>
<link>/en/bookmarklet/</link>
<pubDate>Fri, 24 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/bookmarklet/</guid>
<description>With a href=&amp;quot;../index.html&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.
List all script urls
User agent
Cookie
Source code
Last modified date
Eruda: mobile console
QR code generation
Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;
Shows all form elements
Enables all form elements
Toggle checkboxes
Check all checkboxes
Uncheck all checkboxes
Toggle all checkboxes in forms
Enable selection</description>
<description>With a href=&amp;quot;../index.html#&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.&#xA;List all script urls&#xA;User agent&#xA;Cookie&#xA;Source code&#xA;Last modified date&#xA;Eruda: mobile console&#xA;QR code generation&#xA;Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;&#xA;Shows all form elements&#xA;Enables all form elements&#xA;Toggle checkboxes&#xA;Check all checkboxes&#xA;Uncheck all checkboxes&#xA;Toggle all checkboxes in forms&#xA;Enable selection</description>
</item>
<item>
<title>Text selection</title>
<link>/en/pccopy/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/pccopy/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:
google Translate
bing translate
deepL
The file &amp;quot;default.select&amp;quot; defines menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:
[Name]:[mimetype]:[command line]
[mimetype] specifies input/output for [command line].
It formats as &amp;quot;[input mimetype]/[output mimetype]&amp;quot;.
[input mimetype] can be the following:
&amp;quot;html&amp;quot;: rich text &amp;quot;&amp;quot; (empty): text &amp;quot;.</description>
<title>Url services</title>
<link>/en/urls/</link>
<pubDate>Fri, 10 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/urls/</guid>
<description>Click the following links to install url services with uweb browser. Force exit and re-launch the app, then long press the &amp;quot;image&amp;quot; button to popup the menu.&#xA;Fullscreen video:i:5f&#xA;Redirect/edit:e:&#xA;Save2autocomplete:i:51:&#xA;Bookmark:i:52:&#xA;Note:i:53:&#xA;Save engine:i:54:&#xA;Save link:i:55:&#xA;Save to desktop:i:58&#xA;markdownview:i:0m-/js/mdview.html:&#xA;Add to media storage::001&#xA;Extract web app:i:0bsitecache/local/:&#xA;tgurl:https://tx.me/share/url?url=&#xA;tgdownload:https://tx.me/share/url?url=../download Compatible mode:i:5d&#xA;papago:https://papago.naver.net/website?locale=en&amp;amp;target=en&amp;amp;url=&#xA;google translate:https://translate.google.com/translate?sl=auto&amp;amp;tl=en&amp;amp;u=&#xA;Source:view-source:&#xA;outline:https://www.outline.com/&#xA;2pdf:https://www.web2pdfconvert.com#&#xA;printfriendly:https://www.printfriendly.com/print/?url=&#xA;htmlview:https://htmlview.glitch.me/?&#xA;htmlpreview:https://htmlpreview.github.io/?&#xA;webarchive:https://web.archive.org/web/*/&#xA;archive:https://archive.is/?run=1&amp;amp;url=&#xA;googlecache:http://webcache.googleusercontent.com/search?q=cache:&#xA;google by image:https://www.google.com/searchbyimage?safe=off&amp;amp;image_url=&#xA;tinyeye:https://tineye.com/search?url=&#xA;Yandex by image:https://yandex.</description>
</item>
<item>
<title>CSS样式</title>
<title>Commands</title>
<link>/en/cmds/</link>
<pubDate>Thu, 02 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/cmds/</guid>
<description>Click the following links to install commands with uweb browser. Force exit and re-launch the app, then long press the button with clock icon to popup the command menu.&#xA;Configuration file &amp;quot;default.cmds&amp;quot; examples:&#xA;Clear data::toybox find /data/data/info.torapp.uweb/app_webview ! -name &#39;Cookies&#39; ! -name &#39;*.cjar&#39; -type f -delete&#xA;Clear database::rm -rf /data/data/info.torapp.uweb/databases/*&#xA;Append query to autocomplete:uweb:cd /data/data/info.torapp.uweb/files;cat default.autoc query.log|toybox sort|toybox uniq -i&amp;gt;a.tmp;mv a.tmp default.autoc;&amp;gt;query.log;echo file:///data/data/info.torapp.uweb/files/default.autoc&#xA;Clear cache::toybox rm -rf /data/data/info.torapp.uweb/cache&#xA;Clear logcat::logcat -c</description>
</item>
<item>
<title>Execute javascript codes</title>
<link>/en/rjs/</link>
<pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/rjs/</guid>
<description>javascript for domains&#xA;Earliest loaded global javascript files locates in the subfolder &amp;quot;css&amp;quot; of app private folder.&#xA;Global javascript files locates in the subfolder &amp;quot;js&amp;quot; of app private folder. Long press button [☰] to configure. Click the following links to install:&#xA;Save password&#xA;Instant page&#xA;large size javascript code can be installed to the folder &amp;quot;bookmarklet&amp;quot; (long pressing button &amp;quot;js&amp;quot; to popup menu):&#xA;google translation&#xA;Eruda&#xA;Performance&#xA;Note: Bookmarklets whose names begin with &amp;quot;!</description>
</item>
<item>
<title>CSS styles</title>
<link>/en/globalcss/</link>
<pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/globalcss/</guid>
<description>Uweb browser loads all &amp;quot;.css&amp;quot; files under the folder &amp;quot;css&amp;quot; as global css. Click the following links to install global css files:
Clearing font settings
The file &amp;quot;night.css&amp;quot; is used as night mode, click the following links to install one:
webview 81+ night mode
webview 80- night mode</description>
<description>Uweb browser loads all &amp;quot;.css&amp;quot; files under the folder &amp;quot;css&amp;quot; as global css. Click the following links to install global css files:&#xA;Clearing font settings&#xA;The file &amp;quot;night.css&amp;quot; is used as night mode, click the following links to install one:&#xA;webview 81+ night mode&#xA;webview 80- night mode&#xA;Earliest loaded global js The &amp;quot;.js&amp;quot; files under the folder &amp;quot;css&amp;quot; are loaded as earlier as possible on the page.</description>
</item>
<item>
<title>Toolbar customization</title>
<link>/en/icons/</link>
<pubDate>Sun, 06 Feb 2022 00:00:00 +0000</pubDate>
<guid>/en/icons/</guid>
<description>If subfolder &amp;quot;icon&amp;quot; exists, then files named as &amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;...
are used for icons in the bottom toolbar. file &amp;quot;0&amp;quot; to replace the left arrow button, &amp;quot;1&amp;quot; for right arrow button, &amp;quot;2&amp;quot; for the setting button,&amp;quot;3&amp;quot; for the home screen button,...
If a new button is defined (file name &amp;quot;20&amp;quot; exists), uweb also supports VectorDrawable with &amp;quot;android compiled XML&amp;quot; format. All icon files must be all VectorDrawables or 此时所有图标文件必须都是compiled XML格式或都是普通的图像格式png,jpg,gif等。用户可将VectorDrawable XML文件放到安卓项目目录assets下面重新生成apk文件以后将apk文件解压即可得compiled XML格式图标文件。</description>
<description>If subfolder &amp;quot;icon&amp;quot; exists, then files named as &amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;,&amp;quot;2&amp;quot;...&#xA;are used for icons in the bottom toolbar. file &amp;quot;0&amp;quot; to replace the left arrow button, &amp;quot;1&amp;quot; for right arrow button, &amp;quot;2&amp;quot; for the setting button,&amp;quot;3&amp;quot; for the home screen button,...&#xA;If a new button is defined (file name &amp;quot;20&amp;quot; exists), uweb also supports VectorDrawable with &amp;quot;android compiled XML&amp;quot; format. All icon files must be either all compiled VectorDrawables or common image formats.</description>
</item>
<item>
<title>Search engine files</title>
<link>/en/searchcat/</link>
<pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate>
<guid>/en/searchcat/</guid>
<description>Search engine file names have &amp;quot;.search&amp;quot; as postfix. When they are clicked, the associated bookmark files with postfix &amp;quot;.search.html&amp;quot; would be appended. Ex: the associated bookmark for &amp;quot;foo.search&amp;quot; is &amp;quot;foo.search.html&amp;quot;.&#xA;Any &amp;quot;.search&amp;quot; file can be opened as search engine file, each line of which has one of the following formats:&#xA;[Engine name]:[url without &#39;%s&#39; inside]&#xA;[Engine name]:[url with &#39;%s&#39; as keyword]&#xA;[Engine name]:POST:[post params with &#39;%s&#39; as keyword]:[url]&#xA;[Engine name]:[Extra request headers]:[post params with &#39;%s&#39; as keyword]:[url]</description>
</item>
<item>
<title>Termux</title>
<link>/en/termux/</link>
<pubDate>Sat, 01 Jan 2022 00:00:00 +0000</pubDate>
<guid>/en/termux/</guid>
<description>Only the termux versions provided along with uweb browser can work seamlessly. For android 10+, please install termux before installing uweb browser. If uweb is already installed, users can uninstall it first, then install termux and reinstall uweb browser.&#xA;Termux bookmarks Long pressing the following links then either &amp;quot;commands&amp;quot;-&amp;gt;&amp;quot;bookmark&amp;quot; to add bookmarks or &amp;quot;open in new tab&amp;quot; to execute.&#xA;GNU bc (basic calculator)&#xA;bc with all extensions&#xA;Click the following links to install termux configurations: .</description>
</item>
<item>
<title>Long pressed link menu</title>
<link>/en/longclick/</link>
<pubDate>Fri, 06 Nov 2020 00:00:00 +0000</pubDate>
<guid>/en/longclick/</guid>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)
[Name]:[mimetype]:[command line]
in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.
To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.
These javascript files are in the following format:
The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)&#xA;[Name]:[mimetype]:[command line]&#xA;in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.&#xA;To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.&#xA;These javascript files are in the following format:&#xA;The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
</item>
<item>
<title>Tools</title>
<link>/en/tools/</link>
<pubDate>Sun, 06 Sep 2020 00:00:00 +0000</pubDate>
<guid>/en/tools/</guid>
<description>This page is for uweb browser.&#xA;install tdict_local (search with local indexes and remote content) Click to install the following local indexes with corresponding search engines (for test only).&#xA;install the indexes for &amp;quot;American heritage dictionary (en-en&amp;amp;zh with AHD/D.J./K.K. pronunciation)&amp;quot;&#xA;Install AHD to home screen&#xA;Indexes for &amp;quot;研究社新編英和活用大辞典(English usage: en-en&amp;amp;ja)&amp;quot;&#xA;Install &amp;quot;English usage (en-en&amp;amp;ja)&amp;quot;&#xA;Indexes for SOED6&#xA;install SOED&#xA;The following dictionaries work better with markdown processor.&#xA;Install markdown processor</description>
</item>
<item>
<title>Custom file handling</title>
<link>/en/filecap/</link>
<pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
<guid>/en/filecap/</guid>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.
The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:
[file extension]:[mimetype]:[command line]
The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.
&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.
&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.&#xA;The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:&#xA;[file extension]:[mimetype]:[command line]&#xA;The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.&#xA;&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.&#xA;&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
</item>
<item>
<title>Blocking domain trees</title>
<link>/en/adblock_domain/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/adblock_domain/</guid>
<description>hosts blocks whole domain trees including all descedant domains. The domains in the hosts file must be 2 or 3 segment domains, such as &amp;quot;yahoo.com&amp;quot; and &amp;quot;finance.yahoo.com&amp;quot;. If the length of the last 2 segments is less than 7, such as &amp;quot;com.pl&amp;quot;, then it is treated as one segment, so domains like &amp;quot;xxx.xxx.com.pl&amp;quot; are also valid in the hosts file.
Each line of the hosts file has the following format:</description>
<title>Gestures</title>
<link>/en/gesture/</link>
<pubDate>Thu, 18 Jun 2020 00:00:00 +0000</pubDate>
<guid>/en/gesture/</guid>
<description>Swipe down from the top to show the address bar; swipe up to the top to hide the address bar. Swipe down to the bottom to hide the toolbar with option &amp;quot;swipe to hide tools&amp;quot;; swipe on the bottom corners to show the toolbar.&#xA;Swipe left/right near the toolbar to switch window; fling left/right to switch to the last/first window.&#xA;Swiping on the top part of content window (near the top address bar by default) triggers corresponding link in the file &amp;quot;default.</description>
</item>
<item>
<title>Change log</title>
<link>/en/changelog/</link>
<title></title>
<link>/en/mirrors/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/changelog/</guid>
<description>901: Use in-app files folder for configuration</description>
<guid>/en/mirrors/</guid>
<description>Mirrors (for version 1040+) gitee&#xA;gitcode&#xA;gitcode&#xA;gitea&#xA;notabug&#xA;launchpad&#xA;framagit&#xA;agit&#xA;froggi&#xA;disroot&#xA;gitdab&#xA;pagure&#xA;bitbucket&#xA;jsdelivr&#xA;dagshub&#xA;gitgud&#xA;gitly&#xA;gitnet&#xA;palemoon&#xA;tilde&#xA;dotclear&#xA;mimetest&#xA;chapril&#xA;cryto&#xA;antopie&#xA;bgithub&#xA;nuaa&#xA;yzuu&#xA;Mirrors (for all versions) 试验1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 gitly gitnet palemoon tilde dotclear minetest chapril cryto antopie Repositories gitlab&#xA;sourceforge&#xA;github&#xA;bitbucket</description>
</item>
<item>
<title>Javascript and CSS for domains</title>
<link>/en/sitejs/</link>
<title></title>
<link>/en/readme/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss).
Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
<guid>/en/readme/</guid>
<description>Uweb browser: unlimited power 中文&#xA;Amazon appstore&#xA;Galaxy.Store&#xA;Downloads&#xA;Uweb browser: downloads, plugins and tips&#xA;(Mirrors: gitlab codeberg repo 4everland fleek cyclic netlify surge kinsta zeabur deno bitbucket pages vercel render glitch More...)&#xA;Powerful: any native functionality with html5 enhancement and still secure; any urls to host website; javascript and shell scripting for general processing; piping between console and GUI and more with Termux. Customizable: user-defined menus, (new) buttons and gestures for user agents, bookmarklets, url services, shell commands, internal functionality links and text processing etc.</description>
</item>
</channel>
</rss>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Links</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -47,18 +47,32 @@
<ul class="tags">
</ul>
<p>Clicking the following hypertext will install menus for long pressing the bookmark button (with star as icon):<br>
<a href="i:0gdefault.link::Certificate info:i:1b%0A">Certificate info</a></p>
<p>Click the following links to install menus popped by long pressing the bookmark button (with star as icon):<br>
<a href="i:0gdefault.link::Capture::ccapture%0A">Capture long screenshot</a> (need <a href="i:61:../searchurl/func.html">long screenshot mode</a>)</p>
<p><a href="i:0gdefault.link:../searchurl/txt/link.cfg">Select All:CTRL-A/undo:CTRL-Z/Redo:CTRL-Y</a><br>
<a href="i:0gdefault.link::Extend cookies::0cc;Max-Age=315360000%0A">Extend site cookies to 10 years</a><br>
<a href="i:0gdefault.link::Clear cookies::0cc;Max-Age=0%0A">Clear site cookies</a></p>
<p><a href="i:0gdefault.link::vpn:i:1dandroid.net.vpn.SETTINGS:::%0A">VPN</a></p>
<p><a href="i:0gdefault.link::profile_config::cprofile . files .conf%0A">Switch configuration</a></p>
<p><a href="i:0gdefault.link::Wait msg:i:1w%0A">Wait for network msg</a></p>
<p><a href="i:0gdefault.link::Certificate info:i:1c%0A">Certificate info</a></p>
<p><a href="i:0gdefault.link::Backup2Box: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1);location.href='i:0e'+path+':https://dav.box.com/dav/'+f+'.tgz';}%0A">Backup to box.com</a></p>
<p><a href="i:0gdefault.link::restoreFromBox: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1);location.href='i:0dhttps://dav.box.com/dav/'+f+'.tgz';}%0A">Restore from box.com</a></p>
<p><a href="i:0gdefault.link::up2Box: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1)+'.tgz';location.href='i:0u'+path+':https://dav.box.com/dav/'+f;}%0A">upload to box.com</a></p>
<p><a href="../searchurl/webdav.html">More webdav link menu items</a></p>
<p><a href="i:0gdefault.link::web fullscreen: location.href='i:5fsetTimeout(()=>document.documentElement.requestFullscreen(),50);';%0A">Web fullscreen</a></p>
<p>Long pressing the bookmark button in <a href="../index.html">uweb browser</a> will popup menus defined in file &quot;default.link&quot;. The file format is as follows:<br>
[Menu name]:[url][space][javascript code]</p>
<p>in which space and later parts are optional. url and later parts support <a href="../cmd/index.html">&quot;%u&quot;,&quot;%s&quot; etc.</a>. The javascript code will be executed after url is fully loaded.</p>
<p>Long pressing the bookmark button in <a href="../index.html#">uweb browser</a> will popup menus defined in file &quot;default.link&quot;. The file format is as follows:<br>
[Menu name]:[one or more links delimited by &quot; \n &quot;]</p>
<p>and each link has the following format:<br>
[url][space][javascript code]</p>
<p>in which space and later parts are optional. url and later parts support <a href="../cmd/index.html#">&quot;%u&quot;,&quot;%s&quot; etc.</a>. The javascript code will be executed after url is fully loaded.</p>
<p>url supports all standard scheme (http(s):,javascript: etc.) and uweb internal schemes ( ':' as second character in the url ) and special links that begins with ':'.</p>
<p>uweb browser will handle local file urls (file:///) specially for some file types</p>
<ul>
<li>.js file(same as <a href="../longclick/index.html">long pressing hypertext to execute js file</a>): If the &quot;.js&quot; file begins with &quot;//&quot;, then uweb browser will load the site following &quot;//&quot; and execute the following js code.</li>
<li>.js file(same as <a href="../longclick/index.html#">long pressing hypertext to execute js file</a>): If the &quot;.js&quot; file begins with &quot;//&quot;, then uweb browser will load the site following &quot;//&quot; and execute the following js code.</li>
</ul>
<p><a href="../gesture/index.html">default.gesture</a> and default.button have the exactly same file format. &quot;.gesture&quot; files define gestures while &quot;.button&quot; define bottom toolbar button pressing actions from the last button to the first.</p>
<p>If the above mentioned [links] part is malformated, then it is auto detected as html or text.</p>
<p><a href="../gesture/index.html#">default.gesture</a> and default.button have the exactly same file format. &quot;.gesture&quot; files define gestures while &quot;.button&quot; define bottom toolbar button pressing actions from the last button to the first.</p>
<p>proxy config:<br>
httpproxy::010[proxy host]:[port]<br>
socks5::011[socks host]:[port]<br>
@ -66,10 +80,6 @@ noproxy::010:</p>
<h3 id="special-links-beginning-with-">special links beginning with ':'</h3>
<ul>
<li>
<p>:0000<br>
Extend cookie expiracy to 70 years, may be denied by server.</p>
</li>
<li>
<p>:0003<br>
Toggle fullscreen mode</p>
</li>
@ -82,10 +92,6 @@ Rotate the screen</p>
Scan the fileurl and add it to media storage</p>
</li>
<li>
<p>:002[url]<br>
Show the secure cookie</p>
</li>
<li>
<p>:010[proxy host]:[port]<br>
Config http proxy, &quot;:010:&quot; to disable any proxy.</p>
</li>
@ -93,15 +99,54 @@ Config http proxy, &quot;:010:&quot; to disable any proxy.</p>
<p>:011[socks host]:[port]<br>
Socks proxy</p>
</li>
<li>
<p>:0cc[url1]:[url2][:;[cookie attributes]]<br>
cookie copy from url1 to url2, the last part &quot;[:;[cookie attributes]]&quot; is optionable.</p>
</li>
</ul>
<h4 id="commands">commands</h4>
<ul>
<li>
<p>:![command line]<br>
The command line could be a &quot;.js&quot;, &quot;.sh&quot; or other executable with arguments. Ex. &quot;:!s g keyword&quot; could invoke &quot;s.js&quot; executable with the whole string as arguments (&quot;s.sh&quot; or &quot;s&quot; if file exists, here &quot;g&quot; as google search engine); &quot;:! g keyword&quot; would invoke the file &quot;.js&quot; or &quot;.sh&quot; as executable.</p>
<p>For regular (non-js) executables, the standard output of the command line will be treated as lines of web urls.</p>
<p><a href="i:0hs.sh:../searchurl/txt/web.sh">Click to install the example file &quot;s.sh&quot;</a><br>
<a href="i:0h.js:../searchurl/txt/web.js">Click to install the example file &quot;.js&quot;</a></p>
</li>
<li>
<p>:c[command]</p>
<ul>
<li>close<br>
&quot;:cclose&quot; to close the current window/tab.</li>
<li>profile [parent folder] [file/folder] [optional ID]<br>
Ex. &quot;:cprofile . files&quot; to switch configurations</li>
</ul>
</li>
<li>
<p>:p [width in milliInch]x[height] [top margin]:[right margin]:[bottom margin]:[left margin]<br>
Generate/Print PDF file in the &quot;/sdcard/Download&quot; folder, all units are milliinch.<br>
Ex. &quot;:p x&quot; or &quot;:px&quot; for screen width and infinite height (as long vector screenshot).<br>
&quot;:p x[height]&quot; or &quot;:px[height]&quot; for screen width.</p>
</li>
</ul>
<h3 id="i-internal-links">&quot;i:&quot; internal links:</h3>
<ul>
<li>
<p>i:0m[bookmarklet index|prefix|c[cssFlag]]:[url]<br>
Visiting url and execute the uweb browser internal bookmarklet, [bookmarklet index] must have at least two digits. For example, &quot;00&quot; as the first local bookmarklet; &quot;01&quot; as the first remote script; then &quot;02&quot; as the second local bookmarklet, ...</p>
<p>i:0b[path]:[url]<br>
Extract remote content (tar/tgz/zip) under the folder [path]. If [path] ends with &quot;/&quot;, then put unzipped file under the folder &quot;[path]/[file name stem]&quot; (for zipped files only, not for tar/tgz).</p>
</li>
<li>
<p>i:0m[-|1-9][bookmarklet index|prefix|?postfix|/.../localfile|H[headers]|c[cssFlag]]:[url]<br>
Visiting url and execute the uweb browser internal bookmarklet that keeps valid for all urls under the parent path of [url].</p>
<ul>
<li>[-|1-9] is optional single character. '-' to limit bookmarklet work only for urls with same path (could be different query strings). The digit is uplevel, 1 to make bookmarklet valid for parent path of [url].</li>
<li>[bookmarklet index] must have two digits. They are used as index of bootmarklet. For example, &quot;00&quot; as the first local bookmarklet; &quot;01&quot; as the first remote script; then &quot;02&quot; as the second local bookmarklet, ...</li>
<li>c[cssFlag]: For example, &quot;c12&quot; will apply the third and fourth global CSS (12=2^2+2^3).</li>
<li>All other cases will be treated as prefix, the real visited url is &quot;[prefix]+url&quot;.</li>
<li>H[headers]: Ex. &quot;HX-Forwarded-For;8.8.8.8&quot; adds extra http request header &quot;X-Forwarded-For:8.8.8.8&quot;.</li>
<li>[?postfix]: the real visited url is &quot;[url]+[?postfix]&quot;.</li>
<li>[/.../localfile]: load the local html/js file that processes [url]. The first character of the local html file must be &quot;&lt;&quot;.</li>
<li>All other cases will be treated as [prefix], the real visited url is &quot;[prefix]+[url]&quot;.</li>
<li>Since <a href="../rjs/index.html#">activated scripts</a> use internal mechanism of &quot;i:0m&quot; urls, the script itself cannot have 'H', '?' as its very first character.</li>
</ul>
</li>
<li>
@ -123,18 +168,26 @@ Read partial data from url.<br>
Append [string] to the address bar text.</p>
</li>
<li>
<p>i:1b<br>
<p>i:1c<br>
Show web certificate.</p>
</li>
<li>
<p>i:1c<br>
<p>i:1d<action>:<type>:<Category>:<data><br>
Launch app for specific <action>.</p>
</li>
<li>
<p>i:1w<br>
Wait to receive url from the network and open the url.</p>
</li>
<li>
<p>i:1c1<br>
<p>i:1w1<br>
Wait to receive url from the network and open the url (not showing ip)</p>
</li>
<li>
<p>i:1e<br>
Open file manager for removable SDCARD download folder</p>
</li>
<li>
<p>i:50[path]:[string]<br>
Save [string] as file</p>
</li>
@ -160,7 +213,8 @@ Save as link.</p>
</li>
<li>
<p>i:56[string]<br>
Use [string] as user input on web page.</p>
Use [string] as user input on web page.<br>
The string can have any character such as ascii code 0-26, where code 0 means clear, and code 1-26 are from ctrl-A to ctrl-Z as shortcut keys. (to type &quot;Ctrl-A&quot; into a text file, use &quot;Ctrl-Q Ctrl-A&quot; with emacs or &quot;Ctrl-V Ctrl-A&quot; with vim)</p>
</li>
<li>
<p>i:57[jscode]<br>
@ -171,10 +225,6 @@ execute [jscode], even when js is disabled for the web page.</p>
Save to the desktop.</p>
</li>
<li>
<p>i:59[filename]<br>
Send file content to network.</p>
</li>
<li>
<p>i:5a[filename]<br>
Receive content from network to the file.</p>
</li>
@ -199,20 +249,25 @@ TTS</p>
play video fullscreen. if videourl is empty, then make following requestFullscreen() work.</p>
</li>
<li>
<p>i:5g[videourl]<br>
play video in external player</p>
</li>
<li>
<p>i:5h[url]<br>
force html for url</p>
<p>i:5h[?postfix:|/regex/replacement:|encoding:][url]<br>
force html for [url] visiting</p>
<ul>
<li>[?postfix:] : the real url visited is &quot;[url]+[?postfix]&quot;</li>
<li>[/regex/replacement:]: execute regular expression replacement for the &quot;[url]&quot;, then visit the resulting url.</li>
<li>[encoding:]: force web page encoding.</li>
</ul>
</li>
<li>
<p>i:5i[url]<br>
Use the existing tab for the url to jump to a different anchor.</p>
Use the existing tab for the url with possible different url hash part.</p>
</li>
<li>
<p>i:5j[string]<br>
Send string to network</p>
if [string] is file url, then send the file/folder to network, otherwise send [string] to network.</p>
</li>
<li>
<p>i:5p[videourl]<br>
play video in external player</p>
</li>
<li>
<p>i:60[path]:[url]<br>
@ -227,12 +282,65 @@ Evaluate the [js code] and save the returned string to file.</p>
Visiting url and execute the bookmarklet. Only uweb predefined local bookmarlets are allowed.</p>
</li>
<li>
<p>i:6i[js file path relative to configuration folder]:[url]<br>
Similar to i:5i, except executing the js file after possible url hash change.</p>
</li>
<li>
<p>i:70[url]:[auto page turning url]<br>
Visiting [url], but use the second url as auto paging url.</p>
</li>
<li>
<p>i:8d[url]<br>
Force downloading [url]</p>
</li>
<li>
<p>i:8l[filename]<br>
Loading configuration [filename]. Ex. &quot;i:8lconfig.html&quot; to reload config.html.</p>
</li>
<li>
<p>i:92[http request headers separated by ';']:[url]<br>
The &quot;Host&quot; Header (fake header, different from the standard) must be the first header.<br>
Ex. i:92Host;209.216.230.240:https://news.ycombinator.com<br>
use &quot;i:0mi:92Host;209.216.230.240::https://news.ycombinator.com&quot; to visit the site with specified IP address.</p>
</li>
<li>
<p>i:b1[internal urls or javascript separated by &quot;%0A&quot;]<br>
Bundle of internal urls, if it is an &quot;i:0&quot; url, then it should have the following format:<br>
[title]%0A[msg]%0A[optional callback url%0A][i:0url].</p>
</li>
</ul>
</div>
<p>Last Modified: 29 April 2024<br>
update i:0m syntax<br>
<pre>i:56 urls support CTRL_A to CTRL-Z
</pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Long pressed link menu</title>
<script type="text/javascript">
function findLang(){
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -46,22 +46,51 @@
</h1>
<ul class="tags">
<li><a href="../tags/javascript">javascript</a> </li>
<li><a href="../tags/javascript/index.html#">javascript</a> </li>
</ul>
<h4 id="to-run-commands">To run commands</h4>
<p>Each line of file &quot;<a href="file:///data/data/info.torinfo.uweb/files/default.longclick">default.longclick</a>&quot; has the following format: (same as <a href="../searchurl/cmds.html">default.cmds</a>)<br>
<p>Each line of file &quot;<a href="file:///data/data/info.torapp.uweb/files/default.longclick">default.longclick</a>&quot; has the following format: (same as <a href="../cmds/index.html#">default.cmds</a>)<br>
[Name]:[mimetype]:[command line]<br>
in which [command line] can have <a href="../searchurl/cmds.html">&quot;%c&quot; (cookie), &quot;%u&quot; (current url), &quot;%t&quot; (title)</a> etc.</p>
in which [command line] can have <a href="../cmds/index.html#">&quot;%c&quot; (cookie), &quot;%u&quot; (current url), &quot;%t&quot; (title)</a> etc.</p>
<h4 id="to-visit-url-and-load-javascript-file">To visit url and load javascript file</h4>
<p>All &quot;.js&quot; files under the folder &quot;<a href="file:///data/data/info.torinfo.uweb/files/longclick/">longclick</a>&quot; are part of the popup menu.<br>
<p>All &quot;.js&quot; files under the folder &quot;<a href="file:///data/data/info.torapp.uweb/files/longclick/">longclick</a>&quot; are part of the popup menu.<br>
These javascript files are in the following format:</p>
<ul>
<li>The very first line can begin with &quot;//&quot; followed by website url that can have <a href="../searchurl/cmds.html">&quot;%u&quot; (current url), &quot;%t&quot; (title)</a> etc. included. In this case, the website is visited, then the javascript file is loaded on the new loaded site.</li>
<li>The very first line can begin with &quot;//&quot; followed by website url that can have <a href="../cmds/index.html#">&quot;%u&quot; (current url), &quot;%t&quot; (title)</a> etc. included. In this case, the website is visited, then the javascript file is loaded on the new loaded site.</li>
<li>In the &quot;.js&quot; file, variable &quot;arguments&quot; can be used to get parameters. in which arguments[1] is the long-pressed link url, argument[2] is the text description and arguments[0] is the &quot;.js&quot; file name.</li>
</ul>
</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

92
en/mirrors.md Normal file
View File

@ -0,0 +1,92 @@
<style>a+br{display:none;}</style>
#### Mirrors (for version 1040+)
[gitee](https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html#)
[gitcode](https://gitcode.net/uweb/uweb/-/raw/master/redirect.html#)
[gitcode](https://raw.gitcode.com/uweb/uweb/raw/master/redirect.html#)
[gitea](https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html#)
[notabug](https://notabug.org/torappinfo/uweb/raw/master/redirect.html#)
[launchpad](https://git.launchpad.net/uweb/plain/redirect.html#)
[framagit](https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html#)
[agit](https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[froggi](https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[disroot](https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html#)
[gitdab](https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html)
[pagure](https://pagure.io/uweb/raw/master/f/redirect.html#)
[bitbucket](https://bitbucket.org/torappinfo/torappinfo.bitbucket.io/raw/master/redirect.html#)
[jsdelivr](https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html#)
[dagshub](https://dagshub.com/torappinfo/uweb/raw/master/redirect.html#)
[gitgud](https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html#)
[gitly](https://gitly.org/jamesfengcao/uweb/raw/master/redirect.html#)
[gitnet](https://gitnet.fr/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[palemoon](https://repo.palemoon.org/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[tilde](https://tildegit.org/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[dotclear](https://git.dotclear.org/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[mimetest](https://git.minetest.land/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[chapril](https://forge.chapril.org/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[cryto](https://git.cryto.net/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[antopie](https://code.antopie.org/jamesfengcao/uweb/raw/branch/master/redirect.html#)
[bgithub](https://bgithub.xyz/torappinfo/uweb/raw/master/redirect.html#)
[nuaa](https://hub.nuaa.cf/torappinfo/uweb/raw/master/redirect.html#)
[yzuu](https://hub.yzuu.cf/torappinfo/uweb/raw/master/redirect.html#)
#### Mirrors (for all versions)
<p>
<a href="i:0mi:5h:https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html">试验1</a>
<a href="i:0m?:https://gitcode.net/uweb/uweb/-/raw/master/redirect.html">2</a>
<a href="i:0m?:https://raw.gitcode.com/uweb/uweb/raw/master/redirect.html">4</a>
<a href="i:0m?:https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html">5</a>
<a href="i:0mi:5h?format=raw::https://sourceforge.net/p/uwebbrowser/code/ci/master/tree/redirect.html">6</a>
<a href="i:0mi:5h?format=raw::https://rocketgit.com/user/torappinfo/uweb/source/tree/branch/master/blob_download/redirect.html">7</a>
<a href="i:0m?:https://notabug.org/torappinfo/uweb/raw/master/redirect.html">8</a>
<a href="i:0mi:5h:https://git.launchpad.net/uweb/plain/redirect.html">9</a>
<a href="i:0m?:https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html">10</a>
<a href="i:0m?:https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html">11</a>
<a href="i:0m?:https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html">12</a>
<a href="i:0m?:https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html">13</a>
<a href="i:0m?:https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html">14</a>
<a href="i:0mi:5h/xxxx/?path=::https://dev.azure.com/jamesfengcao/1d8bf6c7-7c24-4441-bc5e-9709dcaf37fc/_apis/git/repositories/2a588d9b-f25a-46c0-bb3b-f685c635fcf8/itemsxxxx/redirect.html">15</a>
<a href="i:0mi:5h:https://pagure.io/uweb/raw/master/f/redirect.html">16</a>
<a href="i:0m?:https://bitbucket.org/torappinfo/torappinfo.bitbucket.io/raw/master/redirect.html">17</a>
<a href="i:0mi:5h:https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html">18</a>
<a href="i:0m?:https://dagshub.com/torappinfo/uweb/raw/master/redirect.html">19</a>
<a href="i:0mi:5h:https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html">20</a>
<a href="i:0m?:https://gitly.org/jamesfengcao/uweb/raw/master/redirect.html">gitly</a>
<a href="i:0m?:https://gitnet.fr/jamesfengcao/uweb/raw/branch/master/redirect.html">gitnet</a>
<a href="i:0m?:https://repo.palemoon.org/jamesfengcao/uweb/raw/branch/master/redirect.html ">palemoon</a>
<a href="i:0m?:https://tildegit.org/jamesfengcao/uweb/raw/branch/master/redirect.html">tilde</a>
<a href="i:0m?:https://git.dotclear.org/jamesfengcao/uweb/raw/branch/master/redirect.html">dotclear</a>
<a href="i:0m?:https://git.minetest.land/jamesfengcao/uweb/raw/branch/master/redirect.html ">minetest</a>
<a href="i:0m?:https://forge.chapril.org/jamesfengcao/uweb/raw/branch/master/redirect.html">chapril</a>
<a href="i:0m?:https://git.cryto.net/jamesfengcao/uweb/raw/branch/master/redirect.html">cryto</a>
<a href="i:0m?:https://code.antopie.org/jamesfengcao/uweb/raw/branch/master/redirect.html">antopie</a>
</p>
#### Repositories
[gitlab](https://gitlab.com/jamesfengcao/uweb)
[sourceforge](https://sourceforge.net/p/uwebbrowser)
[github](https://github.com/torappinfo/uweb)
[bitbucket](https://bitbucket.org/torappinfo/torappinfo.bitbucket.io)
[codeberg](https://codeberg.org/jamesfengcao/pages/src/branch/master/README.md)
[gitee](https://gitee.com/jamesfengcao/uweb)
[gitcode](https://gitcode.com/uweb/uweb/overview)
[gitcode](https://gitcode.net/uweb/uweb)
[atomgit](https://atomgit.com/jamesfengcao/uweb)
[gitlink](https://www.gitlink.org.cn/jamesfengcao/uweb)
[gitgud](https://gitgud.io/jamesfengcao/uweb)
[disroot](https://git.disroot.org/torappinfo/uweb/src/branch/master/README.md)
[gitea](https://gitea.com/torappinfo/uweb/src/branch/master/README.md)
[notabug](https://notabug.org/torappinfo/uweb/src/master/README.md)
[framagit](https://framagit.org/torappinfo/uweb)
[agit](https://agit.ai/jamesfengcao/uweb/src/branch/master/README.md)
[froggi](https://git.froggi.es/jamesfengcao/uweb/src/branch/master/README.md)
[gitdab](https://gitdab.com/jamesfengcao/uweb/src/branch/master/README.md)
[pagure](https://pagure.io/uweb/blob/master/f/README.md)
[dagshub](https://dagshub.com/torappinfo/uweb/src/master/README.md)
[gitnet](https://gitnet.fr/jamesfengcao/uweb/src/branch/master/README.md)
[palemoon](https://repo.palemoon.org/jamesfengcao/uweb/src/branch/master/README.md)
[tilde](https://tildegit.org/jamesfengcao/uweb/src/branch/master/README.md)
[dotclear](https://git.dotclear.org/jamesfengcao/uweb/src/branch/master/README.md)
[mimetest](https://git.minetest.land/jamesfengcao/uweb/src/branch/master/README.md)
[chapril](https://forge.chapril.org/jamesfengcao/uweb/src/branch/master/README.md)
[cryto](https://git.cryto.net/jamesfengcao/uweb/src/branch/master/README.md)
[antopie](https://code.antopie.org/jamesfengcao/uweb/src/master/README.md)

169
en/mirrors/index.html Normal file
View File

@ -0,0 +1,169 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title></title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<style>a+br{display:none;}</style>
<h4 id="mirrors-for-version-1040">Mirrors (for version 1040+)</h4>
<p><a href="https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html#">gitee</a><br>
<a href="https://gitcode.net/uweb/uweb/-/raw/master/redirect.html#">gitcode</a><br>
<a href="https://raw.gitcode.com/uweb/uweb/raw/master/redirect.html#">gitcode</a><br>
<a href="https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html#">gitea</a><br>
<a href="https://notabug.org/torappinfo/uweb/raw/master/redirect.html#">notabug</a><br>
<a href="https://git.launchpad.net/uweb/plain/redirect.html#">launchpad</a><br>
<a href="https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html#">framagit</a><br>
<a href="https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html#">agit</a><br>
<a href="https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html#">froggi</a><br>
<a href="https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html#">disroot</a><br>
<a href="https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html">gitdab</a><br>
<a href="https://pagure.io/uweb/raw/master/f/redirect.html#">pagure</a><br>
<a href="https://bitbucket.org/torappinfo/torappinfo.bitbucket.io/raw/master/redirect.html#">bitbucket</a><br>
<a href="https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html#">jsdelivr</a><br>
<a href="https://dagshub.com/torappinfo/uweb/raw/master/redirect.html#">dagshub</a><br>
<a href="https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html#">gitgud</a><br>
<a href="https://gitly.org/jamesfengcao/uweb/raw/master/redirect.html#">gitly</a><br>
<a href="https://gitnet.fr/jamesfengcao/uweb/raw/branch/master/redirect.html#">gitnet</a><br>
<a href="https://repo.palemoon.org/jamesfengcao/uweb/raw/branch/master/redirect.html#">palemoon</a><br>
<a href="https://tildegit.org/jamesfengcao/uweb/raw/branch/master/redirect.html#">tilde</a><br>
<a href="https://git.dotclear.org/jamesfengcao/uweb/raw/branch/master/redirect.html#">dotclear</a><br>
<a href="https://git.minetest.land/jamesfengcao/uweb/raw/branch/master/redirect.html#">mimetest</a><br>
<a href="https://forge.chapril.org/jamesfengcao/uweb/raw/branch/master/redirect.html#">chapril</a><br>
<a href="https://git.cryto.net/jamesfengcao/uweb/raw/branch/master/redirect.html#">cryto</a><br>
<a href="https://code.antopie.org/jamesfengcao/uweb/raw/branch/master/redirect.html#">antopie</a><br>
<a href="https://bgithub.xyz/torappinfo/uweb/raw/master/redirect.html#">bgithub</a><br>
<a href="https://hub.nuaa.cf/torappinfo/uweb/raw/master/redirect.html#">nuaa</a><br>
<a href="https://hub.yzuu.cf/torappinfo/uweb/raw/master/redirect.html#">yzuu</a></p>
<h4 id="mirrors-for-all-versions">Mirrors (for all versions)</h4>
<p>
<a href="i:0mi:5h:https://gitee.com/jamesfengcao/uweb/raw/master/redirect.html">试验1</a>
<a href="i:0m?:https://gitcode.net/uweb/uweb/-/raw/master/redirect.html">2</a>
<a href="i:0m?:https://raw.gitcode.com/uweb/uweb/raw/master/redirect.html">4</a>
<a href="i:0m?:https://gitea.com/torappinfo/uweb/raw/branch/master/redirect.html">5</a>
<a href="i:0mi:5h?format=raw::https://sourceforge.net/p/uwebbrowser/code/ci/master/tree/redirect.html">6</a>
<a href="i:0mi:5h?format=raw::https://rocketgit.com/user/torappinfo/uweb/source/tree/branch/master/blob_download/redirect.html">7</a>
<a href="i:0m?:https://notabug.org/torappinfo/uweb/raw/master/redirect.html">8</a>
<a href="i:0mi:5h:https://git.launchpad.net/uweb/plain/redirect.html">9</a>
<a href="i:0m?:https://framagit.org/torappinfo/uweb/-/raw/master/redirect.html">10</a>
<a href="i:0m?:https://agit.ai/jamesfengcao/uweb/raw/branch/master/redirect.html">11</a>
<a href="i:0m?:https://git.froggi.es/jamesfengcao/uweb/raw/branch/master/redirect.html">12</a>
<a href="i:0m?:https://git.disroot.org/torappinfo/uweb/raw/branch/master/redirect.html">13</a>
<a href="i:0m?:https://gitdab.com/jamesfengcao/uweb/raw/branch/master/redirect.html">14</a>
<a href="i:0mi:5h/xxxx/?path=::https://dev.azure.com/jamesfengcao/1d8bf6c7-7c24-4441-bc5e-9709dcaf37fc/_apis/git/repositories/2a588d9b-f25a-46c0-bb3b-f685c635fcf8/itemsxxxx/redirect.html">15</a>
<a href="i:0mi:5h:https://pagure.io/uweb/raw/master/f/redirect.html">16</a>
<a href="i:0m?:https://bitbucket.org/torappinfo/torappinfo.bitbucket.io/raw/master/redirect.html">17</a>
<a href="i:0mi:5h:https://fastly.jsdelivr.net/gh/torappinfo/uweb/redirect.html">18</a>
<a href="i:0m?:https://dagshub.com/torappinfo/uweb/raw/master/redirect.html">19</a>
<a href="i:0mi:5h:https://gitgud.io/jamesfengcao/uweb/-/raw/master/redirect.html">20</a>
<a href="i:0m?:https://gitly.org/jamesfengcao/uweb/raw/master/redirect.html">gitly</a>
<a href="i:0m?:https://gitnet.fr/jamesfengcao/uweb/raw/branch/master/redirect.html">gitnet</a>
<a href="i:0m?:https://repo.palemoon.org/jamesfengcao/uweb/raw/branch/master/redirect.html ">palemoon</a>
<a href="i:0m?:https://tildegit.org/jamesfengcao/uweb/raw/branch/master/redirect.html">tilde</a>
<a href="i:0m?:https://git.dotclear.org/jamesfengcao/uweb/raw/branch/master/redirect.html">dotclear</a>
<a href="i:0m?:https://git.minetest.land/jamesfengcao/uweb/raw/branch/master/redirect.html ">minetest</a>
<a href="i:0m?:https://forge.chapril.org/jamesfengcao/uweb/raw/branch/master/redirect.html">chapril</a>
<a href="i:0m?:https://git.cryto.net/jamesfengcao/uweb/raw/branch/master/redirect.html">cryto</a>
<a href="i:0m?:https://code.antopie.org/jamesfengcao/uweb/raw/branch/master/redirect.html">antopie</a>
</p>
<h4 id="repositories">Repositories</h4>
<p><a href="https://gitlab.com/jamesfengcao/uweb">gitlab</a><br>
<a href="https://sourceforge.net/p/uwebbrowser">sourceforge</a><br>
<a href="https://github.com/torappinfo/uweb">github</a><br>
<a href="https://bitbucket.org/torappinfo/torappinfo.bitbucket.io">bitbucket</a><br>
<a href="https://codeberg.org/jamesfengcao/pages/src/branch/master/README.md">codeberg</a><br>
<a href="https://gitee.com/jamesfengcao/uweb">gitee</a><br>
<a href="https://gitcode.com/uweb/uweb/overview">gitcode</a><br>
<a href="https://gitcode.net/uweb/uweb">gitcode</a><br>
<a href="https://atomgit.com/jamesfengcao/uweb">atomgit</a><br>
<a href="https://www.gitlink.org.cn/jamesfengcao/uweb">gitlink</a><br>
<a href="https://gitgud.io/jamesfengcao/uweb">gitgud</a><br>
<a href="https://git.disroot.org/torappinfo/uweb/src/branch/master/README.md">disroot</a><br>
<a href="https://gitea.com/torappinfo/uweb/src/branch/master/README.md">gitea</a><br>
<a href="https://notabug.org/torappinfo/uweb/src/master/README.md">notabug</a><br>
<a href="https://framagit.org/torappinfo/uweb">framagit</a><br>
<a href="https://agit.ai/jamesfengcao/uweb/src/branch/master/README.md">agit</a><br>
<a href="https://git.froggi.es/jamesfengcao/uweb/src/branch/master/README.md">froggi</a><br>
<a href="https://gitdab.com/jamesfengcao/uweb/src/branch/master/README.md">gitdab</a><br>
<a href="https://pagure.io/uweb/blob/master/f/README.md">pagure</a><br>
<a href="https://dagshub.com/torappinfo/uweb/src/master/README.md">dagshub</a><br>
<a href="https://gitnet.fr/jamesfengcao/uweb/src/branch/master/README.md">gitnet</a><br>
<a href="https://repo.palemoon.org/jamesfengcao/uweb/src/branch/master/README.md">palemoon</a><br>
<a href="https://tildegit.org/jamesfengcao/uweb/src/branch/master/README.md">tilde</a><br>
<a href="https://git.dotclear.org/jamesfengcao/uweb/src/branch/master/README.md">dotclear</a><br>
<a href="https://git.minetest.land/jamesfengcao/uweb/src/branch/master/README.md">mimetest</a><br>
<a href="https://forge.chapril.org/jamesfengcao/uweb/src/branch/master/README.md">chapril</a><br>
<a href="https://git.cryto.net/jamesfengcao/uweb/src/branch/master/README.md">cryto</a><br>
<a href="https://code.antopie.org/jamesfengcao/uweb/src/master/README.md">antopie</a></p>
</div>
<p>Last Modified: 6 April 2024<br>
more details on global redirection url<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -0,0 +1,96 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Offline resources</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Offline resources
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>Offline resources locate in the folder &quot;sitecache&quot;. With the option &quot;use offline resources&quot; enabled, the corresponding files in &quot;sitecache/[domain name]/[full path including filename, the url path part]&quot; are loaded first before reaching the network.</p>
<h4 id="serverless-local-sites">Serverless local sites</h4>
<p><a href="i:01Extract webapp:i:0bsitecache/local/:">Click to install url service that extracts web apps to the folder &quot;sitecache/local/&quot;</a>: support web extensions (.crx for chrome &amp; .xpi for firefox).</p>
<p>Any folder under &quot;sitecache&quot; can be visited as a local site. Urls with search queries can be dynamically processed by the js/wasm code in the local file.</p>
<p>PWAs (Progresssive Web Applications) and some web extensions (.crx for chrome &amp; .xpi for firefox) are just packaged websites. Ex. the &quot;kiwix&quot; extension can be extracted to the folder &quot;sitecache/local/kiwix&quot;<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, then the kiwix extension can be accessed via url &quot;https://local/kiwix/www/index.html#&quot; in the browser.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>the folder name &quot;local&quot; is used as the domain name in the url.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
</div>
<p>Last Modified: 8 April 2024<br>
fix typos<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,93 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>Text selection</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Text selection
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
<li><a href="../tags/termux">termux</a> </li>
<li><a href="../tags/ssh">ssh</a> </li>
<li><a href="../tags/PC">PC</a> </li>
<li><a href="../tags/clipboard">clipboard</a> </li>
<li><a href="../tags/Windows">Windows</a> </li>
</ul>
<p>Click the following links to install menus for long pressing the button &quot;link&quot;:<br>
<a href="i:0gdefault.select::google Translate:/uweb:printf 'https://translate.google.com/?sl=auto&tl=en&op=translate&text=';cat|tr ' ' '%2B'%0A">google Translate</a></p>
<p><a href="i:0gdefault.select::bing Translate:/uweb:printf 'https://cn.bing.com/translator/?from=&to=en&text=';cat|tr ' ' '%2B'%0A">bing translate</a></p>
<p><a href="i:0gdefault.select::deepL:/uweb:print 'https://www.deepl.com/translator {function tE(el,t){var e=new Event(t);el.dispatchEvent(e);}let s=document.querySelector(%22textarea%22);s.value=%60';cat;print '%60;tE(s,%22change%22)}'%0A">deepL</a></p>
<p>The file &quot;default.select&quot; defines menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:<br>
[Name]:[mimetype]:[command line]</p>
<p>[mimetype] specifies input/output for [command line].<br>
It formats as &quot;[input mimetype]/[output mimetype]&quot;.<br>
[input mimetype] can be the following:</p>
<ul>
<li>&quot;html&quot;: rich text</li>
<li>&quot;&quot; (empty): text</li>
<li>&quot;.js&quot; file name under configuration folder. The js file is evaluated and its return value is passed to [command line] as standard input.</li>
</ul>
<p>[output mimetype] is same as the one defined in &quot;<a href="../searchurl/cmds.html">Commands</a>&quot;.</p>
<ul>
<li>regular mimetype such as &quot;text/html&quot;: output as the mimetype</li>
<li>&quot;uweb&quot;: output as a link</li>
<li>&quot;termux&quot;: output as termux command</li>
</ul>
<p><a target="_self" href="i:0hcheck.js:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/zh/searchurl/txt/check.js">checked.js</a>: Evaluate checked.js and return value as standard input for the command line. For any file url ending with &quot;/&quot;, optionally append &quot;?[prefix][<em>[postfix]]&quot;. For example, &quot;file:///sdcard/?</em>.png&quot; lists all .png files under the folder &quot;/sdcard&quot;. Select files and process them with checked.js(such as &quot;copy to PC&quot; as the later example).</p>
<p>default.select sample file:<br>
copy2addressbar:uweb:printf i:15;cat<br>
copy2PCClipboard::ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 xsel -i&quot;<br>
richtext2PCClipboard:html:ssh [user:password]@192.168.2.102 &quot;DISPLAY=:0 xsel -i&quot;<br>
copyFiles:checked.js:while read fname;do scp $fname [user:password]@192.168.2.102:Downloads/.; done</p>
<p>Here we assume that the user PC has IP address as &quot;192.168.2.102&quot;.<br>
To use ssh or scp, users need to install uweb compatible Termux provided on the <a href="../index.html">uweb apk download page</a>, and install openssl under termux (apt install openssl).<br>
PCs need command &quot;xsel&quot; available to operate on copy/paste.</p>
</div>
</body>
</html>

135
en/readme/index.html Normal file
View File

@ -0,0 +1,135 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title></title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<script>function notRepo(){let u=location.href.replace(/#$/, '');return u.endsWith('index.html')||u.endsWith('readme/');}</script>
<h3 id="uweb-browser-unlimited-power">Uweb browser: unlimited power</h3>
<p><a href="README.zh-Hans.md" onclick="if(notRepo()){location='../../zh/readme/index.html#';return false;}">中文</a></p>
<p><a href="https://www.amazon.com/TorApp-Info-uweb-browser-for-geeks/dp/B098QPR6N5">Amazon appstore</a><br>
<a href="https://galaxy.store/uweb">Galaxy.Store</a><br>
<a href="en/download.md" onclick="if(notRepo()){location='../../en/changelog/index.html#';return false;}">Downloads</a></p>
<p><a href="https://torappinfo.github.io/uweb/en/">Uweb browser: downloads, plugins and tips</a><br>
(Mirrors: <a href="https://jamesfengcao.gitlab.io/uweb/en/">gitlab</a> <a href="https://jamesfengcao.codeberg.page/en/">codeberg</a> <a href="https://repo.or.cz/uweb.git/blob_plain/HEAD:/en/index.html">repo</a> <a href="https://uweb.4everland.app/en/">4everland</a> <a href="https://uweb.on-fleek.app/en/">fleek</a> <a href="https://muweb.cyclic.app/en/">cyclic</a> <a href="https://uwebzh.netlify.app/en/">netlify</a> <a href="https://uweb.surge.sh/en/">surge</a> <a href="https://uwebbrowser-t27o4.kinsta.page">kinsta</a> <a href="https://uweb.zeabur.app/en/">zeabur</a> <a href="https://posh-crab-23.deno.dev/en/">deno</a> <a href="https://torappinfo.bitbucket.io/en/">bitbucket</a> <a href="https://muweb.pages.dev/en/">pages</a> <a href="https://uweb.vercel.app/en/">vercel</a> <a href="https://uweb.onrender.com/en/">render</a> <a href="https://uweb.glitch.me/en/">glitch</a> <a href="en/mirrors.md" onclick="if(notRepo()){location='../../en/mirrors/index.html#';return false;}">More...</a>)</p>
<ul>
<li>Powerful: any native functionality with html5 enhancement and still secure; any urls to host website; javascript and shell scripting for general processing; piping between console and GUI and more with Termux.</li>
<li>Customizable: user-defined menus, (new) buttons and gestures for user agents, bookmarklets, url services, shell commands, internal functionality links and text processing etc.</li>
<li>Convenient: Any AI chatbot/book (pdf/djvu)/dictionary (mdict)/txt/command line/app/webapp (web extensions) can be search engine.</li>
<li>Tiny: less than 250k.</li>
<li>Fast: run fast, even with thousands of user provided css/scripts/htmls.</li>
<li>Efficient: less touches, one click to reach any number of search engines without repeated input; automate online services.</li>
<li>URL bar command line support (&quot;!&quot; and .js file as command).</li>
<li>Site-specific JS/CSS/HTML/preprocessing.</li>
<li>Online play/preview/preprocess for downloadable resources.</li>
<li>Multiple type profiles: switch any data including website logins, user configurations orthogonally.</li>
<li>Supports enhanced user &quot;hosts&quot; file. Empty IP address to lift all server-imposed limitations.</li>
<li>Website test automation scripting. crontab support (alarm clock and more).</li>
</ul>
<h4 id="main-features">Main features</h4>
<p>Custom paper size PDF export and long vector screenshot, TTS, text reflow, resource sniffer, translation, reader's mode, user-defined url redirection, webdav/http backup &amp; restore, auto next page, sending/receiving msg/file(s), site config (UA, no JS, no image, no 3rd party script/resource,active script, global scripts), http(s)/socks proxy, enabling html5 apps for local files (pdf/djvu/epub viewer, mdict dictionary lookup etc.).</p>
<ul>
<li>User-defined global and site-specific CSS and javascript.</li>
<li>Bookmarklets (works for CSP sites and with option to auto apply to similar sites)</li>
<li>AD blocking (block whole root domain trees etc.)</li>
<li>Customization (define extra menus/buttons/gestures with user-defined functionalities)</li>
<li>Support shell scripts, javascript for general processing, other languages (python etc.) are also supported by installing uweb compatible Termux versions.</li>
<li>Serverless local sites: PWA-kind web extension (chrome .crx &amp; firefox .xpi) support.</li>
<li>Piping between console and uweb tabs.</li>
<li>Resizable floating video support.</li>
</ul>
<h4 id="screenshots">Screenshots</h4>
<p><img src="https://i.postimg.cc/rsL9G5N1/home1.png"><br>
<img src="https://i.postimg.cc/9QxJ3Rc2/globalcss.png"><br>
<img src="https://i.postimg.cc/VksDHBQ4/globaljs.png"><br>
<img src="https://i.postimg.cc/HLV3TYLy/longclick.png"><br>
<img src="https://i.postimg.cc/XJ58ysdN/option1.png"><br>
<img src="https://i.postimg.cc/0NFnQT6H/option2.png"></p>
<h4 id="eweb-browserhttpsgithubcomtorappinfoeweb-for-windows-macos-and-linux"><a href="https://github.com/torappinfo/eweb">Eweb browser</a> for Windows, MacOS and Linux</h4>
<p>Eweb is less mature open source browser with the same philosophy of uweb.</p>
<h4 id="help-with-localization">Help with localization</h4>
<p>We encourage everyone to help with localization. The following is how to do.</p>
<ul>
<li>Fork this repository</li>
<li>Copy res/values/strings.xml to path like res/values-%(lang)/, replace %(lang) with <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">the ISO 639-1 language code</a>.</li>
<li>Translate res/values-%(lang)/strings.xml</li>
<li>Translate assets/help_%(lang).html from assets/help_en.html</li>
<li>Make a Pull Request</li>
</ul>
</div>
<p>Last Modified: 19 May 2024<br>
add eweb for Windows, MacOS and Linux<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

111
en/redirect/index.html Normal file
View File

@ -0,0 +1,111 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Resource redirection</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Resource redirection
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
<li><a href="../tags/redirection/index.html#">redirection</a> </li>
</ul>
<p>⚠️<span style="color:red">Redirection forwards cookies</span> with the setting option &quot;Redirect cookies&quot; enabled, so use the options with care.</p>
<h4 id="setting-options-url-redirection-vs-resource-redirection">Setting options: &quot;Url redirection&quot; vs. &quot;Resource redirection&quot;</h4>
<p>&quot;Url redirection&quot; redirects the main/page url only while &quot;Resource redirection&quot; is for all urls in the page.</p>
<h4 id="global-redirection">Global redirection</h4>
<p><a href="i:60/data/data/info.torapp.uweb/files/config.html:https://jamesfengcao.codeberg.page/en/searchurl/config.html">Global redirection</a> is enabled with the setting option &quot;Resource redirection&quot; or both &quot;Url redirection&quot; and &quot;Redirect cookies&quot;.</p>
<p>When a valid global redirection url is set, the &quot;default.redirect&quot; has no effect, and any url resource is fetched with the new url by appending the original url to the global redirection url.</p>
<ul>
<li>
<p>If the global redirection url ends with '/', '?', or '=', then the resource is fetched with by the url &quot;[global redirection url] + [url]&quot;. For example, &quot;https://domain.com/pathXXX/https://cnn.com&quot;.</p>
</li>
<li>
<p>(to provide more options to users) If the global redirection url does not end with '/', '?' or '=', it means the global redirection url is naked. then the resource is fetched with by the url &quot;[global redirection url] + '/'+ [scheme]+ '/' + [url without scheme]&quot;. For example, when the global redirection url is &quot;https://domain.com/pathXXX&quot;, the real url to visit &quot;https://cnn.com&quot; is &quot;https://domain.com/pathXXX/https/cnn.com&quot;.</p>
</li>
</ul>
<h4 id="defaultredirect-valid-only-without-global-redirection-url">&quot;default.redirect&quot; (valid only without global redirection url)</h4>
<p>Click the following links to append mirrors to the file &quot;default.redirect&quot;:<br>
<a target="_self" href="i:0gdefault.redirect:../../zh/searchurl/txt/redirect.cfg">google recaptcha mirror</a></p>
<p>Each line of the file &quot;default.redirect&quot; has the following format:<br>
[domain name]:[regular expression]:[replacement expression]</p>
<p>in which &quot;[regular expression]&quot; is as defined by java language, and cannot have &quot;:&quot; inside; if empty, it defaults to be same as &quot;[domain name]&quot;.</p>
<h5 id="ways-to-enable-domain-redirection">Ways to enable domain redirection:</h5>
<ul>
<li><a href="../urls/index.html#">Long pressing the image button</a></li>
<li>Long pressing the setting button, enable the option &quot;url redirection&quot;.</li>
<li>Long pressing the setting button, enable the option &quot;Resource redirection&quot;.</li>
</ul>
</div>
<p>Last Modified: 7 April 2024<br>
more details on global redirection url<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

110
en/rjs/index.html Normal file
View File

@ -0,0 +1,110 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Execute javascript codes</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Execute javascript codes
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p><a href="../sitejs/index.html#">javascript for domains</a><br>
<a href="../globalcss/index.html#">Earliest loaded global javascript</a> files locates in the subfolder &quot;css&quot; of app private folder.</p>
<p><b>Global javascript</b> files locates in the subfolder &quot;js&quot; of app private folder. Long press button [☰] to configure. Click the following links to install:<br>
<a target="_self" href="i:0hjs/savePassword.js:../../zh/searchurl/txt/passwdsave.js">Save password</a><br>
<a target="_self" href="i:0hjs/instantPage.js:https://fastly.jsdelivr.net/npm/instant.page">Instant page</a></p>
<p><b>large size javascript code</b> can be installed to the folder &quot;bookmarklet&quot; (long pressing button &quot;js&quot; to popup menu):<br>
<a target="_self" href="i:0hbookmarklet/!googleTranslate.js:https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit:%0A{let d=document,b=d.body,v=d.createElement('div');v.id='google_translate_element';v.style='position:fixed;bottom:10px;right:10px;cursor:pointer;z-index:9999';b.insertBefore(v,b.firstChild);function googleTranslateElementInit(){new google.translate.TranslateElement({layout:google.translate.TranslateElement.InlineLayout.SIMPLE,multilanguagePage:true,pageLanguage:'auto',includedLanguages:'zh-CN,zh-TW,en,ko,ja'},'google_translate_element');}}">google translation</a></p>
<p><a target="_self" href='i:0hbookmarklet/eruda.js:https://fastly.jsdelivr.net/npm/eruda:%0Aeruda.init()'>Eruda</a><br>
<a target="_self" href="i:0hbookmarklet/performance.js:https://fastly.jsdelivr.net/gh/micmro/performance-bookmarklet/dist/performanceBookmarklet.min.js">Performance</a></p>
<p>Note: Bookmarklets whose names begin with &quot;!&quot; are allowed to load remote js on CSP (Content Security Policy) sites.</p>
<p><b>Remote javascript</b> is defined in default.rjs. Click the following link to install. (<b>Force exit and re-launch the app</b>, then long press the &quot;search&quot; button to popup the menu.)</p>
<p><a href="i:04Selection to sentence:;let g='sentence';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);">Selection to sentence:;let g='sentence';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);</a></p>
<p><a href="i:04Selection to line:;let g='line';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);">Selection to line:;let g='line';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);</a></p>
<p><a href="i:04Selection to paragraph:;let g='paragraph';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);">Selection to paragraph:;let g='paragraph';getSelection().modify('move','forward',g);getSelection().modify('extend','backward',g);</a></p>
<p><a href="i:04markdown:['https://cdn.jsdelivr.net/npm/showdown/dist/showdown.min.js'];var d=document;var md=d.querySelector('pre').innerText;var c=new showdown.Converter({emoji:true,underline:true,});c.setFlavor('github');d.body.innerHTML=c.makeHtml(md);d.title=d.title||d.body.firstElementChild.innerText.trim();">markdown:['https://cdn.jsdelivr.net/npm/showdown/dist/showdown.min.js'];var d=document;var md=d.querySelector('pre').innerText;var c=new showdown.Converter({emoji:true,underline:true,});c.setFlavor('github');d.body.innerHTML=c.makeHtml(md);d.title=d.title||d.body.firstElementChild.innerText.trim();</a></p>
<p><a href="i:04mermaid:;loadModuleJS(`import mermaid from 'https://unpkg.com/mermaid/dist/mermaid.esm.min.mjs';mermaid.initialize({startOnLoad:true});`)">mermaid:;loadModuleJS(<code>import mermaid from 'https://unpkg.com/mermaid/dist/mermaid.esm.min.mjs';mermaid.initialize({startOnLoad:true});</code>)</a></p>
<p><a href="i:04mathjax:['https://fastly.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js']">mathjax:['https://fastly.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js']</a></p>
<p><a href="i:04New tab to open links:;let d=document;b=d.createElement('base');b.setAttribute('target','_blank');d.head.appendChild(b)">New tab to open links:;let d=document;b=d.createElement('base');b.setAttribute('target','_blank');d.head.appendChild(b)</a></p>
<p><a href="i:04Site search:;open('i:15site:' + location.hostname)">Site search:;open('i:15site:' + location.hostname)</a></p>
<p><a href="i:04Spell check:;let t=document.getElementsByTagName('textarea');let v=t[0].spellcheck;if(v==null)v=false;t[0].spellcheck=!v">Spell check:;let t=document.getElementsByTagName('textarea');let v=t[0].spellcheck;if(v==null)v=false;t[0].spellcheck=!v</a></p>
<p>Remote script configuration file &quot;default.rjs&quot; whose lines have the following format:<br>
[script name]:[javascript code to return url arrays]</p>
<h4 id="activated-scripts">Activated scripts</h4>
<p>Activate either local (bookmarklets) or remote js to execute the code on the similar sites with option &quot;Activate user script&quot;.</p>
<p>Since activated scripts use internal mechanism of <a href="../links/index.html#">&quot;i:0m&quot; urls</a>, the script itself cannot have <span style="color:red">'H', '?' or '/'</span> as its very first character.</p>
<h4 id="allow-remote-js-on-csp-content-security-policy-sites">Allow remote js on CSP (Content Security Policy) sites</h4>
<p>All remote js (default.rjs) are allowed to execute on CSP sites. Local js files without remote resource access work fine when under the folder &quot;bookmarklet&quot;, others needs to be refered in default.rjs as http urls such as &quot;https://local/...&quot; (<a href="../html5/index.html#">html5</a> or <a href="../offlinecache/index.html#">offline cache</a>) .</p>
</div>
<p>Last Modified: 8 April 2024<br>
fix typos<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

289
en/search/index.html Normal file
View File

@ -0,0 +1,289 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Search engines</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Search engines
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<p>Clicking the following links to install search engines with <a href="../index.html#">uweb browser</a>.</p>
<p>AI:<br>
<a href="i:00andi:https://andisearch.com/?q=">andi:https://andisearch.com/?q=</a></p>
<p><a href="i:00phind:https://phind-ai.com/search?q=">phind:https://phind-ai.com/search?q=</a></p>
<p><a href="i:00perplexity:https://www.perplexity.ai/?q=">perplexity:https://www.perplexity.ai/?q=</a></p>
<p><a href="i:00youChat:https://you.com/search?tbm=youchat&q=">youChat:https://you.com/search?tbm=youchat&amp;q=</a></p>
<p><a href="i:00youWrite:https://you.com/search?tbm=youwrite&q=">youWrite:https://you.com/search?tbm=youwrite&amp;q=</a></p>
<p><a href="i:00youImagine:https://you.com/search?tbm=imagine&q=">youImagine:https://you.com/search?tbm=imagine&amp;q=</a></p>
<p><a href="i:00you:https://you.com/search?q=">you:https://you.com/search?q=</a></p>
<p><a href="i:00medisearch:https://medisearch.io/results/">medisearch:https://medisearch.io/results/</a></p>
<p><a href="i:00explorer:https://explorer.globe.engineer/?q=">explorer:https://explorer.globe.engineer/?q=</a></p>
<p><a href="i:00consensus:https://consensus.app/results/?synthesize=on&q=">consensus:https://consensus.app/results/?synthesize=on&amp;q=</a></p>
<p><a href="i:00yoursearch:https://app.yoursearch.ai/?q=">yoursearch:https://app.yoursearch.ai/?q=</a></p>
<p><a href="i:00chatGPT:i:0/js/hash2textarea.js:https://chat.openai.com/#%s">chatGPT:i:0/js/hash2textarea.js:https://chat.openai.com/#%s</a></p>
<p><a href="i:00lepton:i:0/js/hash2input.js:https://search.lepton.run/#%s">lepton:i:0/js/hash2input.js:https://search.lepton.run/#%s</a></p>
<p>Recommended engines (click or append any of the following to the file &quot;home5.search&quot;)<br>
<a href="i:00Engines:i:40%s_00">Engines:i:40%s_00</a></p>
<p><a href="i:00bing image:http://bing.com/images/search?q=">bing image:http://bing.com/images/search?q=</a></p>
<p><a href="i:00google image:http://www.google.com/images?as_q=">google image:http://www.google.com/images?as_q=</a></p>
<p><a href="i:00flickr:http://www.flickr.com/photos/tags/">flickr:http://www.flickr.com/photos/tags/</a></p>
<p><a href="i:00Yandex image:https://yandex.com/images/search?text=">Yandex image:https://yandex.com/images/search?text=</a></p>
<p><a href="i:00wiki:https://en.wikipedia.org/wiki/Special:Search?search=">wiki:https://en.wikipedia.org/wiki/Special:Search?search=</a></p>
<p><a href="i:00wikipedia:http://en.wikipedia.org/?search=">wikipedia:http://en.wikipedia.org/?search=</a></p>
<p><a href="i:00wikifull:http://en.wikipedia.org/wiki/Special:Search?fulltext=Search&search=">wikifull:http://en.wikipedia.org/wiki/Special:Search?fulltext=Search&amp;search=</a></p>
<p><a href="i:00Youtube:https://www.youtube.com/results?search_query=">Youtube:https://www.youtube.com/results?search_query=</a></p>
<p><a href="i:00eBay:https://www.ebay.com/sch/i.html?_nkw=">eBay:https://www.ebay.com/sch/i.html?_nkw=</a></p>
<p><a href="i:00Quora:https://www.quora.com/search?q=">Quora:https://www.quora.com/search?q=</a></p>
<p><a href="i:00Pinterest:https://www.pinterest.com/search/pins/?q=">Pinterest:https://www.pinterest.com/search/pins/?q=</a></p>
<p><a href="i:00LinkedIn:https://www.linkedin.com/search/results/all/?keywords=">LinkedIn:https://www.linkedin.com/search/results/all/?keywords=</a></p>
<p><a href="i:00Netflix:https://www.netflix.com/search?q=">Netflix:https://www.netflix.com/search?q=</a></p>
<p><a href="i:00Spotify:https://open.spotify.com/search/">Spotify:https://open.spotify.com/search/</a></p>
<p><a href="i:00Medium:https://medium.com/search?q=">Medium:https://medium.com/search?q=</a></p>
<p><a href="i:00TripAdvisor:https://www.tripadvisor.com/Search?q=">TripAdvisor:https://www.tripadvisor.com/Search?q=</a></p>
<p><a href="i:00incaption:https://incaptions.com/">incaption:https://incaptions.com/</a></p>
<p><a href="i:00answer:http://mobile.answers.com/">answer:http://mobile.answers.com/</a></p>
<p><a href="i:00twitter:https://twitter.com/search?q=">twitter:https://twitter.com/search?q=</a></p>
<p><a href="i:00Facebook:https://www.facebook.com/search/str/%s/keywords_search">Facebook:https://www.facebook.com/search/str/%s/keywords_search</a></p>
<p><a href="i:00Instagram:https://www.instagram.com/explore/tags/%s/">Instagram:https://www.instagram.com/explore/tags/%s/</a></p>
<p><a href="i:00social-search:https://www.social-searcher.com/social-buzz/?q5=">social-search:https://www.social-searcher.com/social-buzz/?q5=</a></p>
<p><a href="i:00reddit:http://reddit.com/search?q=">reddit:http://reddit.com/search?q=</a></p>
<p><a href="i:00boardreader:https://boardreader.com/s/%s.html">boardreader:https://boardreader.com/s/%s.html</a></p>
<p><a href="i:00bingvideo:https://www.bing.com/videos/search?q=">bingvideo:https://www.bing.com/videos/search?q=</a></p>
<p><a href="i:00vsearch:https://www.vsearch.me/s?q=">vsearch:https://www.vsearch.me/s?q=</a></p>
<p><a href="i:00crowdview:https://crowdview.ai/search?q=">crowdview:https://crowdview.ai/search?q=</a></p>
<p><a href="i:00groups:http://groups.google.com/groups/search?q=">groups:http://groups.google.com/groups/search?q=</a></p>
<p><a href="i:00wolfram:https://www.wolframalpha.com/input/?i=">wolfram:https://www.wolframalpha.com/input/?i=</a></p>
<p><a href="i:00fxsolver:https://www.fxsolver.com/browse/?q=">fxsolver:https://www.fxsolver.com/browse/?q=</a></p>
<p><a href="i:00book_google:https://google.com/search?q=%22parent+directory%22+pdf+OR+epub+OR+DjVU+OR+xps+%22%s%22+-html+-htm+-shtml+-phtml+-php+-buy+-aspx+-jsp+-asp+-cgi+-pdf+-ftp+-unknownsecret&num=100&filter=0">book_google:https://google.com/search?q=%22parent+directory%22+pdf+OR+epub+OR+DjVU+OR+xps+%22%s%22+-html+-htm+-shtml+-phtml+-php+-buy+-aspx+-jsp+-asp+-cgi+-pdf+-ftp+-unknownsecret&amp;num=100&amp;filter=0</a></p>
<p><a href="i:00annas-archive:https://annas-archive.org/search?q=">annas-archive:https://annas-archive.org/search?q=</a></p>
<p><a href="i:00libgen:http://gen.lib.rus.ec/search.php?req=">libgen:http://gen.lib.rus.ec/search.php?req=</a></p>
<p><a href="i:00google_file:https://google.com/search?q=intitle:index.of+%22parent+directory%22+">google_file:https://google.com/search?q=intitle:index.of+%22parent+directory%22+</a></p>
<p><a href="i:00apkcombo:https://apkcombo.com/search/">apkcombo:https://apkcombo.com/search/</a></p>
<p>Note: "Engines" needs file "engine.search"whose format is same as "home.search" except that the keyword part of url must be denoted with "%s". Pressing the right arrow button on the search result page will automatically query with next engine in the file.</p>
<p>Common engines:<br>
<a href="i:00google:https://google.com/search?q=">google:https://google.com/search?q=</a>
<p><a href="i:00bing:http://www.bing.com/search?q=">bing:http://www.bing.com/search?q=</a></p>
<p><a href="i:00exa:https://exa.ai/search?c=all&q=">exa:https://exa.ai/search?c=all&amp;q=</a></p>
<p><a href="i:00marginalia:https://search.marginalia.nu/search?query=">marginalia:https://search.marginalia.nu/search?query=</a></p>
<p><a href="i:00mojeek:https://www.mojeek.com/search?q=">mojeek:https://www.mojeek.com/search?q=</a></p>
<p><a href="i:00rightdao:https://rightdao.com/search?q=">rightdao:https://rightdao.com/search?q=</a></p>
<p><a href="i:00alexandria:https://www.alexandria.org/?q=">alexandria:https://www.alexandria.org/?q=</a></p>
<p><a href="i:00yep:https://yep.com/web?q=">yep:https://yep.com/web?q=</a></p>
<p><a href="i:00seznam:https://search.seznam.cz/?q=">seznam:https://search.seznam.cz/?q=</a></p>
<p><a href="i:00metager:https://metager.org/meta/meta.ger3?eingabe=">metager:https://metager.org/meta/meta.ger3?eingabe=</a></p>
<p><a href="i:00seekr:https://www.seekr.com/search?query=">seekr:https://www.seekr.com/search?query=</a></p>
<p><a href="i:00brave:https://search.brave.com/search?q=">brave:https://search.brave.com/search?q=</a></p>
<p><a href="i:00ellpedia:https://en.ellpedia.com/search?q=">ellpedia:https://en.ellpedia.com/search?q=</a></p>
<p><a href="i:00gemini:https://portal.mozz.us/gemini/geminispace.info/search%3F">gemini:https://portal.mozz.us/gemini/geminispace.info/search%3F</a></p>
<p><a href="i:00waldo:https://www.waldo.fyi/data?q=">waldo:https://www.waldo.fyi/data?q=</a></p>
<p><a href="i:00xda:https://www.xda-developers.com/search/">xda:https://www.xda-developers.com/search/</a></p>
<p><a href="i:00Feeling lucky:https://google.com/search?btnl=1&q=">Feeling lucky:https://google.com/search?btnl=1&amp;q=</a></p>
<p><a href="i:00pix:https://www.google.com/search?tbm=isch&q=">pix:https://www.google.com/search?tbm=isch&amp;q=</a></p>
<p><a href="i:00youtube:https://youtube.com/results?search_query=">youtube:https://youtube.com/results?search_query=</a></p>
<p><a href="i:00news:https://news.search.yahoo.com/search/news?p=">news:https://news.search.yahoo.com/search/news?p=</a></p>
<p><a href="i:00stock:https://finance.yahoo.com/quote/">stock:https://finance.yahoo.com/quote/</a></p>
<p><a href="i:00amazon:https://www.amazon.com/s/?field-keywords=">amazon:https://www.amazon.com/s/?field-keywords=</a></p>
<p><a href="i:00weather:https://www.wunderground.com/cgi-bin/findweather/getForecast?query=">weather:https://www.wunderground.com/cgi-bin/findweather/getForecast?query=</a></p>
<p><a href="i:00IMDB:https://www.imdb.com/find?q=">IMDB:https://www.imdb.com/find?q=</a></p>
<p><a href="i:00film review:https://www.rottentomatoes.com/search/?search=">film review:https://www.rottentomatoes.com/search/?search=</a></p>
<p><a href="i:00goodreads:https://www.goodreads.com/search?query=">goodreads:https://www.goodreads.com/search?query=</a></p>
<p><a href="i:00audible:http://www.audible.com/search?sort=review-rank&advsearchKeywords=">audible:http://www.audible.com/search?sort=review-rank&amp;advsearchKeywords=</a></p>
<p><a href="i:00audiobay:http://audiobookbay.se/?s=">audiobay:http://audiobookbay.se/?s=</a></p>
<p><a href="i:00telegramsearcher:https://telegramsearcher.com/search?q=">telegramsearcher:https://telegramsearcher.com/search?q=</a></p>
<p><a href="i:00lyzem:https://lyzem.com/search?q=">lyzem:https://lyzem.com/search?q=</a></p>
<p><a href="i:00gramxlu:https://gramxly.com/s?q=">gramxlu:https://gramxly.com/s?q=</a></p>
<p>language:<br>
<a href="i:00OED:https://www.oed.com/LIBRARY?dest=https%3A%2F%2Fwww.oed.com%2Fsearch%3FsearchType%3Ddictionary%26q%3D%s%26_searchBtn%3DSearch&acc_id=65585&library_card=12363257">OED:https://www.oed.com/LIBRARY?dest=https%3A%2F%2Fwww.oed.com%2Fsearch%3FsearchType%3Ddictionary%26q%3D%s%26_searchBtn%3DSearch&amp;acc_id=65585&amp;library_card=12363257</a></p>
<p><a href="i:00webster1913:https://www.websters1913.com/words/">webster1913:https://www.websters1913.com/words/</a></p>
<p><a href="i:00merriam-webster:https://www.merriam-webster.com/dictionary/">merriam-webster:https://www.merriam-webster.com/dictionary/</a></p>
<p><a href="i:00dictionary:https://www.dictionary.com/browse/">dictionary:https://www.dictionary.com/browse/</a></p>
<p><a href="i:00finedict:https://www.finedictionary.com/">finedict:https://www.finedictionary.com/</a></p>
<p><a href="i:00freedictionary:https://www.thefreedictionary.com/">freedictionary:https://www.thefreedictionary.com/</a></p>
<p><a href="i:00legal_fd:https://legal-dictionary.thefreedictionary.com/">legal_fd:https://legal-dictionary.thefreedictionary.com/</a></p>
<p><a href="i:00finance_fd:https://financial-dictionary.thefreedictionary.com/">finance_fd:https://financial-dictionary.thefreedictionary.com/</a></p>
<p><a href="i:00wikipedia_fd:https://encyclopedia.thefreedictionary.com/">wikipedia_fd:https://encyclopedia.thefreedictionary.com/</a></p>
<p><a href="i:00encyclopedia_fd:https://encyclopedia2.thefreedictionary.com/">encyclopedia_fd:https://encyclopedia2.thefreedictionary.com/</a></p>
<p><a href="i:00wordreference:https://www.wordreference.com/definition/">wordreference:https://www.wordreference.com/definition/</a></p>
<p><a href="i:00vocabulary:https://www.vocabulary.com/dictionary/">vocabulary:https://www.vocabulary.com/dictionary/</a></p>
<p><a href="i:00etymology:https://www.etymonline.com/search?q=">etymology:https://www.etymonline.com/search?q=</a></p>
<p><a href="i:00powerthesaurus:https://www.powerthesaurus.org/%s/synonyms">powerthesaurus:https://www.powerthesaurus.org/%s/synonyms</a></p>
<p><a href="i:00macmillanthesaurus:https://www.macmillanthesaurus.com/search/?auto=complete&q=">macmillanthesaurus:https://www.macmillanthesaurus.com/search/?auto=complete&amp;q=</a></p>
<p><a href="i:00lword:https://lword.top/word.html#">lword:https://lword.top/word.html#</a></p>
<p><a href="i:00ludwig:https://ludwig.guru/s/">ludwig:https://ludwig.guru/s/</a></p>
<p><a href="i:00webster:https://www.merriam-webster.com/dictionary/">webster:https://www.merriam-webster.com/dictionary/</a></p>
<p><a href="i:00googledict:http://googledictionary.freecollocation.com/meaning?word=">googledict:http://googledictionary.freecollocation.com/meaning?word=</a></p>
<p><a href="i:00freetts_ru:https://freetts.com/Home/PlayAudio?Language=ru-RU&Voice=ru-RU-Standard-A&id=undefined&type=0&TextMessage=">freetts_ru:https://freetts.com/Home/PlayAudio?Language=ru-RU&amp;Voice=ru-RU-Standard-A&amp;id=undefined&amp;type=0&amp;TextMessage=</a></p>
<p><a href="i:00freetts_ar:https://freetts.com/Home/PlayAudio?Language=ar-XA&Voice=ar-XA-Standard-A&id=undefined&type=0&TextMessage=">freetts_ar:https://freetts.com/Home/PlayAudio?Language=ar-XA&amp;Voice=ar-XA-Standard-A&amp;id=undefined&amp;type=0&amp;TextMessage=</a></p>
<p>Science:<br>
<a href="i:00britannica:https://www.britannica.com/search?query=">britannica:https://www.britannica.com/search?query=</a></p>
<p><a href="i:00mathRef:https://reference.wolfram.com/search/?q=">mathRef:https://reference.wolfram.com/search/?q=</a></p>
<p><a href="i:00mathSE:https://math.stackexchange.com/search?q=">mathSE:https://math.stackexchange.com/search?q=</a></p>
<p><a href="i:00phySE:https://physics.stackexchange.com/search?q=">phySE:https://physics.stackexchange.com/search?q=</a></p>
<p><a href="i:00physicsForum:https://www.physicsforums.com/search/2195918/?q=">physicsForum:https://www.physicsforums.com/search/2195918/?q=</a></p>
<p><a href="i:00pubchem SMILES:https://pubchem.ncbi.nlm.nih.gov/#input_type=smiles&query=">pubchem SMILES:https://pubchem.ncbi.nlm.nih.gov/#input_type=smiles&amp;query=</a></p>
<p><a href="i:00pubchem:https://pubchem.ncbi.nlm.nih.gov/#query=">pubchem:https://pubchem.ncbi.nlm.nih.gov/#query=</a></p>
<p><a href="i:00chemSE:https://chemistry.stackexchange.com/search?q=">chemSE:https://chemistry.stackexchange.com/search?q=</a></p>
<p><a href="i:00chem:https://www.ncbi.nlm.nih.gov/pccompound?term=">chem:https://www.ncbi.nlm.nih.gov/pccompound?term=</a></p>
<p><a href="i:00proofwiki:https://proofwiki.org/w/index.php?search=">proofwiki:https://proofwiki.org/w/index.php?search=</a></p>
<p><a href="i:00physics:http://www.physics.org/explore-results-all.asp?q=">physics:http://www.physics.org/explore-results-all.asp?q=</a></p>
<p><a href="i:00biology:https://www.biologyonline.com/dictionary/">biology:https://www.biologyonline.com/dictionary/</a></p>
<p><a href="i:00nist chem:https://webbook.nist.gov/cgi/cbook.cgi?Formula=">nist chem:https://webbook.nist.gov/cgi/cbook.cgi?Formula=</a></p>
<p><a href="i:00chemiday:https://chemiday.com/search/?lang=en&q=">chemiday:https://chemiday.com/search/?lang=en&amp;q=</a></p>
<p><a href="i:00chem.libretexts:https://chem.libretexts.org/Special:Search?q=">chem.libretexts:https://chem.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00bio.libretexts:https://bio.libretexts.org/Special:Search?q=">bio.libretexts:https://bio.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00phys.libretexts:https://phys.libretexts.org/Special:Search?q=">phys.libretexts:https://phys.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00med.libretexts:https://med.libretexts.org/Special:Search?q=">med.libretexts:https://med.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00math.libretexts:https://math.libretexts.org/Special:Search?q=">math.libretexts:https://math.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00stats.libretexts:https://stats.libretexts.org/Special:Search?q=">stats.libretexts:https://stats.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00geo.libretexts:https://geo.libretexts.org/Special:Search?q=">geo.libretexts:https://geo.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00eng.libretexts:https://eng.libretexts.org/Special:Search?q=">eng.libretexts:https://eng.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00biz.libretexts:https://biz.libretexts.org/Special:Search?q=">biz.libretexts:https://biz.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00human.libretexts:https://human.libretexts.org/Special:Search?q=">human.libretexts:https://human.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00socialsci.libretexts:https://socialsci.libretexts.org/Special:Search?q=">socialsci.libretexts:https://socialsci.libretexts.org/Special:Search?q=</a></p>
<p><a href="i:00workforce.libretexts:https://workforce.libretexts.org/Special:Search?q=">workforce.libretexts:https://workforce.libretexts.org/Special:Search?q=</a></p>
<p>More engines:<br>
<a href="i:00oscobo:https://www.oscobo.com/search.php?q=">oscobo:https://www.oscobo.com/search.php?q=</a></p>
<p><a href="i:00teoma:https://www.teoma.com/web?q=">teoma:https://www.teoma.com/web?q=</a></p>
<p><a href="i:00lycos:https://search.lycos.com/web/?q=">lycos:https://search.lycos.com/web/?q=</a></p>
<p><a href="i:00technorati:http://technorati.com/search/index.php?q=">technorati:http://technorati.com/search/index.php?q=</a></p>
<p><a href="i:00qwant:https://lite.qwant.com/?q=">qwant:https://lite.qwant.com/?q=</a></p>
<p><a href="i:00swisscows:https://swisscows.com/web?query=">swisscows:https://swisscows.com/web?query=</a></p>
<p><a href="i:00ecosia:https://www.ecosia.org/search?q=">ecosia:https://www.ecosia.org/search?q=</a></p>
<p><a href="i:00duck:https://duckduckgo.com/?q=">duck:https://duckduckgo.com/?q=</a></p>
<p><a href="i:00presearch:https://presearch.com/search?q=">presearch:https://presearch.com/search?q=</a></p>
<p><a href="i:00gigablast:https://www.gigablast.com/search?c=main&qlangcountry=en-us&q=">gigablast:https://www.gigablast.com/search?c=main&amp;qlangcountry=en-us&amp;q=</a></p>
<p><a href="i:00yandex:https://yandex.com/search/?text=">yandex:https://yandex.com/search/?text=</a></p>
<p><a href="i:00searx:https://searx.be/?q=">searx:https://searx.be/?q=</a></p>
<p><a href="i:00startpage:https://startpage.com/do/search?query=">startpage:https://startpage.com/do/search?query=</a></p>
<p><a href="i:00gibiru:https://gibiru.com/results.html?q=">gibiru:https://gibiru.com/results.html?q=</a></p>
<p><a href="i:00zapmeta:https://www.zapmeta.com/search?q=">zapmeta:https://www.zapmeta.com/search?q=</a></p>
<p>Medical:<br>
<a href="i:00medical_freedict:https://medical-dictionary.thefreedictionary.com/">medical_freedict:https://medical-dictionary.thefreedictionary.com/</a></p>
<p><a href="i:00merckmanuals:https://www.merckmanuals.com/professional/SearchResults?query=">merckmanuals:https://www.merckmanuals.com/professional/SearchResults?query=</a></p>
<p><a href="i:00openmd:https://openmd.com/search?q=">openmd:https://openmd.com/search?q=</a></p>
<p><a href="i:00radiopaedia:https://radiopaedia.org/search?q=">radiopaedia:https://radiopaedia.org/search?q=</a></p>
<p><a href="i:00medical-dict:https://medical-dictionary.com/results.php?term=">medical-dict:https://medical-dictionary.com/results.php?term=</a></p>
<p><a href="i:00ncbiBooks:https://www.ncbi.nlm.nih.gov/books/?term=">ncbiBooks:https://www.ncbi.nlm.nih.gov/books/?term=</a></p>
<p><a href="i:00healio:https://journals.healio.com/action/doSearch?AllField=">healio:https://journals.healio.com/action/doSearch?AllField=</a></p>
<p><a href="i:00pubmed:https://pubmed.ncbi.nlm.nih.gov/?term=">pubmed:https://pubmed.ncbi.nlm.nih.gov/?term=</a></p>
<p><a href="i:00pmc:https://www.ncbi.nlm.nih.gov/pmc/?term=">pmc:https://www.ncbi.nlm.nih.gov/pmc/?term=</a></p>
<p><a href="i:00Tabers:https://www.tabers.com/tabersonline/search?st=OSS&q=">Tabers:https://www.tabers.com/tabersonline/search?st=OSS&amp;q=</a></p>
<p><a href="i:00medicinenet:https://www.medicinenet.com/%s/definition.htm">medicinenet:https://www.medicinenet.com/%s/definition.htm</a></p>
<p>Torrent:<br>
<a href="i:00aio:https://www.aiosearch.com/search/4/Torrents/">aio:https://www.aiosearch.com/search/4/Torrents/</a></p>
<p><a href="i:00academictorrents:https://academictorrents.com/browse.php?search=">academictorrents:https://academictorrents.com/browse.php?search=</a></p>
<p><a href="i:00piratebay:https://thepiratebay.org/search/%s/0/7/0">piratebay:https://thepiratebay.org/search/%s/0/7/0</a></p>
<p><a href="i:00katcr:https://katcr.to/search/">katcr:https://katcr.to/search/</a></p>
<p><a href="i:001337x:https://1337x.to/search/%s/1/">1337x:https://1337x.to/search/%s/1/</a></p>
<p>Scholar:<br>
<a href="i:00classcentral:https://www.classcentral.com/search?q=">classcentral:https://www.classcentral.com/search?q=</a></p>
<p><a href="i:00base:https://www.base-search.net/Search/Results?lookfor=">base:https://www.base-search.net/Search/Results?lookfor=</a></p>
<p><a href="i:00science.gov:POST:fullRecord=%s:https://www.science.gov/scigov/search.html">science.gov:POST:fullRecord=%s:https://www.science.gov/scigov/search.html</a></p>
<p><a href="i:00sweetsearch:https://sweetsearch.com/search?q=">sweetsearch:https://sweetsearch.com/search?q=</a></p>
<p><a href="i:00refseek:https://www.refseek.com/search?q=">refseek:https://www.refseek.com/search?q=</a></p>
<p><a href="i:00google scholar:https://scholar.google.com/scholar?q=">google scholar:https://scholar.google.com/scholar?q=</a></p>
<p><a href="i:00bing academic:http://bing.com/academic/search?q=">bing academic:http://bing.com/academic/search?q=</a></p>
<p><a href="i:00core:https://core.ac.uk/search?q=">core:https://core.ac.uk/search?q=</a></p>
<p><a href="i:00semanticscholar:https://www.semanticscholar.org/search?sort=relevance&q=">semanticscholar:https://www.semanticscholar.org/search?sort=relevance&amp;q=</a></p>
<p><a href="i:00xueshu:https://xueshu.baidu.com/s?wd=">xueshu:https://xueshu.baidu.com/s?wd=</a></p>
<p><a href="i:00oalib:https://www.oalib.com/search?kw=">oalib:https://www.oalib.com/search?kw=</a></p>
<p><a href="i:00connectedpapers:https://www.connectedpapers.com/search?q=">connectedpapers:https://www.connectedpapers.com/search?q=</a></p>
<p>Developer:<br>
<a href="i:00devdocs:https://devdocs.io/#q=">devdocs:https://devdocs.io/#q=</a></p>
<p><a href="i:00grep.app:https://grep.app/search?q=">grep.app:https://grep.app/search?q=</a></p>
<p><a href="i:00git:https://github.com/search?type=Repositories&amp;q=">git:https://github.com/search?type=Repositories&amp;q=</a></p>
<p><a href="i:00man:http://man.cx/">man:http://man.cx/</a></p>
<p><a href="i:00code:http://searchcode.com/?q=">code:http://searchcode.com/?q=</a></p>
<p><a href="i:00grep:https://grep.app/search?q=">grep:https://grep.app/search?q=</a></p>
<p><a href="i:00symbolhound:http://symbolhound.com/?q=">symbolhound:http://symbolhound.com/?q=</a></p>
<p><a href="i:00vector:https://vector.me/search/">vector:https://vector.me/search/</a></p>
<p><a href="i:00jsdelivr:http://www.jsdelivr.com/?query=">jsdelivr:http://www.jsdelivr.com/?query=</a></p>
<p><a href="i:00greasyfork:https://greasyfork.org/en/scripts?sort=updated&q=">greasyfork:https://greasyfork.org/en/scripts?sort=updated&amp;q=</a></p>
<p><a href="i:00cdn.githubjs.cf:https://cdn.githubjs.cf/search?q=">cdn.githubjs.cf:https://cdn.githubjs.cf/search?q=</a></p>
<p><a href="i:00hub.yzuu:https://hub.yzuu.cf/search?q=">hub.yzuu:https://hub.yzuu.cf/search?q=</a></p>
<p><a href="i:00hub.nuaa:https://hub.nuaa.cf/search?q=">hub.nuaa:https://hub.nuaa.cf/search?q=</a></p>
<p><a href="i:00hub.njuu:https://hub.njuu.cf/search?q=">hub.njuu:https://hub.njuu.cf/search?q=</a></p>
<p>app:<br>
<a href="i:00App store:market://search?q=">App store:market://search?q=</a></p>
<p>local engines(May need termux customized edition and tools like bcgnuplot etc.):<br>
<a href="i:00bc:d:text/html:echo \'%s\'|bc -l -q:">bc:d:text/html:echo '%s'|bc -l -q:</a></p>
<p><a href="i:002D plot:d:image/svg+xml:gnuplot -e \'set term svg;set output; plot %s\':">2D plot:d:image/svg+xml:gnuplot -e 'set term svg;set output; plot %s':</a></p>
<p><a href="i:003D plot:d:image/svg+xml:gnuplot -e \'set term svg;set output; splot %s\':">3D plot:d:image/svg+xml:gnuplot -e 'set term svg;set output; splot %s':</a></p>
<p><a href="../searchcat/index.html#">Search engine files</a></p>
<p>More at:<br>
<a href="https://alternativeto.net/software/google-search/?feature=web-search">alternativeto</a></p>
</div>
<p>Last Modified: 18 May 2024<br>
add exa.ai<br>
<pre>Add AI engines
</pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

103
en/searchcat/index.html Normal file
View File

@ -0,0 +1,103 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Search engine files</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
for(let i=href.length-1;i>0;i--){
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
return i;
}
return 0;
}
function nav2(page){
let i = findLang();
location.href = location.href.substring(0,i+1)+page;
}
function nav2Lang(lang){
let i = findLang();
let href = location.href;
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
}
</script>
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
<nav>
</nav>
</header>
<br />
<div class="container">
<h1 class="title">Search engine files
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
<li><a href="../tags/search%20engine/index.html#">search engine</a> </li>
</ul>
<p>Search engine file names have &quot;.search&quot; as postfix. When they are clicked, the associated bookmark files with postfix &quot;.search.html&quot; would be appended. Ex: the associated bookmark for &quot;foo.search&quot; is &quot;foo.search.html&quot;.</p>
<p>Any &quot;.search&quot; file can be opened as search engine file, each line of which has one of the following formats:<br>
[Engine name]:[url without '%s' inside]<br>
[Engine name]:[url with '%s' as keyword]<br>
[Engine name]:POST:[post params with '%s' as keyword]:[url]<br>
[Engine name]:[Extra request headers]:[post params with '%s' as keyword]:[url]</p>
<ul>
<li>[Extra request headers] Ex. &quot;X-Forwarded-For;8.8.8.8&quot;</li>
<li>when [post params] is empty, the url should have '%s' as keyword.</li>
</ul>
<p>Limitations (they are here for performance reasons):</p>
<ul>
<li>The first engine in the file must be the first type that has no '%s' in the engine url.</li>
<li>Internal scheme engine urls (such as i:, d:, c:) must have '%s', since '%s' format is more general (only type 2 is allowed, since POST makes no sense for internal schemes).</li>
</ul>
<h4 id="local-engines">Local engines</h4>
<p>c:[command line with '%s' as keyword]<br>
d:mimetype:[command line with '%s' as keyword]:[base url for external resources]</p>
</div>
<p>Last Modified: 8 April 2024<br>
add associated bookmarks<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -0,0 +1 @@
(function(){let d=document;let t=d.location.hash.substring(1);if(!t)return;t=decodeURI(t);let ta;function setV(){if(ta.value)return;ta.value=t;ta.dispatchEvent(new InputEvent('input'));setTimeout(()=>{setV()},400)}function waitTextarea(){ta=d.querySelector('textarea');if(ta){setV();return;}setTimeout(()=>{waitTextarea();},400);}waitTextarea();})()

View File

@ -0,0 +1,99 @@
<head>
<base>
<script src="https://fastly.jsdelivr.net/npm/marked@3.0.7/marked.min.js"></script>
<script>
function absFile(url) {
this.name=url;
this.slice = async(offset, length) =>{
let resp = new Promise(function (resolve, reject) {
let r=new XMLHttpRequest;
r.onload=function(){
if (r.status == 200)
resolve(r.response);
else
reject(r.statusText);
}
r.onerror = () => reject(r.statusText);
r.open("GET",this.name,!0);
r.setRequestHeader('range', 'bytes=' + offset + '-' + ( offset + length -1).toString());
r.send(null);});
return await resp.arrayBuffer();
}
}
marked.setOptions({
gfm: true,
});
var file;
var blocksize = 20480;
function loadSlice(){
function render(u8array){
document.body.innerHTML = marked(new TextDecoder().decode(u8array));
scroll(0,0);
}
function setPageUrl(pageurl){
let a = document.createElement('a');
a.href = "i:5c"+pageurl;
a.click();
}
var page = 1;
var extrasize = blocksize; //extrasize should <= blocksize
let lhash = location.hash;
if(lhash){
if("p"!==lhash.charAt(1)){//#offset=&[len]
let iAmpersand = lhash.indexOf('&',8);
let offset = parseInt(lhash.substring(8,iAmpersand));
let len = parseInt(lhash.substring(iAmpersand+1));
{//update urlInc() url
let href = location.href;
let iHash = href.indexOf('#');
href=href.substring(0,iHash)+"#page="+Math.floor((offset+len)/blocksize);
setPageUrl(href);
}
file.slice(offset,len).then((buffer)=>{
let u8 = new Uint8Array(buffer);
render(u8);
});
return;
}
//#page=
page = parseInt(lhash.substring(6));
}else
setPageUrl(location.href+"#page=1");
file.slice(blocksize*(page-1),blocksize+extrasize).then((buffer)=>{
let u8 = new Uint8Array(buffer);
let u8len = u8.length;
let iStart = 0;
let limit = Math.min(u8len,extrasize);
if(1!=page){
for(let i=1;i<limit;i=i+2){
if(10==u8[i] && 10==u8[i-1]) {
iStart = i+1;
break;
}
}
}
let iEnd = Math.min(u8len,blocksize);
limit = Math.min(u8len,blocksize+extrasize);
for(let i=blocksize+1;i<limit;i=i+2){
if(10==u8[i] && 10==u8[i-1]) {
iEnd = i+1;
break;
}
}
render(u8.slice(iStart,iEnd));
});
}
//#offset=&[len]&page=
{
let url = location.href;
file = new absFile(url);
}
window.addEventListener('hashchange',loadSlice);
</script>
</head>
<body>
<script>loadSlice();</script>
</body>

View File

@ -0,0 +1,92 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<base href="https://jamesfengcao.codeberg.page/en/searchurl/bingAI/">
<title id="docTitle">NewBingGoGo</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.2.0/github-markdown.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/katex.min.css">
<link rel="stylesheet" type="text/css" href="./css/bing.css">
</head>
<body>
<div id="background" class="b"></div>
<div id="tail">
<div id="tail-in">
<input id="restartNewChat" class="onShow" type="button" value="new chat">
<input id="restart" type="button" value="🧹">
<div id="input-div">
<textarea id="input" type="text" enterkeyhint="send" autocapitalize="off" autocomplete="off" aria-autocomplete="both" spellcheck="false" aria-label="ask Bing" autocorrect="off" placeholder="type question here..."></textarea>
<input id="send" type="button" value="✓">
</div>
</div>
<div id="SearchSuggestions">
</div>
</div>
<div id="body">
<div id="popup">
<h5 style="text-align: center; margin:0;">输入魔法链接</h5>
<input type="text" id="url-input" style="width: 97%;display: inline-block;"
onkeydown="if (event.keyCode == 13) {let v=this.value;localStorage.setItem('GoGoUrl',v);}">
<h5 style="text-align: center; margin:0;">聊天方式</h5>
<select id="tallSelect" style="width: 100%;" onchange="localStorage.setItem('ChatHubWithMagic',this.selectedIndex);">
<option>复用聊天(最快)(用魔法创建聊天后在失效前都使用这个聊天)</option>
<option>正常聊天(推荐)(用魔法创建聊天后正常聊天)</option>
<option>魔法聊天(较慢)(用魔法创建聊天后继续使用魔法聊天)</option>
</select>
</div>
<div style="text-align: center;">
<h3>chat with bing</h3>
</div>
<div id="chatTypeDiv" style="opacity: 1;">
<div class="chatTypeChose" id="chatTypeChoseCreate">
<p>More</p>
<h3>Creative</h3>
</div>
<div class="chatTypeChose Chose" id="chatTypeChoseBalance">
<p>More</p>
<h3>Balanced</h3>
</div>
<div class="chatTypeChose" id="chatTypeChoseAccurate">
<p>More</p>
<h3>Precise</h3>
</div>
</div>
<div id="chat">
<div class="bing">
<div class="adaptiveCardsFatherDIV">
<div class="textBlock markdown-body">
I am ready to chat
</div>
<div class="throttling">
0 / 0
</div>
</div>
</div>
</div>
<div id="body-bottom"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/4.3.0/marked.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/katex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/contrib/auto-render.min.js"></script>
<script>
async function getMagicUrl() {
let v = localStorage.GoGoUrl;
if(v && v.startsWith("http")) return v;
return "https://mybing.xn--xyza.top/";
}
function getStartProposes(){return ["","",""];}
function getStartMessage(){return "";}
</script>
<script type="text/javascript" src="./js/GetSet.js"></script>
<script type="text/javascript" src="./js/optionsSets.js"></script>
<script type="text/javascript" src="./js/bingChatHub.js"></script>
<script type="text/javascript" src="./js/parserReturn.js"></script>
<script type="text/javascript" src="./js/bing.js"></script>
</body>
</html>

View File

@ -0,0 +1,205 @@
/* 头部分 */
body {
font-family: "Segoe UI", Arial, "Microsoft Yahei", sans-serif;
font-size: 75%;
}
#head {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 4rem;
display: flex;
align-items: center;
justify-content: space-between;
backdrop-filter: blur(10px);
background-color: #ffffff78;
z-index: 99;
}
#head-img-div {
height: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
}
#head-img-div>img {
height: 100%;
}
#head-img-div-h2-img>* {
margin: 0;
}
#head-li-div {
display: flex;
flex-direction: row;
align-items: center;
}
#head-li-div>li {
list-style: none;
margin-right: 1rem;
font-size: 1rem;
}
#head-li-div>a {
display: inline-block;
list-style: none;
margin-right: 1rem;
font-size: 1rem;
color: inherit;
text-decoration: inherit;
}
#head-li-div>a:hover{
color: #ff8300;
}
/* 背景*/
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background: repeating-linear-gradient(359deg, rgb(182 196 255) 0%, rgb(207 225 255 / 78%) 100%);
}
body.a #background,
body.a .ThemeColors {
transition: filter 1s;
filter: hue-rotate(10deg);
}
body.b #background,
body.b .ThemeColors {
transition: filter 1s;
filter: hue-rotate(-15deg);
}
body.c #background,
body.c .ThemeColors {
transition: filter 1s;
filter: hue-rotate(-40deg);
}
#body{
margin-top: 4rem;
overflow: hidden;
}
#DrawDiv{
background-color: #ffffff70;
min-height: 30rem;
max-width: 45rem;
margin: 1rem auto auto;
border-radius: 1.5rem;
overflow: hidden;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: stretch;
}
#inputDraw{
resize: none;
background-color: #ffffff00;
flex: 1;
margin-left: 1rem;
height: 2rem;
font-size: 1rem;
border: none;
outline:none;
line-height: 2rem;
}
#DrawInputDiv{
background-color: #ffffff;
margin-left: 1rem;
margin-right: 1rem;
margin-top: 1rem;
border-radius: 0.5rem;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: stretch;
}
#startDraw{
background-color: #0e00ff36;
border-radius: 0 0.5rem 0.5rem 0;
display: flex;
padding: 0.5rem;
align-items: center;
cursor: pointer;
font-size: 1rem;
}
#startDraw:hover{
background-color: rgba(14, 0, 255, 0.56);
}
#DrawInputDiv{
border: 1px solid rgba(0, 0, 0, 0.21);
}
#DrawInputDiv:has(#inputDraw:focus-visible){
border: 1px solid #0e00ff36;
}
#imgs{
margin-top: 1rem;
background-color: #c2b4ff29;
flex: 1;
border: 0.2rem solid #ffffff70;
border-top: none;
border-radius: 0 0 1.5rem 1.5rem;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: stretch;
justify-content: space-around;
align-content: space-around;
color: #ff8300;
font-size: 1rem;
font-weight: bolder;
}
#imgs>img{
width: 49%;
margin: 0.5%;
transition: all 0.5s;
cursor: pointer;
}
#imgs>img:hover{
transform:translate(-0.5%, -0.5%);
}
@media screen and (max-width:500px) {
:root {
font-size: 3.5vmin;
}
#imgs>img{
width: 99%;
}
}
@media screen and (orientation:portrait) and (max-device-width:800px) and (max-device-height:1000px) {
:root {
font-size: 3.5vmin;
}
#imgs>img{
width: 99%;
}
}

View File

@ -0,0 +1,582 @@
/* 头部分 */
#head {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 4rem;
display: flex;
align-items: center;
justify-content: space-between;
backdrop-filter: blur(10px);
background-color: #ffffff78;
z-index: 99;
}
#head-img-div {
height: 100%;
display: flex;
justify-content: flex-start;
align-items: center;
}
#head-img-div>img {
height: 100%;
}
#head-img-div-h2-img>* {
margin: 0;
}
#head-li-div {
margin-right: 2rem;
}
/* 背景*/
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background: repeating-linear-gradient(359deg, rgb(182 196 255) 0%, rgb(207 225 255 / 78%) 100%);
transition: filter 1s;
}
#background.a {
filter: hue-rotate(10deg);
}
#background.b {
filter: hue-rotate(-5deg);
}
#background.c {
filter: hue-rotate(-20deg);
}
/* 尾部分 */
#tail {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
height: 7rem;
display: flex;
justify-content: center;
backdrop-filter: blur(10px);
background-color: #ffffff78;
flex-direction: column-reverse;
align-items: center;
z-index: 99;
}
#SearchSuggestions {
position: fixed;
top: -3rem;
display: flex;
flex-wrap: nowrap;
flex-direction: row;
justify-content: center;
align-items: center;
width: 100%;
transition: opacity 0.2s
}
#SearchSuggestions>a {
backdrop-filter: blur(10px);
background-color: #ffffff82;
border-radius: 2rem;
padding: 0.5rem;
font-size: 0.9rem;
margin: 0.2rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
transition: flex 0.5s;
}
#SearchSuggestions>a:hover {
cursor: pointer;
background-color: #ffffff;
flex: none;
}
#tail-in {
display: flex;
width: 80%;
align-items: center;
justify-content: center;
height: 80%;
}
#restart:hover ,
#restartNewChat:hover
{
background-color: #ffffff;
cursor: pointer;
}
#restart ,
#restartNewChat
{
border: 0;
border-radius: 1.5rem;
background-color: #ffffff9e;
height: 100%;
font-size: 0.8rem;
transition: all 0.5s;
overflow: hidden;
white-space: normal;
}
#restart {
width: 0;
margin: 0;
padding: 0;
opacity: 0;
}
body:has(.my) #restart {
width: 5rem;
margin-right: 0.5rem;
padding: 0;
opacity: 1;
}
#restartNewChat{
width: 5rem;
margin-right: 0.5rem;
}
#restartNewChat.onShow{
width: 0;
margin: 0;
padding: 0;
opacity: 0;
}
#send {
border: 0;
margin: 0 1rem 1rem 0;
border-radius: 2rem;
background-color: #005fff38;
height: 1.8rem;
font-size: 0.8rem;
cursor: pointer;
min-width: 3rem;
transition: all 0.5s;
}
#send:hover {
background-color: #005fff80;
}
#input {
border: none;
resize: none;
outline: none;
width: 100%;
background-color: #ffffff00;
margin: 1rem 0 1rem 1rem;
height: -webkit-fill-available;
}
#input:focus-visible {
border: 0;
}
#input-div {
border-radius: 1.5rem;
flex: 1;
height: 100%;
background-color: #ffffff;
margin: 0 0;
display: flex;
flex-direction: row;
align-items: flex-end;
transition: all 0.5s;
}
/* 页面部分 */
body {
overflow-x: hidden;
}
#body-bottom {
height: 15rem;
width: 100%;
}
/* 聊天选项部分 */
#chatTypeDiv {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: nowrap;
margin-bottom: 7rem;
transition: all 0.5s;
}
#chatTypeDiv>.chatTypeChose {
background-color: #ffffffcc;
border-radius: 2rem;
width: 9rem;
height: 4rem;
margin: 1rem 0.3rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border: 0.5rem solid #ffffffcc;
cursor: pointer;
}
#chatTypeDiv>.chatTypeChose>p {
margin: 0;
text-align: center;
}
#chatTypeDiv>.chatTypeChose>h3 {
margin: 0;
text-align: center;
}
#chatTypeChoseCreate.Chose {
background-color: #904887;
color: white;
cursor: default;
}
#chatTypeChoseBalance.Chose {
background-color: #2870EA;
color: white;
cursor: default;
}
#chatTypeChoseAccurate.Chose {
background-color: #006880;
color: white;
cursor: default;
}
/* 聊天部分,在页面内 */
@keyframes acceptMeaaage {
from {
margin-top: 1em;
margin-left: -4em;
opacity: 0;
}
to {}
}
@keyframes sendMeaaage {
from {
margin-top: 1em;
margin-right: -4em;
opacity: 0;
}
to {}
}
.bing,
.my {
margin-bottom: 2rem;
}
.bing {
display: grid;
justify-items: start;
}
.bing>* {
animation: acceptMeaaage 0.5s;
}
.my>* {
animation: sendMeaaage 0.5s;
}
.my {
text-align: right;
font-size: 1.3rem;
}
.InternalSearchQuery,
.InternalLoaderMessage {
margin-left: 1rem;
font-size: 1rem;
}
.InternalSearchQuery>p,
.InternalLoaderMessage>p {
margin: 0;
margin-bottom: 1rem;
}
.adaptiveCardsFatherDIV,
.my>.bobo {
display: inline-block;
background-color: #ffffff;
border-radius: 1rem;
padding: 1rem 1rem;
max-width: 85vw;
margin-bottom: 1rem;
text-align: left;
}
.adaptiveCardsFatherDIV .throttling {
text-align: end;
font-size: 0.4rem;
margin-top: 0.5rem;
margin-bottom: -0.8rem;
border-top: 1px solid #0000005c;
}
.bing>.sourceAttributions {
font-size: 0.9rem;
max-width: 85vw;
margin: 0;
margin-bottom: 1rem;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
background-color: #ffffff57;
border-radius: 2rem;
padding: 0.5rem;
}
.bing:has(.sourceAttributions) .adaptiveCardsFatherDIV {
margin-bottom: 1em;
}
.bing>.sourceAttributions>a {
display: inline-block;
background-color: #ffffff73;
border-radius: 1rem;
padding: 0.5rem;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
margin: 0.1rem;
color: #000000;
text-decoration: none;
transition: flex 0.5s;
}
.bing>.sourceAttributions>a:hover {
background-color: #ffffffb3;
flex: none;
}
/* 上标 */
#chat .superscript {
display: inline-block;
vertical-align: super;
border: 0.1rem solid #0969da;
border-radius: 1em;
min-width: 1em;
text-align: center;
line-height: 1em;
font-size: small;
color: #0969da;
}
#chat .superscript:hover {
background-color: #00000024;
}
/*暂时不知道如何解析的渲染卡片请求*/
.RenderCardRequest {
border-radius: 1em;
background-color: white;
overflow: auto;
padding: 1em;
width: 85vw;
max-width: 1100px;
}
.RenderCardRequest>iframe {
min-width: 768px;
width: 100%;
height: 602px;
border: 0;
}
/* 画图部分 */
.GenerateContentQuery {
background-color: #ffffff;
border-radius: 1rem;
max-width: 85%;
margin-bottom: 1rem;
text-align: center;
font-size: 1rem;
padding: 1rem;
overflow: hidden;
display: inline-table;
}
.GenerateContentQuery>img {
max-width: 24%;
margin: 0.5%;
transition: all 0.8s;
cursor: pointer;
}
.GenerateContentQuery>img:hover {
margin: 0.2% 0.8% 0.8% 0.2%;
box-shadow: #0000007a 2px 3px 5px 0px;
transition: all 0.3s;
}
/* 错误部分 */
#chat .error {
text-align: center;
color: red;
}
.NoPower {
text-align: center;
color: #ff6d00;
cursor: pointer;
margin: 1rem;
text-decoration: underline;
}
/* 用于适配不同设备 */
/* pc */
:root {
font-size: 1rem;
}
div.markdown-body {
font-size: 1rem;
overflow: auto;
}
/* 窄窗口 */
@media screen and (max-width:550px) {
#tail-in:has(#input:focus-visible) #restart,
#tail-in:has(#input:hover) #restart,
#tail-in:has(#input:focus-visible) #restartNewChat,
#tail-in:has(#input:hover) #restartNewChat {
width: 0;
margin: 0;
padding: 0;
opacity: 0;
}
.GenerateContentQuery>img {
max-width: 49%;
width: 49%;
}
#tail-in {
width: 90%;
}
.bing>.sourceAttributions {
flex-wrap: wrap;
}
}
/*手机 css*/
@media screen and (orientation:portrait) and (max-device-width:800px) and (max-device-height:1000px) {
.InternalSearchQuery,
.InternalLoaderMessage {
width: 90%;
}
.InternalSearchQuery>p,
.InternalLoaderMessage>p {
font-size: 1rem;
}
.bing>.sourceAttributions {
max-width: 88vw;
flex-wrap: wrap;
}
.adaptiveCardsFatherDIV,
.my>.bobo {
max-width: 88vw;
}
#tail-in {
width: 90%;
}
#restart {
font-size: 1em;
}
#input {
font-size: 1em;
}
.GenerateContentQuery>img {
max-width: 49%;
width: 49%;
}
#tail-in:has(#input:focus-visible) #restart,
#tail-in:has(#input:hover) #restart,
#tail-in:has(#input:focus-visible) #restartNewChat,
#tail-in:has(#input:hover) #restartNewChat {
width: 0;
margin: 0;
padding: 0;
opacity: 0;
}
/* 聊天部分,在页面内 */
@keyframes acceptMeaaage {
from {
margin-top: 1em;
margin-left: 0em;
opacity: 0;
}
to {}
}
@keyframes sendMeaaage {
from {
margin-top: 1em;
margin-right: 0em;
opacity: 0;
}
to {}
}
}

View File

@ -0,0 +1,54 @@
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<base href="https://jamesfengcao.codeberg.page/en/searchurl/bingAI/">
<title id="docTitle">Draw</title>
<link rel="stylesheet" href="./css/DrawImg.css">
<script>
function getMagicUrl() {
let v = localStorage.GoGoUrl;
if(v && v.startsWith("http")) return v;
return "https://mybing2.xn--xyza.top/";
}
const magicUrl = getMagicUrl();
</script>
<script type="text/javascript" src="./js/generateImages.js"></script>
</head>
<body>
<div id="DrawDiv">
<div id="DrawInputDiv">
<textarea id="inputDraw" placeholder="Describe your image" ></textarea>
<input id="startDraw" type="button" value="Draw" onClick="draw()">
</div>
<div id="imgs">
</div>
</div>
<script>
const inputDraw = document.getElementById('inputDraw');
const imgsDiv = document.getElementById('imgs');
async function draw() {
let text = inputDraw.value;
try {
imgsDiv.innerText = `正在生成'${text}'图片,请稍等..`;
imgs = await generateImages(text,undefined,(v)=>{
imgsDiv.innerText = `正在生成'${text}'图片,请稍等..${v}`;
});
}catch (error){}
imgsDiv.innerHTML = '';
imgs.forEach((v)=>{
let img = document.createElement('img');
img.src = v.mImg;
imgsDiv.appendChild(img);
img.onclick = ()=>{
window.open(v.img);
}
//在低分辨率图片加载完成后替换成高分辨率图片
img.onload = ()=>{
img.onload = undefined;
img.src = v.img;
}
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,42 @@
async function setMagicUrl(url) {
localStorage.setItem('GoGoUrl',url);
}
// ture:开启使用魔法聊天|false:关闭使用魔法聊天|'repeat':开启聊天复用
async function setChatHubWithMagic(user) {
localStorage.setItem('ChatHubWithMagic',user);
}
// ture|false|'repeat'
async function getChatHubWithMagic() {
let v = localStorage.ChatHubWithMagic;
if (v) {
switch(v){
case 0:
break;
case 1:
return false;
case 2:
return true;
}
}
return 'repeat';
}
//设置上次创建的聊天
async function setLastChatJson(json) {
localStorage.setItem('LastChatJson',json);
}
//获取上次创建的聊天
async function getLastChatJson() {
return localStorage.LastChatJson;
}
//获取上次聊天聊到的消息id次数
async function getLastChatInvocationId(){
return localStorage.LastChatInvocationId;
}
//设置上次聊天聊到的消息id次数
async function setLastInvocationId(invocationId){
return localStorage.setItem('LastChatInvocationId',invocationId);
}

View File

@ -0,0 +1,59 @@
createChat(thisChatType).then((r) => {
if(r.ok) talk = r.obj;
});
/**重写重置聊天到初始状态函数 */
function reSetStartChatMessage(type) {
chat.innerHTML = ``;
isSpeaking = false;
}
/**重写函数 */
function isSpeakingStart(chatWithMagic, sendText) {
isSpeaking = true;
}
//重写
function isSpeakingFinish() {
isSpeaking = false;
}
//重写send函数
oldSend = send;
send = (text) => {
reSetStartChatMessage();
oldSend(text);
}
//重写porserTextBlock函数
/*
解析TextBlock body.type==TextBlock
*/
function porserTextBlock(body, father) {
if (!body.size) {
let div = getByClass('textBlock', 'div', father, 'markdown-body');
div.innerHTML = marked.marked(completeCodeBlock(body.text));
renderMathInElement(div,renderMathInElementOptions);
let aaas = div.getElementsByTagName('a');
//将超链接在新页面打开
for(let i=0;i<aaas.length;i++){
aaas[i].target = '_blank';
}
//如果是注释则加上上标样式
for(let i=0;i<aaas.length;i++){
let reg = new RegExp('^\\^(\\d+)\\^$');
if(reg.test(aaas[i].innerHTML)){
aaas[i].innerHTML = aaas[i].innerHTML.replace(reg,'$1');
aaas[i].classList.add('superscript');
}
}
} else if (body.size == 'small') {
//原本bing官网的small并没有输出
}
}
//重写send按钮点击事件
send_button.onclick = () => {
let text = input_text.value;
send(text);
};

View File

@ -0,0 +1,294 @@
var chat = document.getElementById('chat');
var chatTypeDiv = document.getElementById('chatTypeDiv');
var docTitle = document.getElementById('docTitle');
var restart_button = document.getElementById('restart');
var input_text = document.getElementById('input');
var send_button = document.getElementById('send');
let restartNewChat = document.getElementById('restartNewChat');
var thisChatType = chatTypes.balance;
//全局变量
var talk;
var returnMessage;
var isSpeaking = false;
reSetStartChatMessage();
//(string)
function addMyChat(message) {
let bobo = document.createElement('div');
bobo.style.whiteSpace = 'pre-wrap';
bobo.innerText = message;
bobo.classList.add('bobo');
bobo.classList.add('markdown-body');
let go = document.createElement('div');
go.classList.add('my');
go.appendChild(bobo);
chat.appendChild(go);
}
//(string)
function addError(message) {
let go = document.createElement('div');
go.classList.add('error');
go.innerHTML = message;
chat.appendChild(go);
}
let onMessageIsOKClose = false;
//(json)
function onMessage(json, returnMessage) {
if (json.type == "close") {
isSpeakingFinish();
if (!onMessageIsOKClose) {
addError("聊天异常中断了!可能是网络问题。");
}
return;
}
if (json.type == 'error') {
addError("连接发生错误:" + json.mess);
return;
}
onMessageIsOKClose = false
if (json.type == 3) {
onMessageIsOKClose = true;
returnMessage.getCatWebSocket().close(1000, 'ok');
} else {
localStorage.removeItem('LastChatJson');
if (json.type == 1) {
porserArguments(json.arguments);
} else if (json.type == 2) {
porserType2Item(json.item);
} else {
console.log(JSON.stringify(json));
}
}
}
//页面逻辑
//回车键发送 ctrl+回车换行
input_text.addEventListener('keydown', (event) => {
if (event.key === 'Enter' && !event.altKey) {
event.preventDefault();
//调用发送消息的函数
send_button.onclick();
} else if (event.key === 'Enter' && event.altKey) {
event.preventDefault();
// 插入换行符
input_text.value += "\n";
}
});
/**重置聊天框和聊天建议到初始状态 */
function reSetStartChatMessage(type) {
createChat(thisChatType).then((r) => {
if(r.ok) talk = r.obj;
});
getChatHubWithMagic().then(async a => {
let t = 0;
if (a == 'repeat') {
t = await getLastChatInvocationId();
}
chat.innerHTML = `
<div class="bing">
<div class="adaptiveCardsFatherDIV">
<div class="textBlock markdown-body">
</div>
<div class="throttling">
${t} / 0
</div>
</div>
</div>
`;
});
}
/**正在创建聊天 */
function isAskingToMagic() {
isSpeaking = true;
send_button.value = '施法中.';
}
/**bing正在回复 */
function isSpeakingStart(chatWithMagic, sendText) {
isSpeaking = true;
if (sendText) {
docTitle.innerText = sendText;
}
send_button.value = '响应中.';
}
/**bing回复结束 */
function isSpeakingFinish() {
isSpeaking = false;
send_button.value = 'submit';
}
function send(text) {
if (isSpeaking) {
return;
}
chatTypeDiv.style.opacity = 0;
addMyChat(text);
if (!talk) {
isAskingToMagic();
createChat(thisChatType).then((r) => {
if (!r.ok) {
addError(r.message);
isSpeakingFinish();
return;
}
talk = r.obj;
isSpeakingStart();
r = talk.sendMessage(text, onMessage);
if (!r.ok) {
isSpeakingFinish();
addError(r.message);
return;
}
returnMessage = r.obj;
isSpeakingStart(r.chatWithMagic, text);
});
return;
} else {
isSpeakingStart();
let r = talk.sendMessage(text, onMessage)
if (!r.ok) {
isSpeakingFinish();
addError(r.message);
return;
}
returnMessage = r.obj;
isSpeakingStart(r.chatWithMagic, text);
}
}
send_button.onclick = () => {
if (isSpeaking) {
return;
}
let text = input_text.value;
input_text.value = '';
input_update_input_text_sstyle_show_update({ target: input_text });
if (!text) {
alert('什么都没有输入呀!');
return;
}
send(text);
};
restart_button.onclick = () => {
onMessageIsOKClose = true;
if (returnMessage) {
returnMessage.getCatWebSocket().close(1000, 'ok');
returnMessage = undefined;
}
talk = undefined;
isSpeakingFinish();
reSetStartChatMessage();
chatTypeDiv.style.opacity = 1;
};
//滚动到底部显示收聊天建议
// 定义一个函数处理滚动事件
function handleScroll() {
// 获取文档的高度和滚动距离
var docHeight = document.body.scrollHeight;
var scrollPos = window.pageYOffset;
// 如果滚动到底部,显示元素,否则隐藏元素
}
// 添加滚动事件监听器
window.addEventListener("scroll", handleScroll);
//选择聊天类型,创造力,平衡,精准
let backgroundDIV = document.getElementById('background');
let chatTypeChoseCreate = document.getElementById('chatTypeChoseCreate');
let chatTypeChoseBalance = document.getElementById('chatTypeChoseBalance');
let chatTypeChoseAccurate = document.getElementById('chatTypeChoseAccurate');
//默认平衡
thisChatType = chatTypes.balance;
chatTypeChoseCreate.onclick = () => {
if (chatTypeDiv.style.opacity == 0) {
return;
}
chatTypeChoseCreate.classList.add('Chose');
chatTypeChoseBalance.classList.remove('Chose');
chatTypeChoseAccurate.classList.remove('Chose');
thisChatType = chatTypes.create;
backgroundDIV.className = 'a';
reSetStartChatMessage('create');
}
chatTypeChoseBalance.onclick = () => {
if (chatTypeDiv.style.opacity == 0) {
return;
}
chatTypeChoseCreate.classList.remove('Chose');
chatTypeChoseBalance.classList.add('Chose');
chatTypeChoseAccurate.classList.remove('Chose');
thisChatType = chatTypes.balance;
backgroundDIV.className = 'b';
reSetStartChatMessage('balance');
}
chatTypeChoseAccurate.onclick = () => {
if (chatTypeDiv.style.opacity == 0) {
return;
}
chatTypeChoseCreate.classList.remove('Chose');
chatTypeChoseBalance.classList.remove('Chose');
chatTypeChoseAccurate.classList.add('Chose');
thisChatType = chatTypes.accurate;
backgroundDIV.className = 'c';
reSetStartChatMessage('accurate');
}
// "resourceTypes": [
// "main_frame",
// "sub_frame",
// "stylesheet",
// "script",
// "image",
// "font",
// "object",
// "xmlhttprequest",
// "ping",
// "csp_report",
// "media",
// "websocket",
// "webtransport",
// "webbundle",
// "other"
// ]
//发送按钮出现逻辑
function input_update_input_text_sstyle_show_update(v) {
if (v.target.value) {
send_button.style.opacity = 1;
} else {
send_button.style.opacity = 0;
}
}
input_text.addEventListener("input", input_update_input_text_sstyle_show_update);
input_update_input_text_sstyle_show_update({ target: input_text });
//开始新聊天按钮逻辑,仅在聊天复用
restartNewChat.onclick = async () => {
localStorage.removeItem('LastChatJson');
await setLastInvocationId(1);
restart_button.onclick();
}

View File

@ -0,0 +1,266 @@
var expUrl = new RegExp('^(https?://)([-a-zA-z0-9]+\\.)+([-a-zA-z0-9]+)+\\S*$');
function getUuidNojian() {
return URL.createObjectURL(new Blob()).split('/')[3].replace(/-/g, '');
}
class SendMessageManager {
//(会话id客户端id签名id是否是开始)
//(string,string,string,boolena)
constructor(conversationId, clientId, conversationSignature,invocationId) {
this.invocationId = invocationId==undefined?1:invocationId;
this.conversationId = conversationId;
this.clientId = clientId;
this.conversationSignature = conversationSignature;
this.optionsSets = chatTypes.balance;
}
//chatTypes中的一种
setChatType(chatType) {
this.optionsSets = chatType;
}
//发送json数据
sendJson(chatWebSocket, json) {
let go = JSON.stringify(json) + '\u001e';
chatWebSocket.send(go);
console.log('发送', go)
}
//获取用于发送的握手数据
//(WebSocket)
sendShakeHandsJson(chatWebSocket) {
this.sendJson(chatWebSocket, {
"protocol": "json",
"version": 1
});
}
//获取用于发送的聊天数据
//(WebSocket,sreing)
async sendChatMessage(chatWebSocket, chat) {
let optionsSets = chatTypes[this.optionsSets];
let json = {
"arguments": [{
"source": source,
"optionsSets": optionsSets,
"allowedMessageTypes": allowedMessageTypes,
"sliceIds": sliceIds,
"verbosity": "verbose",
"traceId": getUuidNojian(),
"isStartOfSession": (this.invocationId <= 1) ? true : false,
"message": await generateMessages(this,chat),
"conversationSignature": this.conversationSignature,
"participant": {
"id": this.clientId
},
"conversationId": this.conversationId,
"previousMessages": (this.invocationId <= 1) ? await getPreviousMessages() : undefined
}],
"invocationId": this.invocationId.toString(),
"target": "chat",
"type": 4
};
this.sendJson(chatWebSocket, json);
this.invocationId++;
}
}
//处理返回消息的类
class ReturnMessage {
//(WebSocket,function:可以不传)
constructor(catWebSocket, lisin) {
this.catWebSocket = catWebSocket;
this.onMessage = [(v) => {
//console.log(JSON.stringify(v))
}];
if ((typeof lisin) == 'function') {
this.regOnMessage(lisin);
}
catWebSocket.onmessage = (mess) => {
//console.log('收到', mess.data);
let sss = mess.data.split('\u001e');
for (let i = 0; i < sss.length; i++) {
if (sss[i] == '') {
continue;
}
for (let j in this.onMessage) {
if ((typeof this.onMessage[j]) == 'function') {
try {
this.onMessage[j](JSON.parse(sss[i]), this);
} catch (e) {
console.warn(e)
}
}
}
}
}
catWebSocket.onclose = (mess) => {
for (let i in this.onMessage) {
if ((typeof this.onMessage[i]) == 'function') {
try {
this.onMessage[i]({
type: 'close',
mess: '连接关闭'
}, this);
} catch (e) {
console.warn(e)
}
}
}
}
catWebSocket.onerror = (mess) => {
console.log(mess);
for (let i in this.onMessage) {
if ((typeof this.onMessage[i]) == 'function') {
try {
this.onMessage[i]({
type: 'error',
mess: mess
}, this);
} catch (e) {
console.warn(e)
}
}
}
}
}
/*
获取消息WebSocket
*/
getCatWebSocket() {
return this.catWebSocket;
}
/**
* 注册收到消息监听器
*/
//(function(json,ReturnMessage))
regOnMessage(theFun) {
this.onMessage[this.onMessage.length] = theFun;
}
}
//处理聊天的类
class Chat {
//theChatType chatTypes变量中的其中一个
//invocationId 可以不传
//(string,ture|false|'repeat',string,string,string,theChatType,int|undefined)
constructor(magicUrl, chatWithMagic, charID, clientId, conversationSignature, theChatType,invocationId) {
this.magicUrl = magicUrl;
this.chatWithMagic = chatWithMagic;
this.sendMessageManager = new SendMessageManager(charID, clientId, conversationSignature,invocationId);
if (theChatType) {
this.sendMessageManager.setChatType(theChatType);
}
}
/**
* 返回
{
ok:true|false
message:显示消息
obj:ReturnMessage对象
}
当ok等于false时不返回ReturnMessage
* 参数 消息string,当收到消息的函数,当关闭时函数
*/
//(string,function:可以不传)
sendMessage(message, onMessage) {
try {
//let restsrstUrl = 'wss://sydney.bing.com/sydney/ChatHub';
//if (this.chatWithMagic==true)
let restsrstUrl = this.magicUrl.replace('http', 'ws')+"sydney/ChatHub";
let chatWebSocket = new WebSocket(restsrstUrl);
chatWebSocket.onopen = () => {
this.sendMessageManager.sendShakeHandsJson(chatWebSocket);
this.sendMessageManager.sendChatMessage(chatWebSocket, message);
}
return {
ok: true,
message: 'ok',
obj: new ReturnMessage(chatWebSocket, onMessage),
chatWithMagic: this.chatWithMagic==true?true:false
};
} catch (e) {
console.warn(e)
return {
ok: false,
message: "发生错误,可能是网络连接错误:" + e.message
};
}
}
}
function URLTrue(url, thiePath) {
return url + thiePath;
}
//获取newbing权限
async function getPower() {}
async function copyCookies(magicUrl) {}
//创建一个新对话
/**
返回结构如果ok等于false则无chat对象
{
ok:true|false,
message:显示消息,
obj:Cat对象
}
*/
async function createChat(theChatType) {
let chatWithMagic = await getChatHubWithMagic();
let magicUrl = await getMagicUrl();
let restartNewChat = document.getElementById('restartNewChat');
if(chatWithMagic=='repeat'){//如果是聊天复用
restartNewChat.classList.remove('onShow');
let resjson = await getLastChatJson();
if(resjson){//如果没有上次聊天或上次聊天已经失效就不返回,继续走创建聊天流程
let invocationId = await getLastChatInvocationId();
if(!invocationId){
invocationId = 1;
}
return {
ok: true,
message: 'ok',
obj: new Chat(magicUrl, chatWithMagic, resjson.conversationId, resjson.clientId, resjson.conversationSignature, theChatType,invocationId)
};
}
}
let mes;
do {
try {
let url = URLTrue(magicUrl,'turing/conversation/create');
let res = await fetch(url);
if(!res.ok){
if(res.headers.has('cf-mitigated')){
let challengeUrl = `${magicUrl}/challenge?`+location.href;
location.href=challengeUrl;
return;
}
mes = `Error code: ${res.status} ${res.statusText}`;
break;
}
let resjson = await res.json();
if (!resjson.result || resjson.result.value != 'Success') {
mes = resjson;
break;
}
//保存成功的聊天
setLastChatJson(resjson);
return {
ok: true,
message: 'ok',
obj: new Chat(magicUrl, chatWithMagic, resjson.conversationId, resjson.clientId, resjson.conversationSignature, theChatType)
};
} catch (e) {mes = e.message;}
}while(false);
return {
ok: false,
message: mes
};
}

View File

@ -0,0 +1,75 @@
const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
/**
* @param text 生成图像的描述
* @param requestId 请求id如果不是对话生成图片可以为undefined
* @param countF 回调函数获取当前是第几次请求
* @return [...{img:url,mImg:url}...] img:图片url mIng:缩略图url
* */
async function generateImages(text,requestId,countF){
let theUrls = new URLSearchParams();
theUrls.append('re', '1');
theUrls.append('showselective', '1');
theUrls.append('sude', '1');
theUrls.append('kseed', '7500');
theUrls.append('SFX', '2');
theUrls.append('q', text);
theUrls.append('iframeid', requestId);
let theUrl = magicUrl+`images/create?${theUrls.toString()}`;
let response = await fetch(theUrl,
{"sec-fetch-site": "same-origin",
"referer": "https://www.bing.com/search?q=bingAI"});
let html = (await response.text());
//let cookieID = response.headers.get('cookieID');
//如果返回的是有错误的页面
let urr = new RegExp('class="gil_err_mt">([^<>]*)</div>').exec(html);
if(urr && urr[1]){
let error = `<h3>${urr[1]}</h3>`;
urr = new RegExp('class="gil_err_sbt">(([^<>]*<(a|div)[^<>]*>[^<>]*</(a|div)>[^<>]*)*)</div>').exec(html);
if(urr && urr[1]){
error = error+`<p>${urr[1]}</p>`;
}
throw new Error(error);
}
//如果没错误就匹配链接获取图片
urr = new RegExp('"/(images/create/async/results/(\\S*))"').exec(html);
if(!urr || !urr[1]){
console.log(html);
throw new Error("请求图片返回不正确的页面,无法加载图片。");
}
let ur = urr[1];
ur = ur.replaceAll('&amp;','&');
let imgPageHtmlUrl = magicUrl + `${ur}`;
let options = {"sec-fetch-site":"same-origin", "referer":"https://www.bing.com/images/create?partner=sydney&showselective=1&sude=1&kseed=7000"};
for(let count = 1;count<=20;count++){
if((!!countF)&&(typeof countF =='function')){
countF(count);
}
await sleep(3000);
let imgPageHtml;
try{
imgPageHtml = (await (await fetch(imgPageHtmlUrl,options)).text());
}catch(e){
console.error(e);
}
if(!imgPageHtml){
continue;
}
//用正则找全部图片
let allSrc = imgPageHtml.matchAll(/<img[^<>]*src="([^"]*)"[^<>]*>/g);
let imgs = [];
for(let src;!(src=allSrc.next()).done;){
imgs[imgs.length] = {
img:src.value[1].split('?')[0],
mImg:src.value[1].replaceAll('&amp;','&')
}
}
if(imgs.length>0){
return imgs;
}else{
throw new Error("服务器未正常返回图片!");
}
}
}

View File

@ -0,0 +1,183 @@
//聊天选项
let chatTypes = {
//更有创造力选项
create: [
"nlu_direct_response_filter",
"deepleo",
"disable_emoji_spoken_text",
"responsible_ai_policy_235",
"enablemm",
"h3imaginative",
"objopinion",
"eredirecturl",
"dv3sugg",
"autosave",
"clgalileo",
"gencontentv3",
"prompttrcp"
],
//balance 平衡模式选项
balance: [
"nlu_direct_response_filter",
"deepleo",
"disable_emoji_spoken_text",
"responsible_ai_policy_235",
"enablemm",
"galileo",
"objopinion",
"eredirecturl",
"dv3sugg",
"autosave",
"saharagenconv5"
],
//精准选项
accurate: [
"nlu_direct_response_filter",
"deepleo",
"disable_emoji_spoken_text",
"responsible_ai_policy_235",
"enablemm",
"h3precise",
"objopinion",
"eredirecturl",
"dv3sugg",
"autosave",
"clgalileo",
"gencontentv3",
"prompttrcp"
]
}
//消息来源
let source = "cib";
//接收消息类型
let allowedMessageTypes = [
"ActionRequest",
"Chat",
"Context",
"InternalSearchQuery",
"InternalSearchResult",
"Disengaged",
"InternalLoaderMessage",
"Progress",
"RenderCardRequest",
"AdsQuery",
"SemanticSerp",
"GenerateContentQuery",
"SearchQuery"
]
//切片id也不知道是啥意思反正官网的更新了
let sliceIds = [
"winmuid1tf",
"osbsdusgreccf",
"contansperf",
"mlchatpc2",
"winstmsg2tf",
"creatgoglt2",
"creatorv2t",
"norespwcf",
"0521dur5",
"dur5",
"517opinion",
"418dhlths0",
"525ptrcp",
"kcimgv2cf",
"kcimgatt",
"427startpms0"
]
//生成消息对象
async function generateMessages(sendMessageManager/*消息管理器*/,chatMessageText/*要发送的消息文本*/){
function timeString() {
var d = new Date();
var year = d.getFullYear();
var month = (d.getMonth() + 1).toString().padStart(2, "0");
var date = d.getDate().toString().padStart(2, "0");
var hour = d.getHours().toString().padStart(2, "0");
var minute = d.getMinutes().toString().padStart(2, "0");
var second = d.getSeconds().toString().padStart(2, "0");
var offset = "+08:00"; // 你可以根据需要修改这个值
var s = year + "-" + month + "-" + date + "T" + hour + ":" + minute + ":" + second + offset;
return s;
}
if(!sendMessageManager.startTime){
sendMessageManager.startTime = timeString();
}
return {
"locale": "zh-CN",
"market": "zh-CN",
"region": "US",
"location": "lat:47.639557;long:-122.128159;re=1000m;",
"locationHints": [
{
"Center": {
"Latitude": 30.474109798833613,
"Longitude": 114.39626256171093
},
"RegionType": 2,
"SourceType": 11
},
{
"country": "United States",
"state": "California",
"city": "Los Angeles",
"zipcode": "90060",
"timezoneoffset": -8,
"dma": 803,
"countryConfidence": 8,
"cityConfidence": 5,
"Center": {
"Latitude": 33.9757,
"Longitude": -118.2564
},
"RegionType": 2,
"SourceType": 1
}
],
"timestamp": sendMessageManager.startTime,
"author": "user",
"inputMethod": "Keyboard",
"text": chatMessageText,
"messageType": "Chat"
}
}
async function getPreviousMessages(){
function getUuid() {
return URL.createObjectURL(new Blob()).split('/')[3];
}
let pos = getStartProposes();
return [{
"text": getStartMessage(),
"author": "bot",
"adaptiveCards": [],
"suggestedResponses": [{
"text": pos[0],
"contentOrigin": "DeepLeo",
"messageType": "Suggestion",
"messageId": getUuid(),
"offense": "Unknown"
}, {
"text": pos[1],
"contentOrigin": "DeepLeo",
"messageType": "Suggestion",
"messageId": getUuid(),
"offense": "Unknown"
}, {
"text": pos[2],
"contentOrigin": "DeepLeo",
"messageType": "Suggestion",
"messageId": getUuid(),
"offense": "Unknown"
}],
"messageId": getUuid(),
"messageType": "Chat"
}];
}

View File

@ -0,0 +1,418 @@
/**
(id,元素的tag,父元素,创建时顺便添加的class:可以多个)
获取一个指定id的元素如果没用就在服元素创建这个元素
*/
function getByID(id, tag, father) {
let t = document.getElementById(id);
if (!t) {
t = document.createElement(tag);
t.id = id;
for (let i = 3; i < arguments.length; i++) {
if (arguments[i]) {
t.classList.add(arguments[i]);
}
}
father.appendChild(t);
}
return t;
}
function getByClass(className, tag, father) {
let t = father.getElementsByClassName(className)[0];
if (!t) {
t = document.createElement(tag);
t.classList.add(className);
for (let i = 3; i < arguments.length; i++) {
if (arguments[i]) {
t.classList.add(arguments[i]);
}
}
father.appendChild(t);
}
return t;
}
function test(test) {
porserArguments(test.arguments);
}
var throttling = {
"maxNumUserMessagesInConversation": 0,
"numUserMessagesInConversation": 0
};
//解析type2的item
function porserType2Item(item){
let chatDiv = document.getElementById('chat');
if(item.result){
let result = item.result;
if(result.value=='Success'){
}else if (result.value == 'Throttled') {
addError(result.message);
addError('24消息请求数达到了限制');
}else{
addError(result.message);
addError('发生未知错误!');
}
}
if (item.throttling) {
throttling = item.throttling;
}
if (item.messages) {
let nextFather = getByID(item.requestId, 'div', chatDiv, 'bing');
porserMessages(item.messages, nextFather);
}
}
/**
* 解析arguments
* 解析聊天消息将消息添加到页面
* **/
function porserArguments(argumentss) {
for (let i = 0; i < argumentss.length; i++) {
porserType2Item(argumentss[i]);
}
}
/*
解析messages
*/
function porserMessages(messages, father) {
for (let i = 0; i < messages.length; i++) {
let message = messages[i];
if(message.author=='user'){
continue;//不解析用户的消息
}
//解析adaptiveCards 也就是聊天消息部分 下面类型的都是带有adaptiveCards的
if (!message.messageType && message.adaptiveCards) {//如果是正常的聊天
let adaptiveCardsFatherDIV = getByID(message.messageId, 'div', father, 'adaptiveCardsFatherDIV');
porserAdaptiveCards(message.adaptiveCards, adaptiveCardsFatherDIV);
//解析sourceAttributions 也就是引用链接部分
if (message.sourceAttributions) {
if (message.sourceAttributions.length > 0) {
let sourceAttributionsDIV = getByID(message.messageId + 'sourceAttributions', 'div', father, 'sourceAttributions');
porserSourceAttributions(message.sourceAttributions, sourceAttributionsDIV);
}
}
//解析suggestedResponses 建议发送的消息,聊天建议
if (message.suggestedResponses) {
porserSuggestedResponses(message.suggestedResponses);
}
} else if (message.messageType == 'InternalSearchQuery') { //如果是收索消息
let div = getByID(message.messageId, 'div', father, 'InternalSearchQuery');
porserLineTextBlocks(message.text, div);
} else if (message.messageType == 'InternalLoaderMessage') { //如果是加载消息
let div = getByID(message.messageId, 'div', father, 'InternalLoaderMessage');
porserLineTextBlocks(message.text, div);
} else if (message.messageType == 'GenerateContentQuery') {//如果是生成内容查询
let div = getByID(message.messageId, 'div', father, 'GenerateContentQuery');
generateContentQuery(message, div);
}else if (message.messageType == 'RenderCardRequest'){//渲染卡片请求,目前不知道有什么用
renderCardRequest(message, father);
}else if(message.messageType == 'Disengaged'){
let div = getByID(message.messageId, 'div', chat, 'error');
div.innerHTML = `
${message.hiddenText}<br>聊天中断试试开始新主题
`;
}else if(message.contentOrigin == 'TurnLimiter'){
addError(message.text);
addError('聊天被限制了,试试开始新主题?');
} else {
console.log('发现一个另类message', JSON.stringify(message));
}
}
}
/*
解析渲染卡片请求暂时不知道如何解析这个请求,就先判断里面有没有内容吧没有就不显示
*/
function renderCardRequest(message,father){
if(father[message.messageId+'renderCardRequest']){//防止解析多次
return;
}
father[message.messageId+'renderCardRequest'] = true;
let url = 'https://www.bing.com/search?'
let theUrls = new URLSearchParams();
theUrls.append("showselans",1);
theUrls.append("q",message.text);
theUrls.append("iframeid",message.messageId);
let src = url+theUrls.toString();
fetch(src).then(async (ret)=>{
let html = await ret.text();
// b_poleContent pc设备 || b_ans b_imgans 移动设备
if(html.indexOf('class="b_poleContent"')>=0 || html.indexOf('class="b_ans')>=0){
let div = getByID(message.messageId, 'div', father, 'RenderCardRequest');
div.innerHTML = `<iframe role="presentation" src="${src}"></iframe>`;
}
});
}
/*
解析generateContentQuery生成内容查询,目前是只有图片
*/
function generateContentQuery(message, father) {
if(message.contentType=="IMAGE"){
if(father.runed){//防止生成多次
return;
}
father.runed = true;
generateContentQueryImg(message, father);
}else{
console.log('发现一个另类generateContentQuery', JSON.stringify(message));
}
}
/**
* 解析图片生成目前是只有图片
*/
function generateContentQueryImg(message, father){
getMagicUrl().then(async magicUrl => {
if (!magicUrl) {
addError("魔法链接不正确!无法加载图片");
return;
}
if (!expUrl.test(magicUrl)) {
addError("魔法链接不正确!无法加载图片")
return;
}
let theUrls = new URLSearchParams();
theUrls.append('re', '1');
theUrls.append('showselective', '1');
theUrls.append('sude', '1');
theUrls.append('kseed', '7500');
theUrls.append('SFX', '2');
theUrls.append('q', message.text);
theUrls.append('iframeid', message.requestId);
let theUrl = URLTrue(magicUrl,"images/create?") + theUrls.toString();
try{
father.innerHTML = `正在生成${message.text}的图片.`;
let html = (await (await fetch(theUrl)).text());
//如果有错误就输出错误
let urr = new RegExp('class="gil_err_mt">([^<>]*)</div>').exec(html);
if(urr && urr[1]){
father.innerHTML = `<h3>${urr[1]}</h3>`
urr = new RegExp('class="gil_err_sbt">(([^<>]*<(a|div)[^<>]*>[^<>]*</(a|div)>[^<>]*)*)</div>').exec(html);
if(urr && urr[1]){
father.innerHTML = father.innerHTML+`<p>${urr[1]}</p>`;
}
return;
}
//如果没错误就匹配链接获取图片
urr = new RegExp('"/(images/create/async/results/(\\S*))"').exec(html);
if(!urr || !urr[1]){
console.log(html);
addError("请求图片返回不正确的页面,无法加载图片。");
return;
}
let ur = urr[1];
ur = ur.replaceAll('&amp;','&');
let imgPageHtmlUrl = URLTrue(magicUrl,ur);
let count = 0;
let run = async ()=>{
father.innerHTML = `正在生成${message.text}的图片.${count}`;
if(count>20){
father.innerHTML = "请求图片超时!";
return;
}
count++;
let imgPageHtml;
try{
imgPageHtml = (await (await fetch(imgPageHtmlUrl)).text());
}catch(e){
console.error(e);
}
if(!imgPageHtml){
setTimeout(run,3000);
return;
}
father.innerHTML = '';
let theUrls = new URLSearchParams();
theUrls.append('createmessage',message.text);
let a = document.createElement("a");
father.appendChild(a);
//用正则找全部图片
let allSrc = imgPageHtml.matchAll(/<img[^<>]*src="([^"]*)"[^<>]*>/g);
let src = undefined;
let ok = false;
while(!(src=allSrc.next()).done){
ok =true;
theUrls.append('imgs',src.value[1].split('?')[0]);
let img = document.createElement("img");
img.src = src.value[1];
a.appendChild(img);
}
if(ok){
a.target = '_blank';
a.href = '../GeneratePicture/img.html?'+theUrls.toString();
}else{
father.innerHTML = "服务器未正常返回图片!";
}
}
setTimeout(run,3000);
}catch(e){
console.error(e);
addError("请求图片失败:"+e);
}
});
}
/*
解析adaptiveCards 聊天消息部分
*/
function porserAdaptiveCards(adaptiveCards, father) {
for (let i = 0; i < adaptiveCards.length; i++) {
let adaptiveCard = adaptiveCards[i];
if (adaptiveCard.type == 'AdaptiveCard') {
porserbody(adaptiveCard.body, father);
} else {
console.log('发现一个不是AdaptiveCard的adaptiveCard', JSON.stringify(adaptiveCard));
}
}
}
/**
解析body adaptiveCards[].body这个部分
*/
function porserbody(bodys, father) {
for (let i = 0; i < bodys.length; i++) {
let body = bodys[i];
if (body.type == 'TextBlock') {
porserTextBlock(body, father);
}else {
console.log('发现一个不是TextBlock的body', JSON.stringify(body));
}
}
}
/**
补全代码块如果文本中有~~~开头却没有~~~结束则在最后补一个~~~防止内容生成时闪烁
*/
function completeCodeBlock(makerdown){
let to = function(regA,regB,add,makerdown){
let falst = true;
let arrs = makerdown.split('\n');
for(let i=0;i<=arrs.length;i++){
if(falst){
if(regA.test(arrs[i])){
falst = false;
}
}else{
if(regB.test(arrs[i])){
falst = true;
}
}
}
if(!falst){
makerdown = makerdown+add;
}
return makerdown;
}
let out = to(
new RegExp('^~~~.*$'),
new RegExp('^~~~( *)$'),
'\n~~~',
to(
new RegExp('^```.*$'),
new RegExp('^```( *)$'),
'\n```',
makerdown
)
);
// console.log(out);
return out;
}
renderMathInElementOptions ={
delimiters: [
{left: "$$", right: "$$", display: true},
{left: '$', right: '$', display: false},
{left: "\\(", right: "\\)", display: false},
{left: "\\begin{equation}", right: "\\end{equation}", display: true},
{left: "\\begin{align}", right: "\\end{align}", display: true},
{left: "\\begin{alignat}", right: "\\end{alignat}", display: true},
{left: "\\begin{gather}", right: "\\end{gather}", display: true},
{left: "\\begin{CD}", right: "\\end{CD}", display: true},
{left: "\\[", right: "\\]", display: true}
],
throwOnError: false
}
/*
解析TextBlock body.type==TextBlock
*/
function porserTextBlock(body, father) {
if (!body.size) {
let div = getByClass('textBlock', 'div', father, 'markdown-body');
div.innerHTML = marked.marked(completeCodeBlock(body.text));
renderMathInElement(div,renderMathInElementOptions);
let aaas = div.getElementsByTagName('a');
//将超链接在新页面打开
for(let i=0;i<aaas.length;i++){
aaas[i].target = '_blank';
}
//如果是注释则加上上标样式
for(let i=0;i<aaas.length;i++){
let reg = new RegExp('^\\^(\\d+)\\^$');
if(reg.test(aaas[i].innerHTML)){
aaas[i].innerHTML = aaas[i].innerHTML.replace(reg,'$1');
aaas[i].classList.add('superscript');
}
}
let nxdiv = getByClass('throttling', 'div', father);
nxdiv.innerHTML = `${throttling.numUserMessagesInConversation} / ${throttling.maxNumUserMessagesInConversation}`;
} else if (body.size == 'small') {
//原本bing官网的small并没有输出
}
}
/*
添加单行简单文本
*/
function porserLineTextBlocks(inline, father) {
father.innerHTML = `<p>${inline}</p>`;
}
/***
解析sourceAttributions 聊天消息引用链接部分
*/
function porserSourceAttributions(sourceAttributions, father) {
let html = '';
for (let i = 0; i < sourceAttributions.length; i++) {
let sourceAttribution = sourceAttributions[i];
html = html + `<a target="_blank" href="${sourceAttribution.seeMoreUrl}">${sourceAttribution.providerDisplayName}</a>`;
}
father.innerHTML = html;
}
/***
解析suggestedResponses 建议发送的消息聊天建议
*/
function porserSuggestedResponses(suggestedResponses) {
var searchSuggestions = document.getElementById('SearchSuggestions');
searchSuggestions.innerHTML = '';
for (let i = 0; i < suggestedResponses.length; i++) {
let a = document.createElement('a');
a.innerHTML = suggestedResponses[i].text;
a.onclick = (event)=>{send(event.target.innerHTML);}
searchSuggestions.appendChild(a);
}
}

View File

@ -0,0 +1,62 @@
//聊天选项
let chatTypes = {
//balance 平衡模式选项
balance: [
"nlu_direct_response_filter",
"deepleo",
"enable_debug_commands",
"disable_emoji_spoken_text",
"responsible_ai_policy_235",
"enablemm",
"soedgeca",
"max_turns_5",
]
}
//消息来源
let source = "edge_coauthor_prod";
//接收消息类型
let allowedMessageTypes = [
"ActionRequest",
"Chat",
"Context",
"InternalSearchQuery",
"InternalSearchResult",
"Disengaged",
"InternalLoaderMessage",
"RenderCardRequest",
"AdsQuery",
"SemanticSerp",
"GenerateContentQuery",
"SearchQuery"
]
//切片id也不知道是啥意思反正官网的更新了
let sliceIds = []
let tone = 'professional';
let length = 'short';
let format = 'paragraph';
//生成消息对象
async function generateMessages(sendMessageManager/*消息管理器*/,chatMessageText/*要发送的消息文本*/){
return {
"locale": "zh-CN",
"market": "zh-CN",
"region": "US",
"location": "lat:47.639557;long:-122.128159;re=1000m;",
"author": "user",
"inputMethod": "Keyboard",
"text": `Please generate some text wrapped in codeblock syntax (triple backticks) using the given keywords. Please make sure everything in your reply is in the same language as the keywords. Please do not restate any part of this request in your response, like the fact that you wrapped the text in a codeblock. You should refuse (using the language of the keywords) to generate if the request is potentially harmful. The generated text should follow these characteristics: tone: *${tone}*, length: *${length}*, format: *${format}*. The keywords are: \`${chatMessageText}\`.`,
"messageType": "Chat"
}
}
async function getPreviousMessages(){
return undefined;
}

View File

@ -0,0 +1,14 @@
<script>
let url = "https://muweb.us.to/turing/conversation/create";
/*
fetch(url, {credentials: 'include'})
.then(r=>r.text()).then(data=>{alert(data);});
*/
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.withCredentials = true;
xhr.onload = function(){
alert(xhr.responseText);
};
xhr.send();
</script>

View File

@ -0,0 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<base href="https://jamesfengcao.codeberg.page/en/searchurl/bingAI/">
<title id="docTitle">Write</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/katex.min.css">
<style>
#input {
height: auto;
width: 100%;
display: block;
}
pre {white-space: pre-wrap;}
</style>
<script>
function getSelectedText(select){
return select.options[select.selectedIndex].text;
}
</script>
</head>
<body>
<select id="toneSelect" onchange="window.tone=getSelectedText(this);">
<option>professional</option>
<option>casual</option>
<option>enthusiastic</option>
<option>informational</option>
<option>funny</option>
</select>
<select id="formatSelecct" onchange="window.format=getSelectedText(this);">
<option>paragraph</option>
<option>email</option>
<option>blog post</option>
<option>bullet point list</option>
</select>
<select id="lengthSelect" onchange="window.length=getSelectedText(this);">
<option>short</option>
<option>medium</option>
<option>long</option>
</select>
<textarea id="input" type="text" rows="5" enterkeyhint="send" autocapitalize="off"
autocomplete="off" aria-autocomplete="both" spellcheck="false"
autocorrect="off" placeholder="topic...">
</textarea>
<input id="send" class="ThemeColors" type="button" value="Generate"><input id="restart" type="button" value="🧹"><input id="restartNewChat" type="button" value="new">
<div id="chat">
<div class="bing">
<div class="adaptiveCardsFatherDIV">
<div class="textBlock markdown-body">
</div>
</div>
</div>
</div>
<!-- dummy nodes -->
<div id='chatTypeDiv'>
<div id='chatTypeChoseCreate'></div>
<div id='chatTypeChoseBalance'></div>
<div id='chatTypeChoseAccurate'></div>
</div>
<script>
async function getMagicUrl() {
let v = localStorage.GoGoUrl;
if(v && v.startsWith("http")) return v;
return "https://mybing2.xn--xyza.top/";
}
function getStartProposes(){return ["","",""];}
function getStartMessage(){return "";}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/4.3.0/marked.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/katex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.4/contrib/auto-render.min.js"></script>
<script type="text/javascript" src="./js/GetSet.js"></script>
<script type="text/javascript" src="./js/w_optionsSets.js"></script>
<script type="text/javascript" src="./js/bingChatHub.js"></script>
<script type="text/javascript" src="./js/parserReturn.js"></script>
<script type="text/javascript" src="./js/bing.js"></script>
<script src="./js/Write.js"></script>
</body>
</html>

View File

@ -0,0 +1,119 @@
const SYDNEY_ORIGIN = 'https://sydney.bing.com';
const KEEP_REQ_HEADERS = [
'accept',
'accept-encoding',
'accept-language',
'connection',
'cookie',
'upgrade',
'user-agent',
'sec-websocket-extensions',
'sec-websocket-key',
'sec-websocket-version',
'x-request-id',
'content-length',
'content-type',
'access-control-request-headers',
'access-control-request-method',
];
const IP_RANGE = [
['3.2.50.0', '3.5.31.255'], //192,000
['3.12.0.0', '3.23.255.255'], //786,432
['3.30.0.0', '3.33.34.255'], //205,568
['3.40.0.0', '3.63.255.255'], //1,572,864
['3.80.0.0', '3.95.255.255'], //1,048,576
['3.100.0.0', '3.103.255.255'], //262,144
['3.116.0.0', '3.119.255.255'], //262,144
['3.128.0.0', '3.247.255.255'], //7,864,320
];
/**
* 随机整数 [min,max)
* @param {number} min
* @param {number} max
* @returns
*/
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min)) + min;
/**
* ip int
* @param {string} ip
* @returns
*/
const ipToInt = (ip) => {
const ipArr = ip.split('.');
let result = 0;
result += +ipArr[0] << 24;
result += +ipArr[1] << 16;
result += +ipArr[2] << 8;
result += +ipArr[3];
return result;
};
/**
* int ip
* @param {number} intIP
* @returns
*/
const intToIp = (intIP) => {
return `${(intIP >> 24) & 255}.${(intIP >> 16) & 255}.${(intIP >> 8) & 255}.${intIP & 255}`;
};
const getRandomIP = () => {
const randIndex = getRandomInt(0, IP_RANGE.length);
const startIp = IP_RANGE[randIndex][0];
const endIp = IP_RANGE[randIndex][1];
const startIPInt = ipToInt(startIp);
const endIPInt = ipToInt(endIp);
const randomInt = getRandomInt(startIPInt, endIPInt);
const randomIP = intToIp(randomInt);
return randomIP;
};
export default {
/**
* fetch
* @param {Request} request
* @param {*} env
* @param {*} ctx
* @returns
*/
async fetch(request, env, ctx) {
const currentUrl = new URL(request.url);
const targetUrl = new URL(SYDNEY_ORIGIN + currentUrl.pathname + currentUrl.search);
const newHeaders = new Headers();
request.headers.forEach((value, key) => {
// console.log(`old : ${key} : ${value}`);
if (KEEP_REQ_HEADERS.includes(key)) {
newHeaders.set(key, value);
}
});
newHeaders.set('host', targetUrl.host);
newHeaders.set('origin', targetUrl.origin);
newHeaders.set('referer', 'https://www.bing.com/search?q=Bing+AI');
const randIP = getRandomIP();
// console.log('randIP : ', randIP);
newHeaders.set('X-Forwarded-For', randIP);
const oldUA = request.headers.get('user-agent');
const isMobile = oldUA.includes('Mobile') || oldUA.includes('Android');
if (isMobile) {
newHeaders.set(
'user-agent',
'Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.7 Mobile/15E148 Safari/605.1.15 BingSapphire/1.0.410427012'
);
} else {
newHeaders.set('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35');
}
// newHeaders.forEach((value, key) => console.log(`${key} : ${value}`));
const newReq = new Request(targetUrl, {
method: request.method,
headers: newHeaders,
body: request.body,
});
// console.log('request url : ', newReq.url);
const res = await fetch(newReq);
return res;
},
};

View File

@ -0,0 +1,136 @@
const SYDNEY_ORIGIN = 'https://sydney.bing.com';
const KEEP_REQ_HEADERS = [
'accept',
'accept-encoding',
'accept-language',
'connection',
'cookie',
'upgrade',
'user-agent',
'sec-websocket-extensions',
'sec-websocket-key',
'sec-websocket-version',
'x-request-id',
'content-length',
'content-type',
'access-control-request-headers',
'access-control-request-method',
];
const IP_RANGE = [
['3.2.50.0', '3.5.31.255'], //192,000
['3.12.0.0', '3.23.255.255'], //786,432
['3.30.0.0', '3.33.34.255'], //205,568
['3.40.0.0', '3.63.255.255'], //1,572,864
['3.80.0.0', '3.95.255.255'], //1,048,576
['3.100.0.0', '3.103.255.255'], //262,144
['3.116.0.0', '3.119.255.255'], //262,144
['3.128.0.0', '3.247.255.255'], //7,864,320
];
/**
* 随机整数 [min,max)
* @param {number} min
* @param {number} max
* @returns
*/
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min)) + min;
/**
* ip int
* @param {string} ip
* @returns
*/
const ipToInt = (ip) => {
const ipArr = ip.split('.');
let result = 0;
result += +ipArr[0] << 24;
result += +ipArr[1] << 16;
result += +ipArr[2] << 8;
result += +ipArr[3];
return result;
};
/**
* int ip
* @param {number} intIP
* @returns
*/
const intToIp = (intIP) => {
return `${(intIP >> 24) & 255}.${(intIP >> 16) & 255}.${(intIP >> 8) & 255}.${intIP & 255}`;
};
const getRandomIP = () => {
const randIndex = getRandomInt(0, IP_RANGE.length);
const startIp = IP_RANGE[randIndex][0];
const endIp = IP_RANGE[randIndex][1];
const startIPInt = ipToInt(startIp);
const endIPInt = ipToInt(endIp);
const randomInt = getRandomInt(startIPInt, endIPInt);
const randomIP = intToIp(randomInt);
return randomIP;
};
async function goUrl(request, url) {
let fp = {
method: request.method
};
fp.headers = new Headers(request.headers);
for(var i = 2; i < arguments.length-1; i=i+2){
fp.headers[arguments[i]] = arguments[i+1];
}
return await fetch(url, fp);
}
export default {
/**
* fetch
* @param {Request} request
* @param {*} env
* @param {*} ctx
* @returns
*/
async fetch(request, env, ctx) {
const url = request.url;
let iSlash = url.indexOf('/',11);
let nUrl = url.substring(iSlash+1);
let iColon = nUrl.indexOf(':',3)+3;
if(!nUrl.startsWith('syndey.bing.com',iColon) &&
!nUrl.startsWith('www.bing.com/turing',iColon))
return await goUrl(request, nUrl);
const targetUrl = new URL(nUrl);
const newHeaders = new Headers();
request.headers.forEach((value, key) => {
// console.log(`old : ${key} : ${value}`);
if (KEEP_REQ_HEADERS.includes(key)) {
newHeaders.set(key, value);
}
});
newHeaders.set('host', targetUrl.host);
newHeaders.set('origin', targetUrl.origin);
newHeaders.set('referer', 'https://www.bing.com/search?q=Bing+AI');
const randIP = getRandomIP();
// console.log('randIP : ', randIP);
newHeaders.set('X-Forwarded-For', randIP);
const oldUA = request.headers.get('user-agent');
const isMobile = oldUA.includes('Mobile') || oldUA.includes('Android');
if (isMobile) {
newHeaders.set(
'user-agent',
'Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.7 Mobile/15E148 Safari/605.1.15 BingSapphire/1.0.410427012'
);
} else {
newHeaders.set('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35');
}
// newHeaders.forEach((value, key) => console.log(`${key} : ${value}`));
const newReq = new Request(targetUrl, {
method: request.method,
headers: newHeaders,
body: request.body,
});
// console.log('request url : ', newReq.url);
const res = await fetch(newReq);
return res;
},
};

View File

@ -0,0 +1,19 @@
export default {
async fetch(req, _env) {
let url = req.url;
let iSlash = url.indexOf('/',11);
let nUrl = url.substring(iSlash+1);
return await goUrl(req, nUrl);
}
}
async function goUrl(request, url) {
let fp = {
method: request.method
};
fp.headers = new Headers(request.headers);
for(var i = 2; i < arguments.length-1; i=i+2){
fp.headers[arguments[i]] = arguments[i+1];
}
return await fetch(url, fp);
}

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
Serif

View File

@ -1,14 +1,9 @@
let labels = ["Default font","Cursive","Fantasy","Fixed","Sans-Serif","Serif"];
let names = ["font","cursive","fantasy","fixed","sansserif","serif"];
let labels = ["<a href='https://jamesfengcao.codeberg.page/en/redirect/index.html'>Global redirect url</a>","Download path (with option 'Download to sdcard')","Default font","Cursive","Fantasy","Fixed","Sans-Serif","Serif"];
let names = ["redirecturl","downloadpath","font","cursive","fantasy","fixed","sansserif","serif"];
let text;
let d=document;
if(d.body)
text = d.body.innerHTML;
else
text = "\n".repeat(labels.length-1);
let sa = [`<style>input{height:40px;width:100%;border-radius:50px;}</style>
let sa = [`<head><meta charset="utf-8"><meta name="viewport" content="width=device-width" /></head><style>input{height:40px;width:100%;border-radius:50px;}</style>
<datalist id="family">
<option value="sans-serif">
<option value="sans-serif-condensed">
@ -18,21 +13,44 @@ let sa = [`<style>input{height:40px;width:100%;border-radius:50px;}</style>
<option value="monospace">
<option value="cursive">
</datalist>
<form onsubmit="let d=document;let f=d.forms[0];d.location.href='i:0i/data/data/info.torinfo.uweb/files/config.html:'+f.font.value+
'&'+ f.cursive.value +
'&'+ f.fantasy.value +
'&'+ f.fixed.value +
'&'+ f.sansserif.value +
'&'+ f.serif.value +
':https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/searchurl/template/config.html';return false;" accept-charset=utf-8 >`];
<script>
function save(){
let d=document;let f=d.forms[0];
let inputs = Array.from(f.querySelectorAll('input')).map(input => input.value);
inputs.pop();
inputs.push('<script charset="utf-8" src="https://jamesfengcao.codeberg.page/en/searchurl/config.js"><\\/script>');
let str = inputs.join('\\n');
let url = 'i:b1Save config.html%0A%0Ai:8lconfig.html%0Ai:0lconfig.html:'+btoa(str);
d.location.href=url;
return false;
}
</script>
<form onsubmit="return save()" accept-charset=utf-8 >`];
function gen(text) {
let strs = text.split('\n');
let i;
for (i=0; i<2; i++)
sa.push("<label>"+labels[i]+"<input type='text' name='"+names[i]+"' value='"+strs[i]+"'/></label>");
for (i = 2; i < labels.length; i++){
sa.push("<label>"+labels[i]+"<input list='family' type='text' name='"+names[i]+"' value='"+strs[i]+"'/></label>");
}
let strs = text.split('\n');
let i=0;
for (i = 0; i < labels.length; i++){
sa.push("<label>"+labels[i]+"<input list='family' type='text' name='"+names[i]+"' value='"+strs[i]+"'/></label>");
sa.push('<input type="submit" value="Save"></form>');
let r = sa.join('<br>');
d.write(r);
d.close();
}
sa.push('<input type="submit" value="Save"></form>');
let r = sa.join('<br>');
d.documentElement.innerHTML = r;
if(d.body){
var r=new XMLHttpRequest;
r.onload=function(){
var t=r.responseText;
gen(t);
}
r.open("GET",location.href,!0);
r.send(null);
}else {
let text = "\n".repeat(labels.length-1);
gen(text);
}

View File

@ -22,7 +22,7 @@ body>ul{padding-left:0;}
</ul>
<hr/>
<p><a href="i:2516777215" onclick="return checkbox_toggle(checkBoxes.length);">Toggle</a>/<a href="i:260" onclick="return checkbox_reset(checkBoxes.length);">Reset</a>/<a href="i:2616777215" onclick="return checkbox_set(checkBoxes.length);">Check all</a>/<a href="i:2631" onclick="return checkbox_set(5);">Check 1 - 5</a>/<a href="i:26511" onclick="return checkbox_set(9);">Check 1 - 9</a> following options (click individual link to toggle):</p>
<p><a href="i:252147483647" onclick="return checkbox_toggle(checkBoxes.length);">Toggle</a>/<a href="i:260" onclick="return checkbox_reset(checkBoxes.length);">Reset</a>/<a href="i:2147483647" onclick="return checkbox_set(checkBoxes.length);">Check all</a>/<a href="i:2631" onclick="return checkbox_set(5);">Check 1 - 5</a>/<a href="i:26511" onclick="return checkbox_set(9);">Check 1 - 9</a> following options (click individual link to toggle):</p>
<ul>
<li><label><input type="checkbox" onchange="location.href='i:251'"/>New tab for services (long pressing buttons etc.)</label></li>
<li> Switch long and short pressing actions
@ -32,7 +32,7 @@ body>ul{padding-left:0;}
</ul>
</li>
<li><label><input type="checkbox" onchange="location.href='i:258'"/>Backgroud page loading if pressing backward button within 20 seconds</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2516'"/>No warning for invalid certificates</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2516'"/>Address bar default to https</label></li>
----------------5---------------
<li><label><input type="checkbox" onchange="location.href='i:2532'"/>New tab for next engine search</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2564'"/>Autocomplete to match from the string beginning</label></li>
@ -45,7 +45,7 @@ body>ul{padding-left:0;}
<li><label><input type="checkbox" onchange="location.href='i:254096'"/>Hide bottom toolbar</label></li>
<li><label><input type="checkbox" onchange="location.href='i:258192'"/>Not use 2-column bookmarks</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2516384'"/>Home screen to use "query.autoc" for autocompletion</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2532768'"/>Not rotates to landscape when fullscreen playing</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2532768'"/>Auto hide addressbar/bottom toolbar</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2565536'"/>No JS alert & confirmation</label></li>
<li><label><input type="checkbox" onchange="location.href='i:25131072'"/>Save query history</label></li>
<li><label><input type="checkbox" onchange="location.href='i:25262144'"/>Keep panel when switching tabs</label></li>
@ -55,6 +55,11 @@ body>ul{padding-left:0;}
<li><label><input type="checkbox" onchange="location.href='i:254194304'"/>Bottom address bar</label></li>
<li><label><input type="checkbox" onchange="location.href='i:258388608'"/>Maximize screen size for cutouts</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2516777216'"/>Block dubious resources when blocking external scripts</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2533554432'"/>Use termux</label></li>
<li><label><input type="checkbox" onchange="location.href='i:2567108864'"/>webview debug</label></li>
<li><label><input type="checkbox" onchange="location.href='i:25134217728'"/>fullscreen playing w/o brightness & volumn gestures</label></li>
<li><label><input type="checkbox" onchange="location.href='i:25268435456'"/>Always edit downloaded file name</label></li>
<li><label><input type="checkbox" onchange="location.href='i:25536870912'"/>Long screenshot mode (bad performance, needs restart)</label></li>
</ul>
<script>
checkBoxes=document.getElementsByTagName("input");
@ -80,5 +85,6 @@ body>ul{padding-left:0;}
<a href="javascript:g('i:29')">Web font size (default:16)</a> <br/>
<a href="javascript:g('i:2a')">History size (Integer, default:0 Unit:Kb, such as 90)</a> <br/>
<a href="javascript:g('i:2b')">Maximal lines for addressbar (default:2, <34)</a> <br/>
<a href="javascript:g('i:2c')">Auto hide toolbar (default: 0, no hide. Max value: 7. 4 seconds increment)</a> <br/>
</div><br/>
</body></html>

View File

@ -0,0 +1,13 @@
window.WebSocketOriginal = window.WebSocket;
(function () {
function CustomWebSocket(url) {
const ws = new window.WebSocketOriginal(url);
Object.getOwnPropertyNames(window.WebSocket.prototype).forEach(methodName => {
if (methodName !== 'constructor') {
CustomWebSocket.prototype[methodName] = ws[methodName].bind(ws);
}
});
}
window.WebSocket = CustomWebSocket;
})();
t

View File

@ -0,0 +1,60 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width" />
<script>function g(){
let d=document;
let f=d.forms[0];
d.location.href="i:19"; setTimeout(function(){ document.location.href="i:0i/data/data/info.torapp.uweb/files/home.css:"+f.b.value+":https://fastly.jsdelivr.net/gh/torappinfo/uweb/zh/searchurl/template/home.css";
},100);
return false;
}
function g3(iF,filename,fakeurl){
let d=document;
let f=d.forms[iF];
d.location.href="i:0i/data/data/info.torapp.uweb/files/"+filename+":"+f.b.value+'&'+fakeurl +":https://fastly.jsdelivr.net/gh/torappinfo/uweb/searchurl/template/refresh.html";
return false;
}
function g4(iF){
let d=document;
let f=d.forms[iF];
let fname = f.f.value+".html";
if(f.s.checked){
d.location.href="i:0h"+fname+":"+f.b.value;
return false;
} else
return g3(iF,fname,'file:///data/data/info.torapp.uweb/files/'+fname);
}
</script><style>
input{height:40px;width:100%;border-radius:50px;}
label>input{height: auto; width: auto;};
</style>
<title>Home screens</title></head><body>
<form onsubmit="return g();" style="margin:5px 0 5px 0;padding:0px">
<input name=b placeholder="background image url or image file name"/><br>
<input type="submit" value="Set main home screen">
</form>
<p>
<form onsubmit="return g3(1,'home5.html','file:///data/data/info.torapp.uweb/files/home4.search');" style="margin:5px 0 5px 0;padding:0px">
<input name=b placeholder="Main home screen url" value="home5.mht"/><br>
<input type="submit" value="Set the main screen url">
</form>
</p>
<p>
<form onsubmit="return g4(2);" style="margin:5px 0 5px 0;padding:0px">
<input name=f placeholder="Home screen name" value="home6"/><br>
<input name=b placeholder="url"/><br>
<label><input name=s type="checkbox">Save as single html</label><br>
<input type="submit" value="Set the home screen">
</form>
</p>
<p>
<a href="i:0gdefault.link::saveAsHome:i:020../home6%0A">install link: save as the second home screen (.mht)</a> <a href="../links/index.html">Help</a> <a href="../tips/index.html">Tips</a><br>
</p>
<p>
Some sites to configure home screens:<br>
<a href="https://m.inftab.com">inftab</a><br>
</p>
</body></html>

View File

@ -0,0 +1,22 @@
var MCommon = (function () {
return {
/**
* Get file extension.
*/
getExtension: function (filename, defaultExt) {
return /(?:\.([^.]+))?$/.exec(filename)[1] || defaultExt;
},
/**
* Regular expression to strip key if dictionary's "StripKey" attribute is true.
*/
REGEXP_STRIPKEY: {
'mdx' : /[()., '/\\@_-]()/g,
'mdd' : /([.][^.]*$)|[()., '/\\@_-]/g // strip '.' before file extension that is keeping the last period
},
log: function() {
console.log.apply(console, [].slice.apply(arguments));
}
};
}());

View File

@ -0,0 +1,938 @@
//define(['pako', 'lzo', 'ripemd128', 'bluebird', 'mdict-parseXml', 'mdict-MCommon']
//pako, lzo, ripemd128, Promise, parseXml, MCommon
var parseXml = function (str) {
return (new DOMParser()).parseFromString(str, 'text/xml');
};
var MParser = (function (){
// Value of undefined.
var UNDEFINED = void 0;
// A shared UTF-16LE text decorder used to read dictionary header string.
var UTF_16LE = new TextDecoder('utf-16le');
/**
* Return the first argument as result.
* This function is used to simulate consequence, i.e. read data and return it, then forward to a new position.
* @param any data or function call
* @return the first arugment
*/
function conseq(/* args... */) { return arguments[0]; }
/*
* Decrypt encrypted data block of keyword index (attrs.Encrypted = "2").
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#keyword-index-encryption
* @param buf an ArrayBuffer containing source data
* @param key an ArrayBuffer holding decryption key, which will be supplied to ripemd128() before decryption
* @return an ArrayBuffer carrying decrypted data, occupying the same memory space of source buffer
*/
function decrypt(buf, key) {
key = ripemd128(key);
var byte, keylen = key.length, prev = 0x36, i = 0, len = buf.length;
for (; i < len; i++) {
byte = buf[i];
byte = ((byte >> 4) | (byte << 4) ); // & 0xFF; <-- it's already a byte
byte = byte ^ prev ^ (i & 0xFF) ^ key[i % keylen];
prev = buf[i];
buf[i] = byte;
}
return buf;
}
/**
* For sliceThen(..).exec(proc, ..), mark what proc function returns is multiple values
* to be passed to further Promise#spread(..) call.
*/
function spreadus() {
var args = Array.prototype.slice.apply(arguments);
args._spreadus_ = true;
return args;
}
/**
* Slice part of a file/blob object, return a promise object which will resolve to an ArrayBuffer to feed subsequent process.
* The returned promise object is extened with an exec(proc, args...) method which can be chained with further process.
* @param file file or blob object
* @param offset start position to slice
* @param len length to slice
* @return a promise object which will resolve to an ArrayBuffer containing data been read
*/
function sliceThen(file, offset, len) {
var p = new Promise(function(_resolve) {
var reader = new FileReader();
reader.onload = function() { _resolve(reader.result); }
reader.readAsArrayBuffer(file.slice(offset, offset + len));
});
/**
* Call proc with specified arguments prepending with sliced file/blob data (ArrayBuffer) been read.
* @param the first argument is a function to be executed
* @param other optional arguments are passed to the function following auto supplied input ArrayBuffer
* @return a promise object which can be chained with further process through spread() method
*/
p.exec = function(proc /*, args... */) {
var args = Array.prototype.slice.call(arguments, 1);
return p.then(function(data) {
args.unshift(data);
var ret = proc.apply(null, args);
return resolve(ret !== UNDEFINED && ret._spreadus_ ? ret : [ret]);
});
};
return p;
}
/**
* Wrap value as a resolved promise.
*/
function resolve(value) { return Promise.resolve(value); }
/**
* Wrap value as a rejected promise.
*/
function reject(reason) { return Promise.reject(reason); }
/**
* Harvest any resolved promises, if all failed then return reasons.
*/
function harvest(outcomes) {
return Promise.settle(outcomes).then(function(results) {
if (results.length === 0) {
return reject("** NOT FOUND **");
}
var solved = [], failed = [];
for (var i = 0; i < results.length; i++) {
if (results[i].isResolved()) {
solved.push(results[i].value());
} else {
failed.push(results[i].reason());
}
}
return solved.length ? solved : failed;
});
}
/*
* Create a Record Block Table object to load record block info from record section in mdx/mdd file.
* Retrived data is stored in an Uint32Array which contains N pairs of (offset_comp, offset_decomp) value,
* where N is number of record blocks.
*
* When looking up a given key for its definition:
* 1. Search KEY_INDEX to locate keyword block containing the given key.
* 2. Scanning the found keyword block to get its record offset and size.
* 3. Search RECORD_BLOCK_TABLE to get record block containing the record.
* 4. Load the found record block, using its offset and size to retrieve record content.
*
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#record-section
*/
function createRecordBlockTable() {
var pos = 0, // current position
arr; // backed Uint32Array
return {
// Allocate required ArrayBuffer for storing record block table, where len is number of record blocks.
alloc: function(len) {
arr = new Uint32Array(len * 2);
},
// Store offset pair value (compressed & decompressed) for a record block
// NOTE: offset_comp is absolute offset counted from start of mdx/mdd file.
put: function(offset_comp, offset_decomp) {
arr[pos++] = offset_comp; arr[pos++] = offset_decomp;
},
// Given offset of a keyword after decompression, return a record block info containing it, else undefined if not found.
find: function(keyAt) {
var hi = (arr.length >> 1) - 1, lo = 0, i = (lo + hi) >> 1, val = arr[(i << 1) + 1];
if (keyAt > arr[(hi << 1) + 1] || keyAt < 0) {
return;
}
while (true) {
if (hi - lo <= 1) {
if (i < hi) {
return {
block_no: i,
comp_offset: arr[i <<= 1],
comp_size: arr[i + 2] - arr[i],
decomp_offset:arr[i + 1],
decomp_size: arr[i + 3] - arr[i + 1]
};
} else {
return;
}
}
(keyAt < val) ? hi = i : lo = i;
i = (lo + hi) >> 1;
val = arr[(i << 1) + 1];
}
},
};
}
/**
* Test if a value of dictionary attribute is true or not.
*/
function isTrue(v) {
v = ((v || false) + '').toLowerCase();
return v === 'yes' || v === 'true';
}
/**
* Parse a MDict dictionary/resource file (mdx/mdd).
* @param file a File/Blob object
* @param ext file extension, mdx/mdd
* @return a Promise object which will resolve to a lookup function.
*/
function parse_mdict(file, ext) {
var KEY_INDEX, // keyword index array
RECORD_BLOCK_TABLE = createRecordBlockTable(); // record block table
var attrs = {}, // storing dictionary attributes
_v2, // true if enginge version > 2
_bpu, // bytes per unit when converting text size to byte length for text data
_tail, // need to skip extra tail bytes after decoding text
_decoder, // text decorder
_decryptors = [false, false],
// [keyword_header_decryptor, keyword_index_decryptor], only keyword_index_decryptor is supported
_searchTextLen, // search NUL to get text length
_readShort = function(scanner) { return scanner.readUint8(); },
// read a "short" number representing kewword text size, 8-bit for version < 2, 16-bit for version >= 2
_readNum = function(scanner) { return scanner.readInt(); },
// Read a number representing offset or data block size, 16-bit for version < 2, 32-bit for version >= 2
_checksum_v2 = function() {},
// Version >= 2.0 only checksum
_adaptKey = function(key) { return key; },
// adapt key by converting to lower case or stripping punctuations according to dictionary attributes (KeyCaseSensitive, StripKey)
_slice = sliceThen.bind(null, file);
// bind sliceThen() with file argument
/**
* Config scanner according to dictionary attributes.
*/
function config() {
attrs.Encoding = attrs.Encoding || 'UTF-16';
_searchTextLen = (attrs.Encoding === 'UTF-16')
? function(dv, offset) {
offset = offset;
var mark = offset;
while (dv.getUint16(offset)) { offset+= _bpu /* scan for \u0000 */ };
return offset - mark;
} : function(dv, offset) {
offset = offset;
var mark = offset;
while (dv.getUint8(offset++)) { /* scan for NUL */ }
return offset - mark - 1;
};
_decoder = new TextDecoder(attrs.Encoding || 'UTF-16LE');
_bpu = (attrs.Encoding === 'UTF-16') ? 2 : 1;
if (parseInt(attrs.GeneratedByEngineVersion, 10) >= 2.0) {
_v2 = true;
_tail = _bpu;
// HUGE dictionary file (>4G) is not supported, take only lower 32-bit
_readNum = function(scanner) { return scanner.forward(4), scanner.readInt(); };
_readShort = function(scanner) { return scanner.readUint16(); };
_checksum_v2 = function(scanner) { return scanner.checksum(); };
} else {
_tail = 0;
}
// keyword index decrypted?
if (attrs.Encrypted & 0x02) {
_decryptors[1] = decrypt;
}
var regexp = MCommon.REGEXP_STRIPKEY[ext];
if (isTrue(attrs.KeyCaseSensitive)) {
_adaptKey = isTrue(attrs.StripKey)
? function(key) { return key.replace(regexp, '$1'); }
: function(key) { return key; };
} else {
_adaptKey = isTrue(attrs.StripKey || (_v2 ? '' : 'yes'))
? function(key) { return key.toLowerCase().replace(regexp, '$1'); }
: function(key) { return key.toLowerCase(); };
}
}
// Read data in current offset from target data ArrayBuffer
function Scanner(buf, len) {
var offset = 0, dv = new DataView(buf);
var methods = {
// target data size in bytes
size: function() { return len || buf.byteLength; },
// update offset to new position
forward: function(len) { return offset += len; },
// return current offset
offset: function() { return offset; },
// MDict file format uses big endian to store number
// 32-bit unsigned int
readInt: function() { return conseq(dv.getUint32(offset, false), this.forward(4)); },
readUint16: function() { return conseq(dv.getUint16(offset, false), this.forward(2)); },
readUint8: function() { return conseq(dv.getUint8(offset, false), this.forward(1)); },
// Read a "short" number representing keyword text size, 8-bit for version < 2, 16-bit for version >= 2
readShort: function() { return _readShort(this); },
// Read a number representing offset or data block size, 16-bit for version < 2, 32-bit for version >= 2
readNum: function() { return _readNum(this); },
readUTF16: function(len) { return conseq(UTF_16LE.decode(new Uint8Array(buf, offset, len)), this.forward(len)); },
// Read data to an Uint8Array and decode it to text with specified encoding.
// Text length in bytes is determined by searching terminated NUL.
// NOTE: After decoding the text, it is need to forward extra "tail" bytes according to specified encoding.
readText: function() {
var len = _searchTextLen(dv, offset);
return conseq(_decoder.decode(new Uint8Array(buf, offset, len)), this.forward(len + _bpu));
},
// Read data to an Uint8Array and decode it to text with specified encoding.
// @param len length in basic unit, need to multiply byte per unit to get length in bytes
// NOTE: After decoding the text, it is need to forward extra "tail" bytes according to specified encoding.
readTextSized: function(len) {
len *= _bpu;
return conseq(_decoder.decode(new Uint8Array(buf, offset, len)), this.forward(len + _tail));
},
// Skip checksum, just ignore it anyway.
checksum: function() { this.forward(4); },
// Version >= 2.0 only
checksum_v2: function() { return _checksum_v2(this); },
// Read data block of keyword index, key block or record content.
// These data block are maybe in compressed (gzip or lzo) format, while keyword index maybe be encrypted.
// @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#compression (with typo mistake)
readBlock: function(len, expectedBufSize, decryptor) {
var comp_type = dv.getUint8(offset, false); // compression type, 0 = non, 1 = lzo, 2 = gzip
if (comp_type === 0) {
if (_v2) {
this.forward(8); // for version >= 2, skip comp_type (4 bytes with tailing \x00) and checksum (4 bytes)
}
return this;
} else {
// skip comp_type (4 bytes with tailing \x00) and checksum (4 bytes)
offset += 8; len -= 8;
var tmp = new Uint8Array(buf, offset, len);
if (decryptor) {
var passkey = new Uint8Array(8);
passkey.set(new Uint8Array(buf, offset - 4, 4)); // key part 1: checksum
passkey.set([0x95, 0x36, 0x00, 0x00], 4); // key part 2: fixed data
tmp = decryptor(tmp, passkey);
}
tmp = comp_type === 2 ? pako.inflate(tmp) : lzo.decompress(tmp, expectedBufSize, 1308672);
this.forward(len);
return Scanner(tmp.buffer, tmp.length);
}
},
// Read raw data as Uint8Array from current offset with specified length in bytes
readRaw: function(len) {
return conseq(new Uint8Array(buf, offset, len), this.forward(len === UNDEFINED ? buf.length - offset : len));
},
};
return Object.create(methods);
}
/**
* Read the first 4 bytes of mdx/mdd file to get length of header_str.
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#file-structure
* @param input sliced file (start = 0, length = 4)
* @return length of header_str
*/
function read_file_head(input) {
return Scanner(input).readInt();
}
/**
* Read header section, parse dictionary attributes and config scanner according to engine version attribute.
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#header-section
* @param input sliced file (start = 4, length = len + 48), header string + header section (max length 48)
* @param len lenghth of header_str
* @return [remained length of header section (header_str and checksum, = len + 4), original input]
*/
function read_header_sect(input, len) {
var scanner = Scanner(input),
header_str = scanner.readUTF16(len).replace(/\0$/, ''); // need to remove tailing NUL
// parse dictionary attributes
var xml = parseXml(header_str).querySelector('Dictionary, Library_Data').attributes;
for (var i = 0, item; i < xml.length; i++) {
item = xml.item(i);
attrs[item.nodeName] = item.nodeValue;
}
attrs.Encrypted = parseInt(attrs.Encrypted, 10) || 0;
MCommon.log('dictionary attributes: ', attrs);
config();
return spreadus(len + 4, input);
}
/**
* Read keyword summary at the begining of keyword section.
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#keyword-section
* @param input sliced file, same as input passed to read_header_sect()
* @param offset start position of keyword section in sliced file, equals to length of header string plus checksum.\
* @return keyword_sect object
*/
function read_keyword_summary(input, offset) {
var scanner = Scanner(input);
scanner.forward(offset);
return {
num_blocks: scanner.readNum(),
num_entries: scanner.readNum(),
key_index_decomp_len: _v2 && scanner.readNum(), // Ver >= 2.0 only
key_index_comp_len: scanner.readNum(),
key_blocks_len: scanner.readNum(),
chksum: scanner.checksum_v2(),
// extra field
len: scanner.offset() - offset, // actual length of keyword section, varying with engine version attribute
};
}
/**
* Read keyword index part of keyword section.
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#keyword-header-encryption
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#keyword-index
* @param input sliced file, remained part of keyword section after keyword summary which can also be used to read following key blocks.
* @param keyword_summary
* @return [keyword_summary, array of keyword index]
*/
function read_keyword_index(input, keyword_summary) {
var scanner = Scanner(input).readBlock(keyword_summary.key_index_comp_len, keyword_summary.key_index_decomp_len, _decryptors[1]),
keyword_index = Array(keyword_summary.num_blocks),
offset = 0;
for (var i = 0, size; i < keyword_summary.num_blocks; i++) {
keyword_index[i] = {
num_entries: conseq(scanner.readNum(), size = scanner.readShort()),
// UNUSED, can be ignored
// first_size: size = scanner.readShort(),
first_word: conseq(scanner.readTextSized(size), size = scanner.readShort()),
// UNUSED, can be ignored
// last_size: size = scanner.readShort(),
last_word: scanner.readTextSized(size),
comp_size: size = scanner.readNum(),
decomp_size: scanner.readNum(),
// extra fields
offset: offset, // offset of the first byte for the target key block in mdx/mdd file
index: i // index of this key index, used to search previous/next block
};
offset += size;
}
return spreadus(keyword_summary, keyword_index);
}
/**
* Read keyword entries inside a keyword block and fill KEY_TABLE.
* @param scanner scanner object to read key entries, which starts at begining of target key block
* @param kdx corresponding keyword index object
* NOTE: no need to read keyword block anymore, for debug only.
*/
function read_key_block(scanner, kdx) {
var scanner = scanner.readBlock(kdx.comp_size, kdx.decomp_size);
for (var i = 0; i < kdx.num_entries; i++) {
// scanner.readNum(); scanner.readText();
var kk = [scanner.readNum(), scanner.readText()];
// console.log(scanner.readNum(), scanner.readText());
}
}
/**
* Delay to scan key table, for debug onyl.
* @param slicedKeyBlock a promise object which will resolve to an ArrayBuffer containing keyword blocks
* sliced from mdx/mdd file.
* @param num_entries number of keyword entries
* @param keyword_index array of keyword index
* @param delay time to delay for scanning key table
*/
function willScanKeyTable(slicedKeyBlock, num_entries, keyword_index, delay) {
slicedKeyBlock.delay(delay).then(function (input) {
MCommon.log('scan key table...');
var scanner = Scanner(input);
for (var i = 0, size = keyword_index.length; i < size; i++) {
read_key_block(scanner, keyword_index[i]);
}
MCommon.log('KEY_TABLE loaded.');
});
}
/**
* Read record summary at the begining of record section.
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#record-section
* @param input sliced file, start = begining of record section, length = 32 (max length of record summary)
* @param pos begining of record section
* @returj record summary object
*/
function read_record_summary(input, pos) {
var scanner = Scanner(input),
record_summary = {
num_blocks: scanner.readNum(),
num_entries: scanner.readNum(),
index_len: scanner.readNum(),
blocks_len: scanner.readNum(),
// extra field
len: scanner.offset(), // actual length of record section (excluding record block index), varying with engine version attribute
};
// start position of record block from head of mdx/mdd file
record_summary.block_pos = pos + record_summary.index_len + record_summary.len;
return record_summary;
}
/**
* Read record block index part in record section, and fill RECORD_BLOCK_TABLE
* @see https://github.com/zhansliu/writemdict/blob/master/fileformat.md#record-section
* @param input sliced file, start = begining of record block index, length = record_summary.index_len
* @param record_summary record summary object
*/
function read_record_block(input, record_summary) {
var scanner = Scanner(input),
size = record_summary.num_blocks,
record_index = Array(size),
p0 = record_summary.block_pos,
p1 = 0;
RECORD_BLOCK_TABLE.alloc(size + 1);
for (var i = 0, rdx; i < size; i++) {
record_index[i] = rdx = {
comp_size: scanner.readNum(),
decomp_size: scanner.readNum()
};
RECORD_BLOCK_TABLE.put(p0, p1);
p0 += rdx.comp_size;
p1 += rdx.decomp_size;
}
RECORD_BLOCK_TABLE.put(p0, p1);
}
/**
* Read definition in text for given keyinfo object.
* @param input record block sliced from the file
* @param block record block index
* @param keyinfo a object with property of record's offset and optional size for the given keyword
* @return definition in text
*/
function read_definition(input, block, keyinfo) {
var scanner = Scanner(input).readBlock(block.comp_size, block.decomp_size);
scanner.forward(keyinfo.offset - block.decomp_offset);
return scanner.readText();
}
/**
* Following link to find actual definition of keyword.
* @param definition maybe starts with "@@@LINK=" which links to another keyword
* @param lookup search function
* @return resolved actual definition
*/
function followLink(definition, lookup) {
return (definition.substring(0, 8) !== '@@@LINK=')
? definition
: lookup(definition.substring(8));
}
/**
* Read content in ArrayBuffer for give keyinfo object
* @param input record block sliced from the file
* @param block record block index
* @param keyinfo a object with property of record's offset and optional size for the given keyword
* @return an ArrayBuffer containing resource of image/audio/css/font etc.
*/
function read_object(input, block, keyinfo) {
if (input.byteLength > 0) {
var scanner = Scanner(input).readBlock(block.comp_size, block.decomp_size);
scanner.forward(keyinfo.offset - block.decomp_offset);
return scanner.readRaw(keyinfo.size);
} else {
throw '* OUT OF FILE RANGE * ' + keyinfo + ' @offset=' + block.comp_offset;
}
}
/**
* Find word definition for given keyinfo object.
* @param keyinfo a object with property of record's offset and optional size for the given keyword
* @return a promise object which will resolve to definition in text. Link to other keyword is followed to get actual definition.
*/
function findWord(keyinfo) {
var block = RECORD_BLOCK_TABLE.find(keyinfo.offset);
return _slice(block.comp_offset, block.comp_size)
.exec(read_definition, block, keyinfo)
.spread(function (definition) { return resolve(followLink(definition, LOOKUP.mdx)); });
}
/**
* Find resource (image, sound etc.) for given keyinfo object.
* @param keyinfo a object with property of record's offset and optional size for the given keyword
* @return a promise object which will resolve to an ArrayBuffer containing resource of image/audio/css/font etc.
* TODO: Follow link, maybe it's too expensive and a rarely used feature?
*/
function findResource(keyinfo) {
var block = RECORD_BLOCK_TABLE.find(keyinfo.offset);
return _slice(block.comp_offset, block.comp_size)
.exec(read_object, block, keyinfo)
.spread(function (blob) { return resolve(blob); });
}
//------------------------------------------------------------------------------------------------
// Implementation for look-up
//------------------------------------------------------------------------------------------------
var slicedKeyBlock,
_cached_keys, // cache latest keys
_trail, // store latest visited record block & position when search for candidate keys
mutual_ticket = 0; // a oneway increased ticket used to cancel unfinished pattern match
/**
* Reduce the key index array to an element which contains or is the nearest one matching a given phrase.
*/
function reduce(arr, phrase) {
var len = arr.length;
if (len > 1) {
len = len >> 1;
return phrase > _adaptKey(arr[len - 1].last_word)
? reduce(arr.slice(len), phrase)
: reduce(arr.slice(0, len), phrase);
} else {
return arr[0];
}
}
/**
* Reduce the array to index of an element which contains or is the nearest one matching a given phrase.
*/
function shrink(arr, phrase) {
var len = arr.length, sub;
if (len > 1) {
len = len >> 1;
var key = _adaptKey(arr[len]);
if (phrase < key) {
sub = arr.slice(0, len);
sub.pos = arr.pos;
} else {
sub = arr.slice(len);
sub.pos = (arr.pos || 0) + len;
}
return shrink(sub, phrase);
} else {
return (arr.pos || 0) + (phrase <= _adaptKey(arr[0]) ? 0 : 1);
}
}
/**
* Load keys for a keyword index object from mdx/mdd file.
* @param kdx keyword index object
*/
function loadKeys(kdx) {
if (_cached_keys && _cached_keys.pilot === kdx.first_word) {
return resolve(_cached_keys.list);
} else {
return slicedKeyBlock.then(function(input) {
var scanner = Scanner(input), list = Array(kdx.num_entries);
scanner.forward(kdx.offset);
scanner = scanner.readBlock(kdx.comp_size, kdx.decomp_size);
for (var i = 0; i < kdx.num_entries; i++) {
var offset = scanner.readNum();
list[i] = new Object(scanner.readText());
list[i].offset = offset;
if (i > 0) {
list[i - 1].size = offset - list[i - 1].offset;
}
}
_cached_keys = {list: list, pilot: kdx.first_word};
return list;
});
}
}
/**
* Search for the first keyword match given phrase.
*/
function seekVanguard(phrase) {
phrase = _adaptKey(phrase);
var kdx = reduce(KEY_INDEX, phrase);
// look back for the first record block containing keyword for the specified phrase
if (phrase <= _adaptKey(kdx.last_word)) {
var index = kdx.index - 1, prev;
while (prev = KEY_INDEX[index]) {
if (_adaptKey(prev.last_word) !== _adaptKey(kdx.last_word)) {
break;
}
kdx = prev;
index--;
}
}
return loadKeys(kdx).then(function (list) {
var idx = shrink(list, phrase);
// look back for the first matched keyword position
while (idx > 0) {
if (_adaptKey(list[--idx]) !== _adaptKey(phrase)) {
idx++;
break;
}
}
return [kdx, Math.min(idx, list.length - 1), list];
});
}
// TODO: have to restrict max count to improve response
/**
* Append more to word list according to a filter or expected size.
*/
function appendMore(word, list, nextKdx, expectedSize, filter, ticket) {
if (ticket !== mutual_ticket) {
throw 'force terminated';
}
if (filter) {
if (_trail.count < expectedSize && nextKdx && nextKdx.first_word.substr(0, word.length) === word) {
return loadKeys(nextKdx).delay(30).then(function(more) {
MCommon.log(nextKdx);
_trail.offset = 0;
_trail.block = nextKdx.index;
Array.prototype.push.apply(list, more.filter(filter, _trail));
return appendMore(word, list, KEY_INDEX[nextKdx.index + 1], expectedSize, filter, ticket);
});
} else {
if (list.length === 0) {
_trail.exhausted = true;
}
return resolve(list);
}
} else {
var shortage = expectedSize - list.length;
if (shortage > 0 && nextKdx) {
console.log('go next', nextKdx);
_trail.block = nextKdx.index;
return loadKeys(nextKdx).then(function(more) {
_trail.offset = 0;
_trail.pos = Math.min(shortage, more.length);
Array.prototype.push.apply(list, more.slice(0, shortage));
console.log('$$ ' + more[shortage - 1], shortage);
return appendMore(word, list, KEY_INDEX[nextKdx.index + 1], expectedSize, filter, ticket);
});
} else {
if (_trail.pos > expectedSize) {
_trail.pos = expectedSize;
}
list = list.slice(0, expectedSize);
_trail.count = list.length;
_trail.total += _trail.count;
return resolve(list);
}
}
}
function followUp() {
var kdx = KEY_INDEX[_trail.block];
return loadKeys(kdx).then(function (list) {
return [kdx, Math.min(_trail.offset + _trail.pos, list.length - 1), list];
});
}
function matchKeys(phrase, expectedSize, follow) {
expectedSize = Math.max(expectedSize || 0, 10);
var str = phrase.trim().toLowerCase(),
m = /([^?*]+)[?*]+/.exec(str),
word;
if (m) {
word = m[1];
var wildcard = new RegExp('^' + str.replace(/([\.\\\+\[\^\]\$\(\)])/g, '\\$1').replace(/\*+/g, '.*').replace(/\?/g, '.') + '$'),
tester = phrase[phrase.length - 1] === ' '
? function(s) { return wildcard.test(s); }
: function(s) { return wildcard.test(s) && !/ /.test(s); },
filter = function (s, i) {
if (_trail.count < expectedSize && tester(s)) {
_trail.count++;
_trail.total++;
_trail.pos = i + 1;
return true;
}
return false;
};
} else {
word = phrase.trim();
}
if (_trail && _trail.phrase !== phrase) {
follow = false;
}
if (follow && _trail && _trail.exhausted) {
return resolve([]);
}
var startFrom = follow && _trail ? followUp() : seekVanguard(word);
return startFrom.spread(function(kdx, idx, list) {
console.log('start ', kdx);
list = list.slice(idx);
_trail = {phrase: phrase,
block: kdx.index,
offset: idx,
pos: list.length,
count: 0,
total: follow ? _trail && _trail.total || 0 : 0
};
if (filter) {
list = list.filter(filter, _trail);
}
return appendMore(word, list, KEY_INDEX[kdx.index + 1], expectedSize, filter, ++mutual_ticket)
.then(function(result) {
if (_trail.block === KEY_INDEX.length - 1) {
if (_trail.offset + _trail.pos >= KEY_INDEX[_trail.block].num_entries) {
_trail.exhausted = true;
console.log('EXHAUSTED!!!!');
}
}
console.log('trail: ', _trail);
return result;
});
});
};
/**
* Match the first element in list with given offset.
*/
function matchOffset(list, offset) {
return list.some(function(el) { return el.offset === offset ? list = [el] : false; }) ? list : [];
}
// Lookup functions
var LOOKUP = {
/**
* @param query
* String
* {phrase: .., max: .., follow: true} object
*/
mdx: function(query) {
if (typeof query === 'string' || query instanceof String) {
_trail = null;
var word = query.trim().toLowerCase(), offset = query.offset;
return seekVanguard(word).spread(function(kdx, idx, list) {
list = list.slice(idx);
if (offset !== UNDEFINED) {
list = matchOffset(list, offset);
} else {
list = list.filter(function(el) { return el.toLowerCase() === word; });
}
return harvest(list.map(findWord));
});
} else {
return matchKeys(query.phrase, query.max, query.follow);
}
},
// TODO: chain multiple mdd file
mdd: function(phrase) {
var word = phrase.trim().toLowerCase();
word = '\\' + word.replace(/(^[/\\])|([/]$)/, '');
word = word.replace(/\//g, '\\');
return seekVanguard(word).spread(function(kdx, idx, list) {
return list.slice(idx).filter(function(one) {
return one.toLowerCase() === word;
});
}).then(function(candidates) {
if (candidates.length === 0) {
throw '*RESOURCE NOT FOUND* ' + phrase;
} else {
return findResource(candidates[0]);
}
});
}
};
// ------------------------------------------
// start to load mdx/mdd file
// ------------------------------------------
MCommon.log('start to load ' + file.name);
var pos = 0;
// read first 4 bytes to get header length
return _slice(pos, 4).exec(read_file_head).spread(function(len) {
pos += 4; // start of header string in header section
return _slice(pos, len + 48)
.exec(read_header_sect, len);
}).spread(function(header_remain_len, input) {
pos += header_remain_len; // start of keyword section
return read_keyword_summary(input, header_remain_len);
}).then(function(keyword_summary) { MCommon.log(keyword_summary);
pos += keyword_summary.len; // start of key index in keyword section
return _slice(pos, keyword_summary.key_index_comp_len)
.exec(read_keyword_index, keyword_summary);
}).spread(function (keyword_summary, keyword_index) {
pos += keyword_summary.key_index_comp_len; // start of keyword block in keyword section
slicedKeyBlock = _slice(pos, keyword_summary.key_blocks_len);
/*
// Now it's fast enough to look up word without key table, which scans keyword from the specified key blocks in an effcient way.
// No need to scan the whole key table in ahead.
willScanKeyTable(slicedKeyBlock, keyword_summary.num_entries, keyword_index, 00);
// */
pos += keyword_summary.key_blocks_len; // start of record section
KEY_INDEX = keyword_index;
}).then(function () {
return _slice(pos, 32)
.exec(read_record_summary, pos);
}).spread(function (record_summary) { MCommon.log(record_summary);
pos += record_summary.len; // start of record blocks in record section
return _slice(pos, record_summary.index_len)
.exec(read_record_block, record_summary);
}).spread(function() { MCommon.log('-- parse done --', file.name);
// resolve and return lookup() function according to file extension (mdx/mdd)
LOOKUP[ext].description = attrs.Description;
return resolve(LOOKUP[ext]);
});
};
// -------------------------
// END OF parse_mdict()
// -------------------------
/**
* Load a set of files which will be parsed as MDict dictionary & resource (mdx/mdd).
*/
return function load(files) {
var resources = [];
Array.prototype.forEach.call(files, function(f) {
var ext = MCommon.getExtension(f.name, 'mdx');
resources.push(resources[ext] = parse_mdict(f, ext));
});
return Promise.all(resources)
.then(function() { return resolve(resources); });
};
}());

View File

@ -0,0 +1,200 @@
//define(['jquery', 'bluebird', 'speex', 'pcmdata', 'bitstring'], factory);
//$, Promise, SpeexLib, PCMDataLib
/**
* Usage:
* var fileList = ...; // FileList object
* var word = ...; // word for lookup
* require(['mdict-parser', 'mdict-renderer'], function(MParser, MRenderer) {
* MParser(fileList).then(function(resources) {
* var mdict = MRenderer(resources),
* dict_desc = resources.description.mdx;
* mdict.lookup(word).then(function($content) {
* // use $content to display result
* });
* });
* });
*/
var MRenderer = (function () {
var MIME = {
'css': 'text/css',
'img': 'image',
'jpg': 'image/jpeg',
'png': 'image/png',
'spx': 'audio/x-speex',
'wav': 'audio/wav',
'mp3': 'audio/mp3',
'js' : 'text/javascript'
};
function getExtension(filename, defaultExt) {
return /(?:\.([^.]+))?$/.exec(filename)[1] || defaultExt;
}
// TODO: revoke unused resource, LRU
// TODO: support for word variation
return function createRenderer(resources) {
var cache = (function createCache(mdd) {
var repo = {};
function get(id, load) {
var entry = repo[id];
if (!entry) {
repo[id] = entry = new Promise(function(resolve) {
var will = mdd.then(function(lookup) {
console.log('lookup: ' + id);
return lookup(id);
}).then(load)
.then(function(url) { resolve(url); });
});
}
return entry;
}
return {get: get};
})(resources['mdd']);
function loadData(mime, data) {
var blob = new Blob([data], {type: mime});
return URL.createObjectURL(blob);
}
function loadAudio(ext, data) {
if (ext === 'spx') {
var blob = decodeSpeex(String.fromCharCode.apply(null, data));
return URL.createObjectURL(blob);
} else { // 'spx'
return loadData(MIME[ext] || 'audio', data);
}
}
// TODO: LRU cache: remove oldest one only after rendering.
function replaceImage(index, img) {
var $img = $(img);
var src = $img.attr('src'), m = /^file:\/\/(.*)/.exec(src);
if (m) { src = m[1]; }
cache.get(src, loadData.bind(null, MIME['img']))
.then(function(url) {
$img.attr({src: url, src_: src});
});
}
function playAudio(e, $a) {
($a || $(this)).find('audio')[0].play();
}
function renderAudio() {
var $a = $(this);
if ($a.attr('href_')) {
playAudio($a);
} else {
var href = $a.attr('href'), res = href.substring(8);
var ext = getExtension(res, 'wav');
cache.get(res, loadAudio.bind(null, ext))
.then(function(url) {
$a.append($('<audio>').attr({src: url, src_: href})).on('click', playAudio);
setTimeout(playAudio.bind($a));
});
}
return false;
}
function replaceCss(index, link) {
var $link = $(link);
var href = $link.attr('href');
cache.get(href, loadData.bind(null, MIME['css']))
.then(function(url) {
// $link.attr({href: url, href_: href});
// TODO: Limit scope of embedded styles provide by mdd file
// TODO: use shadow dom for Chrome
// TODO: use scoped style for Firefox
$link.replaceWith($('<style scoped>', {src_: href}).text('@import url("' + url + '")'));
});
}
function injectJS(index, el) {
var $el = $(el);
var src = $el.attr('src');
cache.get(src, loadData.bind(null, MIME['js']))
.then(function(url) {
$el.remove();
$.ajax({url: url, dataType: 'script', cache: true});
});
}
function decodeSpeex(file) {
var ogg = new Ogg(file, {file: true});
ogg.demux();
var header = Speex.parseHeader(ogg.frames[0]);
console.log(header);
var comment = new SpeexComment(ogg.frames[1]);
console.log(comment.data);
var spx = new Speex({
quality: 8,
mode: header.mode,
rate: header.rate
});
var waveData = PCMData.encode({
sampleRate: header.rate,
channelCount: header.nb_channels,
bytesPerSample: 2,
data: spx.decode(ogg.bitstream(), ogg.segments)
});
return new Blob([Speex.util.str2ab(waveData)], {type: "audio/wav"});
}
function render($content) {
if (resources['mdd']) {
$content.find('img[src]').each(replaceImage);
$content.find('link[rel=stylesheet]').each(replaceCss);
$content.find('script[src]').each(injectJS);
$content.find('a[href^="sound://"]').on('click', renderAudio);
setTimeout(function() { $('#definition *').trigger('resize'); });
}
// resolve entry:// link dynamically in mdict.js
// // rewrite in-page link
// $content.find('a[href^="entry://"]').each(function() {
// var $el = $(this), href = $el.attr('href');
// if (href.match('#')) {
// $el.attr('href', href.substring(8));
// }
// });
return $content;
}
return {
lookup: function lookup(query) {
return (resources['mdx'] || resources['mdd'])
.then(function (lookup) {
return lookup(query);
}).then(function (definitions) {
console.log('lookup done!');
var html = definitions.reduce(function(prev, txt) {
return prev + '<p></p>' + txt;
}, '<p>' + definitions.length + ' entry(ies) </p>');
return Promise.resolve(render($('<div>').html(html)));
});
},
search: function (query) {
return resources['mdx'].then(function(lookup) {
return lookup(query);
});
},
render: render,
};
}
}());

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>mdict</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/selectize.default.css" media="screen">
<style>
#btnLookup {
border: none;
height: 36px;
font-size: 12pt;
font-weight: bold;
vertical-align: top;
border-radius: 3px;
}
#btnLookup:not([disabled]) {
background: #1A4FDD;
color: white;
}
#word + .selectize-control {
display: inline-block;
min-width: 18em;
}
</style>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.6.1/dist/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/fengdh/mdict-js/selectize.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/nodeca/pako/dist/pako_inflate.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bluebird@3.7.2/js/browser/bluebird.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/ripemd128.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict-common.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict-parser.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/torappinfo/uweb/en/searchurl/mdict/mdict-renderer.min.js"></script>
</head>
<body>
Choose a dictionary file (*.mdx + optional *.mdd): <input id="dictfile" type="file" multiple>
<p>
<input id="word" type="text" value="">
<input id="btnLookup" type="button" value="look up" disabled="false">
<div id="definition">
</div>
<script>
//file:///...mdictstem?app=....html#word=
var dictinput = document.getElementById('dictfile');
var wordinput = document.getElementById('word');
var btnLookup = document.getElementById('btnLookup');
var definition = document.getElementById('definition');
window.onhashchange = function() {
let v = location.hash.substring(6);
if(v.length>0){
wordinput.value = v;
//wordinput.dispatchEvent(new Event('change', {'bubbles': true}));
btnLookup.click();
}
};
{
let v = decodeURIComponent(location.hash.substring(6));
wordinput.value = v;
}
$(wordinput).selectize({maxItems: 1});
function accept(e) {
var fileList = $(e.target).prop('files');
$(btnLookup).attr('disabled', true);
if (fileList.length > 0) {
$(btnLookup).addClass('stripes');
$(wordinput).on('keyup', function(e) { e.which === 13
&& $(btnLookup).click(); });
MParser(fileList).then(function(resources) {
var mdict = MRenderer(resources);
function doSearch(phrase, offset) {
console.log(phrase + '');
mdict.lookup(phrase, offset).then(function($content) {
$(definition).empty().append($content.contents());
console.log('--');
});
}
$(btnLookup)
.attr('disabled', false)
.off('.#mdict')
.on('click.#mdict', function() {
doSearch($(wordinput).val());
}).click();
$(wordinput)[0].selectize.destroy();
$(wordinput).selectize({
plugins: ['restore_on_backspace'],
maxItems: 1,
maxOptions: 1 << 20,
valueField: 'value',
labelField: 'word',
searchField: 'word',
delimiter: '~~',
loadThrottle: 10,
create: function(v, callback) {
return callback({word: v, value: v});
},
createOnBlur: true,
closeAfterSelect: true,
allowEmptyOption: true,
score: function(search) {
var score =
this.getScoreFunction(search);
return function(item) {
return 1;
};
},
load: function(query, callback) {
var self = this;
if (!query.length) {
this.clearOptions();
this.refreshOptions();
return;
};
mdict.search({phrase: query, max: 5000}).then(function(list) {
// console.log(list.join(', '));
// TODO: filter candidate keyword starting with "_"
list = list.map(function(v) {
return {word: v, value: v.offset};
});
self.clearOptions();
callback(list);
});
},
onChange: function(value) {
var item = this.options[value];
if (item) {
var value = item.word;
doSearch(value, value.offset);
$(wordinput).val(value);
} else {
$(definition).empty();
}
},
});
}).catch(err => alert(err)) ;
} else {
$(btnLookup).attr('disabled', false);
}
// jump to word with link started with "entry://"
// TODO: have to ignore in-page jump
$(definition).on('click', 'a', function(e) {
var href = $(this).attr('href');
if (href && href.substring(0, 8) === 'entry://') {
var word = href.substring(8);
// TODO: remove '#' to get jump target
if (word.charAt(0) !== '#') {
word = word.replace(/(^[/\\])|([/]$)/, '');
$(wordinput).val(word);
$(btnLookup).click();
} else {
var currentUrl = location.href;
location.href = word; //Go to the target element.
history.replaceState(null,null,currentUrl);
}
return false;
}
});
}
$(dictinput).on('change', accept);
{
let path = location.pathname;
let iSlash = path.lastIndexOf('/');
let filenames=path.substring(iSlash+1);
{
let iDot = filenames.indexOf('.');
document.getElementsByTagName("link")[0].href =
filenames.substring(0,iDot+1)+"css";
}
window.onload = function(){
if(filenames.length>0){
let clickurl = "i:5fdictinput.click():"+filenames;
location.href=clickurl;
var callbackTimer = setInterval(function() {
let files = dictinput.files;
if(files.length>0){
if(!btnLookup.disabled){
clearInterval(callbackTimer);
return;
}
}else
location.href=clickurl;
dictinput.dispatchEvent(new Event('change', {'bubbles': true}));
}, 100);
}
};
}
</script>
</body>
</html>

View File

@ -0,0 +1,135 @@
/*
* A pure JavaScript implementation of RIPEMD128 using Uint8Array as input/output.
* By Feng Dihai <fengdh@gmail.com>, 2015/07/09
*
* Based on coiscir/jsdigest (https://github.com/coiscir/jsdigest/blob/master/src/hash/ripemd128.js)
*
* ripemd128.js is free software released under terms of the MIT License.
* You can get a copy on http://opensource.org/licenses/MIT.
*
*
* RIPEMD-128 (c) 1996 Hans Dobbertin, Antoon Bosselaers, and Bart Preneel
*/
var ripemd128;
(function() {
// implementation
// convert array of number to Uint32Array
function asUint32Array(arr) {
return new Uint32Array(arr);
}
// concat 2 typed array
function concat(a, b) {
var c = new a.constructor(a.length + b.length);
c.set(a);
c.set(b, a.length);
return c;
}
// swap high and low bits of a 32-bit int.
function rotl( x, n ) {
return ( x >>> ( 32 - n ) ) | ( x << n );
}
var DIGEST = 128,
BLOCK = 64,
S = [
[ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 ], // round 1
[ 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 ], // round 2
[ 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 ], // round 3
[ 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 ], // round 4
[ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 ], // parallel round 1
[ 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 ], // parallel round 2
[ 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 ], // parallel round 3
[ 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 ] // parallel round 4
].map(asUint32Array),
X = [
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ], // round 1
[ 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 ], // round 2
[ 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 ], // round 3
[ 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 ], // round 4
[ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 ], // parallel round 1
[ 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 ], // parallel round 2
[ 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 ], // parallel round 3
[ 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 ] // parallel round 4
].map(asUint32Array),
K = asUint32Array([
0x00000000, // FF
0x5a827999, // GG
0x6ed9eba1, // HH
0x8f1bbcdc, // II
0x50a28be6, // III
0x5c4dd124, // HHH
0x6d703ef3, // GGG
0x00000000 // FFF
]),
F = [
function ( x, y, z ) {
return ( x ^ y ^ z );
},
function ( x, y, z ) {
return ( x & y ) | ( ( ~x ) & z );
},
function ( x, y, z ) {
return ( x | ( ~y ) ) ^ z;
},
function ( x, y, z ) {
return ( x & z ) | ( y & ( ~z ) );
}
];
ripemd128 = function( data ) {
var aa, bb, cc, dd, aaa, bbb, ccc, ddd, i, l, r, rr, t, tmp, x,
hash = new Uint32Array([ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 ]),
bytes = data.length;
var padding = new Uint8Array(( ( bytes % 64 ) < 56 ? 56 : 120 ) - ( bytes % 64 ));
padding[0] = [0x80];
data = new Uint32Array(concat(data, padding).buffer);
// ending with check bits (= little endian 64-bit int, 8 * data.length)
bytes = bytes << 3;
x = concat( data, [bytes, bytes >> 31 >> 1]);
// update hash
for ( i = 0, t = 0, l = x.length; i < l; i += 16, t = 0 ) {
aa = aaa = hash[0];
bb = bbb = hash[1];
cc = ccc = hash[2];
dd = ddd = hash[3];
for ( ; t < 64; ++t ) {
r = ~~( t / 16 );
aa = rotl(aa + F[r]( bb, cc, dd ) + x[ i + X[r][ t % 16 ] ] + K[r], S[r][ t % 16 ]);
tmp = dd;
dd = cc;
cc = bb;
bb = aa;
aa = tmp;
}
for ( ; t < 128; ++t ) {
r = ~~( t / 16 );
rr = ~~( ( 63 - ( t % 64 ) ) / 16 );
aaa = rotl(aaa + F[rr]( bbb, ccc, ddd ) + x[ i + X[r][ t % 16 ] ] + K[r], S[r][ t % 16 ]);
tmp = ddd;
ddd = ccc;
ccc = bbb;
bbb = aaa;
aaa = tmp;
}
ddd = hash[1] + cc + ddd;
hash[1] = hash[2] + dd + aaa;
hash[2] = hash[3] + aa + bbb;
hash[3] = hash[0] + bb + ccc;
hash[0] = ddd;
}
return new Uint8Array( hash.buffer );
}
}());

View File

@ -0,0 +1,387 @@
/**
* selectize.default.css (v0.12.1) - Default Theme
* Copyright (c) 20132015 Brian Reavis & contributors
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at:
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
* ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*
* @author Brian Reavis <brian@thirdroute.com>
*/
.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
visibility: visible !important;
background: #f2f2f2 !important;
background: rgba(0, 0, 0, 0.06) !important;
border: 0 none !important;
-webkit-box-shadow: inset 0 0 12px 4px #ffffff;
box-shadow: inset 0 0 12px 4px #ffffff;
}
.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {
content: '!';
visibility: hidden;
}
.selectize-control.plugin-drag_drop .ui-sortable-helper {
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
}
.selectize-dropdown-header {
position: relative;
padding: 5px 8px;
border-bottom: 1px solid #d0d0d0;
background: #f8f8f8;
-webkit-border-radius: 3px 3px 0 0;
-moz-border-radius: 3px 3px 0 0;
border-radius: 3px 3px 0 0;
}
.selectize-dropdown-header-close {
position: absolute;
right: 8px;
top: 50%;
color: #303030;
opacity: 0.4;
margin-top: -12px;
line-height: 20px;
font-size: 20px !important;
}
.selectize-dropdown-header-close:hover {
color: #000000;
}
.selectize-dropdown.plugin-optgroup_columns .optgroup {
border-right: 1px solid #f2f2f2;
border-top: 0 none;
float: left;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {
border-right: 0 none;
}
.selectize-dropdown.plugin-optgroup_columns .optgroup:before {
display: none;
}
.selectize-dropdown.plugin-optgroup_columns .optgroup-header {
border-top: 0 none;
}
.selectize-control.plugin-remove_button [data-value] {
position: relative;
padding-right: 24px !important;
}
.selectize-control.plugin-remove_button [data-value] .remove {
z-index: 1;
/* fixes ie bug (see #392) */
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 17px;
text-align: center;
font-weight: bold;
font-size: 12px;
color: inherit;
text-decoration: none;
vertical-align: middle;
display: inline-block;
padding: 2px 0 0 0;
border-left: 1px solid #0073bb;
-webkit-border-radius: 0 2px 2px 0;
-moz-border-radius: 0 2px 2px 0;
border-radius: 0 2px 2px 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.selectize-control.plugin-remove_button [data-value] .remove:hover {
background: rgba(0, 0, 0, 0.05);
}
.selectize-control.plugin-remove_button [data-value].active .remove {
border-left-color: #00578d;
}
.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {
background: none;
}
.selectize-control.plugin-remove_button .disabled [data-value] .remove {
border-left-color: #aaaaaa;
}
.selectize-control {
position: relative;
}
.selectize-dropdown,
.selectize-input,
.selectize-input input {
color: #303030;
font-family: inherit;
font-size: 13px;
line-height: 18px;
-webkit-font-smoothing: inherit;
}
.selectize-input,
.selectize-control.single .selectize-input.input-active {
background: #ffffff;
cursor: text;
display: inline-block;
}
.selectize-input {
border: 1px solid #d0d0d0;
padding: 8px 8px;
display: inline-block;
width: 100%;
overflow: hidden;
position: relative;
z-index: 1;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.selectize-control.multi .selectize-input.has-items {
padding: 5px 8px 2px;
}
.selectize-input.full {
background-color: #ffffff;
}
.selectize-input.disabled,
.selectize-input.disabled * {
cursor: default !important;
}
.selectize-input.focus {
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
}
.selectize-input.dropdown-active {
-webkit-border-radius: 3px 3px 0 0;
-moz-border-radius: 3px 3px 0 0;
border-radius: 3px 3px 0 0;
}
.selectize-input > * {
vertical-align: baseline;
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
}
.selectize-control.multi .selectize-input > div {
cursor: pointer;
margin: 0 3px 3px 0;
padding: 2px 6px;
background: #1da7ee;
color: #ffffff;
border: 1px solid #0073bb;
}
.selectize-control.multi .selectize-input > div.active {
background: #92c836;
color: #ffffff;
border: 1px solid #00578d;
}
.selectize-control.multi .selectize-input.disabled > div,
.selectize-control.multi .selectize-input.disabled > div.active {
color: #ffffff;
background: #d2d2d2;
border: 1px solid #aaaaaa;
}
.selectize-input > input {
display: inline-block !important;
padding: 0 !important;
min-height: 0 !important;
max-height: none !important;
max-width: 100% !important;
margin: 0 1px !important;
text-indent: 0 !important;
border: 0 none !important;
background: none !important;
line-height: inherit !important;
-webkit-user-select: auto !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.selectize-input > input::-ms-clear {
display: none;
}
.selectize-input > input:focus {
outline: none !important;
}
.selectize-input::after {
content: ' ';
display: block;
clear: left;
}
.selectize-input.dropdown-active::before {
content: ' ';
display: block;
position: absolute;
background: #f0f0f0;
height: 1px;
bottom: 0;
left: 0;
right: 0;
}
.selectize-dropdown {
position: absolute;
z-index: 10;
border: 1px solid #d0d0d0;
background: #ffffff;
margin: -1px 0 0 0;
border-top: 0 none;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
-webkit-border-radius: 0 0 3px 3px;
-moz-border-radius: 0 0 3px 3px;
border-radius: 0 0 3px 3px;
}
.selectize-dropdown [data-selectable] {
cursor: pointer;
overflow: hidden;
}
.selectize-dropdown [data-selectable] .highlight {
background: rgba(125, 168, 208, 0.2);
-webkit-border-radius: 1px;
-moz-border-radius: 1px;
border-radius: 1px;
}
.selectize-dropdown [data-selectable],
.selectize-dropdown .optgroup-header {
padding: 5px 8px;
}
.selectize-dropdown .optgroup:first-child .optgroup-header {
border-top: 0 none;
}
.selectize-dropdown .optgroup-header {
color: #303030;
background: #ffffff;
cursor: default;
}
.selectize-dropdown .active {
background-color: #f5fafd;
color: #495c68;
}
.selectize-dropdown .active.create {
color: #495c68;
}
.selectize-dropdown .create {
color: rgba(48, 48, 48, 0.5);
}
.selectize-dropdown-content {
overflow-y: auto;
overflow-x: hidden;
max-height: 200px;
}
.selectize-control.single .selectize-input,
.selectize-control.single .selectize-input input {
cursor: pointer;
}
.selectize-control.single .selectize-input.input-active,
.selectize-control.single .selectize-input.input-active input {
cursor: text;
}
.selectize-control.single .selectize-input:after {
content: ' ';
display: block;
position: absolute;
top: 50%;
right: 15px;
margin-top: -3px;
width: 0;
height: 0;
border-style: solid;
border-width: 5px 5px 0 5px;
border-color: #808080 transparent transparent transparent;
}
.selectize-control.single .selectize-input.dropdown-active:after {
margin-top: -4px;
border-width: 0 5px 5px 5px;
border-color: transparent transparent #808080 transparent;
}
.selectize-control.rtl.single .selectize-input:after {
left: 15px;
right: auto;
}
.selectize-control.rtl .selectize-input > input {
margin: 0 4px 0 -2px !important;
}
.selectize-control .selectize-input.disabled {
opacity: 0.5;
background-color: #fafafa;
}
.selectize-control.multi .selectize-input.has-items {
padding-left: 5px;
padding-right: 5px;
}
.selectize-control.multi .selectize-input.disabled [data-value] {
color: #999;
text-shadow: none;
background: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.selectize-control.multi .selectize-input.disabled [data-value],
.selectize-control.multi .selectize-input.disabled [data-value] .remove {
border-color: #e6e6e6;
}
.selectize-control.multi .selectize-input.disabled [data-value] .remove {
background: none;
}
.selectize-control.multi .selectize-input [data-value] {
text-shadow: 0 1px 0 rgba(0, 51, 83, 0.3);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background-color: #1b9dec;
background-image: -moz-linear-gradient(top, #1da7ee, #178ee9);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#1da7ee), to(#178ee9));
background-image: -webkit-linear-gradient(top, #1da7ee, #178ee9);
background-image: -o-linear-gradient(top, #1da7ee, #178ee9);
background-image: linear-gradient(to bottom, #1da7ee, #178ee9);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1da7ee', endColorstr='#ff178ee9', GradientType=0);
-webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
}
.selectize-control.multi .selectize-input [data-value].active {
background-color: #0085d4;
background-image: -moz-linear-gradient(top, #008fd8, #0075cf);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#008fd8), to(#0075cf));
background-image: -webkit-linear-gradient(top, #008fd8, #0075cf);
background-image: -o-linear-gradient(top, #008fd8, #0075cf);
background-image: linear-gradient(to bottom, #008fd8, #0075cf);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff008fd8', endColorstr='#ff0075cf', GradientType=0);
}
.selectize-control.single .selectize-input {
-webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
background-color: #f9f9f9;
background-image: -moz-linear-gradient(top, #fefefe, #f2f2f2);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fefefe), to(#f2f2f2));
background-image: -webkit-linear-gradient(top, #fefefe, #f2f2f2);
background-image: -o-linear-gradient(top, #fefefe, #f2f2f2);
background-image: linear-gradient(to bottom, #fefefe, #f2f2f2);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffefefe', endColorstr='#fff2f2f2', GradientType=0);
}
.selectize-control.single .selectize-input,
.selectize-dropdown.single {
border-color: #b8b8b8;
}
.selectize-dropdown .optgroup-header {
padding-top: 7px;
font-weight: bold;
font-size: 0.85em;
}
.selectize-dropdown .optgroup {
border-top: 1px solid #f0f0f0;
}
.selectize-dropdown .optgroup:first-child {
border-top: 0 none;
}

View File

@ -95,6 +95,16 @@ Engines that can use as documentation:<br>
<p><a href="i:00yandex:https://yandex.com/search/?text=">yandex:https://yandex.com/search/?text=</a></p>
<p><a href="i:00searx:https://searchx.mobi/?q=">searx:https://searchx.mobi/?q=</a></p>
</p><p>
Medical:<br>
<p><a href="i:00merckmanuals:https://www.merckmanuals.com/professional/SearchResults?query=">merckmanuals:https://www.merckmanuals.com/professional/SearchResults?query=</a></p>
<p><a href="i:00openmd:https://openmd.com/search?q=">openmd:https://openmd.com/search?q=</a></p>
<p><a href="i:00medical-dict:https://medical-dictionary.com/results.php?term=">medical-dict:https://medical-dictionary.com/results.php?term=</a></p>
<p><a href="i:00ncbiBooks:https://www.ncbi.nlm.nih.gov/books/?term=">ncbiBooks:https://www.ncbi.nlm.nih.gov/books/?term=</a></p>
<p><a href="i:00healio:https://journals.healio.com/action/doSearch?AllField=">healio:https://journals.healio.com/action/doSearch?AllField=</a></p>
<p><a href="i:00pubmed:https://pubmed.ncbi.nlm.nih.gov/?term=">pubmed:https://pubmed.ncbi.nlm.nih.gov/?term=</a></p>
<p><a href="i:00pmc:https://www.ncbi.nlm.nih.gov/pmc/?term=">pmc:https://www.ncbi.nlm.nih.gov/pmc/?term=</a></p>
<p><a href="i:00Tabers:https://www.tabers.com/tabersonline/search?st=OSS&q=">Tabers:https://www.tabers.com/tabersonline/search?st=OSS&q=</a></p>
</p><p>
Cloud storage:<br>
</p><p>
Scholar:<br>

View File

@ -0,0 +1,15 @@
{
const oFetch = window.fetch;
window.fetch = function(url,options){
if("https://www.bing.com/turing/conversation/create"==url){
url = "https://mybing2.xn--xyza.top/Create";
options = {
credentials: 'include',
headers:{},
};
}
return oFetch(url,options)
.then((res)=>{return res;})
.catch((err)=>{return err;});
}
}

View File

@ -0,0 +1,25 @@
%1%
%2%
%3%
%4%
%5%
%6%
%7%
%8%
<script charset="utf-8" src="https://jamesfengcao.codeberg.page/en/searchurl/config.js"></script>

View File

@ -0,0 +1,20 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width" />
<title>webdav links for %2%</title></head><body>
<p><b>Click to install the link menu items:</b></p>
<a href="i:0gdefault.link::Backup2%1%: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1);location.href='i:0e'+path+':%2%/'+f+'.tgz';}%0A">Backup to %1%</a><br>
<a href="i:0gdefault.link::restoreFrom%1%: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1);location.href='i:0d%2%/'+f+'.tgz';}%0A">Restore from %1%</a><br>
<a href="i:0gdefault.link::upload_%1%: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1)+'.tgz';location.href='i:0u'+path+':%2%/'+f;}%0A">upload to %1%</a><br>
<a href="i:0gdefault.link::delete_%1%: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f;if('/'!=path[path.length-1])f=path.substring(iSlash+1);else f=path.substring(iSlash+1,path.length-1)+'.tgz';location.href='i:0wDELETE:%2%/'+f;}%0A">Delete on server %1%</a><br>
<a href="i:0gdefault.link::mkdir_%1%: {let path=`%f`;let iSlash=path.lastIndexOf('/',path.length-2);let f=path.substring(iSlash+1);location.href='i:0wMKCOL:%2%/'+f;}%0A">Make directory on server %1%</a><br>
<p><b>Bookmarks:</b></p>
<a href="i:0e/data/data/info.torapp.uweb/files:%2%/uweb.tgz">Backup config to %1%</a><br>
<a href="i:0d%2%/uweb.tgz">Restore config from %1%</a><br>
<a href='i:0wDELETE:%2%/'>Delete on server %1%</a><br>
<a href='i:0wMKCOL:%2%/'>Make directory on server %1%</a><br>
</body></html>

View File

@ -0,0 +1,2 @@
open clipboard link:clip/uweb:/system/bin/toybox grep -m1 -Eo '(http|https)://[^ "'\'']+'
code editor:text/html:printf "<style>#div{position:fixed;top:2px}#editor{position: absolute;top:30;right:0;bottom:0;left:0;}#textarea{display:none}</style><script src='http://cdn.bootcss.com/ace/1.4.9/ace.js'></script><script src='http://cdn.bootcss.com/ace/1.4.9/ext-language_tools.js'></script><script src='https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/searchurl/ace.js'></script><div id='div'><button onclick='onSave(\"%f\")'>Save</button> <a href=''>Run</a></div><pre id='editor'></pre><textarea id='textarea'>";cat "%f"|sed 's/&/&amp;/g'|sed 's/<\//\&lt;\//g';

View File

@ -0,0 +1,31 @@
<!DOCTYPE html><html>
<title>docx2html</title>
<head>
<script src="https://fastly.jsdelivr.net/npm/mammoth@1.4.8/mammoth.browser.min.js"></script>
</head>
<body>
<div>
<center>
<h2>select a docx to convert to html</h2>
<input type="file" onchange="convert(this)"/>
</center>
<div id="container"></div>
</div>
<script>
var container = document.querySelector("#container");
function convert(input){
var files = input.files||[];
if (!files.length) return;
var file = files[0];
var reader = new FileReader();
reader.onloadend = function(event) {
var arrayBuffer = reader.result;
mammoth.convertToHtml({arrayBuffer: arrayBuffer}).then(function (resultObject) {
container.innerHTML = resultObject.value
});
}
reader.readAsArrayBuffer(file);
}
</script>
</body>
</html>

View File

@ -0,0 +1,3 @@
Select All/^A:i:56
Undo/^Z:i:56
Redo/^Y:i:56

View File

@ -0,0 +1,17 @@
<script>
if(location.href.endsWith('/')){
window.onload=function (){
let as=document.getElementsByTagName('a');for(let i=as.length-1;i>=0;i--){let h=as[i].href;if(h.startsWith('file:')&&h.endsWith('.md'))as[i].onclick=function(){location.href=this.href+'.search';}}
}
}else{
function loadJS(u){
let d=document;
let e=d.createElement('script');e.src=u;
d.head.appendChild(e);
}
if(location.href.endsWith('.md.search')){
window.markdeepOptions = {onload};
loadJS("https://casual-effects.com/markdeep/latest/markdeep.min.js?");
}
}
</script>

View File

@ -0,0 +1,15 @@
<script src="https://remarkjs.com/downloads/remark-latest.min.js">
</script>
<script type="text/javascript">
window.onload=function(){
var slideshow = remark.create({
navigation: {
click: true,
},
});
}
</script>
<textarea id="source">
class: middle

27
en/searchurl/txt/web.js Normal file
View File

@ -0,0 +1,27 @@
let ess = {
"a":["http://www.amazon.com/s?url=search-alias%3Daps&field-keywords=",],
"ab":["http://audiobookbay.se/?s=",],
"b":["http://www.bing.com/search?q=",],
"bi":["http://bing.com/images/search?q=",],
"bv":["https://www.bing.com/videos/search?q=",],
"g":["https://google.com/search?q=",],
"gi":["http://www.google.com/images?as_q=",],
"gf":["https://google.com/search?q=intitle:index.of+%22parent+directory%22+",],
"sx":["https://searx.be/?q=",],
"w":["https://en.wikipedia.org/wiki/Special:Search?search=",],
"wf":["https://encyclopedia.thefreedictionary.com/",],
"yt":["https://www.youtube.com/results?search_query=",],
};
let url=arguments[1];
let iS1 = url.search(/ [^ ]/);
let iS2 = url.indexOf(' ',iS1+2);
let name = url.substring(iS1+1,iS2)
let keywords = url.substring(iS2+1);
let es = ess[name];
if(es){
let len = es.length;
for(let i=1;i<len;i++)
window.open(es[i]+keywords);
location.href=es[0]+keywords;
}

35
en/searchurl/txt/web.sh Executable file
View File

@ -0,0 +1,35 @@
#!/usr/bin/dash
#usage: g [engine] word1 word2 ...
default=''
g="https://www.google.com.hk/search?q="
yt="https://www.youtube.com/results?search_query="
m="http://www.merriam-webster.com/dictionary/"
w="http://en.wikipedia.org/wiki/"
wd="https://en.wiktionary.org/wiki/"
b="http://www.bing.com/search?intlF=1&q="
ks="http://www.iciba.com/"
en="http://www.enacademic.com/searchall.php?SWord="
gen="http://gen.lib.rus.ec/search.php?req="
abb="http://audiobookbay.li/?s="
bd="https://www.baidu.com/s?wd="
gb="https://www.gigablast.com/search?q="
yd="http://dict.youdao.com/search?q="
a="http://www.amazon.com/s?url=search-alias%3Daps&field-keywords="
bdic="http://cn.bing.com/dict/search?q="
be="http://www.britannica.com/search?query="
u="http://www.urbandictionary.com/define.php?term="
o="http://en.oxforddictionaries.com/definition/"
eval engine=\$${1:-default} #engine=$(eval echo \${$1})
shift #concate second argument to the last one with +
string=$1
shift
for a in "$@"
do
string+="+$a"
done
echo $engine$string

11
en/searchurl/txt/zim.html Normal file
View File

@ -0,0 +1,11 @@
<head>
<base href="https://pwa.kiwix.org/www/index.html">
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="init" src="js/init.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="jquery" src="js/lib/jquery-3.2.1.slim.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="bootstrap" src="js/lib/bootstrap.min.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="../app" src="js/lib/../app.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zimArchiveLoader" src="js/lib/zimArchiveLoader.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="uiUtil" src="js/lib/uiUtil.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="util" src="js/lib/util.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="utf8" src="js/lib/utf8.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="cache" src="js/lib/cache.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="images" src="js/lib/images.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="settingsStore" src="js/lib/settingsStore.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="transformStyles" src="js/lib/transformStyles.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="transformZimit" src="js/lib/transformZimit.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="kiwixServe" src="js/lib/kiwixServe.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="updater" src="js/lib/updater.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zimArchive" src="js/lib/zimArchive.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zimfile" src="js/lib/zimfile.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zimDirEntry" src="js/lib/zimDirEntry.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="xzdec_wrapper" src="js/lib/xzdec_wrapper.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zstddec_wrapper" src="js/lib/zstddec_wrapper.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="filecache" src="js/lib/filecache.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="xzdec-wasm" src="js/lib/xzdec-wasm.js"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="zstddec-wasm" src="js/lib/zstddec-wasm.js"></script>
</head>
<body>
<input style="display: block; font-size: 14px;" class="btn btn-primary btn-inline" value="Select folder with ZIM files" id="archiveFilesLegacy" multiple="" accept=".zim,.dat,.idx,.txt,.zimaa,.zimab,.zimac,.zimad,.zimae,.zimaf,.zimag,.zimah,.zimai,.zimaj,.zimak,.zimal,.zimam,.ziman,.zimao,.zimap,.zimaq,.zimar,.zimas,.zimat,.zimau,.zimav,.zimaw,.zimax,.zimay,.zimaz, .zimba, .zimbb, .zimbc, .zimbd, .zimbe, .zimbf, .zimbg, .zimbh, .zimbi, .zimbj, .zimbk, .zimbl, .zimbm, .zimbn, .zimbo, .zimbp, .zimbq, .zimbr, .zimbs, .zimbt, .zimbu, .zimbv, .zimbw, .zimbx, .zimby, .zimbz" type="file">
<script type="text/javascript" data-main="js/init.js" src="js/lib/require.js">
</script>
</body>

View File

@ -1,66 +0,0 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>url services</title></head><body>
<h3>url services</h3>
<p>
Click the following links to install url services with <a href="..">uweb browser</a>. <b>Force exit and re-launch the app</b>, then long press the button with the icon "image" to popup the menu.<br>
<p><a href="i:01Fullscreen video:i:5f">Fullscreen video:i:5f</a></p>
<p><a href="i:01Send url:i:5j">Send url:i:5j</a></p>
<p><a href="i:01Send url(player):i:5ji:5g">Send url(player):i:5ji:5g</a></p>
<p><a href="i:01Send url(bookmark):i:5ji:52../home5:">Send url(bookmark):i:5ji:52../home5:</a></p>
<p><a href="i:01Send url(clipboard):i:5ji:5b">Send url(clipboard):i:5ji:5b</a></p>
<p><a href="i:01Send url(fullscreen):i:5ji:5f">Send url(fullscreen):i:5ji:5f</a></p>
<p><a href="i:01Send url(bookmark fullscreen):i:5ji:52../home5:i:5f">Send url(bookmark fullscreen):i:5ji:52../home5:i:5f</a></p>
<p><a href="i:01Send url(site fullscreen):i:5ji:0mi:5f:">Send url(site fullscreen):i:5ji:0mi:5f:</a></p>
<p><a href="i:01Send url(video):i:5ji:0mc16:">Send url(video):i:5ji:0mc16:</a></p>
<p><a href="i:01Send url(bookmark site fullscreen):i:5ji:52../home5:i:0mi:5f:">Send url(bookmark site fullscreen):i:5ji:52../home5:i:0mi:5f:</a></p>
<p><a href="i:01Redirect/edit:e:">Redirect/edit:e:</a></p>
<p><a href="i:01Save2autocomplete:i:51:">Save2autocomplete:i:51:</a></p>
<p><a href="i:01Bookmark:i:52:">Bookmark:i:52:</a></p>
<p><a href="i:01Note:i:53:">Note:i:53:</a></p>
<p><a href="i:01Save engine:i:54:">Save engine:i:54:</a></p>
<p><a href="i:01Save link:i:55:">Save link:i:55:</a></p>
<p><a href="i:01Save to desktop:i:58">Save to desktop:i:58</a></p>
<p><a href="i:01Add to media storage::001">Add to media storage::001</a></p>
<p><a href="i:01tgurl:https://tx.me/share/url?url=">tgurl:https://tx.me/share/url?url=</a></p>
<p><a href="i:01tgdownload:https://tx.me/share/url?url=/download ">tgdownload:https://tx.me/share/url?url=/download </a></p>
<p><a href="i:01Compatible mode:i:5d">Compatible mode:i:5d</a></p>
<p><a href="i:01papago:https://papago.naver.net/website?locale=en&target=en&url=">papago:https://papago.naver.net/website?locale=en&target=en&url=</a></p>
<p><a href="i:01google translate:https://translate.google.com/translate?sl=auto&tl=en&u=">google translate:https://translate.google.com/translate?sl=auto&tl=en&u=</a></p>
<p><a href="i:01Source:view-source:">Source:view-source:</a></p>
<p><a href="i:01outline:https://www.outline.com/">outline:https://www.outline.com/</a></p>
<p><a href="i:012pdf:https://www.web2pdfconvert.com#">2pdf:https://www.web2pdfconvert.com#</a></p>
<p><a href="i:01printfriendly:https://www.printfriendly.com/print/?url=">printfriendly:https://www.printfriendly.com/print/?url=</a></p>
<p><a href="i:01htmlview:https://htmlview.glitch.me/?">htmlview:https://htmlview.glitch.me/?</a></p>
<p><a href="i:01htmlpreview:https://htmlpreview.github.io/?">htmlpreview:https://htmlpreview.github.io/?</a></p>
<p><a href="i:01webarchive:https://web.archive.org/web/*/">webarchive:https://web.archive.org/web/*/</a></p>
<p><a href="i:01archive:https://archive.is/?run=1&url=">archive:https://archive.is/?run=1&url=</a></p>
<p><a href="i:01google by image:https://www.google.com/searchbyimage?image_url=">google by image:https://www.google.com/searchbyimage?image_url=</a></p>
<p><a href="i:01tinyeye:https://tineye.com/search?url=">tinyeye:https://tineye.com/search?url=</a></p>
<p><a href="i:01Yandex image:https://yandex.com/images/search?text=">Yandex image:https://yandex.com/images/search?text=</a></p>
<p><a href="i:01Yandex by image:https://yandex.com/images/search?family=yes&rpt=imageview&url=">Yandex by image:https://yandex.com/images/search?family=yes&rpt=imageview&url=</a></p>
<p><a href="i:01ascii2d:https://ascii2d.net/search/url/">ascii2d:https://ascii2d.net/search/url/</a></p>
<p><a href="i:01trace.moe:https://trace.moe/?url=">trace.moe:https://trace.moe/?url=</a></p>
<p><a href="i:01saucenao:https://saucenao.com/search.php?url=">saucenao:https://saucenao.com/search.php?url=</a></p>
<p><a href="i:01Add to Feedly:https://feedly.com/i/subscription/feed/">Add to Feedly:https://feedly.com/i/subscription/feed/</a></p>
<p><a href="i:01Video download:https://tbvd.herokuapp.com/redirect?url=">Video download:https://tbvd.herokuapp.com/redirect?url=</a></p>
<p><a href="i:01Audio download:https://tbvd.herokuapp.com/video?audio=on&url=">Audio download:https://tbvd.herokuapp.com/video?audio=on&url=</a></p>
<p><a href="i:01Site analyzer:https://www.similarweb.com/website/">Site analyzer:https://www.similarweb.com/website/</a></p>
<p><a href="i:01Site buildwith:https://builtwith.com/?">Site buildwith:https://builtwith.com/?</a></p>
<p><a href="i:01instapaper:https://www.instapaper.com/text?u=">instapaper:https://www.instapaper.com/text?u=</a></p>
<p><a href="i:01google docs:http://docs.google.com/gview?embedded=true&url=">google docs:http://docs.google.com/gview?embedded=true&url=</a></p>
</p><p>
The following needs corresponding <a href="../html5/index.html">html5 application</a> to be installed:<br>
<p><a href="i:01txtview:file:///data/data/info.torinfo.uweb/files/app/txtview.html?url=">txtview:file:///data/data/info.torinfo.uweb/files/app/txtview.html?url=</a></p>
<p><a href="i:01markdeep:file:///data/data/info.torinfo.uweb/files/app/markdeep.html?url=">markdeep:file:///data/data/info.torinfo.uweb/files/app/markdeep.html?url=</a></p>
<p><a href="i:01plyr:file:///data/data/info.torinfo.uweb/files/app/plyr.html?u=">plyr:file:///data/data/info.torinfo.uweb/files/app/plyr.html?u=</a></p>
<p><a href="i:01dplayer:file:///data/data/info.torinfo.uweb/files/app/dplayer.html?u=">dplayer:file:///data/data/info.torinfo.uweb/files/app/dplayer.html?u=</a></p>
<p><a href="i:01pdf:file:///data/data/info.torinfo.uweb/files/app/pdfviewer.html?file=">pdf:file:///data/data/info.torinfo.uweb/files/app/pdfviewer.html?file=</a></p>
<p><a href="i:01epub:file:///data/data/info.torinfo.uweb/files/app/epub.html?u=">epub:file:///data/data/info.torinfo.uweb/files/app/epub.html?u=</a></p>
<p><a href="i:01djvu:file:///data/data/info.torinfo.uweb/files/app/djvu.html?url=">djvu:file:///data/data/info.torinfo.uweb/files/app/djvu.html?url=</a></p>
</p><p>
</p>
<p>in which &quot;redirect&quot; needs <a href="../redirect/index.html">default.redirect</a>.</p>
</body></html>

44
en/searchurl/webdav.html Normal file
View File

@ -0,0 +1,44 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width" />
<script>function g(){
let d=document;
let f=d.forms[0];
let loc = window.location.href;
let dir = loc.substring(0, loc.lastIndexOf ("/")+1);
window.open("f:"+f.i.value+"&"+f.u.value+":"+dir+"template/webdav.html");
return false;
}
</script><style>
input{height:40px;width:100%;border-radius:50px;}
</style>
<title>webdav storage</title></head><body>
<p>This page is to generate install-able menu items and bookmarks for webdav cloud storage operations (upload, backup/restore, delete and create directory).</p>
Bookmark the generated page for later use.<br>
<form onsubmit="return g();" style="margin:5px 0 5px 0;padding:0px">
<input name=i placeholder="Name"/><br>
<input name=u placeholder="Server url including path"/><br>
<input type="submit" value="webdav links">
</form>
<p>
<a href="javascript:{let f=document.forms[0];f.i.value='Box';f.u.value='https://dav.box.com/dav';void(0)}">Box</a>
<a href="javascript:{let f=document.forms[0];f.i.value='koofr';f.u.value='https://app.koofr.net/dav/koofr';void(0)}">koofr</a>
<a href="javascript:{let f=document.forms[0];f.i.value='pcloud';f.u.value='https://webdav.pcloud.com';void(0)}">pcloud</a>
<a href="javascript:{let f=document.forms[0];f.i.value='powerfolder';f.u.value='https://my.powerfolder.com/webdav/personal';void(0)}">powerfolder</a>
<a href="javascript:{let f=document.forms[0];f.i.value='yandex';f.u.value='https://webdav.yandex.com';void(0)}">yandex</a>
<a href="javascript:{let f=document.forms[0];f.i.value='opendrive';f.u.value='https://webdav.opendrive.com';void(0)}">opendrive</a>
<a href="javascript:{let f=document.forms[0];f.i.value='sme';f.u.value='https://webdav.storagemadeeasy.com';void(0)}">storagemadeeasy</a>
<a href="javascript:{let f=document.forms[0];f.i.value='nut';f.u.value='https://dav.jianguoyun.com/dav/%e6%88%91%e7%9a%84%e5%9d%9a%e6%9e%9c%e4%ba%91';void(0)}">Nutstore</a>
<a href="javascript:{let f=document.forms[0];f.i.value='teracloud';f.u.value='https://yura.teracloud.jp/dav';void(0)}">teracloud</a>
</p>
</body></html>

View File

@ -4,8 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>Javascript and CSS for domains</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>JS/CSS/HTML/preprocessing for domains</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,35 +40,71 @@
<br />
<div class="container">
<h1 class="title">Javascript and CSS for domains
<h1 class="title">JS/CSS/HTML/preprocessing for domains
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
<li><a href="../tags/javascript">javascript</a> </li>
<li><a href="../tags/javascript/index.html#">javascript</a> </li>
<li><a href="../tags/css">css</a> </li>
<li><a href="../tags/css/index.html#">css</a> </li>
</ul>
<p>Javascript (load when page completes, earliest loaded JS should use sitecss).</p>
<h3 id="javascript-load-when-page-completes-earliest-loaded-js-should-use-sitecss">Javascript (load when page completes, earliest loaded JS should use sitecss).</h3>
<ul>
<li>Need to be named as &quot;[domain root].js&quot;, such as &quot;yahoo.com.js&quot; or &quot;finance.yahoo.com.js&quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded.</li>
<li>Script must be put under the folder &quot;sitejs&quot; or &quot;/data/data/info.torapp.uweb/files/sitejs&quot;. The later folder has the priority.</li>
<li>Long press the button &quot;settings&quot;, check the option &quot;Run user scripts&quot;.</li>
<li>Support 2/3-segment domains. If the length of the last 2-segments of domain is less than 7 (ex. &quot;com.pl&quot;), then it is treated as one segment.</li>
</ul>
<p>CSS style and earliest loaded JS</p>
<h3 id="css-style-and-earliest-loaded-js">CSS style and earliest loaded JS</h3>
<ul>
<li>Need to be named as &quot;[domain root].css&quot;, such as yahoo.com.css or finance.yahoo.com.css。</li>
<li>Under folder &quot;sitecss&quot;.</li>
<li>&quot;[domain root].js&quot; is loaded at the earlieat time.</li>
<li>&quot;[domain root].js&quot; is loaded at the earliest time.</li>
<li>Long press the button &quot;settings&quot;, check the option &quot;Apply user styles&quot;.</li>
</ul>
<p>If file &quot;default.css&quot; exists, the style will be applied to all sites without matching [domain root].css.</p>
<p>&quot;sitejs/.js&quot; , &quot;sitecss/.css&quot; and &quot;sitecss/.js&quot; are applied to all non-http urls (file urls etc.).</p>
<p>If file &quot;default.css&quot; exists, the style will be applied to all sites not matching [domain root].css.</p>
<h3 id="extra-html-and-preprocessing">Extra html and preprocessing</h3>
<ul>
<li>Need to be named as &quot;[domain].html&quot;. Notice: the file name stem here is &quot;[full domain]&quot; not &quot;[domain root]&quot;.</li>
<li>Under folder &quot;siteextra&quot;.</li>
<li>Long press the button &quot;settings&quot;, check the option &quot;Apply user extra&quot;.</li>
</ul>
<p>An open tag as the last tag in the last 50 bytes of the user extra html expects more content to follow, thus the extra html is placed before the site html. Ex. when the extra html ends with &quot;&lt;textarea&gt;&quot; or &quot;&lt;plaintext&gt;&quot;, the site source html appears as the value of the textarea/plaintext element, thus the extra html can further process the the site source html before rendering. A self closed tag such as &quot;&lt;br&gt;&quot; acts like open tags, also makes the site source follow the extra html.</p>
<p>&quot;sitejs/.js&quot;, &quot;sitecss/.css&quot;, &quot;sitecss/.js&quot; and &quot;siteextra/.html&quot; are applied to all non-http urls (file urls etc.).</p>
</div>
<p>Last Modified: 2 April 2024<br>
support .js files under &#39;css&#39; folder<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -2,21 +2,8 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>/en/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/"
/>
</url><url>
<loc>/en/_posts/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
<lastmod>2024-04-30T20:46:47+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -27,9 +14,274 @@
hreflang="en"
href="/en/_posts/"
/>
</url><url>
<loc>/en/tags/clipboard/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
</url><url>
<loc>/en/tags/ssh/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/ssh/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/ssh/"
/>
</url><url>
<loc>/en/tags/</loc>
<lastmod>2024-04-08T08:46:24+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/"
/>
</url><url>
<loc>/en/tags/termux/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/termux/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/termux/"
/>
</url><url>
<loc>/en/textprocess/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/textprocess/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/textprocess/"
/>
</url><url>
<loc>/en/</loc>
<lastmod>2024-05-19T22:28:49+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/"
/>
</url><url>
<loc>/en/tags/windows/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/windows/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/windows/"
/>
</url><url>
<loc>/en/links/</loc>
<lastmod>2024-04-29T11:59:48+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/links/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/links/"
/>
</url><url>
<loc>/en/tcron/</loc>
<lastmod>2024-04-08T18:15:22+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tcron/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tcron/"
/>
</url><url>
<loc>/en/offlinecache/</loc>
<lastmod>2024-04-08T18:19:08+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/offlinecache/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/offlinecache/"
/>
</url><url>
<loc>/en/tags/redirection/</loc>
<lastmod>2024-04-07T20:48:24+08:00</lastmod>
</url><url>
<loc>/en/redirect/</loc>
<lastmod>2024-04-07T20:48:24+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/redirect/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/redirect/"
/>
</url><url>
<loc>/en/tags/adblock/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
</url><url>
<loc>/en/adblock_domain/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/adblock_domain/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/adblock_domain/"
/>
</url><url>
<loc>/en/search/</loc>
<lastmod>2024-05-18T16:58:27+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/search/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/search/"
/>
</url><url>
<loc>/en/topposts/</loc>
<lastmod>2024-05-18T16:58:27+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/topposts/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/topposts/"
/>
</url><url>
<loc>/en/tags/css/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/css/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/css/"
/>
</url><url>
<loc>/en/tags/javascript/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/javascript/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/javascript/"
/>
</url><url>
<loc>/en/sitejs/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/sitejs/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/sitejs/"
/>
</url><url>
<loc>/en/bookmark/</loc>
<lastmod>2024-04-30T20:33:15+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/bookmark/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/bookmark/"
/>
</url><url>
<loc>/en/tips/</loc>
<lastmod>2024-04-30T20:46:47+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tips/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tips/"
/>
</url><url>
<loc>/en/acmd/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
</url><url>
<loc>/en/url2site/</loc>
<lastmod>2024-04-07T19:01:03+08:00</lastmod>
</url><url>
<loc>/en/html5/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/html5/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/html5/"
/>
</url><url>
<loc>/en/changelog/</loc>
<lastmod>2024-05-05T18:15:11+08:00</lastmod>
</url><url>
<loc>/en/sitemap/</loc>
<lastmod>2022-07-02T00:00:00+00:00</lastmod>
<lastmod>2024-04-07T08:34:20+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -42,7 +294,7 @@
/>
</url><url>
<loc>/en/filenames/</loc>
<lastmod>2022-06-30T00:00:00+00:00</lastmod>
<lastmod>2024-04-30T20:45:24+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -53,22 +305,9 @@
hreflang="en"
href="/en/filenames/"
/>
</url><url>
<loc>/en/links/</loc>
<lastmod>2022-06-30T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/links/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/links/"
/>
</url><url>
<loc>/en/adblock/</loc>
<lastmod>2022-06-25T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -81,7 +320,7 @@
/>
</url><url>
<loc>/en/bookmarklet/</loc>
<lastmod>2022-06-24T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -93,102 +332,47 @@
href="/en/bookmarklet/"
/>
</url><url>
<loc>/en/tags/javascript/</loc>
<lastmod>2022-06-24T00:00:00+00:00</lastmod>
<loc>/en/urls/</loc>
<lastmod>2024-05-03T16:48:45+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/javascript/"
href="/zh/urls/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/javascript/"
href="/en/urls/"
/>
</url><url>
<loc>/en/tags/</loc>
<lastmod>2022-06-24T00:00:00+00:00</lastmod>
<loc>/en/cmds/</loc>
<lastmod>2024-04-02T11:35:09+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/"
href="/zh/cmds/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/"
href="/en/cmds/"
/>
</url><url>
<loc>/en/tags/clipboard/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
</url><url>
<loc>/en/tags/pc/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
<loc>/en/rjs/</loc>
<lastmod>2024-04-08T18:08:11+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/pc/"
href="/zh/rjs/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/pc/"
/>
</url><url>
<loc>/en/tags/ssh/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/ssh/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/ssh/"
/>
</url><url>
<loc>/en/tags/termux/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/termux/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/termux/"
/>
</url><url>
<loc>/en/pccopy/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/pccopy/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/pccopy/"
/>
</url><url>
<loc>/en/tags/windows/</loc>
<lastmod>2022-04-23T00:00:00+00:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/windows/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/windows/"
href="/en/rjs/"
/>
</url><url>
<loc>/en/globalcss/</loc>
<lastmod>2022-04-03T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -201,7 +385,7 @@
/>
</url><url>
<loc>/en/icons/</loc>
<lastmod>2022-02-06T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -212,9 +396,28 @@
hreflang="en"
href="/en/icons/"
/>
</url><url>
<loc>/en/tags/search-engine/</loc>
<lastmod>2024-04-08T08:46:24+08:00</lastmod>
</url><url>
<loc>/en/searchcat/</loc>
<lastmod>2024-04-08T08:46:24+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/searchcat/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/searchcat/"
/>
</url><url>
<loc>/en/termux/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
</url><url>
<loc>/en/longclick/</loc>
<lastmod>2020-11-06T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -225,9 +428,48 @@
hreflang="en"
href="/en/longclick/"
/>
</url><url>
<loc>/en/tags/tdict/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/tdict/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/tdict/"
/>
</url><url>
<loc>/en/tags/tools/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/tools/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/tools/"
/>
</url><url>
<loc>/en/tools/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tools/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tools/"
/>
</url><url>
<loc>/en/tags/curl/</loc>
<lastmod>2020-08-24T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -240,7 +482,7 @@
/>
</url><url>
<loc>/en/filecap/</loc>
<lastmod>2020-08-24T00:00:00+00:00</lastmod>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
@ -252,18 +494,33 @@
href="/en/filecap/"
/>
</url><url>
<loc>/en/tags/adblock/</loc>
</url><url>
<loc>/en/adblock_domain/</loc>
<loc>/en/gesture/</loc>
<lastmod>2024-04-02T11:45:19+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/adblock_domain/"
href="/zh/gesture/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/adblock_domain/"
href="/en/gesture/"
/>
</url><url>
<loc>/en/mirrors/</loc>
<lastmod>2024-04-06T10:20:49+08:00</lastmod>
</url><url>
<loc>/en/readme/</loc>
<lastmod>2024-05-19T22:28:49+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/readme/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/readme/"
/>
</url><url>
<loc>/en/categories/</loc>
@ -278,30 +535,17 @@
href="/en/categories/"
/>
</url><url>
<loc>/en/changelog/</loc>
</url><url>
<loc>/en/tags/css/</loc>
<loc>/en/unlist/</loc>
<lastmod>2024-05-19T22:28:49+08:00</lastmod>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/tags/css/"
href="/zh/unlist/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/tags/css/"
/>
</url><url>
<loc>/en/sitejs/</loc>
<xhtml:link
rel="alternate"
hreflang="zh"
href="/zh/sitejs/"
/>
<xhtml:link
rel="alternate"
hreflang="en"
href="/en/sitejs/"
href="/en/unlist/"
/>
</url>
</urlset>

View File

@ -4,8 +4,8 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>Site map</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Configuration</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +28,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,80 +40,94 @@
<br />
<div class="container">
<h1 class="title">Site map
<h1 class="title">Configuration
<br>
<span class="subtitle"></span>
</h1>
<ul class="tags">
</ul>
<h4 id="ui">UI</h4>
<p><a href="../mirrors/index.html#">Mirrors</a><br>
<a href="i:61ver:../../latest.html#">Check for updates</a></p>
<h4 id="ui">UI</h4>
<ul>
<li><a href="../searchurl/search.html">Search engines</a></li>
<li><a href="../searchurl/homescreen.html">Home screen</a>
<ul>
<li><a href="../searchurl/quickstart.html">Quick start</a></li>
</ul>
</li>
<li><a href="i:61:https://fastly.jsdelivr.net/gh/torappinfo/uwebzh/en/searchurl/func.html">UI</a> (<a href="i:61:https://gitee.com/jamesfengcao/uwebzh/raw/master/en/searchurl/func.html">gitee</a>)</li>
<li><a href="../searchurl/backup.html">Backup and restore</a></li>
<li><a href="../search/index.html#">Search engines</a></li>
<li><a href="../searchurl/homescreen.html#">Home screens</a></li>
<li><a href="i:61:../searchurl/func.html">UI</a> (<a href="i:61:https://gitee.com/jamesfengcao/uweb/raw/master/en/searchurl/func.html">gitee</a>)</li>
<li><a href="../searchurl/webdav.html#">webdav install-able menu generator</a></li>
</ul>
<h4 id="customization">Customization</h4>
<ul>
<li>Bottom toolbar button long pressing menus
<ul>
<li><a href="../searchurl/uas.html">User agents</a></li>
<li><a href="../searchurl/rjs.html">Javascript</a></li>
<li><a href="../searchurl/urls.html">Url services</a></li>
<li><a href="../links/index.html">Links</a></li>
<li><a href="../searchurl/cmds.html">Commands</a></li>
<li><a href="../searchurl/rjs.html">Remote javascript</a></li>
<li><a href="../searchurl/pccopy/index.html">Menu for selections</a></li>
</ul>
</li>
<li><a href="../longclick/index.html">Menu for long pressing hypertext</a></li>
<li><a href="../icons/index.html">Toolbar</a></li>
<li><a href="../gesture/index.html">Gestures</a></li>
<li><a href="i:60config.html:https://jamesfengcao.gitee.io/uwebzh/en/searchurl/config.html">Font settings</a></li>
<li>Long pressing menus for toolbar buttons</li>
<li><a href="../uas/index.html#">User agents</a></li>
<li><a href="../rjs/index.html#">Javascript</a></li>
<li><a href="../urls/index.html#">Url services</a></li>
<li><a href="../links/index.html#">Links</a></li>
<li><a href="../cmds/index.html#">Commands</a></li>
<li><a href="../rjs/index.html#">Remote javascript</a></li>
<li><a href="../textprocess/index.html#">Menu for selections</a></li>
<li><a href="../longclick/index.html#">Menu for long pressing hypertext</a></li>
<li><a href="../icons/index.html#">Toolbar</a></li>
<li><a href="../gesture/index.html#">Gestures</a></li>
<li><a href="../acmd/index.html#">Address bar command modes</a></li>
<li><a href="i:60config.html:../searchurl/config.html">Advanced</a></li>
</ul>
<h4 id="advanced">Advanced</h4>
<h5 id="content">Content</h5>
<ul>
<li><a href="../adblock/index.html">AD blocking</a></li>
<li><a href="../globalcss/index.html">CSS styles</a></li>
<li><a href="../redirect/index.html">redirection</a></li>
<li><a href="../sitejs/index.html">Javascript and CSS for domains</a></li>
<li><a href="../offlinecache/index.html">Offline cache</a></li>
<li><a href="../adblock/index.html#">AD blocking</a></li>
<li><a href="../globalcss/index.html#">CSS styles</a></li>
<li><a href="../redirect/index.html#">Redirection</a></li>
<li><a href="../offlinecache/index.html#">Offline cache</a></li>
<li><a href="../sitejs/index.html#">JS/CSS/HTML/preprocessing for domains</a></li>
<li><a href="../url2site/index.html#">Any urls as website</a></li>
</ul>
<h5 id="tools">Tools</h5>
<ul>
<li><a href="../bookmarklet/index.html">Bookmarklets</a></li>
<li><a href="../filecap/index.html">Custom file handling</a></li>
<li><a href="../html5/index.html">Html5 application</a></li>
<li><a href="../filemanager/index.html">File manager</a></li>
<li><a href="../tools/index.html">Tools</a></li>
<li>Termux
<ul>
<li><a href="../bc/index.html">GNU bc</a></li>
<li><a href="../gnuplot/index.html">Gnuplot</a></li>
<li><a href="../tcron/index.html">tcron</a></li>
<li><a href="../loadbt/index.html">Offline download</a></li>
<li><a href="../bookmarklet/index.html#">Bookmarklets</a></li>
<li><a href="../tcron/index.html#">Cron &amp; more</a></li>
<li><a href="../filecap/index.html#">Custom file handling</a></li>
<li><a href="../html5/index.html#">Html5 application</a></li>
<li><a href="../termux/index.html#">Termux</a></li>
</ul>
</li>
</ul>
<h5 id="miscellaneous">Miscellaneous</h5>
<h5 id="info">Info</h5>
<ul>
<li><a href="../filenames/index.html">Configuration files</a></li>
<li><a href="../searchurl/plugins.html">Plugins</a></li>
</ul>
<h4 id="tips">Tips</h4>
<ul>
<li><a href="../tips/index.html">Tips</a></li>
<li><a href="../video/index.html">Video</a></li>
<li><a href="../logcat/index.html">Debug</a></li>
<li><a href="../assets/help_en.html#">Manual</a></li>
<li><a href="../tips/index.html#">Tips</a></li>
<li><a href="../filenames/index.html#">Configuration files</a></li>
<li><a href="../bookmark/index.html#">Bookmarks</a></li>
</ul>
</div>
<p>Last Modified: 7 April 2024<br>
more details on global redirection url<br>
<pre></pre>
</p>
<script id='jsgiscus'
src='https://giscus.app/client.js'
data-repo="torappinfo/uweb"
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
data-category="Announcements"
data-category-id="DIC_kwDOEgNLGc4CQjsh"
data-mapping="title"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="top"
data-theme="light"
data-lang="en"
data-loading="lazy"
crossorigin="anonymous" async>
</script>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/adblock/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>adblock</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Adblock</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
@ -36,12 +37,12 @@
<br />
<div class="container">
<h1 class="title">adblock</h1>
<h1 class="title">Adblock</h1>
<ul class="posts">
<li class="post">
<a href="../../adblock_domain">
<span>Blocking domain trees</span>
<a href="../../adblock_domain/index.html#">
<span>Hosts files</span>
</a>
</li>
@ -49,5 +50,13 @@
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>adblock on </title>
<title>Adblock on uweb browser: unlimited power</title>
<link>/en/tags/adblock/</link>
<description>Recent content in adblock on </description>
<generator>Hugo -- gohugo.io</generator><atom:link href="/en/tags/adblock/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Adblock on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 02 Apr 2024 11:45:19 +0800</lastBuildDate>
<atom:link href="/en/tags/adblock/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Blocking domain trees</title>
<title>Hosts files</title>
<link>/en/adblock_domain/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate>
<guid>/en/adblock_domain/</guid>
<description>hosts blocks whole domain trees including all descedant domains. The domains in the hosts file must be 2 or 3 segment domains, such as &amp;quot;yahoo.com&amp;quot; and &amp;quot;finance.yahoo.com&amp;quot;. If the length of the last 2 segments is less than 7, such as &amp;quot;com.pl&amp;quot;, then it is treated as one segment, so domains like &amp;quot;xxx.xxx.com.pl&amp;quot; are also valid in the hosts file.
Each line of the hosts file has the following format:</description>
<description>The enhanced hosts files &amp;quot;hosts&amp;quot; and &amp;quot;default.hosts&amp;quot; take effect with the setting option &amp;quot;use hosts&amp;quot;.&#xA;hosts The enhanced file &amp;quot;hosts&amp;quot; defines IP addresses/attributes for domains. Each line has the following format:&#xA;[[IP address][attributes]][single space][domain name]&#xA;where &amp;quot;[[IP address][attributes]]&amp;quot; could be:&#xA;ipv4 address such as:&#xA;172.67.157.211 torapp.eu.org&#xA;ipv6 address, Ex.:&#xA;[2606:4700:3037::6815:8c3] torapp.eu.org&#xA;empty, that would lift all server-imposed limitations. Ex.:&#xA;[single space]gitee.com&#xA;which will make all git repositories on the domain visitable as websites with raw file access url.</description>
</item>
</channel>
</rss>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/clipboard/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>clipboard</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Clipboard</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
@ -36,12 +37,12 @@
<br />
<div class="container">
<h1 class="title">clipboard</h1>
<h1 class="title">Clipboard</h1>
<ul class="posts">
<li class="post">
<a href="../../pccopy">
<span>Text selection</span>
<a href="../../textprocess/index.html#">
<span>Text selection/processing</span>
</a>
</li>
@ -49,5 +50,13 @@
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,28 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>clipboard on </title>
<title>Clipboard on uweb browser: unlimited power</title>
<link>/en/tags/clipboard/</link>
<description>Recent content in clipboard on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Sat, 23 Apr 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/clipboard/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Clipboard on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 02 Apr 2024 11:45:19 +0800</lastBuildDate>
<atom:link href="/en/tags/clipboard/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Text selection</title>
<link>/en/pccopy/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/pccopy/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:
google Translate
bing translate
deepL
The file &amp;quot;default.select&amp;quot; defines menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:
[Name]:[mimetype]:[command line]
[mimetype] specifies input/output for [command line].
It formats as &amp;quot;[input mimetype]/[output mimetype]&amp;quot;.
[input mimetype] can be the following:
&amp;quot;html&amp;quot;: rich text &amp;quot;&amp;quot; (empty): text &amp;quot;.</description>
<title>Text selection/processing</title>
<link>/en/textprocess/</link>
<pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
<guid>/en/textprocess/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:&#xA;Copy selected text with html format to clipboard&#xA;Search with home screen&#xA;google Translate&#xA;bing translate&#xA;deepL&#xA;The file &amp;quot;default.select&amp;quot; defines text processing menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:&#xA;[Name]:[mimetype]:[command line]&#xA;[mimetype] specifies input/output for [command line].</description>
</item>
</channel>
</rss>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/css/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>css</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Css</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,12 +41,12 @@
<br />
<div class="container">
<h1 class="title">css</h1>
<h1 class="title">Css</h1>
<ul class="posts">
<li class="post">
<a href="../../sitejs">
<span>Javascript and CSS for domains</span>
<a href="../../sitejs/index.html#">
<span>JS/CSS/HTML/preprocessing for domains</span>
</a>
</li>
@ -53,5 +54,13 @@
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,19 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>css on </title>
<title>Css on uweb browser: unlimited power</title>
<link>/en/tags/css/</link>
<description>Recent content in css on </description>
<generator>Hugo -- gohugo.io</generator><atom:link href="/en/tags/css/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Css on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 02 Apr 2024 11:45:19 +0800</lastBuildDate>
<atom:link href="/en/tags/css/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Javascript and CSS for domains</title>
<title>JS/CSS/HTML/preprocessing for domains</title>
<link>/en/sitejs/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss).
Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss). Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
</channel>
</rss>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/curl/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>curl</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Curl</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,11 +41,11 @@
<br />
<div class="container">
<h1 class="title">curl</h1>
<h1 class="title">Curl</h1>
<ul class="posts">
<li class="post">
<a href="../../filecap">
<a href="../../filecap/index.html#">
<span>Custom file handling</span>
</a>
</li>
@ -53,5 +54,13 @@
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,24 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>curl on </title>
<title>Curl on uweb browser: unlimited power</title>
<link>/en/tags/curl/</link>
<description>Recent content in curl on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Mon, 24 Aug 2020 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/curl/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Curl on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 02 Apr 2024 11:45:19 +0800</lastBuildDate>
<atom:link href="/en/tags/curl/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Custom file handling</title>
<link>/en/filecap/</link>
<pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
<guid>/en/filecap/</guid>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.
The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:
[file extension]:[mimetype]:[command line]
The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.
&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.
&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
<description>Long press the settings button, check the option &amp;quot;custom file handling&amp;quot; to enable the functionality.&#xA;The custom file handling configuration file is &amp;quot;default.filecap&amp;quot;, each line of it has the format as follows:&#xA;[file extension]:[mimetype]:[command line]&#xA;The &amp;quot;[file extension]&amp;quot; part can have at most two-segment of extensions such as &amp;quot;txt.xz&amp;quot;,&amp;quot;html.gz&amp;quot;.&#xA;&amp;quot;[mimetype]&amp;quot; indicates the type of &amp;quot;[command line]&amp;quot; output.&#xA;&amp;quot;[command line]&amp;quot; is same as the one in default.cmds. The most often used replacements are:</description>
</item>
</channel>
</rss>

View File

@ -3,23 +3,29 @@
<body>
<ul>
<li><a href="adblock">adblock</a> 1</li>
<li><a href="adblock/index.html#">Adblock</a> 1</li>
<li><a href="clipboard">clipboard</a> 1</li>
<li><a href="clipboard/index.html#">Clipboard</a> 1</li>
<li><a href="css">css</a> 1</li>
<li><a href="css/index.html#">Css</a> 1</li>
<li><a href="curl">curl</a> 1</li>
<li><a href="curl/index.html#">Curl</a> 1</li>
<li><a href="javascript">javascript</a> 3</li>
<li><a href="javascript/index.html#">Javascript</a> 3</li>
<li><a href="PC">PC</a> 1</li>
<li><a href="redirection/index.html#">Redirection</a> 1</li>
<li><a href="ssh">ssh</a> 1</li>
<li><a href="search%20engine/index.html#">Search Engine</a> 1</li>
<li><a href="termux">termux</a> 2</li>
<li><a href="ssh/index.html#">Ssh</a> 1</li>
<li><a href="Windows">Windows</a> 1</li>
<li><a href="tdict/index.html#">Tdict</a> 1</li>
<li><a href="termux/index.html#">Termux</a> 3</li>
<li><a href="tools/index.html#">Tools</a> 1</li>
<li><a href="windows/index.html#">Windows</a> 1</li>
</ul>
</body>

View File

@ -1,91 +1,96 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Tags on </title>
<title>Tags on uweb browser: unlimited power</title>
<link>/en/tags/</link>
<description>Recent content in Tags on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Fri, 24 Jun 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Tags on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Mon, 08 Apr 2024 08:46:24 +0800</lastBuildDate>
<atom:link href="/en/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>javascript</title>
<link>/en/tags/javascript/</link>
<pubDate>Fri, 24 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/tags/javascript/</guid>
<description></description>
</item>
<item>
<title>clipboard</title>
<title>Clipboard</title>
<link>/en/tags/clipboard/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/clipboard/</guid>
<description></description>
</item>
<item>
<title>PC</title>
<link>/en/tags/pc/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/tags/pc/</guid>
<description></description>
</item>
<item>
<title>ssh</title>
<title>Ssh</title>
<link>/en/tags/ssh/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/ssh/</guid>
<description></description>
</item>
<item>
<title>termux</title>
<title>Termux</title>
<link>/en/tags/termux/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/termux/</guid>
<description></description>
</item>
<item>
<title>Windows</title>
<link>/en/tags/windows/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/windows/</guid>
<description></description>
</item>
<item>
<title>curl</title>
<link>/en/tags/curl/</link>
<pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
<guid>/en/tags/curl/</guid>
<title>Redirection</title>
<link>/en/tags/redirection/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/redirection/</guid>
<description></description>
</item>
<item>
<title>adblock</title>
<title>Adblock</title>
<link>/en/tags/adblock/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/adblock/</guid>
<description></description>
</item>
<item>
<title>css</title>
<title>Css</title>
<link>/en/tags/css/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/css/</guid>
<description></description>
</item>
<item>
<title>Javascript</title>
<link>/en/tags/javascript/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/javascript/</guid>
<description></description>
</item>
<item>
<title>Search Engine</title>
<link>/en/tags/search-engine/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/search-engine/</guid>
<description></description>
</item>
<item>
<title>Tdict</title>
<link>/en/tags/tdict/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/tdict/</guid>
<description></description>
</item>
<item>
<title>Tools</title>
<link>/en/tags/tools/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/tools/</guid>
<description></description>
</item>
<item>
<title>Curl</title>
<link>/en/tags/curl/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/tags/curl/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/javascript/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>javascript</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Javascript</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2Lang('zh')">简体中文</a>
@ -40,30 +41,38 @@
<br />
<div class="container">
<h1 class="title">javascript</h1>
<h1 class="title">Javascript</h1>
<ul class="posts">
<li class="post">
<a href="../../bookmarklet">
<a href="../../sitejs/index.html#">
<span>JS/CSS/HTML/preprocessing for domains</span>
</a>
</li>
<li class="post">
<a href="../../bookmarklet/index.html#">
<span>Bookmarklets</span>
</a>
</li>
<li class="post">
<a href="../../longclick">
<a href="../../longclick/index.html#">
<span>Long pressed link menu</span>
</a>
</li>
<li class="post">
<a href="../../sitejs">
<span>Javascript and CSS for domains</span>
</a>
</li>
</ul>
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

View File

@ -1,58 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>javascript on </title>
<title>Javascript on uweb browser: unlimited power</title>
<link>/en/tags/javascript/</link>
<description>Recent content in javascript on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Fri, 24 Jun 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/javascript/index.xml" rel="self" type="application/rss+xml" />
<description>Recent content in Javascript on uweb browser: unlimited power</description>
<generator>Hugo</generator>
<language>en</language>
<lastBuildDate>Tue, 02 Apr 2024 11:45:19 +0800</lastBuildDate>
<atom:link href="/en/tags/javascript/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>JS/CSS/HTML/preprocessing for domains</title>
<link>/en/sitejs/</link>
<pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss). Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
<item>
<title>Bookmarklets</title>
<link>/en/bookmarklet/</link>
<pubDate>Fri, 24 Jun 2022 00:00:00 +0000</pubDate>
<guid>/en/bookmarklet/</guid>
<description>With a href=&amp;quot;../index.html&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.
List all script urls
User agent
Cookie
Source code
Last modified date
Eruda: mobile console
QR code generation
Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;
Shows all form elements
Enables all form elements
Toggle checkboxes
Check all checkboxes
Uncheck all checkboxes
Toggle all checkboxes in forms
Enable selection</description>
<description>With a href=&amp;quot;../index.html#&amp;quot;&amp;gt;uweb browser, long pressing any bookmarklet link, click &amp;quot;Open in new tab&amp;quot;, the bookmarklet will be run on the last other tab.&#xA;List all script urls&#xA;User agent&#xA;Cookie&#xA;Source code&#xA;Last modified date&#xA;Eruda: mobile console&#xA;QR code generation&#xA;Use &amp;quot;GET&amp;quot; method for &amp;quot;POST&amp;quot;&#xA;Shows all form elements&#xA;Enables all form elements&#xA;Toggle checkboxes&#xA;Check all checkboxes&#xA;Uncheck all checkboxes&#xA;Toggle all checkboxes in forms&#xA;Enable selection</description>
</item>
<item>
<title>Long pressed link menu</title>
<link>/en/longclick/</link>
<pubDate>Fri, 06 Nov 2020 00:00:00 +0000</pubDate>
<guid>/en/longclick/</guid>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)
[Name]:[mimetype]:[command line]
in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.
To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.
These javascript files are in the following format:
The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
<description>To run commands Each line of file &amp;quot;default.longclick&amp;quot; has the following format: (same as default.cmds)&#xA;[Name]:[mimetype]:[command line]&#xA;in which [command line] can have &amp;quot;%c&amp;quot; (cookie), &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.&#xA;To visit url and load javascript file All &amp;quot;.js&amp;quot; files under the folder &amp;quot;longclick&amp;quot; are part of the popup menu.&#xA;These javascript files are in the following format:&#xA;The very first line can begin with &amp;quot;//&amp;quot; followed by website url that can have &amp;quot;%u&amp;quot; (current url), &amp;quot;%t&amp;quot; (title) etc.</description>
</item>
<item>
<title>Javascript and CSS for domains</title>
<link>/en/sitejs/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>/en/sitejs/</guid>
<description>Javascript (load when page completes, earliest loaded JS should use sitecss).
Need to be named as &amp;quot;[domain root].js&amp;quot;, such as &amp;quot;yahoo.com.js&amp;quot; or &amp;quot;finance.yahoo.com.js&amp;quot;. The script will be loaded on the whole domain tree sites. If several files matches the domain, then the script with longest file name is loaded. Script must be put under the folder &amp;quot;sitejs&amp;quot; or &amp;quot;/data/data/info.torapp.uweb/files/sitejs&amp;quot;. The later folder has the priority. Long press the button &amp;quot;settings&amp;quot;, check the option &amp;quot;Run user scripts&amp;quot;.</description>
</item>
</channel>
</rss>

View File

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>PC on </title>
<link>/en/tags/pc/</link>
<description>Recent content in PC on </description>
<generator>Hugo -- gohugo.io</generator>
<lastBuildDate>Sat, 23 Apr 2022 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/pc/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Text selection</title>
<link>/en/pccopy/</link>
<pubDate>Sat, 23 Apr 2022 00:00:00 +0000</pubDate>
<guid>/en/pccopy/</guid>
<description>Click the following links to install menus for long pressing the button &amp;quot;link&amp;quot;:
google Translate
bing translate
deepL
The file &amp;quot;default.select&amp;quot; defines menus for selected text. If no text is selected, the menu item operates on the whole page. Each line of the file has the following format:
[Name]:[mimetype]:[command line]
[mimetype] specifies input/output for [command line].
It formats as &amp;quot;[input mimetype]/[output mimetype]&amp;quot;.
[input mimetype] can be the following:
&amp;quot;html&amp;quot;: rich text &amp;quot;&amp;quot; (empty): text &amp;quot;.</description>
</item>
</channel>
</rss>

View File

@ -3,9 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="alternate" type="application/rss+xml" href="../../../en/tags/redirection/index.xml" title="uweb browser: unlimited power">
<link rel="stylesheet" href="/uwebzh/style.css" type="text/css" />
<title>重定向</title>
<link rel="stylesheet" href="../style.css#" type="text/css" />
<title>Redirection</title>
<script type="text/javascript">
function findLang(){
let href = location.href;
@ -28,7 +29,7 @@
</head>
<body>
<header class='header'>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html')">Tags</a>
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
<nav>
</nav>
@ -36,12 +37,12 @@
<br />
<div class="container">
<h1 class="title">重定向</h1>
<h1 class="title">Redirection</h1>
<ul class="posts">
<li class="post">
<a href="../../redirect">
<span>重定向国外网址至国内镜像(附编辑本地文件)</span>
<a href="../../redirect/index.html#">
<span>Resource redirection</span>
</a>
</li>
@ -49,5 +50,13 @@
<ul>
</div>
<footer class="site-footer">
<div class="container">
&copy; 2018-2024 Richard H. Cao
</div>
</footer>
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More