diff --git a/assets/img/icons/pencil2.svg b/assets/img/icons/pencil2.svg new file mode 100755 index 00000000..519bcca9 --- /dev/null +++ b/assets/img/icons/pencil2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/icons/pencil3.svg b/assets/img/icons/pencil3.svg new file mode 100755 index 00000000..70e3216b --- /dev/null +++ b/assets/img/icons/pencil3.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/img/icons/pencil5.svg b/assets/img/icons/pencil5.svg new file mode 100755 index 00000000..de84066a --- /dev/null +++ b/assets/img/icons/pencil5.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/img/icons/pencil7.svg b/assets/img/icons/pencil7.svg new file mode 100755 index 00000000..71317267 --- /dev/null +++ b/assets/img/icons/pencil7.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/scrapers/julesjordan.js b/src/scrapers/julesjordan.js index ba376a3f..dd0d4f67 100755 --- a/src/scrapers/julesjordan.js +++ b/src/scrapers/julesjordan.js @@ -169,7 +169,8 @@ async function scrapeScene({ html, query }, context) { release.tags = query.contents('.update_tags a, .player-scene-description a[href*="/categories"]'); release.director = release.tags?.find((tag) => ['mike john', 'van styles'].includes(tag?.trim().toLowerCase())); - const posterPath = query.poster('#video-player') || html.match(/useimage = "(.*)"/)?.[1]; + const posterPath = query.poster('#video-player', { forceGetAttribute: true }) // without getAttribute, missing poster is returned as page URL + || html.match(/useimage = "(.*)"/)?.[1]; if (posterPath) { const poster = /^http/.test(posterPath) ? posterPath : `${context.entity.url}${posterPath}`; @@ -188,7 +189,7 @@ async function scrapeScene({ html, query }, context) { query.video('source[data-bitrate="trailer_720" i]'), query.video('source[data-bitrate="trailer" i]'), // also seems to be 720p query.video('source[data-bitrate="trailer_mobile" i]'), // also seems to be 720p - ]; + ].filter(Boolean); } else if (context.include.trailers && context.entity.slug !== 'manuelferrara') { release.trailer = extractLegacyTrailer(html, context); } @@ -198,7 +199,8 @@ async function scrapeScene({ html, query }, context) { release.photos = getPhotos(query, release, context); } else { // base release photos are usually better, but deep photos have additional thumbs - // the filenames are not chronological, so sorting after appending only worsens the mix + // the filenames are not chronological, so sorting after appending only worsens the mix. + // #images img selects a list of images that is present on every page; the JJ website removes the ones that failed to load with JS (lol) release.photos = [ ...context.baseRelease?.photos?.map((sources) => sources.at(-1).src) || [], ...query.imgs('#images img'),