In the groups list of Photo page or the User's Groups Page, at each group name, Add an icon to go to user's shots posted in this group.
当前为
- // ==UserScript==
- // @name Flickr - Go to User's Shots in this Group (Photo + User's Groups list Page)
- // @version 1.2
- // @description In the groups list of Photo page or the User's Groups Page, at each group name, Add an icon to go to user's shots posted in this group.
- // @icon https://external-content.duckduckgo.com/ip3/blog.flickr.net.ico
- // @namespace https://greasyfork.org/users/8
- // @match http*://*flickr.com/*
- // @match http*://www.flickr.com/photos/*
- // @match http*://www.flickr.com/people/*/groups/* // Match user groups page
- // @match http*://www.flickr.com/groups/*
- // @author decembre
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Function to add buttons on user's photo page
- function addButtons() {
- const useridElement = document.querySelector('.sub-photo-container.centered-content .attribution-view a.avatar');
- if (!useridElement) {
- console.log('User ID element not found. Retrying...');
- setTimeout(addButtons, 1000); // Retry after 1 second
- return;
- }
- const useridValue = useridElement.getAttribute('data-person-nsid');
- console.log('USERid trouvé :', useridValue);
- const groupidElements = document.querySelectorAll('.sub-photo-contexts-view .sub-photo-context.sub-photo-context-groups .context-list li');
- if (groupidElements.length === 0) {
- console.log('No group elements found. Retrying...');
- setTimeout(addButtons, 1000); // Retry after 1 second
- return;
- }
- groupidElements.forEach(function(groupidElement, index) {
- const groupidLink = groupidElement.querySelector('a');
- if (groupidLink) {
- const groupidValue = groupidLink.getAttribute('data-group-nsid');
- if (groupidValue) {
- const linkUrl = `https://www.flickr.com/groups/${groupidValue}/pool/${useridValue}/`;
- const linkHtml = `<a href="${linkUrl}" class="GoToPool" style="display: inline-block; position: absolute; top: 0; right: 0; height: 15px; line-height: 15px; width: 15px; background-color: green; font-size: 10px; border-radius: 50%; text-align: center; padding: 1px; opacity: 0.5; transition: opacity 0.7s ease;" title="Voir les photos de l'utilisateur dans ce groupe">🔴</a>`;
- // Check if the button already exists
- const existingButton = groupidElement.querySelector('.GoToPool');
- if (!existingButton) {
- const linkElement = document.createElement('span');
- linkElement.innerHTML = linkHtml;
- groupidElement.appendChild(linkElement);
- console.log('Lien inséré dans le DOM pour le pool #' + (index + 1));
- }
- } else {
- console.log('Aucun attribut data-group-nsid trouvé dans l\'élément a');
- }
- } else {
- console.log('No anchor element found in groupidElement.');
- }
- });
- }
- // Function to add buttons on Groups list page
- function addButtonsToGroupsList() {
- const useridElement = document.querySelector('.fluid.html-person-groups-page-view .fluid-magic-subnav-view .fluid-subnav-shim .fluid-subnav.with-overflow-menu .subnav-content.fluid-centered .subnav-items-container ul.links.extraitems li#about.link a');
- if (!useridElement) {
- console.log('User ID element not found on Groups list page. Retrying...');
- setTimeout(addButtonsToGroupsList, 1000); // Retry after 1 second
- return;
- }
- const useridValue = useridElement.getAttribute('href').split('/people/')[1].split('/')[0];
- console.log('USERid trouvé sur la page des groupes :', useridValue);
- const groupidElements = document.querySelectorAll('.fluid.html-person-groups-page-view .sortable-table-view:not(:empty):first-of-type .sortable-table-wrapper table.with-avatar tbody tr:not(.header) td.show-after-locked > span.avatar + a');
- if (groupidElements.length === 0) {
- console.log('No group elements found on Groups list page. Retrying...');
- setTimeout(addButtonsToGroupsList, 1000);
- return;
- }
- groupidElements.forEach(function(groupidElement, index) {
- const groupidValue = groupidElement.getAttribute('href').split('/groups/')[1].split('/')[0];
- if (groupidValue) {
- const linkUrl = `https://www.flickr.com/groups/${groupidValue}/pool/${useridValue}/`;
- const linkHtml = `<a href="${linkUrl}" class="GoToPool" style="display: inline-block; position: absolute; top: 0; right: 0; height: 15px; line-height: 15px; width: 15px; background-color: green; font-size: 10px; border-radius: 50%; text-align: center; padding: 1px; opacity: 0.5; transition: opacity 0.7s ease;" title="Voir les photos de l'utilisateur dans ce groupe">🔴</a>`;
- // Check if the button already exists
- const existingButton = groupidElement.parentElement.querySelector('.GoToPool');
- if (!existingButton) {
- const linkElement = document.createElement('span');
- linkElement.innerHTML = linkHtml;
- groupidElement.parentElement.appendChild(linkElement);
- console.log('Lien inséré dans le DOM pour le groupe #' + (index + 1));
- }
- } else {
- console.log('Aucun attribut data-group-nsid trouvé dans l\'élément a');
- }
- });
- }
- // Function to modify the URL of the "Back to group" button
- function modifyBackToGroupUrl() {
- var backToGroupButton = document.querySelector('.photo-content-upper-container .entry-type.do-not-evict[href^="/groups/"]');
- if (backToGroupButton) {
- var url = backToGroupButton.getAttribute('href');
- var modifiedUrl = url.replace(/\|[^/]+/, '');
- backToGroupButton.setAttribute('href', modifiedUrl);
- console.log('URL du bouton "Back to group" modifiée :', modifiedUrl);
- }
- }
- modifyBackToGroupUrl();
- // Add style rules for the button hover effect
- var style = document.createElement('style');
- style.innerHTML = `
- .GoToPool {
- display: inline-block;
- position: absolute;
- top: 0;
- right: 0;
- height: 15px;
- line-height: 15px;
- width: 15px;
- background-color: green;
- font-size: 10px;
- border-radius: 50%;
- text-align: center;
- padding: 1px;
- opacity: 0.5;
- transition: opacity 0.7s ease !important;
- }
- .GoToPool:hover {
- font-size: 8px !important;
- background-color: #b3ddb3 !important;
- opacity: 1 !important;
- transition: opacity 0.7s ease !important;
- }
- .GoToPool:visited {
- background-color: gold !important;
- }
- /* GO TO POOL - USER - GROUP LIST */
- .fluid.html-person-groups-page-view .sortable-table-view:not(:empty):first-of-type .sortable-table-wrapper table.with-avatar tbody tr:not(.header) td.show-after-locked > span.avatar + a + span {
- position: relative !important;
- display: inline-block;
- top: 0;
- right: 0;
- height: 15px;
- line-height: 15px;
- width: 15px;
- }`;
- document.head.appendChild(style);
- // Wait for the DOM to be fully loaded before executing the script
- document.addEventListener('DOMContentLoaded', function() {
- console.log('DOM fully loaded. Running addButtons and addButtonsToGroupsList...');
- addButtons();
- addButtonsToGroupsList();
- });
- // Optionally, you can also set up a MutationObserver to watch for changes in the DOM
- const observer = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- if (mutation.addedNodes.length > 0) {
- console.log('DOM changed, checking for buttons...');
- addButtons();
- addButtonsToGroupsList();
- }
- });
- });
- // Start observing the body for changes
- observer.observe(document.body, { childList: true, subtree: true });
- })();