GithubHelp home page GithubHelp logo

image-source-control / image-source-control Goto Github PK

View Code? Open in Web Editor NEW
11.0 11.0 12.0 1.36 MB

WordPress plugin to manage and display image sources

Home Page: https://imagesourcecontrol.com

PHP 91.31% CSS 1.04% JavaScript 7.33% HTML 0.32%

image-source-control's Introduction

=== Image Source Control Lite – Show Image Credits and Captions ===
Contributors: webzunft
Tags: credits, captions, copyrights, attributions, image sources
Requires at least: 5.3
Tested up to: 6.5
Stable tag: 2.24.1
Requires PHP: 7.2
License: GPLv3 or later
License URI: http://www.gnu.org/licenses/gpl-3.0.html

Show image credits, image captions, and copyrights. Manage image sources and warn if they are missing. The original plugin since 2012.

== Description ==

Are you concerned about being held liable for violating copyright law and would like to start crediting owners properly?

Do you want to give back to photographers and illustrators by adding image credits, so they are rightfully attributed?

Or are you a creator yourself and want to show information on the picture licenses for your image gallery under which publishers can use or purchase your work?

Image Source Control is your go-to solution when it comes to handling copyright-protected photos and illustrations.

**Image Credit layouts**

Choose between different credit displays:

* List all image sources below the content of a specific page or place the list manually
* Show an image caption overlay above or below the image
* Embed a complete image credit list with thumbnails on your website

**Frontend Features**

* Display image credits in the content, for image galleries, images added by shortcodes, and featured images
* … see more listed under Premium features below
* Define the layout and position of the caption overlay
* Show the image source fully, or only on click or mouseover
* Attach the Per-page list automatically, by using a shortcode, or with a PHP function
* Display image sources on archive pages
* Link to the copyright holder and include a link to the image license

**Backend Features**

* Add credits for any image file uploaded to the Media library
* Dedicated image source fields for the following blocks: Image, Cover Image, Featured Image, Media & Text
* Quickly assign a centrally defined source to any image and choose three options: hide image sources for these images, show a specific source (e.g., your name), or the uploader’s name
* Warn about missing image sources
* Manage, display, and link available licenses

**Featured Image Caption**

ISC Lite works for Featured Images. By default, you will see the image credits options in the media library and the featured image options in the block editor.

The featured image caption shows in the Per-page list with all other image sources on the page.

Check out the premium features to display the image caption overlay for featured images.

**Premium Features**

[Check out all features of Image Source Control](https://imagesourcecontrol.com/?utm_source=wporg&utm_medium=link&utm_campaign=all-features).

* List credits for images outside the content
* Add multiple links to the source string
* Manage image credits for images hosted outside the Media Library
* Handle images without file extensions
* Bulk-edit image copyright information in the media library
* Show the standard picture credit for all images without a selected source
* [Display IPTC copyright metadata](https://imagesourcecontrol.com/blog/iptc-copyright-information-image-caption-wordpress/) in the backend and automatically as a standard source in the frontend
* Show the full text only after a click or on mouseover on the caption overlay
* Choose which data is displayed in the Global List
* List only images with a proper source in the Global List
* Show image sources for Elementor background images, images in Kadence Blocks Galleries, and Kadence Related Content Carousel
* Developer options to show overlay captions for CSS background images
* Support for [background images of the Group block](https://imagesourcecontrol.com/blog/group-block-background-image/)
* Exclude certain images from showing the overlay by adding the `isc-disable-overlay` class
* Unused Images (see below)
* Personal email support

[See Pricing](https://imagesourcecontrol.com/pricing/?utm_source=wporg&utm_medium=link&utm_campaign=pricing).

**Unused Images**

Premium media cleaner features to remove unused images safely.

– Go to _Media > Unused Images_ to see and remove unused images
- Run an additional deep check to see if images are used in widgets, meta fields, or options
- Bulk delete unused images
- Filter the list by various states

[See Pricing](https://imagesourcecontrol.com/pricing/?utm_source=wporg&utm_medium=link&utm_campaign=pricing).

== Instructions ==

Take a look at the [Image Source Control Documentation](https://imagesourcecontrol.com/documentation/?utm_source=wporg&utm_medium=link&utm_campaign=documentation).

Find a list of missing images sources and other debug tools under _Media > Image sources_

You can choose to display image sources below the post content or as a small caption overlay above your images. Just visit the settings page of the plugin to enable those options.

**Manually included image sources on pages/posts**

You can add the Per-page list manually to pages or posts via the shortcode `[isc_list]` in your content editor or a text widget.

Use `[isc_list id="123"]` to show the list of any post or page.

Use the PHP code `<?php if( function_exists('isc_list') ) { isc_list(); } ?>` within your template files.

**List all image sources**

You can add a paginated list with ALL attachments and sources attached to posts and pages—the Global list—using the shortcode `[isc_list_all]`.

Use `[isc_list_all per_page="25"]` to show only a limited number of images per page.

Use `[isc_list_all included="all"]` to show all attachments in the list, including those not explicitly attached to a post.

The plugin searches your post content and thumbnail for images (attachments) and lists them if you included at least the image source or marked it to use the default image source.

**Remove “nofollow” from all source links**

In order to remove “nofollow” from source links, follow the [instructions in our documentation](https://imagesourcecontrol.com/documentation/#remove-nofollow-from-all-source-links).

== Installation ==

This section describes how to install the plugin and get it working.

e.g.

1. Upload `image-source-control-isc.zip` through the 'Plugin' menu in your WordPress backend
1. Activate the plugin
1. Visit _Settings > Image Sources_ for the main settings

See the _Instructions_ section [here](https://wordpress.org/plugins/image-source-control-isc/#description).

== Screenshots ==

1. Display image attribution captions as an overlay above the image
1. Display a list of all images of your site and their sources on a dedicated page
1. Edit image source settings in the Image block
1. Bulk-editing image sources in the Media Library
1. Unused Images – Media Cleaner feature to safely remove unused images
1. Customizing the display of image captions as an overlay
1. Customizing the list of image sources displayed under posts
1. Customizing the global list of image sources
1. Manage image usage licenses

== Changelog ==

= 2.24.1 =

- Improvement (Pro): catch more background images added by WP Bakery
- Fix: a wrong format of the `isc_post_images` post meta value could cause a PHP error

= 2.24.0 =

- Feature: (Pro) support for background images added by the WP Bakery page builder
- Improvement: allow to remove individual entries from the image-posts and post-images indices on the Tools page
- Improvement: include all page types in the post-image index list, not only posts
- Dev: added the `isc_add_sources_to_content_ignore_post_images_index` filter to allow users to manually ignore the post-images index on all page views in case another plugin or page builder indexes the wrong content
- Dev: speed up the query for images without sources
- Dev: added debug log entries and log parameters

= 2.23.1 =

- Fix: a fatal error prevented the settings page from loading fully when Elementor was enabled
- Fix: (Pro) license activations on subsites on a multisite didn’t work reliably

= 2.23.0 =

- Feature: (Pro) two new overlay behaviors: show the full caption only after a click or on mouseover
- Improvement: rearranged the settings page for more clarity
- Improvement: renamed the "pre-text" option for overlay text to "prefix"
- Improvement: added a button to close the newsletter signup form
- Dev: rewritten the code that renders and handles the settings page

= 2.22.0 =

- Note about WordPress 6.5: The lightbox feature in WordPress core changed significantly and no longer supports image source overlays out of the box. I am working on a solution.
- Improvement: (Pro) removed the hotfix for Elementor’s Image Optimization feature after they fixed the issue on their end
- Improvement: (Pro) added PHP translation files as supported in WP 6.5
- Fix: (Pro) the bulk edit fields could show a wrong default value in the backend for certain options
- Dev: (Pro) added the `isc_unused_images_per_page` filter to adjust the number of items per page in the [Unused Images list](https://imagesourcecontrol.com/features/delete-unused-images/)
- Dev: adjusted the URL sanitization check to allow special characters in image URLs, like "©"
- Dev: prevent a PHP deprecation warning when the `isc_public_global_list_view_path` filter returns an expected value
- Dev: remove cached options in `Standard_Source` class to prevent caching of old options

= 2.21.0 =

- Improvement: (Pro) the bulk edit options are visually more compact now
- Improvement: (Pro) Elementor: disable the Image Optimization module in Elementor when checking images in the whole content. This module is known for conflicting with many plugins and in review by the Elementor team
- Improvement: (Pro) Avada: recognize the `data-preload-img` attribute for Avada background images
- Improvement: (Pro) add a link to some words in the image source, but not to words at the end of the caption
- Improvement: show a feedback form when disabling the plugin
- Fix: (Pro) comma-separated URLs in the bulk edit fields were wrongly sanitized
- Fix: the image source fields in the media edit page disappeared when saving the page
- Fix: labels in the block editor were not translated
- Fix: newsletter subscription returned an error for subscribed users
- Dev: `ISC_Block_Options` threw a PHP warning due to an early hook
- Dev: introduced `ISC\User` to gather user-based helper functions
- Dev: add an output buffer handle to better analyze a conflict with other output buffers

= 2.20.1 =

- Fix: image source fields for image blocks in the site editor threw a JavaScript error
- Dev: resolved a PHP 8.2 encoding warning
- Dev: improved code style in the caption frontend script

= 2.20.0 =

- Improvement: (Pro) the deep check for image usages looks for attachment IDs in options, e.g., to find site logos
- Fix: unused images table layout was shifted for non-English backends
- Dev: added a helper class for utility functions
- Dev: use a custom unserialize function to prevent object injection

= 2.19.0 =

- Feature: (Pro) show caption overlay for [Avada Builder background images](https://imagesourcecontrol.com/documentation/compatibility/#Avada_Builder)
- Improvement: the check for unused images became faster and more reliable by excluding non-images
- Improvement: updated the uninstall script to remove recently added data when the plugin is deleted
- Improvement: (Pro) allow editors to use the bulk edit feature for image sources
- Improvement: (Pro) introduced pagination for the list of unused images
- Improvement: (Pro) bulk selecting enabled for checking unused images and deleting them
- Improvement: (Pro) introduced various filters to the list of unused images
- Fix: a possible empty post ID for the excerpt block caused a PHP warning
- Fix: (Pro) a PHP warning appeared when an unused image was associated with a deleted post
- Dev: introducing the ISC\Unused_Images class with improvements to unused images code
- Dev: (Pro) use WP_List_Table when displaying the Unused Images list

= 2.18.1 =

- Improvement: show a hint about where to edit image sources in the block editor, depending on The Block Options settings
- Fix: the Global List didn’t show any images when _Miscellaneous settings > Standard source > Exclude from lists_ was enabled

= 2.18.0 =

- Feature (Pro): show the IPTC copyright or credit meta information as a standard source. See this [blog post](https://imagesourcecontrol.com/blog/iptc-copyright-information-image-caption-wordpress/)
- Feature (Pro): authors now see the IPTC copyright and credit meta information in the backend and can copy it to the image source field with one click
- Feature (Pro): the standard source appears as a placeholder in the image source field in media list overview, when no individual source is entered
- Fix: pre-select the "custom text" standard source option when the plugin options weren’t saved yet to reflect how this state behaves in the frontend
- Dev: added an autoloader for plugin classes
- Dev: move all features related to the standard source into ISC\Standard_Source
- Dev: replace the `isc_raw_attachment_use_standard_source` and `isc_public_attachment_use_standard_source` with the `isc_use_standard_source_for_attachment` filter
- Dev: added the `isc_can_load` filter to allow developers to disable ISC on certain pages in the frontend
- Dev: added the `isc_force_block_options` filter hook to enable ISC fields in the block options and media modal in the block editor at the same time

= 2.17.1 =

- Improvement: create a unique name for the log file
- Improvement: show the overlay caption in the bottom left in the lightbox (added in WordPress 6.4) where the current position doesn’t show up

= 2.17.0 =

- Improvement: detect images file names generated by DALL·E
- Improvement: (Pro) support for [background images for the Group block](https://imagesourcecontrol.com/blog/group-block-background-image/) in WordPress 6.4

= 2.16.0 =

- Feature (Pro): Unused Images feature to help clean up the media library
- Improvement: combine images without sources and with empty sources in the "Images without sources" list on the Tools page instead of having two separate tables

= 2.15.0 =

- Improvement: (Pro) Support for dynamic background images in Elementor templates, e.g., featured images
- Improvement: (Pro) Disable links in overlays, e.g., when Elementor assigns a background image to `<a>` tags
- Fix: The `<style>` block detection could sometimes cover multiple blocks and add the caption only to the last one
- Dev: Added argument to `render_image_source_string()` that allows to disable links in the caption output

image-source-control's People

Contributors

cnhk avatar dependabot[bot] avatar galanos avatar goatherd avatar mperes avatar techmagus avatar webzunft avatar wprj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

image-source-control's Issues

Archive-Page settings overrides general setting to display the source list below the content

When the general option to add the source list below the content of posts is disabled, the source list is still showing up when the option "Display sources list below full posts" is enabled in the Archive Pages settings.

I see two solutions here:

  1. allow injecting the post list automatically below the content of posts on archive pages even when the general option is disabled. In that case, it should still not show on single posts
  2. both options need to be enabled to show source lists on archive pages

In any way, a change in the behavior might lead to some users not seeing sources below the content anymore.
Adding a change of behavior to the 2.0 release might raise enough awareness to users checking the output and noticing the issue.

Move HTML to template files

Especially settings in admin/admin.php

While we are at it, we could improve the templates by separating the HTML of the layout for the sections with the HTML that just renders the individual options.

Review code for block editor options

While the options we show for image sources are showing up in the image block, I have the feeling that the code might not be 100% valid and could be improved.

Shortcodes do not display anything

I have added sources, URLs or checked the "It's mine" checkbox on several images that are used on published pages.

Whenever I insert one of the shortcodes [isc_list] or [isc_list_all] into a page, the shortcode is executed (the literal shortcode is not showing anymore), but no content is generated on the page. How can I make the sources display?

(If that has any influence: The site uses Visual Composer elements.)

Deprecated live() causing issues on WP 5.5

As reported on wordpress.org, ISC gives an error and prevents features from working in various editors after upgrading to WordPress 5.5.

While I couldn’t reproduce a critical issue that prevented me from using any of the features in these editors, I saw a JavaScript warning that might indicate the problem saying TypeError: jQuery(...).live is not a function which pointed to https://github.com/webgilde/image-source-control/blob/7d15a3f654a099202fdeb8b0c900dcb6221766d7/admin/assets/js/post.js#L182.

The live() function is deprecated and with jQuery migrate being disabled by default in the WP backend since 5.5, this sounds like a possible explanation for issues. As the documentation states, it would need to be replaced with on().

What confuses me is that the error described above happens only with the current release of 1.10.4 but not with master, which contains the same script.

Remove all index data

Sometimes, the image-post relation seems to be broken. Especially after a bug or when indexing failed for other reasons.

ISC should have a method to remove the indexes so that ISC could re-set them.

Setting up the image-post relation should happen when the post is called in the frontend so indexing happens with every page load.

For testing, we could set up a few images and posts, then remove the index and see if they show up a) in the source list on the pages and b) in the full list.

Rethink indexing of images

ISC is currently listing image sources for images uploaded to a specific post. However, when the image is removed from that post and used in another, the image source list (the full one) still gets it wrong.

I need to rewrite indexing of images so that it is independent of the "Uploaded to" information stored in Wordpress. Might also be related to #39

How to get the source_string only?

This is how my featured image is displayed. I want to add the $source_string manually without the p-markup and source-pretext to my figcaption (maybe add other markup by myself), but I really don't know, how to get that $source_string for my featured image.

<figure>
 <img ...>
 <figcaption>
   caption text - $imagesourcecontroloutput
 </figcaption>
</figure>

Output of isc_thumbnail_source()

return '<p class="isc-source-text">' . $options['source_pretext'] . ' ' . $source_string . '</p>';

Looking forward to a hint and a little help

Allow new image formats

ISC restricts sources to known image formats. .webp and the very new AVIF format are not among them. I need to test them (especially, if they work with the WP media library) and whitelist them if that is the case.

batch change of sources

For sites with many images, it should be possible to change sources in bulk from a simple list on a dedicated page

rewrite first index

When first installed, the plugin scans images and posts to create the list of missing sources. I wasn’t able to reproduce an issue, but it could theoretically break sites with many images and posts. We might need to change the index process to something working in batches and using a dedicated page.

add full source list automatically to a given page

Add an option to automatically inject the full source list to a page that already exists (or is created dynamically).

It should be listed below existing content, if there is any.

Remember to automatically disable the output of the automatic image source list below the content for the selected page. One can do this in can_add_list_to_content.

Import IPTC data out of XMP

Is it possible to import IPTC fields which are embedded in XMP while importing the image to WordPress? I think it would be the field "Credit Line" out of IPTC.

Captions are not displayed with modified URLs

We modifiy the src-URL of the images to use relative URLs instead of absolute URLs. With this, captions are no longer displayed.
The reason for this is that the caption is build by the function get_source_by_url. This tries to identify the image-id from the URL and the renders the caption using render_image_source_string. Since the URLs are relative, get_image_by_url can not identify the image.
I'm curious what the reasoning behind using get_source_by_url is. The regex already returns the image-id. It is used to check if the image has a source: get_post_meta($id, 'isc_image_source_own', true).
So why not call render_image_source_string directly?

Handle AMP pages

We might just fall back to the list below the content on AMP pages since the overlay is not going to work.

Handle source output for "own" images

The setup for the sources of images that have the "this is my image" is not self-explanatory enough.

It does not explicitly say that the "image source" input is ignored when that checkbox is enabled.

When one does not enable the "Use authors names" or enter anything into "Custom text for owned images" in the main settings, the output for "own" images is empty even if "Exclude own images" is unchecked.

Some ideas:

  • have a default text for "Custom text for owned images" – don’t allow this to be cleared
  • use "(c) + URL" as the default text in that field and also when it was left empty or does not, yet, exist
  • improve the labels and explanation in the ISC image settings to better highlight that "image source" is more like an "external" source and link to the general settings next to the "this is my image" option

Some Links have no rel=""

See Line https://github.com/webgilde/image-source-control/blob/v1.10/public/public.php#L108

my link tags have no rel attribute (perhaps because it's an ACF field, perhaps it's because we have a lightbox plugin as well).

this should still be matched correctly. At the moment I changed this line to:

$pattern = '#(<[^>]*class="[^"]*(alignleft|alignright|alignnone|aligncenter).*)?((<a [^>]*(href="([^"]*)"[^>]*)>)? *(<img [^>]*[^>]*src="(.+)".*\/?>).*(</a>)??[^<]*).*(<\/figure.*>)?#isU';

and I have set $id to false in line 121.

With this change, it can find Links withouth rel attribute as well.

isc_list shortcode in Content breaks the block editor

New posts cannot be saved or existing ones auto-updated when the [isc_list] is used in the post content of the block editor. I added it using the /shortcode block and having images in the content as well. It doesn’t break all the time so I might be missing something.

At the same time, I can see a PHP issue raised in debug.log:

PHP Fatal error:  Uncaught Error: Maximum function nesting level of '256' reached, aborting! in /isc/wp-includes/class-wp-block-parser.php:83
Stack trace:
#0 /isc/wp-includes/class-wp-block-parser.php(477): WP_Block_Parser_Block->__construct(NULL, Array, Array, '\n\n', Array)
#1 /isc/wp-includes/class-wp-block-parser.php(548): WP_Block_Parser->freeform('\n\n')
#2 /isc/wp-includes/class-wp-block-parser.php(359): WP_Block_Parser->add_block_from_stack(456)
#3 /isc/wp-includes/class-wp-block-parser.php(236): WP_Block_Parser->proceed()
#4 /isc/wp-includes/blocks.php(521): WP_Block_Parser->parse('<!-- wp:paragra...')
#5 /isc/wp-includes/blocks.php(533): parse_blocks('<!-- wp:paragra...')
#6 /isc in /Users/thomas/Entwicklung/wp-testumgebungen/isc/wp-includes/class-wp-block-parser.php on line 83

Some tests I could do:

  • unregister the shortcode
  • log if the shortcode is actually interpreted while using the block editor

Show list of indexed images on post edit pages in backend

We should show a list of images related to a specific post/page on the post edit page. Could be useful for debugging.

Alternatively, we just add a link to the "Images Sources" page where we already show lists of image-post relations, but show them for a particular post, only. This way we don’t need to rewrite a lot of logic.

missing sources lists, link on mediatitle

In the list of missing sources ( upload.php?page=isc_missing_sources_page ) the media title is linked to the page
( /wp-admin/media.php?attachment_id={$ID}&action=edit ) on which an unnecessary button (insert post) is and does not allow me to delete the medium, among other things. It would be better to link to the media editing page from the title
/wp-admin/upload.php?item={$ID}

Create custom table for image sources and index

Instead of saving the source information and the post-image relation in post meta, we should have a dedicated index table. It would be much simpler to debug.

We could still keep the image source relation in post meta, but at least the image source information should move to a custom table. That might also be much faster.

Place source below images

Find a way to place the source also below images.
Could just use the current overlay logic, but without the placing part.

add block options

Add block options to the Gutenberg image block to handle image sources from there.

Notice: Undefined variable: content_after

Notice: Undefined variable: content_after in path\to\plugins\image-source-control-isc\public\public.php on line 166 when using the shortcode [isc_list].

Image list is missing completely.

WordPress v4.9.6 based on Bedrock with Twenty SeventeenVersion v1.6
Image Source Control v1.9.5
PHP v7.1.12

Skip source overlay on certain images

As discussed on wordpress.org, it might be useful to not show the source overlay for certain images. In this case, it breaks the Revolution Slider script.

There are a couple of alternatives to resolve this:

  • changing the priority of the the_content hook function in ISC to run before the other images are injected
  • ignore images with certain classes or in certain containers when creating the overlays (as in this PR)
  • allow admins to show/hide image sources manually per page or in general

The second solution sounds most useful here and should work without any additional options since we can assume that overlays will always break the slider. It should be built in a way that allows extending it dynamically.

A todo list could look like this:

  • rewrite the content filter code to detect all classes
  • check the classes against a list for those that should not receive overlays
  • should we also check the img tags for dedicated classes – at least draft a solution for that?
  • include option to allow admins to add blocker-classes manually

The challenge is to think about what users might expect here. Imagine, one chose the overlay method to show sources. The solution above would cause the sources of images in the slider to not being displayed, anywhere. Is this what most users would expect?

In that case, they would probably also have to use the source list under the content or the full source list embedded on a dedicated page.

don’t create wrapper

We still create a wrapper, but maybe it isn’t needed if the image is wrapped in <figure> and we can just give it our class to save on some HTML clutter.

Issue when autosaving a post in the block editor

The block editor gives a warning when it tries to save a post.

How to reproduce this: Create a new post or update an existing one (with an image in it?) and wait until the block editor tries to store an autosave.

A red warning will come up saying that updating failed.

Looking into the browser console, I see a couple of issues mentioning ISC:

Bildschirmfoto 2020-06-14 um 18 38 13

Warning: Each child in a list should have a unique "key" prop.

Check the render method of `IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))`. See https://fb.me/react-warning-keys for more information.
    in TextControl (created by IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit)))))
    in IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))
    in Unknown (created by WithDispatch(Component))
    in WithDispatch(Component)
    in Unknown (created by WithMultipleValidation(IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))))
    in WithMultipleValidation(IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))) (created by WithFilters(Edit))
    in WithFilters(Edit) (created by BlockEdit)
    in BlockEdit (created by block_BlockListBlock)
    in BlockCrashBoundary (created by block_BlockListBlock)
    in div (created by ForwardRef)
    in ForwardRef (created by block_BlockListBlock)
    in block_BlockListBlock (created by (block_BlockListBlock))
    in (block_BlockListBlock) (created by WithFilters(block_BlockListBlock))
    in WithFilters(block_BlockListBlock) (created by IfCondition(WithFilters(block_BlockListBlock)))
    in IfCondition(WithFilters(block_BlockListBlock)) (created by WithDispatch(IfCondition(WithFilters(block_BlockListBlock))))
    in WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))
    in Unknown (created by WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))
    in WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock))))
    in Unknown (created by Pure(WithViewportMatch(WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))))
    in Pure(WithViewportMatch(WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))) (created by BlockList)
    in div (created by ForwardRef(RootContainer))
    in div (created by InsertionPoint)
    in InsertionPoint (created by ForwardRef(RootContainer))
    in ForwardRef(RootContainer) (created by BlockList)
    in BlockList
    in Unknown (created by VisualEditor)
    in div (created by CopyHandler)
    in CopyHandler (created by WithDispatch(CopyHandler))
    in WithDispatch(CopyHandler) (created by VisualEditor)
    in div (created by ObserveTyping)
    in ObserveTyping (created by WithSafeTimeout(ObserveTyping))
    in WithSafeTimeout(ObserveTyping) (created by VisualEditor)
    in div (created by WritingFlow)
    in div (created by WritingFlow)
    in WritingFlow (created by VisualEditor)
    in div (created by CopyHandler)
    in CopyHandler (created by WithDispatch(CopyHandler))
    in WithDispatch(CopyHandler) (created by VisualEditor)
    in div (created by Typewriter)
    in Typewriter
    in Unknown (created by WithSelect(Typewriter))
    in WithSelect(Typewriter) (created by VisualEditor)
    in div (created by BlockSelectionClearer)
    in BlockSelectionClearer (created by WithDispatch(BlockSelectionClearer))
    in WithDispatch(BlockSelectionClearer)
    in Unknown (created by WithSelect(WithDispatch(BlockSelectionClearer)))
    in WithSelect(WithDispatch(BlockSelectionClearer)) (created by VisualEditor)
    in VisualEditor (created by Layout)
    in div (created by EditorSkeleton)
    in div (created by EditorSkeleton)
    in div (created by EditorSkeleton)
    in EditorSkeleton (created by NavigateRegions(EditorSkeleton))
    in div (created by NavigateRegions(EditorSkeleton))
    in NavigateRegions(EditorSkeleton) (created by Layout)
    in div (created by FocusReturnProvider)
    in FocusReturnProvider (created by Layout)
    in Layout (created by Editor)
    in ErrorBoundary (created by Editor)
    in BlockEditorProvider (created by WithDispatch(BlockEditorProvider))
    in WithDispatch(BlockEditorProvider)
    in Unknown (created by Context.Consumer)
    in WithRegistryProvider(WithDispatch(BlockEditorProvider)) (created by EditorProvider)
    in EntityProvider (created by EditorProvider)
    in EntityProvider (created by EditorProvider)
    in EditorProvider (created by WithDispatch(EditorProvider))
    in WithDispatch(EditorProvider)
    in Unknown (created by WithSelect(WithDispatch(EditorProvider)))
    in WithSelect(WithDispatch(EditorProvider))
    in Unknown (created by Context.Consumer)
    in WithRegistryProvider(WithSelect(WithDispatch(EditorProvider))) (created by Editor)
    in div (created by DropZoneProvider)
    in DropZoneProvider (created by Editor)
    in slot_fill_provider_SlotFillProvider (created by SlotFillProvider)
    in SlotFillProvider (created by Editor)
    in StrictMode (created by Editor)
    in Editor (created by WithDispatch(Editor))
    in WithDispatch(Editor)
    in Unknown (created by WithSelect(WithDispatch(Editor)))
    in WithSelect(WithDispatch(Editor))

and

Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://fb.me/react-controlled-components
    in input (created by TextControl)
    in div (created by BaseControl)
    in div (created by BaseControl)
    in BaseControl (created by TextControl)
    in TextControl (created by IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit)))))
    in div (created by PanelBody)
    in PanelBody (created by ForwardRef(PanelBody))
    in ForwardRef(PanelBody) (created by IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit)))))
    in bubbles_virtually_fill_Fill (created by slot_fill_Fill)
    in slot_fill_Fill (created by InspectorControlsFill)
    in InspectorControlsFill (created by Context.Consumer)
    in IfBlockEditSelected(InspectorControlsFill) (created by IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit)))))
    in IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))
    in Unknown (created by WithDispatch(Component))
    in WithDispatch(Component)
    in Unknown (created by WithMultipleValidation(IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))))
    in WithMultipleValidation(IscWithSourceControl(WithInspectorControl(WithInspectorControl(WithToolbarControls(Edit))))) (created by WithFilters(Edit))
    in WithFilters(Edit) (created by BlockEdit)
    in BlockEdit (created by block_BlockListBlock)
    in BlockCrashBoundary (created by block_BlockListBlock)
    in div (created by ForwardRef)
    in ForwardRef (created by block_BlockListBlock)
    in block_BlockListBlock (created by (block_BlockListBlock))
    in (block_BlockListBlock) (created by WithFilters(block_BlockListBlock))
    in WithFilters(block_BlockListBlock) (created by IfCondition(WithFilters(block_BlockListBlock)))
    in IfCondition(WithFilters(block_BlockListBlock)) (created by WithDispatch(IfCondition(WithFilters(block_BlockListBlock))))
    in WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))
    in Unknown (created by WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))
    in WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock))))
    in Unknown (created by Pure(WithViewportMatch(WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))))
    in Pure(WithViewportMatch(WithSelect(WithDispatch(IfCondition(WithFilters(block_BlockListBlock)))))) (created by BlockList)
    in div (created by ForwardRef(RootContainer))
    in div (created by InsertionPoint)
    in InsertionPoint (created by ForwardRef(RootContainer))
    in ForwardRef(RootContainer) (created by BlockList)
    in BlockList
    in Unknown (created by VisualEditor)
    in div (created by CopyHandler)
    in CopyHandler (created by WithDispatch(CopyHandler))
    in WithDispatch(CopyHandler) (created by VisualEditor)
    in div (created by ObserveTyping)
    in ObserveTyping (created by WithSafeTimeout(ObserveTyping))
    in WithSafeTimeout(ObserveTyping) (created by VisualEditor)
    in div (created by WritingFlow)
    in div (created by WritingFlow)
    in WritingFlow (created by VisualEditor)
    in div (created by CopyHandler)
    in CopyHandler (created by WithDispatch(CopyHandler))
    in WithDispatch(CopyHandler) (created by VisualEditor)
    in div (created by Typewriter)
    in Typewriter
    in Unknown (created by WithSelect(Typewriter))
    in WithSelect(Typewriter) (created by VisualEditor)
    in div (created by BlockSelectionClearer)
    in BlockSelectionClearer (created by WithDispatch(BlockSelectionClearer))
    in WithDispatch(BlockSelectionClearer)
    in Unknown (created by WithSelect(WithDispatch(BlockSelectionClearer)))
    in WithSelect(WithDispatch(BlockSelectionClearer)) (created by VisualEditor)
    in VisualEditor (created by Layout)
    in div (created by EditorSkeleton)
    in div (created by EditorSkeleton)
    in div (created by EditorSkeleton)
    in EditorSkeleton (created by NavigateRegions(EditorSkeleton))
    in div (created by NavigateRegions(EditorSkeleton))
    in NavigateRegions(EditorSkeleton) (created by Layout)
    in div (created by FocusReturnProvider)
    in FocusReturnProvider (created by Layout)
    in Layout (created by Editor)
    in ErrorBoundary (created by Editor)
    in BlockEditorProvider (created by WithDispatch(BlockEditorProvider))
    in WithDispatch(BlockEditorProvider)
    in Unknown (created by Context.Consumer)
    in WithRegistryProvider(WithDispatch(BlockEditorProvider)) (created by EditorProvider)
    in EntityProvider (created by EditorProvider)
    in EntityProvider (created by EditorProvider)
    in EditorProvider (created by WithDispatch(EditorProvider))
    in WithDispatch(EditorProvider)
    in Unknown (created by WithSelect(WithDispatch(EditorProvider)))
    in WithSelect(WithDispatch(EditorProvider))
    in Unknown (created by Context.Consumer)
    in WithRegistryProvider(WithSelect(WithDispatch(EditorProvider))) (created by Editor)
    in div (created by DropZoneProvider)
    in DropZoneProvider (created by Editor)
    in slot_fill_provider_SlotFillProvider (created by SlotFillProvider)
    in SlotFillProvider (created by Editor)
    in StrictMode (created by Editor)
    in Editor (created by WithDispatch(Editor))
    in WithDispatch(Editor)
    in Unknown (created by WithSelect(WithDispatch(Editor)))
    in WithSelect(WithDispatch(Editor))

place overlay also on other images

The source overlay doesn’t display above images outside the content, like also the featured image. Maybe, we find a way to place all image sources anywhere on a site.

Improve settings page

Some ideas to improve the settings page.

  • using the WP meta box layout for the boxes instead of our own with large headlines
  • turn the first box into an overview of how to add sources list to the frontend; this would include also a note about the full image source list. See also #62
  • hide the options for the source overlay if that method is not enabled (skip for now to see if the new layout is already helping or there is still confusion)
  • improve descriptions for "archive pages" since not every user might know what that means
  • add the size of the pre-defined thumbnail sizes to the options
  • show a preview of the layout of the sources lists, if possible, and react on changes

Compatibility Elementor

Hey, is there any Option to get a compatibility to Elementor page builder?
For now the Plugin doesn't recognize any Image which is coming from Elementor so far.
Or is there any Option for a function.php or something similar to get the ISC-Information out of Elementors Image-Galleries, Background-Images or the simple Image-Element?

Delete plugin data on install only as an option

Right now, ISC removes the plugin options on uninstall by default. The desired behavior should be:

  • create an option to remove all data (options and sources) on uninstall and uncheck it by default
  • remove plugin options when the checkbox is enabled
  • remove post meta fields when the checkbox is enabled

blacklist certain images by URL or class

E.g., to exclude gravatars automatically

Edit: gravatars don’t use an image file extension, so that shouldn’t be an issue.

Practically, a source would not show up if not given.
The background of this "feature" is rather to prevent unnecessary queries for sources to the database, e.g., profile pictures of authors or other cases in which there are many images, including images from other plugins (blacklist wp-content/plugins/?

The challenge here would be to properly explain what this is doing and how users can verify that it works properly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.