NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name AZNude - Video Search & UI Tweaks // @namespace brazenvoid // @version 4.0.4 // @author brazenvoid // @license GPL-3.0-only // @description Search and cleaners // @match https://www.aznude.com/* // @match https://search.aznude.com/* // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://update.greasyfork.org/scripts/375557/1244990/Base%20Brazen%20Resource.js // @require https://update.greasyfork.org/scripts/416104/1392660/Brazen%20UI%20Generator.js // @require https://update.greasyfork.org/scripts/418665/1408619/Brazen%20Configuration%20Manager.js // @require https://update.greasyfork.org/scripts/429587/1244644/Brazen%20Item%20Attributes%20Resolver.js // @require https://update.greasyfork.org/scripts/424499/1114815/Brazen%20Paginator.js // @require https://update.greasyfork.org/scripts/416105/1384192/Brazen%20Base%20Search%20Enhancer.js // @grant GM_addStyle // @run-at document-idle // ==/UserScript== GM_addStyle(`#settings-wrapper{min-width:300px;width:300px}.bv-button{color:black}.bv-input.bv-text{color:black}.bv-section{font-size:1.5rem}`) // Globals const PAGE_HOST_NAME = window.location.host const PAGE_PATH_NAME = window.location.pathname const IS_SEARCH_HOST = window.location.host.startsWith('search') const IS_SEARCH_PAGE = PAGE_PATH_NAME.startsWith('/browse') || IS_SEARCH_HOST const IS_SOURCE_PAGE = PAGE_PATH_NAME.startsWith('/view') const IS_VIDEO_PAGE = PAGE_PATH_NAME.startsWith('/azncdn') || PAGE_PATH_NAME.startsWith('/mrskin') const SCRIPT_PREFIX = 'az-sui-' const SELECTOR_ITEM_DURATION = '.video-time' const SELECTOR_ITEM_LIST = '.browse-type + .container > .row, .browse-celeb-main-content + .container > .row, .title-center + .row' const SELECTOR_PAGINATION_WRAPPER = '.nav.navbar-nav.navbar-center .lbtn-group.text-mid-center' // Items const ITEM_ACTRESS = 'actress' // Features const FILTER_ACTRESS_BLACKLIST = 'Actress Blacklist' const OPTION_ENABLE_ACTRESS_BLACKLIST = 'Enable Actress Blacklist' const UI_REMOVE_AD_BOXES = 'Remove Ad Video Blocks' const UI_REMOVE_RECOMMENDATIONS = 'Remove Recommendation Sections' const UI_REMOVE_SCREENSHOTS = 'Remove Screenshots' const UI_REMOVE_STORIES = 'Remove Stories' class AZSearchAndUITweaks extends BrazenBaseSearchEnhancer { constructor() { super({ isUserLoggedIn: false, itemDeepAnalysisSelector: '', itemLinkSelector: 'a.video', itemListSelectors: '.browse-type + .container > .row, .browse-celeb-main-content + .container > .row, .title-center + .row', itemNameSelector: 'h4', itemSelectors: '.celebs-boxes', requestDelay: 0, scriptPrefix: 'azn-sui-', tagSelectorGenerator: null, }) this._setupFeatures() this._setupUI() this._setupEvents() } /** * @private */ _setupEvents() { this._onUIBuild(() => { this._performOperation(UI_REMOVE_AD_BOXES, () => { $('.ad-box-video').each((index, element) => { element.remove() }) }) this._performOperation(UI_REMOVE_RECOMMENDATIONS, () => { $('.recommended').each((index, element) => { element.remove() }) }) this._performComplexOperation( UI_REMOVE_STORIES, (enabled) => enabled && IS_SOURCE_PAGE, () => { $('.browse-celeb-main-content').each((_i, element) => { let node = $(element) if (node.find('h4 > span').text().trim() === 'story:') { node.hide() node.next().hide() } }) }) this._performComplexOperation( OPTION_ENABLE_ACTRESS_BLACKLIST, (enabled) => enabled && this._getConfig(FILTER_ACTRESS_BLACKLIST).length && IS_SOURCE_PAGE, () => { let blacklist = this._configurationManager.getField(FILTER_ACTRESS_BLACKLIST).optimized $('.browse-celeb-main-content').each((_i, element) => { let node = $(element) if (blacklist.includes(node.find('a.page-link').text().toLowerCase().trim())) { node.hide() node.next().hide() } }) }) }) this._onUIBuilt(() => this._uiGen.getSelectedSection()[0].userScript = this) } /** * @private */ _setupFeatures() { this._configurationManager .addFlagField(UI_REMOVE_AD_BOXES, 'Hides ads disguised inside the videos list.') .addFlagField(UI_REMOVE_RECOMMENDATIONS, 'Hides recommendation sections') .addFlagField(UI_REMOVE_SCREENSHOTS, 'Hides screenshots from videos on celeb and movie pages.') .addFlagField(UI_REMOVE_STORIES, 'Hides stories from celeb pages.') .addFlagField(OPTION_ENABLE_ACTRESS_BLACKLIST, 'Applies the actress blacklist.') .addRulesetField(FILTER_ACTRESS_BLACKLIST, 5, 'Hide videos and sections of specified actresses', null, null, (rules) => { let optimizedRules = [] for (let i = 0; i < rules.length; i++) { optimizedRules[i] = rules[i].trim().toLowerCase() } return optimizedRules }) this._itemAttributesResolver.addAttribute(ITEM_ACTRESS, (item) => item.find('h4').text().trim().toLowerCase() || null) this._setupPaginator(IS_SEARCH_PAGE, { itemListSelector: SELECTOR_ITEM_LIST, lastPageUrl: window.location.origin + $('.lbtn-next').prev().attr('href'), onGetPageNoFromUrl: (url) => parseInt(url.split('/').pop().replace('.html', '')), onGetPageUrlFromPageNo: (newPageNo, paginator) => window.location.href.replace(paginator.getCurrentPageNo().toString(), newPageNo.toString()), onGetPaginationElementForPageNo: (pageNo, paginator) => paginator.getPaginationWrapper().find(pageNo === paginator.getCurrentPageNo() ? '#menu' : 'a[href$="' + pageNo + '"]'), paginationWrapper: $(SELECTOR_PAGINATION_WRAPPER) }) this._addItemDurationRangeFilter(SELECTOR_ITEM_DURATION) this._addItemComplexComplianceFilter(UI_REMOVE_SCREENSHOTS, (value) => value && IS_SOURCE_PAGE, (item) => Validator.isChildMissing(item, 'a.picture')) this._addItemComplexComplianceFilter( FILTER_ACTRESS_BLACKLIST, (actresses) => this._getConfig(OPTION_ENABLE_ACTRESS_BLACKLIST) && actresses.length, (item, actresses) => !actresses.includes(this._get(item, ITEM_ACTRESS)), ) } _setupUI() { this._userInterface = [ this._uiGen.createTabsSection(['Filters', 'UI', 'Global'], [ this._uiGen.createTabPanel('Filters', true).append([ this._configurationManager.createElement(FILTER_DURATION_RANGE), this._configurationManager.createElement(OPTION_ENABLE_ACTRESS_BLACKLIST), this._configurationManager.createElement(FILTER_ACTRESS_BLACKLIST), this._uiGen.createSeparator(), this._configurationManager.createElement(OPTION_DISABLE_COMPLIANCE_VALIDATION), ]), this._uiGen.createTabPanel('UI').append([ this._configurationManager.createElement(UI_REMOVE_AD_BOXES), this._configurationManager.createElement(UI_REMOVE_RECOMMENDATIONS), this._configurationManager.createElement(UI_REMOVE_SCREENSHOTS), this._configurationManager.createElement(UI_REMOVE_STORIES), this._uiGen.createSeparator(), this._configurationManager.createElement(CONFIG_PAGINATOR_THRESHOLD), this._configurationManager.createElement(CONFIG_PAGINATOR_LIMIT), ]), this._uiGen.createTabPanel('Global').append([ this._configurationManager.createElement(OPTION_ALWAYS_SHOW_SETTINGS_PANE), this._uiGen.createSeparator(), this._createSettingsBackupRestoreFormActions(), ]), ]), this._createSettingsFormActions(), this._uiGen.createSeparator(), this._uiGen.createStatisticsFormGroup(FILTER_DURATION_RANGE, 'Duration'), this._uiGen.createStatisticsFormGroup(FILTER_TEXT_BLACKLIST, 'Actress Blacklist'), this._uiGen.createStatisticsFormGroup(UI_REMOVE_SCREENSHOTS, 'Screenshots'), this._uiGen.createSeparator(), this._uiGen.createStatusSection(), ] } } (new AZSearchAndUITweaks).init()