function DisplayTrans() { if (['Softsubs','Hardsubs'].indexOf($('select[name="sub"]').raw().value) != -1) { $('#subber').raw().parentNode.parentNode.style.display = 'table-row' } else { $('#subber').raw().parentNode.parentNode.style.display = 'none' } } function Categories() { let def = ['title', 'title_rj', 'title_jp', 'year', 'lang', 'censored', 'tags', 'cover', 'group_desc', 'release_desc', 'anon'] let cats = [{ 'javdb': {}, 'idols': {name: 'Idol(s)'}, 'studio': {name: 'Studio'}, 'series': {name: 'Series'}, 'media': {}, 'container': {}, 'codec': {}, 'resolution': {}, 'audio': {}, 'sub': {}, 'mediainfo': {}, 'screenshots': {name: 'Screenshots'}, 'group_desc': {notes: 'Contains information such as a description of the movie, a link to a JAV catalogue, etc.'}, 'release_desc': {notes: 'Contains information such as encoder settings or watermarks'} }, { 'anidb': {}, 'idols': {name: 'Artist/Studio'}, 'studio': false, 'series': {name: 'Circle (Optional)'}, 'media': {}, 'container': {}, 'codec': {}, 'resolution': {}, 'audio': {}, 'sub': {}, 'trans': {name: 'Translation Group (optional)'}, 'mediainfo': {}, 'tags': {notes: 'Remember to use the \'3d\' tag if your upload is 3DCG!'}, 'screenshots': {name: 'Screenshots'}, 'group_desc': {notes: 'Contains information such as a description of the anime, a link to AniDB, etc.'}, 'release_desc': {notes: 'Contains information such as encoder settings or episode source differences'} }, { 'ehentai': {}, 'idols': {name: 'Artist'}, 'studio': {name: 'Publisher (Optional)'}, 'series': {name: 'Circle (Optional)'}, 'pages': {}, 'media_manga': {}, 'archive_manga': {}, 'trans': {name: 'Translation Group (optional)'}, 'screenshots': {name: 'Samples'}, 'group_desc': {notes: 'Contains information such as a description of the doujin.'}, 'release_desc': {notes: 'Contains information such as formatting information.'} }, { 'idols': {name: 'Developer'}, 'series': {name: 'Circle (Optional)'}, 'studio': {name: 'Publisher (Optional)'}, 'dlsite': {}, 'media_games': {}, 'container_games': {}, 'archive': {}, 'trans': {name: 'Translation/Release Group (optional)'}, 'tags': {notes: 'Tags you should consider, if appropriate: visual.novel, nukige'}, 'screenshots': {name: 'Screenshots', notes: 'Promotional materials from a game\'s store page are NOT screenshots'}, 'group_desc': {notes: 'Contains information such as a description of the game, its mechanics, etc.'}, 'release_desc': {notes: 'Contains information such as version, install instructions, patching instructions, etc.'} }, { 'idols': {name: 'Voices (Optional)'}, 'studio': {name: 'Publisher (Optional)'}, 'mediainfo': {}, 'audio': {}, 'year': false, 'lang': false, 'dlsite': {}, 'screenshots': {name: 'Samples'}, 'group_desc': {notes: 'Contains information such as a description of the audio work.'}, 'release_desc': {notes: 'Contains information specific to the release.'} }, { 'idols': {name: 'Creators/Authors (Optional)'}, 'studio': {name: 'Publisher (Optional)'}, 'year': false, 'lang': false, 'dlsite': {}, 'screenshots': {name: 'Screenshots'}, 'release_desc': false }] let active = {} for (let field of def) active[field] = {} let category = 0 if ($('input[name="type"]').raw()) category = $('input[name="type"]').raw().value if ($('#categories').raw()) category = $('#categories').raw().value active = Object.assign(active, cats[category]) let hide = el => { Array.from($(`#${el.id} input, #${el.id} select, #${el.id} textarea`)).forEach(inp => inp.disabled = true) $(el).ghide() } let show = el => { Array.from($(`#${el.id} input, #${el.id} select, #${el.id} textarea`)).forEach(inp => inp.disabled = false) $(el).gshow() } let trs = $('#dynamic_form tr') for (let tr of trs) { let field = tr.id.slice(0,-3) if (active[field]) { if (active[field].name) { tr.children[0].innerHTML = active[field].name } let notes = $(`#${tr.id} p.notes`).raw() if (notes) notes.innerHTML = active[field].notes||'' show(tr) } else { hide(tr) } } } function Bitrate() { $('#other_bitrate').raw().value = ''; if ($('#bitrate').raw().options[$('#bitrate').raw().selectedIndex].value == 'Other') { $('#other_bitrate_span').gshow(); } else { $('#other_bitrate_span').ghide(); } } function AltBitrate() { if ($('#other_bitrate').raw().value >= 320) { $('#vbr').raw().disabled = true; $('#vbr').raw().checked = false; } else { $('#vbr').raw().disabled = false; } } function add_tag() { if ($('#tags').raw().value == "") { $('#tags').raw().value = $('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value; } else if ($('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value == '---') { } else { $('#tags').raw().value = $('#tags').raw().value + ', ' + $('#genre_tags').raw().options[$('#genre_tags').raw().selectedIndex].value; } } var LogCount = 1; function AddLogField() { if (LogCount >= 200) { return; } var LogField = document.createElement("input"); LogField.type = "file"; LogField.id = "file"; LogField.name = "logfiles[]"; LogField.size = 50; var x = $('#logfields').raw(); x.appendChild(document.createElement("br")); x.appendChild(LogField); LogCount++; } function RemoveLogField() { if (LogCount == 1) { return; } var x = $('#logfields').raw(); for (i = 0; i < 2; i++) { x.removeChild(x.lastChild); } LogCount--; } var ExtraLogCount = 1; function AddExtraLogField(id) { if (LogCount >= 200) { return; } var LogField = document.createElement("input"); LogField.type = "file"; LogField.id = "file_" + id; LogField.name = "logfiles_" + id + "[]"; LogField.size = 50; var x = $('#logfields_' + id).raw(); x.appendChild(document.createElement("br")); x.appendChild(LogField); LogCount++; } function RemoveLogField() { if (LogCount == 1) { return; } var x = $('#logfields').raw(); for (i = 0; i < 2; i++) { x.removeChild(x.lastChild); } LogCount--; } var FormatCount = 0; function AddFormat() { if (FormatCount >= 10) { return; } FormatCount++; $('#extras').raw().value = FormatCount; var NewRow = document.createElement("tr"); NewRow.id = "new_torrent_row"+FormatCount; NewRow.setAttribute("style","border-top-width: 5px; border-left-width: 5px; border-right-width: 5px;"); var NewCell1 = document.createElement("td"); NewCell1.setAttribute("class","label"); NewCell1.innerHTML = "Extra Torrent File"; var NewCell2 = document.createElement("td"); var TorrentField = document.createElement("input"); TorrentField.type = "file"; TorrentField.id = "extra_torrent_file"+FormatCount; TorrentField.name = "extra_torrent_files[]"; TorrentField.size = 50; NewCell2.appendChild(TorrentField); NewRow.appendChild(NewCell1); NewRow.appendChild(NewCell2); NewRow = document.createElement("tr"); NewRow.id = "new_format_row"+FormatCount; NewRow.setAttribute("style","border-left-width: 5px; border-right-width: 5px;"); NewCell1 = document.createElement("td"); NewCell1.setAttribute("class","label"); NewCell1.innerHTML = "Extra Format / Bitrate"; NewCell2 = document.createElement("td"); tmp = '"; var bitrates=["1","2","3"]; tmp += '"; NewCell2.innerHTML = tmp; NewRow.appendChild(NewCell1); NewRow.appendChild(NewCell2); NewRow = document.createElement("tr"); NewRow.id = "new_description_row"+FormatCount; NewRow.setAttribute("style","border-bottom-width: 5px; border-left-width: 5px; border-right-width: 5px;"); NewCell1 = document.createElement("td"); NewCell1.setAttribute("class","label"); NewCell1.innerHTML = "Extra Release Description"; NewCell2 = document.createElement("td"); NewCell2.innerHTML = ''; NewRow.appendChild(NewCell1); NewRow.appendChild(NewCell2); } function RemoveFormat() { if (FormatCount == 0) { return; } $('#extras').raw().value = FormatCount; var x = $('#new_torrent_row'+FormatCount).raw(); x.parentNode.removeChild(x); x = $('#new_format_row'+FormatCount).raw(); x.parentNode.removeChild(x); x = $('#new_description_row'+FormatCount).raw(); x.parentNode.removeChild(x); FormatCount--; } var ArtistCount = 1; function AddArtistField() { window.getSelection().removeAllRanges() ArtistCount = $('input[name="idols[]"]').length; if (ArtistCount >= 200) { return; } var ArtistField = document.createElement("input"); ArtistField.type = "text"; ArtistField.id = "idols_" + ArtistCount; ArtistField.name = "idols[]"; ArtistField.size = 45; var x = $('#idolfields').raw(); x.appendChild(document.createElement("br")); x.appendChild(ArtistField); x.appendChild(document.createTextNode('\n')); if ($("#idol").data("gazelle-autocomplete")) { $(ArtistField).live('focus', function() { $(ArtistField).autocomplete({ serviceUrl : 'artist.php?action=autocomplete' }); }); } ArtistCount++; } function RemoveArtistField() { window.getSelection().removeAllRanges() ArtistCount = $('input[name="idols[]"]').length; if (ArtistCount == 1) { return; } var x = $('#idolfields').raw(); for (i = 0; i < 3; i++) { x.removeChild(x.lastChild); } ArtistCount--; } function AddScreenshotField() { var sss = $('[name="screenshots[]"]') if (sss.length >= 10) return var ScreenshotField = document.createElement("input"); ScreenshotField.type = "text"; ScreenshotField.id = "ss_" + sss.length; ScreenshotField.name = "screenshots[]"; ScreenshotField.size = 45; var a = document.createElement("a") a.className = "brackets" a.innerHTML = "−" a.onclick = function(){RemoveScreenshotField(this)} var x = $('#screenshots').raw() var y = document.createElement("div") y.appendChild(ScreenshotField); y.appendChild(document.createTextNode('\n')); y.appendChild(a); x.appendChild(y); } function RemoveScreenshotField(el) { var sss = $('[name="screenshots[]"]') el.parentElement.remove() } function CheckVA () { if ($('#artist').raw().value.toLowerCase().trim().match(/^(va|various(\sa|a)rtis(t|ts)|various)$/)) { $('#vawarning').gshow(); } else { $('#vawarning').ghide(); } } function CheckYear() { var media = $('#media').raw().options[$('#media').raw().selectedIndex].text; if (media == "---" || media == "Vinyl" || media == "Soundboard" || media == "Cassette") { media = "old"; } var year = $('#year').val(); var unknown = $('#unknown').prop('checked'); if (year < 1982 && year != '' && media != "old" && !unknown) { $('#yearwarning').gshow(); $('#remaster').raw().checked = true; $('#remaster_true').gshow(); } else if (unknown) { $('#remaster').raw().checked = true; $('#yearwarning').ghide(); $('#remaster_true').gshow(); } else { $('#yearwarning').ghide(); } } function ToggleUnknown() { if ($('#unknown').raw().checked) { $('#remaster_year').raw().value = ""; $('#remaster_title').raw().value = ""; $('#remaster_record_label').raw().value = ""; $('#remaster_catalogue_number').raw().value = ""; if ($('#groupremasters').raw()) { $('#groupremasters').raw().selectedIndex = 0; $('#groupremasters').raw().disabled = true; } $('#remaster_year').raw().disabled = true; $('#remaster_title').raw().disabled = true; $('#remaster_record_label').raw().disabled = true; $('#remaster_catalogue_number').raw().disabled = true; } else { $('#remaster_year').raw().disabled = false; $('#remaster_title').raw().disabled = false; $('#remaster_record_label').raw().disabled = false; $('#remaster_catalogue_number').raw().disabled = false; if ($('#groupremasters').raw()) { $('#groupremasters').raw().disabled = false; } } } function AnimeAutofill() { var map = { artist: 'idols_0', title: 'title', title_rj: 'title_rj', title_jp: 'title_jp', year: 'year', description: 'album_desc' } var aid = $('#anidb').raw().value $.getJSON('/ajax.php?action=autofill&cat=anime&aid='+aid, function(data) { if (data.status != "success") return for (i in data.response) { if (map[i] && !($('#'+map[i]).raw().value)) { $('#'+map[i]).raw().value = data.response[i] } } }) } function JavAutofill() { var map = { cn: 'javdb', idols: 'idols', title: 'title', title_jp: 'title_jp', year: 'year', studio: 'studio', image: 'image', tags: 'tags', description: 'album_desc' } var cn = $('#javdb_tr #catalogue').raw().value.toUpperCase() $.getJSON('/ajax.php?action=autofill&cat=jav&cn='+cn, function(data) { if (data.status != "success") { $('#catalogue').raw().value = 'Failed' return } else { $('#catalogue').raw().value = data.response.cn } for (i in data.response) { if (Array.isArray(data.response[i])) { for (j in data.response[i]) { if (i == 'idols') { if (!($('#'+map[i]+'_'+j).raw())) { AddArtistField() } $('#'+map[i]+'_'+j).raw().value = data.response[i][j] } if (map[i] == 'tags' && !($('#'+map[i]).raw().value)) { $('#'+map[i]).raw().value = data.response[i].join(', ') } } } if (map[i] && $('#'+map[i]).raw() && !($('#'+map[i]).raw().value)) { $('#'+map[i]).raw().value = data.response[i] } } if (data.response.screens.length) { $('#album_desc').raw().value = ('[spoiler=Automatically located thumbs][img]'+data.response.screens.join('[/img][img]')+'[/img][/spoiler]\n\n') + $('#album_desc').raw().value } }) } function MangaAutofill() { var map = { artists: 'idols', title: 'title', title_jp: 'title_jp', year: 'year', tags: 'tags', lang: 'lang', cover: 'image', circle: 'series', pages: 'pages', description: 'release_desc' } var nh = $('#ehentai_tr #catalogue').raw().value $.getJSON('/ajax.php?action=autofill&cat=manga&url='+nh, function(data) { if (data.status != "success") { $('#catalogue').raw().value = 'Failed' return } for (i in data.response) { if (Array.isArray(data.response[i])) { for (j in data.response[i]) { if (i == 'artists') { if (!($('#'+map[i]+'_'+j).raw())) { AddArtistField() } $('#'+map[i]+'_'+j).raw().value = data.response[i][j] } if (map[i] == 'tags' && !($('#'+map[i]).raw().value)) { $('#'+map[i]).raw().value = data.response[i].join(', ') } } } if (map[i] && $('#'+map[i]).raw() && (!($('#'+map[i]).raw().value) || $('#'+map[i]).raw().value == '---')) { $('#'+map[i]).raw().value = data.response[i] } } }) } function SetResolution() { if ($('#ressel').raw().value != 'Other') { $('#resolution').raw().value = $('#ressel').raw().value $('#resolution').ghide() } else { $('#resolution').raw().value = '' $('#resolution').gshow() $('#resolution').raw().readOnly = false } } function MediaInfoExtract() { const mi = $('#mediainfo').raw().value function getval(mi, key) { var match = mi.match(new RegExp('^'+key+'\\s*:\\s*(.*)', 'mi')) return (match && match[1]) ? match[1] : false } ['container', 'codec', 'resolution', 'audioformat', 'lang'].forEach((sel) => { if (sel == 'resolution') { var width = getval(mi, 'Width') var height = getval(mi, 'Height') if (!(width && height)) { return } width = width.match(/[0-9 ]+/)[0].replace(/ /g, '') height = height.match(/[0-9 ]+/)[0].replace(/ /g, '') var ressel = $('[name=ressel]').raw() if (width == '680' && height == '480') { ressel.value = 'SD' } else if (height == '480') { ressel.value = '480p' } else if (height == '720') { ressel.value = '720p' } else if (height == '1080' && getval(mi, 'Scan type' == 'Interlaced')) { ressel.value = '1080i' } else if (height == '1080') { ressel.value = '1080p' } else if (width == '3840') { ressel.value = '4K' } else { ressel.value = 'Other' $('[name=resolution]').raw().value = width+'x'+height } } else if (sel == 'lang') { var val1 = getval(mi.slice(mi.search(/^Audio$/m)), 'Language') var val2 = getval(mi.slice(mi.search(/^Audio\nID.*[^1]/m)), 'Language') var val = (val2 && val2 != val1 && (val1+val2 == 'EnglishJapanese' || val1+val2 == 'JapaneseEnglish')) ? 'Dual Language' : val1 if (val) { $('[name=lang]').raw().value = val } } else if (sel == 'container') { var containerTable = {'Matroska': 'MKV','MPEG-4': 'MP4','AVI': 'AVI','OGG': 'OGM','Windows Media': 'WMV'} var cont = getval(mi, 'Format') if (containerTable[cont]) { $('[name=container]').raw().value = containerTable[cont] } } else if (sel == 'codec') { var codecTable = {'WMV1':'WMV','VC-1':'WMV','HEVC':'HEVC'} var codec = getval(mi.slice(mi.search(/^Video$/m)), 'Format') var formatProfile = getval(mi.slice(mi.search(/^Video$/m)), 'Format profile') var codecID = getval(mi, 'Codec ID') var codel = $('[name=codec]').raw() if (codec == 'AVC') { codel.value = (formatProfile.includes('High 10')) ? '10-bit h264' : 'h264' } else if (codec == 'MPEG-4 Visual') { codel.value = (codecID == 'XVID') ? 'XVID' : 'DIVX' } else if (codecTable[codec]) { codel.value = codecTable[codec] } } }) } function initAutofill() { $('[autofill]').each(function(i, el) { el.addEventListener('click', function(event) { ({'douj':MangaAutofill, 'anime':AnimeAutofill, 'jav':JavAutofill})[el.attributes['autofill'].value]() }) }) } $(function() { Categories(); initAutofill(); $(document).on('click', '.add_artist_button', AddArtistField); $(document).on('click', '.remove_artist_button', RemoveArtistField); })