From df4535aef10d8b2ef1f404c446017c5e2fabad88 Mon Sep 17 00:00:00 2001
From: lolandese <lolandese@210402.no-reply.drupal.org>
Date: Sun, 17 May 2015 23:46:30 +0200
Subject:  lolandese: Generated with Drush iq

---
 INSTALL.txt                             |    7 +
 README.txt                              |  442 ++++++++++++++++---------------
 block/INSTALL.txt                       |   21 ++
 block/README.txt                        |  222 ++++++++++++----
 block/flickr_block.install              |   12 +-
 block/flickr_block.module               |   35 +--
 cachewarmer/INSTALL.txt                 |    2 +
 cachewarmer/README.txt                  |   23 ++
 cachewarmer/flickrcachewarmer.admin.inc |    2 +-
 cachewarmer/flickrcachewarmer.module    |   68 +++--
 field/README.txt                        |   11 +-
 field/flickrfield.module                |    8 +-
 filter/README.txt                       |   55 ++--
 filter/flickr_filter.module             |  104 ++++----
 flickr.admin.inc                        |    8 +-
 flickr.api.inc                          |    2 +-
 flickr.inc                              |  138 +++++-----
 flickr.module                           |    6 +-
 sets/README.txt                         |   15 +-
 sets/flickr_sets.admin.inc              |    4 +-
 sets/flickr_sets.info                   |    1 +
 style/README.txt                        |   63 +++++
 style/flickrstyle.module                |   11 +
 23 files changed, 798 insertions(+), 462 deletions(-)
 create mode 100644 INSTALL.txt
 create mode 100644 block/INSTALL.txt
 create mode 100644 cachewarmer/INSTALL.txt
 create mode 100644 cachewarmer/README.txt
 create mode 100644 style/README.txt

diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 0000000..c6ce88d
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,7 @@
+It is recommended to enable the Colorbox module prior to installation of the
+Flickr module. This avoids some manual configuration.
+
+1.) Extract the download package in the '/sites/all/modules directory'.
+2.) Enable the module in 'admin/modules'.
+3.) Configure the API Key and settings at '/admin/config/media/flickr'.
+4.) Allow permissions '/admin/people/permissions'.
diff --git a/README.txt b/README.txt
index bdfc65a..4233d6b 100644
--- a/README.txt
+++ b/README.txt
@@ -1,11 +1,10 @@
 The content of this file is based on the online documentation that can be found
-at https://drupal.org/node/2170535
-It is recommended to read it there, as it is more detailed.
+at https://www.drupal.org/documentation/modules/flickr It is recommended to read
+it there, as it is more detailed.
 
 NAME
 ====
-Flickr
-Project page at https://drupal.org/project/flickr
+Flickr Project page at https://drupal.org/project/flickr
 
 REQUIREMENTS
 ============
@@ -15,174 +14,199 @@ OVERVIEW
 ========
 The Flickr module embeds images hosted on Flickr with a link to the
 corresponding Flickr page.
-
 - Flickr images can be displayed in blocks, within content or as fields.
 - Open Flickr photos in Colorbox, Lightbox or alike.
 - Show user/group photostreams and sets as responsive slideshows.
-- Image caption with the Flickr title, date taken, where  and by who.
+- Image caption with the Flickr title, date taken, where and by who.
 - Show the longer Flickr description on hover if it exists.
 
 INSTALLATION AND CONFIGURATION
 ==============================
-It is recommended to enable both the Taxonomy (core) and Colorbox module prior
-to installation of the Flickr module. This avoids some manual configuration.
+It is recommended to enable the Colorbox module prior to installation of the
+Flickr module. This avoids some manual configuration.
 1.) Extract the download package in the '/sites/all/modules directory'.
 2.) Enable the module in 'admin/modules'.
 3.) Configure the API Key and settings at '/admin/config/media/flickr'.
 4.) Allow permissions '/admin/people/permissions'.
 
+SIZES
+=====
+The image size can be one of the following:
+
+Suffix - Label - Size in pixel:
+s - Square - small square 75x75
+t - Thumbnail - 100 on longest side
+q - Large Square - big square 150x150
+m - Small - 240 on longest side
+n - Small 320 - 320 on longest side
+- - Medium - 500 on longest side
+z - Medium 640 - 640 on longest side
+c - Medium 800 - 800 on longest side
+b - Large - 1024 on longest side
+h - Large 1600 - 1600 on longest side
+k - Large 2048 - 2048 on longest side
+o - Original - original image, either a jpg, gif or png, depending on source
+    format
+x - Slideshow - Responsive slideshow (for group, set and user IDs only)
+y - Basic slideshow - Basic responsive slideshow (for set and user IDs only)
+
+NOTES:
+For square images ('s': 75px and 'q': 150px) no real width needs to be fetched, giving it a performance advantage over other sizes. Recommended if you include many images.
+
+TAKE CARE, the c (800px) size is missing on Flickr images uploaded before March 1, 2012. Check if it exists on the Flickr photo page > Actions > View all sizes.
+
+Embedded Flickr images have a maximum width of the region they are in. This means they adapt to it if they are bigger (responsive). You can use this on purpose to "fill up" e.g. the side bar.
+
+VIDEO SUPPORT
+=============
+A video in an album of thumbnails shows as a still image, but can be played when
+opened in Colorbox with the option to show in fullscreen mode. Make sure that
+'Enable Colorbox inline' is selected at admin/config/media/colorbox.
+
+Alternatively, to 'play' the videos embedded on a site:
+- Put the videos (one or more) you want to display together in a set.
+- Show the set in the node body, a block or a Flickr field using the size x for
+  a slideshow or y for the basic version.
+
 SETTINGS
 ========
 Settings are found at '/admin/config/media/flickr'. After changing many of the
 settings below, it is often required to CLEAR THE SITE CACHE to have the changes
 to take effect on existing content at '/admin/config/development/performance'.
 
+FLICKR CREDENTIALS
+
 API Key
 -------
 Get an API Key at https://www.flickr.com/services/apps/create/apply
 
 API Shared Secret
 -----------------
+
 Default Flickr User ID
+----------------------
 To use if in the block configuration no user is specified. Must be a valid
-Flickr User ID, alias, username or email address. Emails or usernames (that might
-change at any given time) are internally (in the variable) replaced with a
+Flickr User ID, alias, username or email address. Emails or usernames (that
+might change at any given time) are internally (in the variable) replaced with a
 stable NSID (Flickr ID number). These are rendered in admin forms (settings or
 block config) as Flickr usernames. 'Maria Emanuela' is human readable,
 '43937662@N05' is not. Internal the module still uses the Flickr ID number as it
 is more reliable.
 
-Update interval
----------------
-The refresh interval how often to check if cached Flickr API calls are up to
-date. Defaults to 1 hour.
+GLOBAL OPTIONS
 
-Limit API requests for random and popularity sort
--------------------------------------------------
-Setting a lower number enhances performance but makes random results being less
-spread between one another (not less random) and returns popular (most viewed on
-Flickr) only for the n most recent. Minimum 20, maximum 500. If you use cache
-warming you can set the maximum (see https://drupal.org/node/1576686).
-
-Number of photos per photoset
------------------------------
+Number of photos per album
+--------------------------
+How many photos of a photoset display in your nodes if no number is specified.
 Defaults to 6.
 
 Default size for photos in an album
 -----------------------------------
 A default Flickr size to use. This will be used when no size is specified, for
-example [flickr-photoset:id=72157634563269642]. TAKE CARE, n (320px) and c
-(800px) sizes are missing on many "older" Flickr images! Defaults to s: 75 px
-square. Thanks to the default setting you can change the size of all images
-without a specified size on the site in one go.
+example [flickr- photoset:id=72157634563269642]. TAKE CARE, the c (800px) size
+is missing on Flickr images uploaded before March 1, 2012. Defaults to s: 75 px square. Thanks to
+the default setting you can change the size of all images without a specified
+size on the site in one go.
 
-Use flickr.css
---------------
-Uncheck to take care of the styling yourself in custom CSS.
-Selected by default.
-
-FLICKR INFO TO USE (field group)
---------------------------------
 Minimum width to display a title caption
 ----------------------------------------
 Small images have little space for a title caption. Replaces it with the text
 "Flickr" that links to the photo page on Flickr to comply with their Guidelines.
-Defaults to 100 px. Set it to 0 px to always include or 999 px to always
-exclude.
+After saving the configuration clear the site cache. Defaults to 100 px. Set it
+to 0 px to always include a title caption or 999 px to always exclude.
 
-The presence of a caption is solely reliant on the values of the configuration
-fields:
-- Minimum image width to display a title caption * (default: '100 px')
-- Minimum image width to display date, location, photographer and optionally
-  license info under the caption * (default: '150 px') (see point below)
+The presence of a caption is solely reliant on the values of this configuration
+fields and the one below.
 
-The text 'Flickr' gets added as a caption that links to the correspondend Flickr
+The text 'Flickr' gets added as a caption that links to the correspondent Flickr
 photo page if:
 - clicking the image links to a bigger version of it, using lightbox/colorbox or
-  not, AND
-- the title caption that links to the Flickr photo page is suppressed (depending
-on the size).
-
-Setting a 'class' or 'rel' value in the 'overlay browser settings'
-(colorbox/lightbox), even one that is not valid, always links the image to a
-bigger version of it.
+  not
+AND
+- the title caption that links to the Flickr photo page is suppressed
+  (depending on the size). Setting a 'class' or 'rel' value in the 'overlay
+  browser settings' (colorbox/lightbox), even one that is not valid, always
+  links the image to a bigger version of it.
 
 Minimum image width to display date, location, photographer and optionally
 license info under the caption
---------------------------------------------------------------------------
+------------------------------
 Suppress extra info on small images. After saving the configuration clear the
-cache.
-Defaults to 150 px. Set it to 0 px to always include or 999 px to always
-exclude.
-Adds date, location and photographer info to the caption on images of a certain
-width. The date is in the form of 'time ago'. The photographer's Real Name is
-used, if not available the Username. In the caption it links to the user page on
-Flickr. The license info is optional (see below).
+cache. Defaults to 150 px. Set it to 0 px to always include or 999 px to always
+exclude. Adds date, location and photographer info to the caption on images of a
+certain width. The date is in the form of 'time ago'. The photographer's Real
+Name is used, if not available the Username. In the caption it links to the user
+page on Flickr. The license info is optional (see below).
 
-License info in caption
------------------------
-Depending on 'Minimum image width' above. Checkbox (not selected by default).
-Used is the nonintrusive icons font that can be found at
-http://creativecommons.org/about/downloads. It links to the
-corresponding Creative Commons human friendly info page. It is recommended to
-download the cc-icons font, put it in the your theme folder or the Flickr module
-folder and substitute the default used remote source that can be found in the
-module's 'flickr.css' file. Just replace 'http://creative.../downloads/' with
-the path to your theme folder or remove it completely if you have put it in the
-Flickr module folder so that only the filename remains.
+License icon Radio buttons
+--------------------------
+- No
+- On the image on mouse-over only (small in the top left corner, on hover).
+  NOTE: Does not display with the Flickr Style 'Enlarge'.
+- On the image (small in the top left corner, always)
+- In the caption
 
-What horizontal inside spacing is applied on the caption? (padding/border)
---------------------------------------------------------------------------
-See https://drupal.org/node/2174131#caption
+To give proper attribution. Used is the nonintrusive CC icon font in
+'flickr_cc_icons.css'. It links to the corresponding Creative Commons human
+friendly info page. Download it if you prefer to host it yourself locally (CC
+4.0 licensed, give credit somewhere). Extract it in your theme folder and
+substitute the default used remote source that can be found in the module's
+'flickr_cc_icons.css' file. Just replace '//cdn.jsdelivr.net/cc-icons/1.2.0/'
+with '[path to your theme folder]/cc-icons- cc-icons-772e090/'.
 
-Info to include when enlarging the image in Colorbox, Lightbox or alike
------------------------------------------------------------------------
-Usually this info is displayed under the enlarged image.
-Checkboxes (multiple options can be selected).
-- Title
-- Date, location and photographer
-- Description
-- License info
-All selected by default except for 'License info'. This info is concatenated
-with '-' separators and added as the link 'title' attribute. HTML is stripped,
-double quotes are removed (it goes into the title="[description]" attribute) and
-special characters are decoded (&copy; turns into ©). If the title and
-description are identical, only the title is used.
+License restriction for 'public' queries Radio buttons
+------------------------------------------------------
+- Always restrict 'public' queries to only Creative Commons licensed media.
+- Do not restrict media to Creative Commons licensed on 'public' queries if no
+  results are returned.
+- Do not restrict media to Creative Commons licensed on 'public' queries.
 
-As a side note: The description is always included as the image 'title'
-attribute (shows on hover). If the description is not available the title will
-be used.
+With 'public' queries are intended Flickr requests that do not specify a Flickr
+user or group ID, thus returning results from all public Flickr photos.
+
+Extend the tag filter to search for matching terms also in the Flickr photo
+title and description besides Flickr tags.
+------------------------------------------
+Descriptions are only searched on the album type 'user' (also 'public').
+Checkbox. Shows more results. Can be overridden individually by the filter tag,
+eg. [flickr-user:id=public, size=q, tags=Augusto Canario, extend=true] or in the
+specific configuration of a Flickr block.
 
 Extra links to Flickr maps
 --------------------------
-Include extra links to maps available for a user, group or set on Flickr.
-Locations mentioned (if displayed) under individual images link to corresponding
-Flickr user maps in any case, independent on the setting here.
+Checkbox. Include extra links to maps available for a user, group or set on
+Flickr. Locations mentioned (if displayed) under individual images link to
+corresponding Flickr user maps in any case, independent on the setting here.
 
 Show a Flickr counter
---------------------
-Shows how many photos are displayed out of the total number available for a
-user, group, set or tags on Flickr. Can be overridden by the filter tag, eg.
-[flickr-photoset:id=72157634563269642,count=false]
+---------------------
+Checkbox. Shows how many photos are displayed out of the total number available
+for a user, group, set or tags on Flickr. Can be overridden by the filter tag,
+eg. [flickr-photoset:id=72157634563269642, count=false]
 
-FILTER SETTINGS
----------------
-Only if the submodule Flickr Filter is enabled.
-See https://drupal.org/node/2171503#config.
+Use Google instead of Flickr for location info (reverse geocoding)
+------------------------------------------------------------------
+Checkboxes:
+- In the album title
+- In the photo caption
 
-BLOCK SETTINGS
---------------
-Only if the submodule Flickr Block is enabled.
-See https://drupal.org/node/2171249#config.
+DATE FORMATS
 
-OVERLAY BROWSER SETTINGS (field group)
---------------------------------------
-Colorbox, Lightbox (use the dev version) or alike. Leave these fields empty to
-link directly to the Flickr photo page instead of opening the bigger version of
-the image.  It also omits the caption in that case. This is only done to not
-alter the behaviour on previous installs of the Flickr module.  The best way of
-giving attribution is by using a full version of the caption (default settings +
-license info).
+Select fields of all defined date formats (long, medium, short) plus 'Time ago'
+custom defined by the Flickr module for the following elements:
+
+- When hovering an image (mouse-over)
+- In the image caption
+- When hovering a date in the caption. If you don't want to display anything
+  when hovering the date, select 'None'.
+- In the album title. If the selected date format contains a time, only the date
+  part of it will be used in the album title.
+
+OVERLAY BROWSER (COLORBOX, LIGHTBOX)
+
+Colorbox, Lightbox or alike. Extending Colorbox/Lightbox support to User
+Profiles is still an open issue. Leave these fields empty to link directly to
+the Flickr photo page instead of opening the bigger version of the image.
 
 To have captions, you must fill in the 'class' or 'rel' field. Even if you do
 not intend to use an overlay browser, this is the condition to display a
@@ -193,117 +217,115 @@ the name of your dog in one of the fields.
 
 class
 -----
-Use 'colorbox' if you are using Colorbox. (https://drupal.org/project/colorbox)
-With Lightbox you can leave it empty. (https://drupal.org/project/lightbox2)
+Use 'colorbox' if you are using Colorbox. With Lightbox you can leave it empty.
 
 rel
 ---
 Use 'gallery-all' if you are using Colorbox. It can be anything you want,
-really. As long there is something.
-Use 'lightbox[gallery]' if you are using Lightbox2. The part inside the square
-brackets can be anything you want but must be one word without spaces.
+really. As long there is something. Use 'lightbox[gallery]' if you are using
+Lightbox2. The part inside the square brackets can be anything you want but must
+be one word without spaces.
 
 NOTE: With Lightbox if you select an 'Automatic image handling' for Flickr
 images, you override the behaviour set here. If you don't want that, leave it
-'Disabled'. (/admin/config/user-interface/lightbox2/automatic)
+'Disabled'. Find it at admin/config/user-interface/lightbox2/automatic
 
 Image size to open
 ------------------
 The image size to open in the overlay browser when clicking the image. Larger
-sizes make navigating to next and previous pictures slower. TAKE CARE, n (320px)
-and c (800px) sizes are missing on many "older" Flickr images!
-Defaults to -: 500 px on longest side.
-
-Additionally: Enable playing videos within Colorbox
---------------------------------------------------
-- Go to '/admin/config/media/colorbox'.
-- Select the checkbox 'Enable Colorbox inline' and 'Save configuration'.
-- Clear your site cache (https://drupal.org/node/42055).
-
-BLOCK SETTINGS (field group)
---------------------------------------
-Only if the submodule Flickr Block is enabled.
-See the README.txt there.
-
-SIZES
-=====
-The size parameter can be one of the following:
-
-Suffix: Label:  Size:
-s Square  small square 75x75
-t Thumbnail thumbnail, 100 on longest side
-q Large Square  big square 150x150
-m Small small, 240 on longest side
-n Small 320 small, 320 on longest side
-[none] Medium  medium, 500 on longest side
-z Medium 640  medium 640, 640 on longest side
-c Medium 800  medium 800,
-b Large large, 1024 on longest side
-o Original  original image, either a jpg, gif or png, depending on source format
-x Flash Full featured responsive slideshow (for group, set and user IDs only)
-y Non-Flash Basic responsive slideshow (for set and user IDs only)
-
-Notes
------
-For square images ('s': 75px and 'q': 150px) no real width needs to be fetched,
-giving it a performance advantage over other sizes. Recommended if you include
-many images.
-
-If the wrong size is applied, check if it exists on the Flickr photo page >
-Actions > View all sizes.
-
-The slideshow allows for videos to be played. Put the desired videos to show
-together in a set.
-
-RECOMMENDED
-===========
-If you use the Flickr Filter submodule, you might find the AutoFloat
-module useful. See https://drupal.org/project/autofloat
-
-TROUBLESHOOTING
-===============
-For more details, see https://www.drupal.org/node/2289785
-
-Try clearing both your site (https://drupal.org/node/42055) and browser cache
-(http://www.wikihow.com/Clear-Your-Browser's-Cache).
-Use http://idgettr.com/ to find your Flickr user or group id.
-
-BEFORE posting a support request related to configuration, check the necessary
-settings in the demo at http://simplytest.me/project/demo_flickr/7.x-1.x
-Complete the installation process there (just hit Save and continue on each
-step). If at the end of the install process you get a white screen, just reload
-the page.
-
-Flickr error 100: Invalid API Key (Key has invalid format)
-----------------------------------------------------------
-Fill in some valid Flickr credentials at
-admin/config/media/flickr.
-
-Unexpected display problems occur
----------------------------------
-It should be noted that the cascading stylesheets defined by modules are by
-default loaded before theme CSS.See Drupal API:
-http://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_css/7
-Flickr module's style might be overwritten by the theme stylesheets. Copy and
-paste the CSS code in the flickr.css file to the bottom of your theme's custom
-CSS file or use this solution: http://k-it.ca/comment/14#comment-14
-
-'Undefined index' error after upgrade from 7.x-1.0 to a later version
----------------------------------------------------------------------
-Re-save your block settings. See https://drupal.org/node/2089575: Undefined
-index error after upgrade.
-
-Uninstalling Flickr Field - module is not selectable because Drupal says the
-fields implemented by it are being used
-----------------------------------------------------------------------------
-First delete all Flickr fields in use on your content types at
-admin/structure/types 'Manage fields'.
-Then run cron at admin/reports/status/run-cron
-
-MORE INFO
-=========
-The flickr module uses XML-RPC to connect to Flickr's API and retrieve photo
-information. Flickr API Documentation: http://www.flickr.com/services/api
+sizes make navigating to next and previous pictures slower. TAKE CARE, the c
+(800px) size is missing on Flickr images uploaded before March 1, 2012. Defaults to -: 500 px on
+longest side.
+
+Info to include when enlarging the image in Colorbox, Lightbox or alike
+-----------------------------------------------------------------------
+Usually this info is displayed under the enlarged image. Checkboxes (multiple
+options can be selected).
+
+- Title
+- Date, location and photographer
+- Description, applies also on the text that shows on mouseover (the image
+  'title' attribute)
+- License info
+
+All selected by default except for 'License info'. This info is concatenated
+with '-' separators and added as the link 'title' attribute. HTML is
+stripped, double quotes are removed (it goes into the title="[description]"
+attribute) and special characters are decoded (&copy; turns into ©). If the
+title and description are identical, only the title is used.
+
+As a side note: The description is always included as the image 'title'
+attribute (shows on hover). If the description is not available the title will
+be used.
+
+STYLING (CSS RELATED)
+
+Use flickr.css
+--------------
+Checkbox. Uncheck to take care of the styling yourself in custom CSS. Selected
+by default.
+
+More styling options are available if the submodule Flickr Style is enabled.
+
+ADVANCED
+
+Update interval
+---------------
+The refresh interval how often to check if cached Flickr API calls are up to
+date. Defaults to 1 hour.
+
+Limit API requests for random and popularity sort
+-------------------------------------------------
+Setting a lower number enhances performance but makes random results being less
+spread between one another (not less random) and returns popular (most viewed on
+Flickr) only for the n most recent. Minimum 20, maximum 500. If you use cache
+warming you can set the maximum (see https://drupal.org/node/1576686).
+
+Use 'cURL' to determine the image width instead of 'fopen' used by the PHP
+function 'getimagesize'
+-----------------------
+Checkbox (default OFF). Your server configuration now uses 'fopen' for external
+resources (used by 'getimagesize'). 'cURL' might be faster.
+
+Use 'cURL' instead of 'stream_socket_client' (drupal_http_request) to make data
+requests
+--------
+Checkbox (default OFF). Otherwise cURL will only be used as fallback when
+drupal_http_request fails.
+
+Enable Debug Output
+-------------------
+Radio buttons:
+- None
+- Flickr response only (as a link to an XML page in a debug message)
+- Plus Devel (Flickr response plus additional output)
+
+Display the Flickr XML response, all passed photo/album arguments and HTTP
+requests/response objects via the Devel module.
+
+CACHE WARMER
+
+Only if the submodule Flickr Cache Warmer is enabled.
+
+BLOCK SETTINGS
+
+Smart install of Flickr Block
+-----------------------------
+Checkbox (default ON). Disabled after install of Flickr Block. On install of
+Flickr Block auto create Flickr taxonomy, date and geo fields on all node types
+to grab Flickr photos related to the node on the same page as a Flickr block
+based on tags, a date or a location. Enable Taxonomy (core), Date (including
+date_popup) and Geofield before enabling Flickr Block for the first time (or
+uninstall it first).
+
+Other options appear only after the submodule Flickr Block is enabled. See
+https://drupal.org/node/2171249#config.
+
+FILTER SETTINGS
+
+Only if the submodule Flickr Filter is enabled. See
+https://drupal.org/node/2171503#config.
+
 
 Other Flickr module specific info for developers can be found at
 https://www.drupal.org/node/2289797
diff --git a/block/INSTALL.txt b/block/INSTALL.txt
new file mode 100644
index 0000000..2b338a7
--- /dev/null
+++ b/block/INSTALL.txt
@@ -0,0 +1,21 @@
+To have dynamic Flickr Blocks that use a node's:
+- taxonomy terms to grab identical tagged photos from Flickr
+- date fields to grab photos taken in the period of a node date
+- location or geofields to grab photos taken near the location of a node
+
+it is recommended to enable before installation or upgrade of the sub-module
+Flickr Block:
+- the core Taxonomy module. It will create a dedicated 'Flickr tags' vocabulary
+  and a preconfigured term reference field. This is optional as any free tagging
+  vocabulary can be used, but convenient as it saves some configuration.
+- the Date Popup module (sub-module of Date). It will create a dedicated 'Flickr
+  date taken' field on nodes.
+- the Geofield module. It will create a dedicated 'Flickr location' field on
+  nodes (latitude/longitude).
+
+To avoid the above mentioned 'smart install':
+- disable the mentioned modules before install of Flickr Block (first time
+  enable or after uninstall)
+OR
+- enable first the Flickr main module and unselect the 'smart install' checkbox
+  at admin/config/media/flickr under 'Block options', then install Flickr Block.
diff --git a/block/README.txt b/block/README.txt
index 71f61cf..65276cb 100644
--- a/block/README.txt
+++ b/block/README.txt
@@ -16,7 +16,7 @@ images from a specific user, photoset, gallery or group.
 - With visibility by role or path.
 - Blocks can be placed in any theme region.
 
-There areseveral blocks that show the Flickr photos of a corresponding node
+There are several blocks that show the Flickr photos of a corresponding node
 author 'dynamically' and appear on posts written by the user and on their user
 profile pages. To avoid that, change the block settings to exclude 'node/*'
 pages or show them only on 'user/*' pages.
@@ -26,10 +26,11 @@ page. You can fine-grain it even more by selecting only a certain content type
 you want to show them on, for example blog posts.
 
 - Node author favorites (what they like from others, but all together)
-  optionally tagged as term from node
+  optionally corresponding with a node's taxonomy term
 - Node author gallery photos (arbitrary selection by author of other's photos)
   optionally with gallery title as term from node
-- Node author photos optionally tagged as term from node
+- Node author photos optionally corresponding with a node's taxonomy term,
+  location and/or date field
 - Node author recent photosets
 
 The node author has to have permission to specify a Flickr ID on their own
@@ -38,73 +39,190 @@ account (admin/people/permissions#module-flickr).
 The block visibility setting for the 'Node author' blocks are not only
 restricted by the sitebuilder in the block configuration but also by the module.
 The block gets displayed when the first argument of the path is 'user' or 'node'
-and a specific uid is available. This is however not visible for the web admin
-and confusing. See #1122564: Sync the module defined visibility setting with the
-block configuration.
+and a specific uid is available.
 
 Furthermore several sitewide blocks are available. A user, photoset, gallery or
 group needs to be specified in the block configuration.
 
-- Favorites optionally tagged as term from node
-- Group photos optionally tagged as term from node
-- Set photos optionally tagged as term from node
-- User photos optionally tagged as term from node
+- Favorites corresponding with a node's taxonomy term
+- Group photos corresponding with a node's taxonomy term, location and/or date
+  field
+- Set photos corresponding with a node's taxonomy term
+- User photos corresponding with a node's taxonomy term, location and/or date
+  field
 - User photos with specific tags
 - User recent photosets
 
+INSTALLATION / UPGRADING
+========================
+To have dynamic Flickr Blocks that use a node's:
+- taxonomy terms to grab identical tagged photos from Flickr
+- date fields to grab photos taken in the period of a node date
+- location or geofields to grab photos taken near the location of a node
+
+it is recommended to enable before installation or upgrade of the sub-module
+Flickr Block:
+- the core Taxonomy module. It will create a dedicated 'Flickr tags' vocabulary
+  and a preconfigured term reference field. This is optional as any free tagging
+  vocabulary can be used, but convenient as it saves some configuration.
+- the Date Popup module (sub-module of Date). It will create a dedicated 'Flickr
+  date taken' field on nodes.
+- the Geofield module. It will create a dedicated 'Flickr location' field on
+  nodes (latitude/longitude).
+
+To avoid the above mentioned 'smart install':
+- disable the mentioned modules before install of Flickr Block (first time
+  enable or after uninstall)
+OR
+- enable first the Flickr main module and unselect the 'smart install' checkbox
+  at admin/config/media/flickr under 'Block options', then install Flickr Block.
+
+
 BLOCK CONFIGURATION
 ===================
 Fields in the block settings that apply on all blocks.
+======================================================
+Block title
+-----------
+This is an extra block title that normally stays empty as a title is already
+added that shows info about e.g. the photo order, the tags used to filter on,
+the album title, location, date range and Flickr user. You can suppress this
+title with CSS, e.g for the 'Flickr: User photos with specific tags' block
+($delta=11):
 
-Show n photos
--------------
+#block-flickr-11 .flickr-album-heading {
+  display: none;
+}
+
+Show n photos (field group 'Display')
+-------------------------------------
 The block will display this many photos.
 
-Size of photos
---------------
-Select the size of photos you'd like to display in
-the block. See https://drupal.org/node/2170535#sizes
-
+Size of photos (field group 'Display')
+--------------------------------------
+Select the size of photos you'd like to display in the block.
 NOTE:
-For square images ('s': 75px and 'q': 150px) no real width
-needs to be fetched, giving it a slight performance advantage over other sizes.
-Recommended if you include many images.
+For square images ('s': 75px and 'q': 150px) no real width needs to be fetched,
+giving it a slight performance advantage over other sizes. Recommended if you
+include many images.
 
-Use size=x for a Flash slideshow over the full region width (responsive).
-Size=y for a non-Flash version.
+Use size=x for a slideshow over the full region width (responsive). Size=y
+for a basic version.
 
-Media type
-----------
+Minimum image width to display a title caption (field group 'Display')
+----------------------------------------------------------------------
+Small images have liitle space for a title caption. Replace it with the text
+'Flickr' that links to the photo page on Flickr to comply with their Guidelines.
+Set it to '0 px' to always include or '999 px' to always exclude. To give proper
+attribution this should be included (space allowing).
+
+Minimum image width to display date, location, photographer and optionally
+license info under the caption (field group 'Display')
+------------------------------------------------------
+Suppress extra info on small images. Set it to '0 px' to always include or '999
+px' to always exclude. To give proper attribution this should be included (space
+allowing).
+
+Media type (field group 'Filter / sort order')
+----------------------------------------------
 - all
 - photos (default)
 - videos
 
-Note that for videos only an image representing the video is shown, except for
-slideshows (size x or y) that can 'play' a video. See
+Note that for videos a still image representing the video is shown. If you use
+Colorbox it can be played with the possibility to toggle to fullscreen. See
 https://drupal.org/node/2226579#video.
 
-All 'User' blocks.
-
-Flickr User ID
---------------
+All 'User' and 'Group' blocks.
+==============================
+Flickr User or Group ID
+-----------------------
 A valid Flickr User ID, alias, username or email address. If this is left blank,
-the site's default user will be used if set.
-Emails or usernames (that might change at any given time) are internally (in the
-variable) replaced with a stable NSID (Flickr ID number). These are rendered in
-this field as Flickr usernames. 'Maria Emanuela' is human readable,
-'43937662@N05' is not. Internal the module still uses the Flickr ID number as it
-is more reliable.
+the site's default user will be used if set. Emails or usernames (that might
+change at any given time) are internally (in the variable) replaced with a
+stable NSID (Flickr ID number). These are rendered in this field as Flickr
+usernames. 'Maria Emanuela' is human readable, '43937662@N05' is not. Internal
+the module still uses the Flickr ID number as it is more reliable.
 
-Other fields are self-explaining.
+For groups the ID (number) or alias can be used.
 
-SITEWIDE BLOCK SETTINGS
-=======================
+All 'corresponding with a node's taxonomy term' blocks.
+=======================================================
+Flickr tags as node taxonomy terms (choose a vocabulary to use) (field group
+'Filter / sort order')
+----------------------
+Limit the Flickr images to those that have a Flickr tag identical to the terms
+found for the node on the page the block is displayed on of a specific
+vocabulary. Case insensitive, matches any tag, for photosets even partial.
+Multiple tags for groups will only query the last 500 photos on Flickr (slowest
+API request). For user blocks the Flickr account of the node author will be
+queried. Flickr removes spaces from multi word tags (e.g. 'beach trip' becomes
+'beachtrip'). Multi word tags in Drupal can be used as spaces are stripped to
+make a Flickr request. For your content type, adjust the Help text of the used
+taxonomy field accordingly (e.g. at
+admin/structure/types/manage/article/fields/field_tags). The recommended widget
+type is Autocomplete term widget (tagging) with an unlimited number of values.
+If taxonomy was active at the moment of install, a vocabulary Flickr tags is
+already configured right by default. You should find Flickr tags as a Term
+reference field on your content type. It works out-of-the-box. If not on a node
+page, all photos will be displayed. To avoid this set the visibility settings
+below to Only the listed pages specified as node/*. Note that if you add this
+term reference field to user profiles at admin/config/people/accounts/fields it
+will filter additionally on it for user blocks. E.g. a user can set individually
+that from their account only photos tagged 'website' should be used to embed,
+independent from other used tags. Does apply only on user blocks, except for
+favorites.
+
+Checkbox: Extend to search for matching terms also in the Flickr photo title and
+description besides Flickr tags. This limits the tag mode below to 'any' (OR).
+(field group 'Filter / sort order')
+-----------------------------------
+Shows more results if true.
+
+Radios: Tag mode (field group 'Filter / sort order')
+----------------------------------------------------
+- Any (OR)
+- All (AND)
+- All (AND) for public searches, any (OR) if a Flickr user ID is known.
+Either 'any' for an OR operator between tags, 'all' for an AND operator or
+depending on the context.
+
+All 'corresponding with a node's location and/or date field' blocks.
+====================================================================
+Location or geofield (choose a field machine name to use)
+(field group 'Filter / sort order')
+-----------------------------------
+Limit the Flickr images to those that have a geo location near to the geofield
+found for the node on the page the block is displayed on. If not on a node page,
+all photos will be displayed. To avoid this set the visibility settings below to
+Only the listed pages specified as node/*.
+
+Date field (choose a field machine name to use)
+(field group 'Filter / sort order')
+-----------------------------------
+Limit the Flickr images to those that are taken on or between the dates attached
+to the node on the page the block is displayed on. If not on a node page, all
+photos will be displayed. To avoid this set the visibility settings below to
+Only the listed pages specified as node/*.
+
+Site wide block settings
+========================
 Generic block configuration settings can be found in an own section at
-admin/config/media/flickr. Only if the submodule Flickr Block is enabled.
+admin/config/media/flickr. Most options are only available if the sub-module
+Flickr Block is enabled.
 
 BLOCK SETTINGS (field group)
 ----------------------------
 
+Smart install of Flickr Block
+-----------------------------
+A checkbox (default ON). Disabled after enabling Flickr Block.
+On install of Flickr Block auto create Flickr taxonomy, date and geo fields on
+all node types to grab Flickr photos related to the node on the same page as a
+Flickr block based on tags, a date or a location. Enable Taxonomy (core), Date
+(including date_popup) and Geofield before enabling Flickr Block for the first
+time (or uninstall it first).
+
 Hide empty blocks (no media found)
 ----------------------------------
 A checkbox. Default OFF, mainly to make sure you can access the contextual
@@ -124,14 +242,26 @@ It is recommended to set two different refresh values for random (default 23
 hours) and other blocks (default 31 hours) to avoid they refresh all together.
 Lower values impact performance negatively. Consider to use cache warming.
 
-TIP
-===
+Number of photos per set
+------------------------
+How many photos display per set on blocks that display multiple photosets.
+
+Node author blocks
+==================
 You find instructions targeted to editors that don't have block administer
-permissions at https://drupal.org/node/2279003#block. They can still make use of
-the 'Node author' blocks that use photos of their Flickr account that have
-Flickr tags similar to taxonomy terms they attach to a node. This way they are
-able to add matching Flickr photos with their posts without the hassle of
+permissions at https://drupal.org/node/2279003#block. They can make use of the
+'Node author' blocks to show photos of their Flickr account that have Flickr
+tags similar to taxonomy terms they attach to a node they write. This way they
+are able to add matching Flickr photos with their posts without the hassle of
 uploading them on the site. Remember to give site editors also the permission to
 specify a Flickr identifier on their account.
 
+A Flickr Block inside the node body
+===================================
 Use Block Inject to put a Flickr Block inside your node body.
+
+Create new Flickr blocks
+========================
+You can create new Flickr blocks also through admin/structure/block/add, using
+the Text format that contains the Flickr Filter. See
+https://www.drupal.org/node/2171503#blocks.
diff --git a/block/flickr_block.install b/block/flickr_block.install
index 3e6114b..49ab66c 100644
--- a/block/flickr_block.install
+++ b/block/flickr_block.install
@@ -150,7 +150,7 @@ function flickr_block_install() {
             'weight' => 10,
           ),
         ),
-       'settings' => array(
+        'settings' => array(
           'default_value' => 'blank',
           'default_value2' => 'blank',
         ),
@@ -239,7 +239,7 @@ function flickr_block_install() {
         ));
       }
     }
-    elseif(module_exists('date_popup')) {
+    elseif (module_exists('date_popup')) {
       foreach (range(0, 16) as $delta) {
         variable_set('flickr_block_' . $delta, array(
           'date' => 'field_flickr_date',
@@ -458,7 +458,7 @@ function flickr_block_update_7102() {
             'weight' => 10,
           ),
         ),
-       'settings' => array(
+        'settings' => array(
           'default_value' => 'blank',
           'default_value2' => 'blank',
         ),
@@ -547,7 +547,7 @@ function flickr_block_update_7102() {
         ));
       }
     }
-    elseif(module_exists('date_popup')) {
+    elseif (module_exists('date_popup')) {
       foreach (range(0, 16) as $delta) {
         variable_set('flickr_block_' . $delta, array(
           'date' => 'field_flickr_date',
@@ -653,11 +653,11 @@ function flickr_block_uninstall() {
   }
   $field = field_info_field('field_flickr_date');
   if ($field) {
-     field_delete_field('field_flickr_date');
+    field_delete_field('field_flickr_date');
   }
   $field = field_info_field('field_flickr_geo');
   if ($field) {
-     field_delete_field('field_flickr_geo');
+    field_delete_field('field_flickr_geo');
   }
   field_purge_batch(500);
 }
diff --git a/block/flickr_block.module b/block/flickr_block.module
index 868f265..560f1b4 100644
--- a/block/flickr_block.module
+++ b/block/flickr_block.module
@@ -316,12 +316,12 @@ function flickr_block_configure($delta = '') {
     // Limit the tag mode to 'OR' for extended searches.
     if ($settings['extend']) {
       $form['filter_settings']["flickr_block_{$delta}_tag_mode"] = array(
-       '#type' => 'radios',
+        '#type' => 'radios',
         '#title' => t("Tag mode"),
         '#options' => array(
-        'any' => t("Any (OR)"),
-        'all' => '<span class="grayed-out">' . t("All (AND)") . '</span>',
-        'context' => '<span class="grayed-out">' . t("All (AND) for public searches, any (OR) if a Flickr user ID is known.") . '</span>',
+          'any' => t("Any (OR)"),
+          'all' => '<span class="grayed-out">' . t("All (AND)") . '</span>',
+          'context' => '<span class="grayed-out">' . t("All (AND) for public searches, any (OR) if a Flickr user ID is known.") . '</span>',
         ),
         '#default_value' => 'any',
         '#description' => t("Forced to 'any' (OR) for extended searches. Unselect the checkbox above ('Extend') and save if you want to use this option."),
@@ -429,10 +429,11 @@ function flickr_block_configure($delta = '') {
       unset($form["flickr_block_{$delta}_group_id"]);
       unset($form["flickr_block_{$delta}_photoset"]);
       break;
+
     // User favorite Flickr photos.
     case 13:
     case 14:
-    // User gallery Flickr photos.
+      // User gallery Flickr photos.
     case 15:
     case 16:
       unset($form["flickr_block_{$delta}_user_id"]);
@@ -1028,11 +1029,11 @@ function flickr_block_view($delta = '') {
             if (module_exists('geofield') && !is_numeric($settings['geo']) && !empty($settings['geo'])) {
               $value = field_get_items('user', $user, $settings['geo']);
               $lat = $value[0]['lat'];
-              $lon= $value[0]['lon'];
+              $lon = $value[0]['lon'];
             }
             elseif (module_exists('location_node') && $settings['geo'] == 1 && !empty($user->locations)) {
               $lat = $user->locations[0]['latitude'];
-              $lon= $user->locations[0]['longitude'];
+              $lon = $user->locations[0]['longitude'];
             }
             else {
               $lat = NULL;
@@ -1103,11 +1104,11 @@ function flickr_block_view($delta = '') {
             if (module_exists('geofield') && !is_numeric($settings['geo']) && !empty($settings['geo'])) {
               $value = field_get_items('node', $node, $settings['geo']);
               $lat = $value[0]['lat'];
-              $lon= $value[0]['lon'];
+              $lon = $value[0]['lon'];
             }
             elseif (module_exists('location_node') && $settings['geo'] == 1 && !empty($node->locations)) {
               $lat = $node->locations[0]['latitude'];
-              $lon= $node->locations[0]['longitude'];
+              $lon = $node->locations[0]['longitude'];
             }
             else {
               $lat = NULL;
@@ -1116,9 +1117,9 @@ function flickr_block_view($delta = '') {
             if (module_exists('date') && !is_numeric($settings['date']) && !empty($settings['date'])) {
               $value = field_get_items('node', $node, $settings['date']);
               $datefrom = substr($value[0]['value'], 0, strrpos($value[0]['value'], ' '));
-              $dateto= substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
+              $dateto = substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
             }
-             else {
+            else {
               $datefrom = NULL;
               $dateto = NULL;
             }
@@ -1225,11 +1226,11 @@ function flickr_block_view($delta = '') {
         if (module_exists('geofield') && !is_numeric($settings['geo']) && !empty($settings['geo'])) {
           $value = field_get_items('node', $node, $settings['geo']);
           $lat = $value[0]['lat'];
-          $lon= $value[0]['lon'];
+          $lon = $value[0]['lon'];
         }
         elseif (module_exists('location_node') && $settings['geo'] == 1 && !empty($node->locations)) {
           $lat = $node->locations[0]['latitude'];
-          $lon= $node->locations[0]['longitude'];
+          $lon = $node->locations[0]['longitude'];
         }
         else {
           $lat = NULL;
@@ -1238,7 +1239,7 @@ function flickr_block_view($delta = '') {
         if (module_exists('date') && !is_numeric($settings['date']) && !empty($settings['date'])) {
           $value = field_get_items('node', $node, $settings['date']);
           $datefrom = substr($value[0]['value'], 0, strrpos($value[0]['value'], ' '));
-          $dateto= substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
+          $dateto = substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
         }
         else {
           $datefrom = NULL;
@@ -1308,11 +1309,11 @@ function flickr_block_view($delta = '') {
         if (module_exists('geofield') && !is_numeric($settings['geo']) && !empty($settings['geo'])) {
           $value = field_get_items('node', $node, $settings['geo']);
           $lat = $value[0]['lat'];
-          $lon= $value[0]['lon'];
+          $lon = $value[0]['lon'];
         }
         elseif (module_exists('location_node') && $settings['geo'] == 1 && !empty($node->locations)) {
           $lat = $node->locations[0]['latitude'];
-          $lon= $node->locations[0]['longitude'];
+          $lon = $node->locations[0]['longitude'];
         }
         else {
           $lat = NULL;
@@ -1321,7 +1322,7 @@ function flickr_block_view($delta = '') {
         if (module_exists('date') && !is_numeric($settings['date']) && !empty($settings['date'])) {
           $value = field_get_items('node', $node, $settings['date']);
           $datefrom = substr($value[0]['value'], 0, strrpos($value[0]['value'], ' '));
-          $dateto= substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
+          $dateto = substr($value[0]['value2'], 0, strrpos($value[0]['value2'], ' '));
         }
         else {
           $datefrom = NULL;
diff --git a/cachewarmer/INSTALL.txt b/cachewarmer/INSTALL.txt
new file mode 100644
index 0000000..75a2ce6
--- /dev/null
+++ b/cachewarmer/INSTALL.txt
@@ -0,0 +1,2 @@
+After install set the 'Minimum cache lifetime' to 'none' at
+admin/config/development/performance.
diff --git a/cachewarmer/README.txt b/cachewarmer/README.txt
new file mode 100644
index 0000000..fc742d0
--- /dev/null
+++ b/cachewarmer/README.txt
@@ -0,0 +1,23 @@
+The content of this file is based on the online documentation that can be found
+at https://www.drupal.org/node/2490126. It is recommended to read it there.
+
+Rebuilds the page cache after cron runs for selected content types also known as
+cache warming. It avoids long page loads for the first visitor after a cron run.
+See https://www.drupal.org/node/1576686/. Feel free to use the method there
+instead of this sub-module. Either way works but don't use them together.
+
+The server virtually visits all nodes of selected content types to ensure the
+cache of these pages is rebuild after a cron run to avoid long page loads for a
+real visitor. It can be limited to selected content types at
+admin/config/media/flickr. The connection method automatically falls back to
+cURL if stream_socket_client fails or is not available. Note that it uses the
+HEAD method where the server MUST NOT return a message-body in the response.
+Drupal will rebuild the full page's cache anyway.
+
+Set the 'Minimum cache lifetime' to 'none' at
+admin/config/development/performance.
+
+It is recommended to set the cron interval to something sensible. By default it
+is set to 3 hours at admin/config/system/cron. For many cases 'once a day' or
+even 'once a week' is more than enough. New or edited content will refresh
+anyway after hitting the 'Save' button.
diff --git a/cachewarmer/flickrcachewarmer.admin.inc b/cachewarmer/flickrcachewarmer.admin.inc
index bb67740..10784d5 100644
--- a/cachewarmer/flickrcachewarmer.admin.inc
+++ b/cachewarmer/flickrcachewarmer.admin.inc
@@ -88,7 +88,7 @@ function flickrcachewarmer_admin_settings_submit($form, &$form_state) {
       ->condition('n.type', array_filter($content_types), 'IN')
       ->execute()
       ->fetchCol();
-      flickrcachewarmer_run($nids);
+    flickrcachewarmer_run($nids);
     drupal_set_message(t('All caches are rebuilt.'), 'status', FALSE);
   }
 }
diff --git a/cachewarmer/flickrcachewarmer.module b/cachewarmer/flickrcachewarmer.module
index cb88418..82c8702 100644
--- a/cachewarmer/flickrcachewarmer.module
+++ b/cachewarmer/flickrcachewarmer.module
@@ -8,6 +8,17 @@
   module_load_include('inc', 'flickrcachewarmer', 'flickrcachewarmer.admin');
 
 /**
+ * Implements hook_help().
+ */
+function flickrcachewarmer_help($path, $arg) {
+  switch ($path) {
+    case 'admin/help#flickrcachewarmer':
+      // Return a line-break version of the README.txt.
+      return _filter_autop(file_get_contents(dirname(__FILE__) . '/README.txt'));
+  }
+}
+
+/**
  * Implements hook_cron().
  *
  * Called every time the Drupal cron runs.
@@ -26,23 +37,34 @@ function flickrcachewarmer_cron() {
     ->condition('n.type', array_filter($content_types), 'IN')
     ->execute()
     ->fetchCol();
-    // If the cache lifetime is substantially greater than the set cron
-    // interval, cut the above array in chunks to batch process them.
-    // Note it should currently not be used as we recommend to leave the cache
-    // lifetime set to 'none'.
-    $batchnumber = variable_get('cache_lifetime', 0) > (2 * variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD)) ? ceil(variable_get('cache_lifetime', 0) / variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD)) : 1;
-    $batchnumber = $batchnumber > count($nids) ? count($nids) : $batchnumber;
-    $batchsize = ceil(count($nids) / $batchnumber);
-    $nids = array_chunk($nids, $batchsize, FALSE);
-    // If the batch 'ID' is an undefined index (offset), reset it to zero.
-    $batch = variable_get('flickrcachewarmer_batch', 0) > $batchnumber - 1 ? 0 : variable_get('flickrcachewarmer_batch', 0);
-    // Go ahead to warm the cache for a batch of nodes.
-    flickrcachewarmer_run($nids[$batch]);
-    // Next time we should do the next batch.
-    variable_set('flickrcachewarmer_batch', $batch + 1);
-    $message = t("Cache of nodes successfully rebuilt for the selected content types. Node ID's: ") . implode(', ', $nids[$batch]) . '. ' . t('This was batch #') . ' ' . ($batch + 1) . ' ' . t('out of a total of') . ' ' . $batchnumber . '.<br />' . t('The next cache warming will take place in') . ' ' . format_interval(variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD), 2) . ' ' . t('(every cron run) on the following content types: ') . implode(', ', $content_types) . '.';
-    drupal_set_message($message, 'status', FALSE);
-    watchdog('flickrcachewarmer', $message);
+  // If the cache lifetime is substantially greater than the set cron
+  // interval, cut the above array in chunks to batch process them.
+  // Note it should currently not be used as we recommend to leave the cache
+  // lifetime set to 'none'.
+  $batchnumber = variable_get('cache_lifetime', 0) > (2 * variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD)) ? ceil(variable_get('cache_lifetime', 0) / variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD)) : 1;
+  $batchnumber = $batchnumber > count($nids) ? count($nids) : $batchnumber;
+  $batchsize = ceil(count($nids) / $batchnumber);
+  $nids = array_chunk($nids, $batchsize, FALSE);
+  // If the batch 'ID' is an undefined index (offset), reset it to zero.
+  $batch = variable_get('flickrcachewarmer_batch', 0) > $batchnumber - 1 ? 0 : variable_get('flickrcachewarmer_batch', 0);
+  // Go ahead to warm the cache for a batch of nodes.
+  flickrcachewarmer_run($nids[$batch]);
+  // Next time we should do the next batch.
+  variable_set('flickrcachewarmer_batch', $batch + 1);
+  $nidslist = implode(', ', $nids[$batch]);
+  $batchplusone = $batch + 1;
+  $nextcw = format_interval(variable_get('cron_safe_threshold', DRUPAL_CRON_DEFAULT_THRESHOLD), 2);
+  $ctlist = implode(', ', $content_types);
+  $message = t("Cache of nodes successfully rebuilt for the selected content types. Node ID's: %nidslist. This was batch # %batchplusone out of a total of %batchnumber", array(
+    '%nidslist' => $nidslist,
+    '%batchplusone' => $batchplusone,
+    '%batchnumber' => $batchnumber,
+    )) . '.<br />' . t('The next cache warming will take place in %nextcw (every cron run) on the following content types: %ctlist.', array(
+    '%nextcw' => $nextcw,
+    '%ctlist' => $ctlist,
+    ));
+  drupal_set_message($message, 'status', FALSE);
+  watchdog('flickrcachewarmer', $message);
 }
 
 /**
@@ -68,24 +90,24 @@ function flickrcachewarmer_run($nids) {
     }
     if (isset($result)) {
       if ($result->code != 200 && ($cmethod == 'stream_socket_client' || $cmethod == 'none') && function_exists('curl_version')) {
-        // Try to use cURL when drupal_http_request returns a different code than
-        // 200 (valid request, no errors). Most likely are 403 (forbidden) or 408
-        // (Request Timeout).
+        // Try to use cURL when drupal_http_request returns a different code
+        // than 200 (valid request, no errors). Most likely are 403 (forbidden)
+        // or 408 (Request Timeout).
         $result = flickr_curl_http_request($GLOBALS['base_url'] . '/node/' . $nid, array(
           'method' => 'HEAD',
         ));
         $cmethod = 'cURL';
-        $message = t('Automatic fallback to the cURL connection method kicked in on nid ') . $nid . t(' to handle the request. Result code from the failing request: ') . $result->code;
+        $message = t('Automatic fallback to the cURL connection method kicked in on nid %nid to handle the request. Result code from the failing request', array('%nid' => $nid)) . ': ' . $result->code;
         drupal_set_message($message, 'warning', FALSE);
         watchdog('flickr', $message, array(), WATCHDOG_WARNING);
         // Even the cURL method returns an error.
         if ($result->code != 200) {
           // Debug info.
           if (variable_get('flickr_debug', 0) == 2 && module_exists('devel')) {
-            dpm(t("Value of 'result' on nid ") . $nid . t(" with error in 'function flickr_request()' with connection method ") . "'" . $cmethod . t("' in 'flickr.inc':"));
+            dpm(t("Value of 'result' on nid %nid with error in 'function flickr_request()' with connection method '%cmethod' in 'flickr.inc'", array('%nid' => $nid, '%cmethod' => $cmethod)) . ':');
             dpm($result);
           }
-          flickr_set_error(t("Could not connect to Flickr, Error: @error", array('@error' => $result->error)));
+          flickr_set_error(t("Could not connect to Flickr, Error: %error", array('%error' => $result->error)));
         }
       }
     }
diff --git a/field/README.txt b/field/README.txt
index a60fad1..abe4153 100644
--- a/field/README.txt
+++ b/field/README.txt
@@ -13,6 +13,7 @@ Add Flickr images or sets to content as fields:
 - can be added to entities, usually nodes
 - have several formatting options to use various sizes, including slideshows
 - can be queried with the Views module.
+
 There are two kind of module provided Flickr fields. Only the first type is used
 for single Flickr photos. Both type of fields can be used for Flickr Photo Sets
 but each in a different way.
@@ -32,8 +33,8 @@ primary representing image of a set or a slideshow of multiple images. To
 display multiple photos from a photoset, use the Flickr Photo field type or use
 the slideshow format.
 
-Most interesting feature of this field is the slideshow. Both a Flash and
-non-Flash version exist. Both are responsive and adapt to the available space.
+Most interesting feature of this field is the slideshow. Both a full featured and
+basic version exist. Both are responsive and adapt to the available space.
 
 Full screen mode is supported, showing the largest available image that fits the
 screen on a black background (the way that most professional photographers
@@ -44,7 +45,7 @@ FIELD CONFIGURATION
 - Go to '/admin/structure/types'
 - Click 'manage fields'
 - Add new field > Flickr Photo or Flickr Photo Set (submodule Flickr Sets
-should be enabled to use sets in this field)
+  should be enabled to use sets in this field)
 - Save field settings
 - Configure as desired
 - Save settings
@@ -64,13 +65,13 @@ FEEDS INTEGRATION
 If you have the feeds module enabled, you can export Flickr field data.
 - Go to 'Mapping' (under 'Processor') for your particular feed.
 - See and use the 3 new 'Target' options (named as your chosen field name with
-the targeted column (id, nsid and type) in brackets.
+  the targeted column (id, nsid and type) in brackets.
 
 The options are as follows:
 - id: This is the Flickr photo or set ID.
 - nsid: This is the Flickr user ID.
 - type: This is the type of Flickr field. Current options are 'photo_id' (for an
-individual photo) and 'id' (for a set).
+  individual photo) and 'id' (for a set).
 
 Find an example csv file and feeds importer at:
 https://www.drupal.org/node/2339189#comment-9160963
diff --git a/field/flickrfield.module b/field/flickrfield.module
index 57470c6..26c2862 100644
--- a/field/flickrfield.module
+++ b/field/flickrfield.module
@@ -196,11 +196,11 @@ function flickrfield_field_formatter_info() {
     }
   }
   $formatters['photoset_flickrcomslideshow'] = array(
-    'label' => 'Embedded Flickr.com slideshow (Flash)',
+    'label' => 'Embedded Flickr.com slideshow',
     'field types' => array('flickrfield_photoset'),
   );
   $formatters['photoset_flickrcomslideshow_simple'] = array(
-    'label' => 'Embedded Flickr.com slideshow (non Flash)',
+    'label' => 'Embedded Flickr.com slideshow (basic)',
     'field types' => array('flickrfield_photoset'),
   );
   $formatters['photoset_flickrcomsetlink'] = array(
@@ -364,7 +364,7 @@ function theme_flickrfield_formatter_photoset_primaryphoto($element) {
 }
 
 /**
- * Theme a Flickr photo set as an embedded Flickr.com slideshow (Flash).
+ * Theme a Flickr photo set as an embedded Flickr.com slideshow.
  */
 function theme_flickrfield_formatter_photoset_flickrcomslideshow($variables) {
   if (empty($variables['#item']['flickrid'])) {
@@ -377,7 +377,7 @@ function theme_flickrfield_formatter_photoset_flickrcomslideshow($variables) {
 }
 
 /**
- * Theme a Flickr photo set as an embedded Flickr.com slideshow (non Flash).
+ * Theme a Flickr photo set as an embedded Flickr.com slideshow (basic).
  */
 function theme_flickrfield_formatter_photoset_flickrcomslideshow_simple($variables) {
   if (empty($variables['#item']['flickrid'])) {
diff --git a/filter/README.txt b/filter/README.txt
index b369605..f615346 100644
--- a/filter/README.txt
+++ b/filter/README.txt
@@ -9,8 +9,9 @@ Part of the Flickr module. Project page at https://drupal.org/project/flickr
 
 OVERVIEW
 ========
-Include single Flickr images, albums or slideshows (for sets, users or groups)
-into the node body using only the Flickr ID and optionally a other parameters.
+Embed single Flickr images, sets, albums or slideshows (for sets, users or
+groups) in the node body using only the Flickr ID and optionally other
+parameters.
 
 FILTER CONFIGURATION
 ====================
@@ -21,7 +22,7 @@ image related HTML, for example AutoFloat
 (https://drupal.org/project/autofloat).
 
 Once you enabled the Flickr Filter submodule, you'll find a section FILTER
-SETTINGS on the Flickr configuration page at admin/config/media/flickr to
+OPTIONS on the Flickr configuration page at admin/config/media/flickr to
 provide the default values for the parameters size and heading. Both can be
 overridden by specifying them in the filter tag, like [flickr-
 group:id=91484156@N00, size=q, num=8, tags=flowers, heading=none].
@@ -29,16 +30,23 @@ group:id=91484156@N00, size=q, num=8, tags=flowers, heading=none].
 Default size for single photos
 ------------------------------
 A default Flickr size to use. This will be used when no size is specified, for
-example [flickr-photo:id=3711935987]. TAKE CARE, n (320px) and c (800px) sizes
-are missing on many "older" Flickr images! Defaults to m: 240 px on longest
-side. Thanks to the default setting you can change the size of all images
-without a specified size on the site in one go.
+example [flickr-photo:id=3711935987]. TAKE CARE, the c (800px) size is missing
+on Flickr images uploaded before March 1, 2012. Defaults to m: 240 px on longest side. Thanks to
+the default setting you can change the size of all images without a specified
+size on the site in one go.
 
 Wrap the album title in an HTML heading tag (only for the text filter)
 ----------------------------------------------------------------------
 To style the album title. Use 'p' for no style, e.g. 'h3' for a heading or
 'none' to not display an album title.
 
+Checkbox: Collapsible filter tips (collapsed by default)
+--------------------------------------------------------
+Collapse the in-line help for the Flickr Filter text format under the body field
+on node edit forms. This option is only available if the Chaos tool suite
+(ctools) module is enabled. This is almost always the case as this is a
+dependency of the popular Views module.
+
 CREATE NEW FLICKR BLOCKS USING FLICKR FILTER
 ============================================
 Using the predefined blocks from the Flickr Block submodule, once you "occupied"
@@ -72,9 +80,11 @@ The filter format is:
 It consists of:
 - An opening square bracket ([).
 - The term flickr followed by a dash (-).
-The type: photo, photoset, user, group or favorites followed by a colon (:).
+- The type: photo, photoset, gallery, user, group or favorites followed by a
+  colon (:).
 - A series of parameters separated by commas: id, size, class, style, num, tags,
-  media, heading, sort, filter, count, mintitle and minmetadata
+  extend, tag_mode, location, date, media, heading, sort, filter, count,
+  mintitle and minmetadata
 - A closing square bracket (]).
 
 Photo ID
@@ -169,8 +179,8 @@ Examples:
 For users and groups you can also use the path alias if it exists:
 - group: 'southseauk' in https://www.flickr.com/groups/southseauk
 
-For albums you have the extra sizes 'x' and 'y' available that result in a Flash
-or non-Flash slideshow over the full content width (responsive). Note that for
+For albums you have the extra sizes 'x' and 'y' available that result in a full featured
+or basic slideshow over the full content width (responsive). Note that for
 now a slideshow is only supported for photosets, groups and users and any other
 parameters are ignored (NO sort, tags or location). To add some spacing above
 and below a slideshow, modify your CSS or add some lines that contain a non
@@ -183,14 +193,21 @@ breaking space:
 
 For all other sizes the following parameters can be used:
 
-num : The number of photos to show.
-tags : Flickr tags to filter on.
-location : Lattitude, longitude and optionally radius in km (defaults to 5 km).
-media : photos, videos or all.
-heading : To suppress the album title.
-sort : Date taken, posted, number of views, random or unsorted.
-filter : Interesting or relevant. Only for user albums.
-count : To suppress how many are available on Flickr.
+- num : The number of photos to show.
+- tags : Flickr tags to filter on.
+- extend : Extends the tag matching to words found in the Flickr photo title or
+  description.
+- tag_mode : Matches 'all' defined tags (AND) or 'any' (OR).
+- location : Grab photos near a certain GPS point. Lat/lon/radius (in km)
+- date : Grab photos taken on a certain date. Also within an interval covering
+  multiple days.
+- location : Lattitude, longitude and optionally radius in km (defaults to 5
+  km).
+- media : photos, videos or all.
+- heading : To suppress the album title.
+- sort : Date taken, posted, number of views, random or unsorted.
+- filter : Interesting or relevant. Only for user albums.
+- count : To suppress how many are available on Flickr.
 
 Again, you'll find parameter examples, their use and default values at the
 bottom of the text filter help on the 'Edit' page.
diff --git a/filter/flickr_filter.module b/filter/flickr_filter.module
index 3492a0c..31b96c2 100644
--- a/filter/flickr_filter.module
+++ b/filter/flickr_filter.module
@@ -99,7 +99,7 @@ function flickr_filter_tips($filter, $format, $long = FALSE) {
         - : medium, 500 on longest side
       </td>
       <td>
-        x: Flash responsive slideshow (for group, set and user IDs only)<br />
+        x: Responsive slideshow (for group, set and user IDs only)<br />
         y: Basic responsive slideshow (for set and user IDs only)
       </td>
     </tr>
@@ -405,27 +405,27 @@ function flickr_filter_callback_group($matches) {
         $config['filter'] = 'relevance';
         break;
     }
-  if (!isset($config['location'])) {
-    $config['location'][0] = NULL;
-    $config['location'][1] = NULL;
-    $config['location'][2] = NULL;
-  }
-  else {
-    $config['location'] = explode("/", $config['location']);
-    if (!isset($config['location'][2])) {
+    if (!isset($config['location'])) {
+      $config['location'][0] = NULL;
+      $config['location'][1] = NULL;
       $config['location'][2] = NULL;
     }
-  }
-  if (!isset($config['date'])) {
-    $config['date'][0] = NULL;
-    $config['date'][1] = NULL;
-  }
-  else {
-    $config['date'] = explode("|", $config['date']);
-    if (!isset($config['date'][1])) {
+    else {
+      $config['location'] = explode("/", $config['location']);
+      if (!isset($config['location'][2])) {
+        $config['location'][2] = NULL;
+      }
+    }
+    if (!isset($config['date'])) {
+      $config['date'][0] = NULL;
       $config['date'][1] = NULL;
     }
-  }
+    else {
+      $config['date'] = explode("|", $config['date']);
+      if (!isset($config['date'][1])) {
+        $config['date'][1] = NULL;
+      }
+    }
     if (!isset($config['extend'])) {
       $config['extend'] = variable_get('flickr_extend', 1);
     }
@@ -505,27 +505,27 @@ function flickr_filter_callback_gallery($matches) {
         $config['filter'] = 'relevance';
         break;
     }
-  if (!isset($config['location'])) {
-    $config['location'][0] = NULL;
-    $config['location'][1] = NULL;
-    $config['location'][2] = NULL;
-  }
-  else {
-    $config['location'] = explode("/", $config['location']);
-    if (!isset($config['location'][2])) {
+    if (!isset($config['location'])) {
+      $config['location'][0] = NULL;
+      $config['location'][1] = NULL;
       $config['location'][2] = NULL;
     }
-  }
-  if (!isset($config['date'])) {
-    $config['date'][0] = NULL;
-    $config['date'][1] = NULL;
-  }
-  else {
-    $config['date'] = explode("|", $config['date']);
-    if (!isset($config['date'][1])) {
+    else {
+      $config['location'] = explode("/", $config['location']);
+      if (!isset($config['location'][2])) {
+        $config['location'][2] = NULL;
+      }
+    }
+    if (!isset($config['date'])) {
+      $config['date'][0] = NULL;
       $config['date'][1] = NULL;
     }
-  }
+    else {
+      $config['date'] = explode("|", $config['date']);
+      if (!isset($config['date'][1])) {
+        $config['date'][1] = NULL;
+      }
+    }
     if (!isset($config['extend'])) {
       $config['extend'] = variable_get('flickr_extend', 1);
     }
@@ -609,27 +609,27 @@ function flickr_filter_callback_favorites($matches) {
         $config['filter'] = 'relevance';
         break;
     }
-  if (!isset($config['location'])) {
-    $config['location'][0] = NULL;
-    $config['location'][1] = NULL;
-    $config['location'][2] = NULL;
-  }
-  else {
-    $config['location'] = explode("/", $config['location']);
-    if (!isset($config['location'][2])) {
+    if (!isset($config['location'])) {
+      $config['location'][0] = NULL;
+      $config['location'][1] = NULL;
       $config['location'][2] = NULL;
     }
-  }
-  if (!isset($config['date'])) {
-    $config['date'][0] = NULL;
-    $config['date'][1] = NULL;
-  }
-  else {
-    $config['date'] = explode("|", $config['date']);
-    if (!isset($config['date'][1])) {
+    else {
+      $config['location'] = explode("/", $config['location']);
+      if (!isset($config['location'][2])) {
+        $config['location'][2] = NULL;
+      }
+    }
+    if (!isset($config['date'])) {
+      $config['date'][0] = NULL;
       $config['date'][1] = NULL;
     }
-  }
+    else {
+      $config['date'] = explode("|", $config['date']);
+      if (!isset($config['date'][1])) {
+        $config['date'][1] = NULL;
+      }
+    }
     if (!isset($config['extend'])) {
       $config['extend'] = variable_get('flickr_extend', 1);
     }
diff --git a/flickr.admin.inc b/flickr.admin.inc
index e4f5387..9754f69 100644
--- a/flickr.admin.inc
+++ b/flickr.admin.inc
@@ -67,7 +67,7 @@ function flickr_admin_settings() {
     '#title' => t('Number of photos per album'),
     '#required' => TRUE,
     '#default_value' => variable_get('flickr_photos_per_page', 6),
-    '#description' => t('The number indicates how many photos of a photoset display in your nodes if no number is specified. Clear the cache on form submit.'),
+    '#description' => t('How many photos of a photoset display in your nodes if no number is specified. Clear the cache on form submit.'),
     '#size' => 3,
     '#maxlength' => 3,
   );
@@ -498,9 +498,9 @@ function flickr_admin_settings() {
   global $conf;
   if (module_exists('flickr_block') || isset($conf['flickr_block_photos_per_set'])) {
     $form['block_settings']['flickr_smart']['#disabled'] = TRUE;
-    $form['block_settings']['flickr_smart']['#title'] = '<span class="grayed-out">' . t("Smart install of Flickr Block"). '</span> | ' . t('Disabled until uninstall of Flickr Block.');
-    $form['block_settings']['flickr_smart']['#description'] = '<span class="grayed-out">' . t("On install of Flickr Block auto create Flickr taxonomy, date and geo fields on all node types to grab Flickr photos related to the node on the same page as a Flickr block based on tags, a date or a location. Enable Taxonomy (core), !date (including date_popup) and !geofield before enabling Flickr Block for the first time (or uninstall it first).", array('!date' => $date, '!geofield' => $geofield)). '</span>';
-    }
+    $form['block_settings']['flickr_smart']['#title'] = '<span class="grayed-out">' . t("Smart install of Flickr Block") . '</span> | ' . t('Disabled until uninstall of Flickr Block.');
+    $form['block_settings']['flickr_smart']['#description'] = '<span class="grayed-out">' . t("On install of Flickr Block auto create Flickr taxonomy, date and geo fields on all node types to grab Flickr photos related to the node on the same page as a Flickr block based on tags, a date or a location. Enable Taxonomy (core), !date (including date_popup) and !geofield before enabling Flickr Block for the first time (or uninstall it first).", array('!date' => $date, '!geofield' => $geofield)) . '</span>';
+  }
   $flickr_block = l(t('Flickr Block'), 'admin/modules', array(
       'attributes' => array(
         'title' => t('Display Flickr photos in blocks.'),
diff --git a/flickr.api.inc b/flickr.api.inc
index d6daf6b..848fbd4 100644
--- a/flickr.api.inc
+++ b/flickr.api.inc
@@ -66,7 +66,7 @@ function flickr_photos_search($nsid, $page = 1, $other_args = array()) {
   if ($nsid == '39873962@N08' || empty($nsid)) {
     $args = array(
       'user_id' => '',
-      'group_id'=> $other_args['group_id'],
+      'group_id' => $other_args['group_id'],
       'tag_mode' => 'all',
       'license' => $other_args['license'],
       'page' => $page,
diff --git a/flickr.inc b/flickr.inc
index a580ef8..99d29d6 100644
--- a/flickr.inc
+++ b/flickr.inc
@@ -65,7 +65,7 @@ function flickr_photo_sizes() {
       'description' => t('o: Original image'),
     ),
     'x' => array(
-      'label' => 'Flash slideshow',
+      'label' => 'slideshow',
       'description' => t('x: Full featured responsive slideshow (for group, set and user IDs only)'),
     ),
     'y' => array(
@@ -141,7 +141,7 @@ function flickr_request($method, $args, $cacheable = TRUE, $return_errors = FALS
     // (Request Timeout).
     $result = flickr_curl_http_request($url);
     $cmethod = 'cURL';
-    $message = t('Automatic fallback to the cURL connection method kicked in to handle the request. Result code from the failing request: ') . $result->code;
+    $message = t('Automatic fallback to the cURL connection method kicked in to handle the request. Result code from the failing request') . ': ' . $result->code;
     drupal_set_message($message, 'warning', FALSE);
     watchdog('flickr', $message, array(), WATCHDOG_WARNING);
     if ($return_errors) {
@@ -210,13 +210,13 @@ function flickr_request($method, $args, $cacheable = TRUE, $return_errors = FALS
     $attribs = str_replace('"', '', $attribs);
     $methodurl = l($method, 'https://www.flickr.com/services/api/' . $method . '.htm', array(
       'attributes' => array(
-        'title' => t('Flickr Services: Flickr API: ') . $method,
+        'title' => t('Flickr Services: Flickr API') . ': ' . $method,
         'target' => '_blank',
       ),
     ));
-    $explorerurl = l('API Explorer', 'https://www.flickr.com/services/api/explore/' . $method, array(
+    $explorerurl = l(t('API Explorer'), 'https://www.flickr.com/services/api/explore/' . $method, array(
       'attributes' => array(
-        'title' => t('Flickr Api Explorer - ') . $method,
+        'title' => t('Flickr Api Explorer') . ' - ' . $method,
         'target' => '_blank',
       ),
     ));
@@ -226,7 +226,14 @@ function flickr_request($method, $args, $cacheable = TRUE, $return_errors = FALS
         'target' => '_blank',
       ),
     ));
-    $message = t("Debug info: Connection by %cmethod with method !methodurl gives the !requrl to check in the !explorerurl.<br />Passed arguments: " . $attribs, array('%cmethod' => $cmethod, '!methodurl' => $methodurl, '!explorerurl' => $explorerurl, '!requrl' => $requrl));
+    $message = t("Debug info: Connection by %cmethod with method !methodurl gives the !requrl to check in the !explorerurl.", array(
+      '%cmethod' => $cmethod,
+      '!methodurl' => $methodurl,
+      '!explorerurl' => $explorerurl,
+      '!requrl' => $requrl,
+    )) . '<br />' . t("Passed arguments: %attribs", array(
+      '%attribs' => $attribs,
+    ));
     drupal_set_message($message, 'warning');
     watchdog('flickr', $message, array(), WATCHDOG_WARNING);
   }
@@ -316,9 +323,11 @@ function flickr_img($photo, $size = NULL, $attributes = NULL) {
       case 'interval':
         $taken_short = format_interval(time() - strtotime($date_taken), 1) . ' ' . t('ago');
         break;
+
       case 'none':
         $taken_short = '';
         break;
+
       default:
         $taken_short = format_date(strtotime($date_taken), $format_title, '', NULL);
     }
@@ -601,12 +610,12 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
       $deg = isset($matches[0][0]) ? $matches[0][0] : $lat;
       $min = isset($matches[0][1]) ? $matches[0][1] : 0;
       $sec = isset($matches[0][2]) ? $matches[0][2] : 0;
-      $lat = $deg+((($min*60)+($sec))/3600);
+      $lat = $deg + ((($min * 60) + ($sec)) / 3600);
       $dmslon = preg_match_all('/[\-(\.|,)0-9]+/', $lon, $matches);
       $deg = isset($matches[0][0]) ? $matches[0][0] : $lon;
       $min = isset($matches[0][1]) ? $matches[0][1] : 0;
       $sec = isset($matches[0][2]) ? $matches[0][2] : 0;
-      $lon = $deg+((($min*60)+($sec))/3600);
+      $lon = $deg + ((($min * 60) + ($sec)) / 3600);
     }
     if (!isset($dateto)) {
       $dateto = $datefrom;
@@ -786,7 +795,7 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
     // one replaced by 'or' or 'and'.
     $conjunction = $tag_mode == 'all' ? t('and') : t('or');
     $tags1 = preg_replace('/(.*),/', '$1 ' . $conjunction, str_replace(',', ', ', $tagsfixnoexclude));
-    $flickr = flickr_album_link_construct(' ' . t('tagged') . ' <span class="flickr-tags">' . $tags1 . '</span></span>', $type, $id , $show_n, $media, $tags , $filter, $lat, $lon, $radius, $datefrom, $dateto, $extend, $tag_mode);
+    $flickr = flickr_album_link_construct(' ' . t('tagged') . ' <span class="flickr-tags">' . $tags1 . '</span></span>', $type, $id, $show_n, $media, $tags, $filter, $lat, $lon, $radius, $datefrom, $dateto, $extend, $tag_mode);
 
     $tagged = (empty($tags) || $size == 'x' || $size == 'y') ? '' : '<span class="flickr-tags-wrap">' . $flickr;
     // A single date.
@@ -796,6 +805,7 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
         $formated_datefrom = format_interval(time() - strtotime(substr($datefrom, 0, 10)), 1);
         $formated_dateto = format_interval(time() - strtotime(substr($dateto, 0, 10)), 1);
         break;
+
       default:
         $formated_datefrom = format_date(strtotime(substr($datefrom, 0, 10)), $format, '', NULL);
         $formated_dateto = format_date(strtotime(substr($dateto, 0, 10)), $format, '', NULL);
@@ -825,6 +835,7 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
         case 'interval':
           $taken = ' ' . t('taken') . ' ' . $formated_datefrom . ' ' . t('to') . ' ' . $formated_dateto . ' ' . t('ago');
           break;
+
         default:
           $taken = ' ' . t('taken from') . ' ' . $date1 . ' ' . t('to') . ' ' . $date2;
       }
@@ -953,7 +964,7 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
         else {
           $username = ' ' . t('from the group') . ' ' . strip_tags($info['group']['name']['_content']);
         }
-        $flickr = flickr_album_link_construct(t('on Flickr'), $type, $id , $show_n, $media, $tags , $filter, $lat, $lon, $radius, $datefrom, $dateto, $extend, $tag_mode);
+        $flickr = flickr_album_link_construct(t('on Flickr'), $type, $id, $show_n, $media, $tags, $filter, $lat, $lon, $radius, $datefrom, $dateto, $extend, $tag_mode);
         $map = ($id == '39873962@N08' || empty($id)) ? '' : $map;
         if (isset($lat)) {
           $place_id = flickr_places_findbylatlon($lat, $lon);
@@ -1001,7 +1012,7 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
             )) : $place_name;
           }
           else {
-            if ($type =='user') {
+            if ($type == 'user') {
               $place_name = !is_array($place_name) ? l($location_name, 'https://www.flickr.com/photos/' . $id . '/map?&location=' . $place_name, array(
                 'attributes' => array(
                   'title' => t('View photos on Flickr map.'),
@@ -1076,8 +1087,8 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
             break;
 
           case "group":
-            $output .= '<div class="messages error">' . t('Choose the Flash slideshow for group pool albums (size = x).') . '</div>';
-            drupal_set_message(t('Choose the Flash slideshow for group pool albums (size = x).'), 'error', FALSE);
+            $output .= '<div class="messages error">' . t('Choose the slideshow for group pool albums (size = x).') . '</div>';
+            drupal_set_message(t('Choose the slideshow for group pool albums (size = x).'), 'error', FALSE);
             break;
 
           default:
@@ -1194,26 +1205,10 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
               // Start with a circle of 14 meter.
               $radius = empty($radius) ? 0.014 : $radius;
               do {
-              if (variable_get('flickr_restrict', 1) < 2) {
-                $response = flickr_photos_search($id, $page, array(
-                  'group_id' => $group_id,
-                  'tags' => $tags_combined,
-                  'tag_mode' => $tag_mode,
-                  'min_taken_date' => $datefrom,
-                  'max_taken_date' => $dateto,
-                  'sort' => $valid_sort,
-                  'per_page' => $per_page,
-                  'extras' => 'date_upload,date_taken,license,geo,tags,views,media',
-                  'media' => $media,
-                  'lat' => $lat,
-                  'lon' => $lon,
-                  'radius' => $radius,
-                  'license' => $license,
-                ));
-                foreach ($texts as $tagsfiks) {
-                  $textextension = flickr_photos_search($id, $page, array(
+                if (variable_get('flickr_restrict', 1) < 2) {
+                  $response = flickr_photos_search($id, $page, array(
                     'group_id' => $group_id,
-                    'text' => '"' . $tagsfiks . '"',
+                    'tags' => $tags_combined,
                     'tag_mode' => $tag_mode,
                     'min_taken_date' => $datefrom,
                     'max_taken_date' => $dateto,
@@ -1226,30 +1221,30 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
                     'radius' => $radius,
                     'license' => $license,
                   ));
-                  $textext = array_merge($textext, $textextension['photo']);
+                  foreach ($texts as $tagsfiks) {
+                    $textextension = flickr_photos_search($id, $page, array(
+                      'group_id' => $group_id,
+                      'text' => '"' . $tagsfiks . '"',
+                      'tag_mode' => $tag_mode,
+                      'min_taken_date' => $datefrom,
+                      'max_taken_date' => $dateto,
+                      'sort' => $valid_sort,
+                      'per_page' => $per_page,
+                      'extras' => 'date_upload,date_taken,license,geo,tags,views,media',
+                      'media' => $media,
+                      'lat' => $lat,
+                      'lon' => $lon,
+                      'radius' => $radius,
+                      'license' => $license,
+                    ));
+                    $textext = array_merge($textext, $textextension['photo']);
+                  }
                 }
-              }
-              // No results, to extend the search on license.
-              if ((empty($response['photo']) || variable_get('flickr_restrict', 1) == 2) && variable_get('flickr_restrict', 1) != 0) {
-                $response = flickr_photos_search($id, $page, array(
-                  'group_id' => $group_id,
-                  'tags' => $tags_combined,
-                  'tag_mode' => $tag_mode,
-                  'min_taken_date' => $datefrom,
-                  'max_taken_date' => $dateto,
-                  'sort' => $valid_sort,
-                  'per_page' => $per_page,
-                  'extras' => 'date_upload,date_taken,license,geo,tags,views,media',
-                  'media' => $media,
-                  'lat' => $lat,
-                  'lon' => $lon,
-                  'radius' => $radius,
-                  'license' => '',
-                ));
-                foreach ($texts as $tagsfiks) {
-                  $textextension = flickr_photos_search($id, $page, array(
+                // No results, to extend the search on license.
+                if ((empty($response['photo']) || variable_get('flickr_restrict', 1) == 2) && variable_get('flickr_restrict', 1) != 0) {
+                  $response = flickr_photos_search($id, $page, array(
                     'group_id' => $group_id,
-                    'text' => '"' . $tagsfiks . '"',
+                    'tags' => $tags_combined,
                     'tag_mode' => $tag_mode,
                     'min_taken_date' => $datefrom,
                     'max_taken_date' => $dateto,
@@ -1262,13 +1257,29 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
                     'radius' => $radius,
                     'license' => '',
                   ));
-                  $textext = array_merge($textext, $textextension['photo']);
+                  foreach ($texts as $tagsfiks) {
+                    $textextension = flickr_photos_search($id, $page, array(
+                      'group_id' => $group_id,
+                      'text' => '"' . $tagsfiks . '"',
+                      'tag_mode' => $tag_mode,
+                      'min_taken_date' => $datefrom,
+                      'max_taken_date' => $dateto,
+                      'sort' => $valid_sort,
+                      'per_page' => $per_page,
+                      'extras' => 'date_upload,date_taken,license,geo,tags,views,media',
+                      'media' => $media,
+                      'lat' => $lat,
+                      'lon' => $lon,
+                      'radius' => $radius,
+                      'license' => '',
+                    ));
+                    $textext = array_merge($textext, $textextension['photo']);
+                  }
                 }
-              }
-              // Extend the search geo radius gradually to 32 km if there are
-              // not enough results.
-              $radius = $radius * 3;
-            } while ((count($response['photo']) + count($textext)) < $show_n && $radius <= 32);
+                // Extend the search geo radius gradually to 32 km if there are
+                // not enough results.
+                $radius = $radius * 3;
+              } while ((count($response['photo']) + count($textext)) < $show_n && $radius <= 32);
             }
             else {
               if (variable_get('flickr_restrict', 1) < 2) {
@@ -1581,10 +1592,10 @@ function flickr_album($type = 'user', $id = '39873962@N08', $show_n = NULL, $siz
           $mt = empty ($mt) ? '' : $mt . ' ' . t('mt');
           $km = $radius >= 1 ? $km . ' ' . t('km') : '';
           $separator = empty($km) || empty($mt) ? '' : ' ' . t('and') . ' ';
-          $range = ' ' . t('in a radius of') . ' '. $km . $separator . $mt;
+          $range = ' ' . t('in a radius of') . ' ' . $km . $separator . $mt;
         }
         else {
-          $range ='';
+          $range = '';
         }
         $count = t('@number out of @total !flickr@range', array(
           '@number' => $i,
@@ -1766,6 +1777,7 @@ function flickr_one_size_bigger($size) {
  *   - https_proxy: An array that will override the system-wide HTTPS proxy
  *     settings.
  *   - curl_opts: An array of generic cURL options.
+ *
  * @return object
  *   An object that can have one or more of the following components:
  *   - request: A string containing the request body that was sent.
@@ -2262,7 +2274,7 @@ function flickr_response_codes() {
 }
 
 /**
- * Parse parameters to the fiter from a format like:
+ * Parse parameters to the filter from a format like:
  * style="float:left;border:1px"
  * into an associative array with HTML attributes and their values.
  */
diff --git a/flickr.module b/flickr.module
index 3a518f1..562c6aa 100644
--- a/flickr.module
+++ b/flickr.module
@@ -624,9 +624,11 @@ function theme_flickr_photo($variables) {
       case 'interval':
         $taken = format_interval(time() - strtotime($info['dates']['taken']), 1) . ' ' . t('ago');
         break;
+
       case 'none':
         $taken = '';
         break;
+
       default:
         $taken = format_date(strtotime($info['dates']['taken']), $format_taken, '', NULL);
     }
@@ -636,9 +638,11 @@ function theme_flickr_photo($variables) {
       case 'interval':
         $taken_hover = format_interval(time() - strtotime($info['dates']['taken']), 1) . ' ' . t('ago');
         break;
+
       case 'none':
         $taken_hover = '';
         break;
+
       default:
         $taken_hover = format_date(strtotime($info['dates']['taken']), $format_hover, '', NULL);
     }
@@ -887,7 +891,7 @@ function theme_flickr_photoset($variables) {
 
 /**
  * Theme Flickr set/user/group photos as an embedded Flickr.com slideshow
- * (Flash, 'size' = x).
+ * ('size' = x).
  */
 function theme_flickr_flickrcomslideshow($variables) {
   $id = $variables['id'];
diff --git a/sets/README.txt b/sets/README.txt
index c5c548e..ad9a35c 100644
--- a/sets/README.txt
+++ b/sets/README.txt
@@ -8,6 +8,13 @@ images, besides photosets, tags can be used, in combination with a specific user
 from the taxonomy terms attached to a node, to create dynamic, context sensitive
 albums.
 
+To use Flickr Sets in user profiles, configure a Flickr identifier specified on
+the user account at user/[uid]/edit. Of course some albums must be present on
+the correspondent Flickr account. If you want other users to see those sets,
+give them the permission "View Flickr photos on user profiles" at
+admin/people/permissions#module-flickr. After that, browse to
+www.yoursite.com/flickr/[uid]/sets.
+
 A photo (or video) can make part of more than one set, without the need of
 duplicating it. Just go to https://www.flickr.com/photos/organize, click 'Add to
 album' and drag your images into it.
@@ -18,14 +25,6 @@ in:
 - a block using Flickr Block
 - a field using Flickr Field.
 
-Video support
-=============
-To 'play' the videos embedded on a site, instead of just showing a still image
-of it:
-- Put the videos (one or more) you want to display together in a set.
-- Show the set in the node body, a block or a Flickr field using the size x for
-  a Flash slideshow or y for the non-Flash version.
-
 Disabling the Flickr Sets submodule: What happens?
 ==================================================
 Only the first image of a set will be displayed in some blocks, in the photoset
diff --git a/sets/flickr_sets.admin.inc b/sets/flickr_sets.admin.inc
index 39849ba..f482bea 100644
--- a/sets/flickr_sets.admin.inc
+++ b/sets/flickr_sets.admin.inc
@@ -39,7 +39,7 @@ function flickr_sets_form_flickr_admin_settings_alter(&$form, &$form_state) {
     '#title' => t('Number of photosets per page'),
     '#required' => TRUE,
     '#default_value' => variable_get('flickr_sets_per_page', 8),
-    '#description' => t('The number indicates how many photosets display on user profile pages at <em>flickr/%uid/sets</em>. Clear the cache on form submit.'),
+    '#description' => t('How many photosets display on user profile pages at <em>flickr/%uid/sets</em>. Clear the cache on form submit.'),
     '#size' => 2,
     '#maxlength' => 2,
   );
@@ -48,7 +48,7 @@ function flickr_sets_form_flickr_admin_settings_alter(&$form, &$form_state) {
     '#title' => t('Number of photos per set'),
     '#required' => TRUE,
     '#default_value' => variable_get('flickr_sets_photos_per_set', 6),
-    '#description' => t('The number indicates how many photos display in a set on user profile pages at <em>flickr/%uid/sets/%nsid</em>. Clear the cache on form submit.'),
+    '#description' => t('How many photos display in a set on user profile pages at <em>flickr/%uid/sets/%nsid</em>. Clear the cache on form submit.'),
     '#size' => 2,
     '#maxlength' => 2,
   );
diff --git a/sets/flickr_sets.info b/sets/flickr_sets.info
index 63d729c..047be2a 100644
--- a/sets/flickr_sets.info
+++ b/sets/flickr_sets.info
@@ -2,4 +2,5 @@ name = Flickr Sets
 description = Adds photoset capability to the Flickr module.
 core = 7.x
 package = Flickr
+configure = admin/config/media/flickr
 dependencies[] = flickr
diff --git a/style/README.txt b/style/README.txt
new file mode 100644
index 0000000..77773cc
--- /dev/null
+++ b/style/README.txt
@@ -0,0 +1,63 @@
+The content of this file is based on the online documentation that can be found
+at https://www.drupal.org/node/2174131. It is recommended to read it there.
+
+Extra configuration options: Rounded corners, shadow, border, emphasize on
+hover.
+
+Configuration
+=============
+At 'admin/config/media/flickr' in the section 'STYLING (CSS RELATED)':
+
+Use flickr.css
+--------------
+Checkbox.
+Uncheck to take care of the styling yourself in custom CSS.
+If you use Flickr Filter, you might find the AutoFloat module useful
+(https://www.drupal.org/project/autofloat).
+
+Image styles
+------------
+Checkboxes.
+- Rounded corners
+- Shadow
+- Border
+
+Apply the image style also on the caption?
+------------------------------------------
+Radio buttons.
+- No
+- Yes, separate from the image
+- Yes, wrapped around the image and caption ("Polaroid" effect if applied with a
+  border)
+
+Disable the above styles on a caption with only the text 'Flickr' (simple link)
+-------------------------------------------------------------------------------
+Checkbox.
+
+Emphasize the image on hover?
+-----------------------------
+Radio buttons.
+- No
+- Enlarge slightly (includes the caption)
+- Enlarge (image only) (*)
+- Zoom (*)
+- Magnifier icon
+
+(*): The 'Zoom' and 'Enlarge' styles use bigger images to maintain the
+resolution. This has a slight performance impact and the size 'big square' (q)
+is not square but 150px on the longest side to avoid distortion on older
+browsers.
+
+
+Suppress Flickr block titles
+============================
+You can suppress the block titles with CSS. For example for the block 'Flickr: User photos with specific tags' ($delta=11), it would look like:
+
+#block-flickr-11 .flickr-album-heading {
+  display: none;
+}
+
+
+Image & album HTML structure
+============================
+See https://www.drupal.org/node/2289797.
diff --git a/style/flickrstyle.module b/style/flickrstyle.module
index d33a1d6..ef7198a 100644
--- a/style/flickrstyle.module
+++ b/style/flickrstyle.module
@@ -8,6 +8,17 @@
   module_load_include('inc', 'flickrstyle', 'flickrstyle.admin');
 
 /**
+ * Implements hook_help().
+ */
+function flickrstyle_help($path, $arg) {
+  switch ($path) {
+    case 'admin/help#flickrstyle':
+      // Return a line-break version of the README.txt.
+      return _filter_autop(file_get_contents(dirname(__FILE__) . '/README.txt'));
+  }
+}
+
+/**
  * Implements hook_page_build().
  */
 function flickrstyle_page_build(&$page) {
-- 
1.7.9.5

