Contributing back some bug fixes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

upload.js 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. function DisplayTrans() {
  2. if (['Softsubs','Hardsubs'].indexOf($('select[name="sub"]').raw().value) != -1) {
  3. $('#subber').raw().parentNode.parentNode.style.display = 'table-row'
  4. } else {
  5. $('#subber').raw().parentNode.parentNode.style.display = 'none'
  6. }
  7. }
  8. function Categories() {
  9. var save = {};
  10. var form_elements = $('#dynamic_form input[name], #dynamic_form select, #dynamic_form textarea');
  11. for (var i = 0; i < form_elements.length; i++) {
  12. if (["Preview", "---", ""].indexOf(form_elements[i].value) == -1) {
  13. if (form_elements[i].name.slice(-1) == '[]') {
  14. save[form_elements[i].name] = save[form_elements[i].name] || new Array()
  15. save[form_elements[i].name][form_elements[i].id.slice(form_elements[i].id.search(/[0-9]/))] = form_elements[i].value
  16. } else if (form_elements[i].type == 'checkbox') {
  17. save[form_elements[i].name] = form_elements[i].checked;
  18. } else {
  19. save[form_elements[i].name] = form_elements[i].value;
  20. }
  21. }
  22. }
  23. ajax.get('ajax.php?action=upload_section&categoryid=' + $('#categories').raw().value, function (response) {
  24. $('#dynamic_form').raw().innerHTML = response;
  25. initMultiButtons();
  26. // Evaluate the code that generates previews.
  27. eval($('#dynamic_form script.preview_code').html());
  28. for (i in save) {
  29. if (Array.isArray(save[i])) {
  30. for (j in save[i]) {
  31. if (!($('#'+i.slice(0,-2)+'_'+j).raw())) AddArtistField()
  32. $('#'+i.slice(0,-2)+'_'+j).raw().value = save[i][j]
  33. }
  34. } else if (typeof(save[i]) == 'boolean') {
  35. if ($('[name="'+i+'"]').raw()) $('[name="'+i+'"]').raw().checked = save[i]
  36. } else {
  37. if ($('[name="'+i+'"]').raw()) $('[name="'+i+'"]').raw().value = save[i]
  38. }
  39. }
  40. if ($('#categories').raw().value == "1") DisplayTrans()
  41. if ($('#ressel').raw() && $('#ressel').raw().value == "Other") {
  42. $('#resolution').raw().readOnly = false
  43. $('#resolution').gshow()
  44. }
  45. initAutocomplete()
  46. initAutofill()
  47. $('.bbcode_editor').each(function(i, el) { BBEditor(el) })
  48. });
  49. }
  50. function Bitrate() {
  51. $('#other_bitrate').raw().value = '';
  52. if ($('#bitrate').raw().options[$('#bitrate').raw().selectedIndex].value == 'Other') {
  53. $('#other_bitrate_span').gshow();
  54. } else {
  55. $('#other_bitrate_span').ghide();
  56. }
  57. }
  58. function AltBitrate() {
  59. if ($('#other_bitrate').raw().value >= 320) {
  60. $('#vbr').raw().disabled = true;
  61. $('#vbr').raw().checked = false;
  62. } else {
  63. $('#vbr').raw().disabled = false;
  64. }
  65. }
  66. function add_tag() {
  67. if ($('#tags').raw().value == "") {
  68. $('#tags').raw().value = $('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value;
  69. } else if ($('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value == '---') {
  70. } else {
  71. $('#tags').raw().value = $('#tags').raw().value + ', ' + $('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value;
  72. }
  73. }
  74. var LogCount = 1;
  75. function AddLogField() {
  76. if (LogCount >= 200) {
  77. return;
  78. }
  79. var LogField = document.createElement("input");
  80. LogField.type = "file";
  81. LogField.id = "file";
  82. LogField.name = "logfiles[]";
  83. LogField.size = 50;
  84. var x = $('#logfields').raw();
  85. x.appendChild(document.createElement("br"));
  86. x.appendChild(LogField);
  87. LogCount++;
  88. }
  89. function RemoveLogField() {
  90. if (LogCount == 1) {
  91. return;
  92. }
  93. var x = $('#logfields').raw();
  94. for (i = 0; i < 2; i++) {
  95. x.removeChild(x.lastChild);
  96. }
  97. LogCount--;
  98. }
  99. var ExtraLogCount = 1;
  100. function AddExtraLogField(id) {
  101. if (LogCount >= 200) {
  102. return;
  103. }
  104. var LogField = document.createElement("input");
  105. LogField.type = "file";
  106. LogField.id = "file_" + id;
  107. LogField.name = "logfiles_" + id + "[]";
  108. LogField.size = 50;
  109. var x = $('#logfields_' + id).raw();
  110. x.appendChild(document.createElement("br"));
  111. x.appendChild(LogField);
  112. LogCount++;
  113. }
  114. function RemoveLogField() {
  115. if (LogCount == 1) {
  116. return;
  117. }
  118. var x = $('#logfields').raw();
  119. for (i = 0; i < 2; i++) {
  120. x.removeChild(x.lastChild);
  121. }
  122. LogCount--;
  123. }
  124. var FormatCount = 0;
  125. function AddFormat() {
  126. if (FormatCount >= 10) {
  127. return;
  128. }
  129. FormatCount++;
  130. $('#extras').raw().value = FormatCount;
  131. var NewRow = document.createElement("tr");
  132. NewRow.id = "new_torrent_row"+FormatCount;
  133. NewRow.setAttribute("style","border-top-width: 5px; border-left-width: 5px; border-right-width: 5px;");
  134. var NewCell1 = document.createElement("td");
  135. NewCell1.setAttribute("class","label");
  136. NewCell1.innerHTML = "Extra Torrent File";
  137. var NewCell2 = document.createElement("td");
  138. var TorrentField = document.createElement("input");
  139. TorrentField.type = "file";
  140. TorrentField.id = "extra_torrent_file"+FormatCount;
  141. TorrentField.name = "extra_torrent_files[]";
  142. TorrentField.size = 50;
  143. NewCell2.appendChild(TorrentField);
  144. NewRow.appendChild(NewCell1);
  145. NewRow.appendChild(NewCell2);
  146. NewRow = document.createElement("tr");
  147. NewRow.id = "new_format_row"+FormatCount;
  148. NewRow.setAttribute("style","border-left-width: 5px; border-right-width: 5px;");
  149. NewCell1 = document.createElement("td");
  150. NewCell1.setAttribute("class","label");
  151. NewCell1.innerHTML = "Extra Format / Bitrate";
  152. NewCell2 = document.createElement("td");
  153. tmp = '<select id="releasetype" name="extra_formats[]"><option value="">---</option>';
  154. var formats=["Saab","Volvo","BMW"];
  155. for (var i in formats) {
  156. tmp += '<option value="'+formats[i]+'">'+formats[i]+"</option>\n";
  157. }
  158. tmp += "</select>";
  159. var bitrates=["1","2","3"];
  160. tmp += '<select id="releasetype" name="extra_bitrates[]"><option value="">---</option>';
  161. for (var i in bitrates) {
  162. tmp += '<option value="'+bitrates[i]+'">'+bitrates[i]+"</option>\n";
  163. }
  164. tmp += "</select>";
  165. NewCell2.innerHTML = tmp;
  166. NewRow.appendChild(NewCell1);
  167. NewRow.appendChild(NewCell2);
  168. NewRow = document.createElement("tr");
  169. NewRow.id = "new_description_row"+FormatCount;
  170. NewRow.setAttribute("style","border-bottom-width: 5px; border-left-width: 5px; border-right-width: 5px;");
  171. NewCell1 = document.createElement("td");
  172. NewCell1.setAttribute("class","label");
  173. NewCell1.innerHTML = "Extra Release Description";
  174. NewCell2 = document.createElement("td");
  175. NewCell2.innerHTML = '<textarea name="extra_release_desc[]" id="release_desc" cols="60" rows="4"></textarea>';
  176. NewRow.appendChild(NewCell1);
  177. NewRow.appendChild(NewCell2);
  178. }
  179. function RemoveFormat() {
  180. if (FormatCount == 0) {
  181. return;
  182. }
  183. $('#extras').raw().value = FormatCount;
  184. var x = $('#new_torrent_row'+FormatCount).raw();
  185. x.parentNode.removeChild(x);
  186. x = $('#new_format_row'+FormatCount).raw();
  187. x.parentNode.removeChild(x);
  188. x = $('#new_description_row'+FormatCount).raw();
  189. x.parentNode.removeChild(x);
  190. FormatCount--;
  191. }
  192. var ArtistCount = 1;
  193. function AddArtistField() {
  194. window.getSelection().removeAllRanges()
  195. ArtistCount = $('input[name="idols[]"]').length;
  196. if (ArtistCount >= 200) {
  197. return;
  198. }
  199. var ArtistField = document.createElement("input");
  200. ArtistField.type = "text";
  201. ArtistField.id = "idols_" + ArtistCount;
  202. ArtistField.name = "idols[]";
  203. ArtistField.size = 45;
  204. var x = $('#idolfields').raw();
  205. x.appendChild(document.createElement("br"));
  206. x.appendChild(ArtistField);
  207. x.appendChild(document.createTextNode('\n'));
  208. if ($("#idol").data("gazelle-autocomplete")) {
  209. $(ArtistField).live('focus', function() {
  210. $(ArtistField).autocomplete({
  211. serviceUrl : 'artist.php?action=autocomplete'
  212. });
  213. });
  214. }
  215. ArtistCount++;
  216. }
  217. function RemoveArtistField() {
  218. window.getSelection().removeAllRanges()
  219. ArtistCount = $('input[name="idols[]"]').length;
  220. if (ArtistCount == 1) {
  221. return;
  222. }
  223. var x = $('#idolfields').raw();
  224. for (i = 0; i < 3; i++) {
  225. x.removeChild(x.lastChild);
  226. }
  227. ArtistCount--;
  228. }
  229. function AddScreenshotField() {
  230. var sss = $('[name="screenshots[]"]')
  231. if (sss.length >= 10) return
  232. var ScreenshotField = document.createElement("input");
  233. ScreenshotField.type = "text";
  234. ScreenshotField.id = "ss_" + sss.length;
  235. ScreenshotField.name = "screenshots[]";
  236. ScreenshotField.size = 45;
  237. var a = document.createElement("a")
  238. a.className = "brackets"
  239. a.innerHTML = "−"
  240. a.onclick = function(){RemoveScreenshotField(this)}
  241. var x = $('#screenshots').raw()
  242. var y = document.createElement("div")
  243. y.appendChild(ScreenshotField);
  244. y.appendChild(document.createTextNode('\n'));
  245. y.appendChild(a);
  246. x.appendChild(y);
  247. }
  248. function RemoveScreenshotField(el) {
  249. var sss = $('[name="screenshots[]"]')
  250. el.parentElement.remove()
  251. }
  252. function CheckVA () {
  253. if ($('#artist').raw().value.toLowerCase().trim().match(/^(va|various(\sa|a)rtis(t|ts)|various)$/)) {
  254. $('#vawarning').gshow();
  255. } else {
  256. $('#vawarning').ghide();
  257. }
  258. }
  259. function CheckYear() {
  260. var media = $('#media').raw().options[$('#media').raw().selectedIndex].text;
  261. if (media == "---" || media == "Vinyl" || media == "Soundboard" || media == "Cassette") {
  262. media = "old";
  263. }
  264. var year = $('#year').val();
  265. var unknown = $('#unknown').prop('checked');
  266. if (year < 1982 && year != '' && media != "old" && !unknown) {
  267. $('#yearwarning').gshow();
  268. $('#remaster').raw().checked = true;
  269. $('#remaster_true').gshow();
  270. } else if (unknown) {
  271. $('#remaster').raw().checked = true;
  272. $('#yearwarning').ghide();
  273. $('#remaster_true').gshow();
  274. } else {
  275. $('#yearwarning').ghide();
  276. }
  277. }
  278. function ToggleUnknown() {
  279. if ($('#unknown').raw().checked) {
  280. $('#remaster_year').raw().value = "";
  281. $('#remaster_title').raw().value = "";
  282. $('#remaster_record_label').raw().value = "";
  283. $('#remaster_catalogue_number').raw().value = "";
  284. if ($('#groupremasters').raw()) {
  285. $('#groupremasters').raw().selectedIndex = 0;
  286. $('#groupremasters').raw().disabled = true;
  287. }
  288. $('#remaster_year').raw().disabled = true;
  289. $('#remaster_title').raw().disabled = true;
  290. $('#remaster_record_label').raw().disabled = true;
  291. $('#remaster_catalogue_number').raw().disabled = true;
  292. } else {
  293. $('#remaster_year').raw().disabled = false;
  294. $('#remaster_title').raw().disabled = false;
  295. $('#remaster_record_label').raw().disabled = false;
  296. $('#remaster_catalogue_number').raw().disabled = false;
  297. if ($('#groupremasters').raw()) {
  298. $('#groupremasters').raw().disabled = false;
  299. }
  300. }
  301. }
  302. function GroupRemaster() {
  303. var remasters = json.decode($('#json_remasters').raw().value);
  304. var index = $('#groupremasters').raw().options[$('#groupremasters').raw().selectedIndex].value;
  305. if (index != "") {
  306. $('#remaster_year').raw().value = remasters[index][1];
  307. $('#remaster_title').raw().value = remasters[index][2];
  308. $('#remaster_record_label').raw().value = remasters[index][3];
  309. $('#remaster_catalogue_number').raw().value = remasters[index][4];
  310. }
  311. }
  312. function AnidbAutofill() {
  313. var map = { artist: 'idols_0',
  314. title: 'title',
  315. title_jp: 'title_jp',
  316. year: 'year',
  317. description: 'album_desc' }
  318. var aid = $('#anidb').raw().value
  319. $.getJSON('/ajax.php?action=anidb&aid='+aid, function(data) {
  320. if (data.status != "success") return
  321. for (i in data.response) {
  322. if (map[i] && !($('#'+map[i]).raw().value)) {
  323. $('#'+map[i]).raw().value = data.response[i]
  324. }
  325. }
  326. })
  327. }
  328. function JavAutofill() {
  329. var map = { cn: 'javdb',
  330. idols: 'idols',
  331. title: 'title',
  332. title_jp: 'title_jp',
  333. year: 'year',
  334. studio: 'studio',
  335. image: 'image',
  336. tags: 'tags',
  337. description: 'album_desc' }
  338. var cn = $('#catalogue').raw().value.toUpperCase()
  339. $.getJSON('/ajax.php?action=javfill&cn='+cn, function(data) {
  340. if (data.status != "success") {
  341. $('#catalogue').raw().value = 'Failed'
  342. return
  343. } else {
  344. $('#catalogue').raw().value = data.response.cn
  345. }
  346. for (i in data.response) {
  347. if (Array.isArray(data.response[i])) {
  348. for (j in data.response[i]) {
  349. if (i == 'idols') {
  350. if (!($('#'+map[i]+'_'+j).raw())) {
  351. AddArtistField()
  352. }
  353. $('#'+map[i]+'_'+j).raw().value = data.response[i][j]
  354. }
  355. if (map[i] == 'tags' && !($('#'+map[i]).raw().value)) {
  356. $('#'+map[i]).raw().value = data.response[i].join(', ')
  357. }
  358. }
  359. }
  360. if (map[i] && $('#'+map[i]).raw() && !($('#'+map[i]).raw().value)) {
  361. $('#'+map[i]).raw().value = data.response[i]
  362. }
  363. }
  364. if (data.response.screens.length) {
  365. $('#album_desc').raw().value = ('[spoiler=Automatically located thumbs][img]'+data.response.screens.join('[/img][img]')+'[/img][/spoiler]\n\n') + $('#album_desc').raw().value
  366. }
  367. })
  368. }
  369. function DoujAutofill() {
  370. var map = { artists: 'idols',
  371. title: 'title',
  372. title_jp: 'title_jp',
  373. year: 'year',
  374. tags: 'tags',
  375. lang: 'lang',
  376. cover: 'image',
  377. circle: 'series',
  378. pages: 'pages',
  379. description: 'release_desc' }
  380. var nh = $('#catalogue').raw().value
  381. $.getJSON('/ajax.php?action=doujin&url='+nh, function(data) {
  382. if (data.status != "success") {
  383. $('#catalogue').raw().value = 'Failed'
  384. return
  385. }
  386. for (i in data.response) {
  387. if (Array.isArray(data.response[i])) {
  388. for (j in data.response[i]) {
  389. if (i == 'artists') {
  390. if (!($('#'+map[i]+'_'+j).raw())) {
  391. AddArtistField()
  392. }
  393. $('#'+map[i]+'_'+j).raw().value = data.response[i][j]
  394. }
  395. if (map[i] == 'tags' && !($('#'+map[i]).raw().value)) {
  396. $('#'+map[i]).raw().value = data.response[i].join(', ')
  397. }
  398. }
  399. }
  400. if (map[i] && $('#'+map[i]).raw() && (!($('#'+map[i]).raw().value) || $('#'+map[i]).raw().value == '---')) {
  401. $('#'+map[i]).raw().value = data.response[i]
  402. }
  403. }
  404. })
  405. }
  406. function SetResolution() {
  407. if ($('#ressel').raw().value != 'Other') {
  408. $('#resolution').raw().value = $('#ressel').raw().value
  409. $('#resolution').ghide()
  410. } else {
  411. $('#resolution').raw().value = ''
  412. $('#resolution').gshow()
  413. $('#resolution').raw().readOnly = false
  414. }
  415. }
  416. function MediaInfoExtract() {
  417. const mi = $('#mediainfo').raw().value
  418. function getval(mi, key) {
  419. var match = mi.match(new RegExp('^'+key+'\\s*:\\s*(.*)', 'mi'))
  420. return (match && match[1]) ? match[1] : false
  421. }
  422. ['container', 'codec', 'resolution', 'audioformat', 'lang'].forEach((sel) => {
  423. if (sel == 'resolution') {
  424. var width = getval(mi, 'Width')
  425. var height = getval(mi, 'Height')
  426. if (!(width && height)) { return }
  427. width = width.match(/[0-9 ]+/)[0].replace(/ /g, '')
  428. height = height.match(/[0-9 ]+/)[0].replace(/ /g, '')
  429. var ressel = $('[name=ressel]').raw()
  430. if (width == '680' && height == '480') { ressel.value = 'SD' }
  431. else if (height == '480') { ressel.value = '480p' }
  432. else if (height == '720') { ressel.value = '720p' }
  433. else if (height == '1080' && getval(mi, 'Scan type' == 'Interlaced')) { ressel.value = '1080i' }
  434. else if (height == '1080') { ressel.value = '1080p' }
  435. else if (width == '3840') { ressel.value = '4K' }
  436. else {
  437. ressel.value = 'Other'
  438. $('[name=resolution]').raw().value = width+'x'+height
  439. }
  440. } else if (sel == 'lang') {
  441. var val1 = getval(mi.slice(mi.search(/^Audio$/m)), 'Language')
  442. var val2 = getval(mi.slice(mi.search(/^Audio\nID.*[^1]/m)), 'Language')
  443. var val = (val2 && val2 != val1 && (val1+val2 == 'EnglishJapanese' || val1+val2 == 'JapaneseEnglish')) ? 'Dual Language' : val1
  444. if (val) { $('[name=lang]').raw().value = val }
  445. } else if (sel == 'container') {
  446. var containerTable = {'Matroska': 'MKV','MPEG-4': 'MP4','AVI': 'AVI','OGG': 'OGM','Windows Media': 'WMV'}
  447. var cont = getval(mi, 'Format')
  448. if (containerTable[cont]) { $('[name=container]').raw().value = containerTable[cont] }
  449. } else if (sel == 'codec') {
  450. var codecTable = {'WMV1':'WMV','VC-1':'WMV','HEVC':'HEVC'}
  451. var codec = getval(mi.slice(mi.search(/^Video$/m)), 'Format')
  452. var formatProfile = getval(mi.slice(mi.search(/^Video$/m)), 'Format profile')
  453. var codecID = getval(mi, 'Codec ID')
  454. var codel = $('[name=codec]').raw()
  455. if (codec == 'AVC') {
  456. codel.value = (formatProfile.includes('High 10')) ? '10-bit h264' : 'h264'
  457. }
  458. else if (codec == 'MPEG-4 Visual') {
  459. codel.value = (codecID == 'XVID') ? 'XVID' : 'DIVX'
  460. }
  461. else if (codecTable[codec]) {
  462. codel.value = codecTable[codec]
  463. }
  464. }
  465. })
  466. }
  467. function initAutofill() {
  468. $('[autofill]').each(function(i, el) {
  469. el.addEventListener('click', function(event) {
  470. ({'douj':DoujAutofill, 'anime':AnidbAutofill, 'jav':JavAutofill})[el.attributes['autofill'].value]()
  471. })
  472. })
  473. }
  474. $(function() {
  475. initAutofill();
  476. $(document).on('click', '.add_artist_button', AddArtistField);
  477. $(document).on('click', '.remove_artist_button', RemoveArtistField);
  478. })