iconv: Bail out of the loop when an illegal sequence of bytes occurs.
[elinks/elinks-j605.git] / contrib / smjs / smartprefixes_common.js
blobaaebfa4f4d78d83bf1a2552c649672924ec4a041
1 /* Common code for smartprefixes_classic.js and smartprefixes_bookmarks.js. */
3 /* Helper function for debian_contents and debian_file. */
4 function debian_package (url, t)
6 url = url.replace(/(\w+):(\w+)/g,
7 function (all, key, val) { t[key] = val; return ""; })
9 return 'http://packages.debian.org/cgi-bin/search_contents.pl?word='
10 + escape(url.replace(/\s*(\S+)\s*/, '$1'))
11 + '&searchmode=' + (t.searchmode || 'searchfilesanddirs')
12 + '&case=' + (t["case"] || 'insensitive')
13 + '&version=' + (t.version || 'stable')
14 + '&arch=' + (t.arch || 'i386')
17 /* javascript:debian_contents("%s"); */
18 function debian_contents (url)
20 return debian_package (url, { searchmode: "filelist" })
23 /* javascript:debian_file("%s"); */
24 function debian_file (url)
26 return debian_package (url, { searchmode: "searchfilesanddirs" })
29 /* javascript:cvsweb("http://cvsweb.elinks.cz/cvsweb.cgi/", "elinks", "%s"); */
30 function cvsweb (base, project, url)
32 /* <file>:<revision>[-><revision>] */
33 url = url.replace(/^(.*):(.*?)(?:->(.*))?$/, "$1 $2 $3");
35 var parts = url.split(" ");
36 if (parts[3]) {
37 elinks.alert('this smartprefix takes only one to three arguments');
38 return "";
41 var file = parts[0], oldrev = parts[1], newrev = parts[2];
42 if (!file) {
43 elinks.alert('no file given');
44 return "";
47 if (newrev)
48 return base + project + "/" + file + ".diff"
49 + "?r1=" + oldrev + "&r2=" + newrev + "&f=u";
51 if (oldrev)
52 return base + "~checkout~/" + project + "/" + file
53 + (oldrev != "latest" && "?rev=" + oldrev || "");
55 return base + project + "/" + file
58 /* javascript:gitweb("http://repo.or.cz/gitweb.cgi", "elinks.git", "%s"); */
59 function gitweb(base, project, url)
61 var parts = url.match(/^(search|summary|shortlog|log|blob|commit|commitdiff|history|tree|tag)(\s(.*))?/);
62 var query = '?p=' + project;
64 if (parts) {
65 query += ';a=' + parts[1];
67 /* If the extra arg is not for searching assume it is an ID. */
68 if (parts[1] == 'search' && parts[3])
69 query += ';s=' + escape(parts[3]);
70 else if ((parts[1] == 'blob' || parts[1] == 'history' || parts[1] == 'tree') && parts[3])
71 query += ';f=' + escape(parts[3]);
72 else if (parts[3])
73 query += ';h=' + escape(parts[3]);
75 } else {
76 query += ';a=summary';
79 return base + query;
82 /* javascript:gmane("%s") */
83 function gmane (url)
85 var v = url.split(' ');
86 var group = v[0], words = v.slice(1).join(' ');
88 if (!group) return base_url;
90 if (!words) {
91 if (group.match(/^gmane\./)) {
92 /* Looks like a newsgroup. */
93 return "http://dir.gmane.org/" + group;
94 } else {
95 /* Looks like a mailing list. */
96 return "http://gmane.org/find.php?list=" + group;
100 return "http://search.gmane.org/search.php?query=" + words
101 + "&group=" + group;
104 /* javascript:bugzilla('http://bugzilla.elinks.cz/', "%s"); */
105 function bugzilla (base_url, arguments)
107 if (!arguments || arguments == '') return base_url;
109 if (arguments.match(/^[\d]+$/))
110 return base_url + 'show_bug.cgi?id=' + arguments;
112 return base_url + 'buglist.cgi?short_desc_type=allwordssubstr'
113 + '&short_desc=' + escape(arguments);
116 /* javascript:babelfish("%s"); */
117 function babelfish (url)
119 var lang2code = {
120 "chinese-simp": 'zh',
121 "chinese-simple": 'zh',
122 "chinese-simplified": 'zh',
123 "chinese-trad": 'zt',
124 "chinese-traditional": 'zt',
125 "dutch": 'nl',
126 "nederlands": 'nl',
127 "Nederlands": 'nl',
128 "german": 'de',
129 "deutsch": 'de',
130 "Deutsch": 'de',
131 "english": 'en',
132 "french": 'fr',
133 "fran\231ais": 'fr',
134 "greek": 'el',
135 "italian": 'it',
136 "italiano": 'it',
137 "japanese": 'ja',
138 "korean": 'ko',
139 "portuguese": 'pt',
140 "portugu\234s": 'pt',
141 "russian": 'ru',
142 "spanish": 'es',
143 "espanol": 'es',
144 "espa\241ol": 'es',
147 var parts = url.match(/^(\S+)\s+(\S+)\s*(.*)/);
148 if (!parts) return "";
150 var from = parts[1], to = parts[2], text = parts[3];
152 if (lang2code[from]) from = lang2code[from];
153 if (lang2code[to]) to = lang2code[to];
155 if (text.match(/:[^[:blank:]]/))
156 url = "http://babelfish.altavista.com/babelfish/urltrurl?url=";
157 else
158 url = "http://babelfish.altavista.com/babelfish/tr?trtext=";
160 url += escape(text) + "&lp=" + from + "_" + to;
162 return url;
165 /* javascript:videodownloader("%s"); */
166 function videodownloader (url)
168 elinks.load_uri("http://videodownloader.net/get/?url=" + escape(url),
169 function (cached) {
170 var url = cached.content.match(/<a href="(.*?)"><img src=".\/vd\/botdl.gif"/)[1]
171 if (url) elinks.location = url;
172 } );
174 return "";