Unfortunately, Juicebox-Pro was not designed with the intention that users could access and use internal classes so what you are doing is not officially supported. It just happens to be the only way I could think of for you to achieve your goal.
It looks like the onImageChange() function (which signifies that a new image has been selected) does not wait for the container with class .jb-dt-main-image-0 to be present in the DOM before being fired and so the only solution I was able to come up with was a short delay. As the delay seems to be necessary only for the very first image in the gallery, you could perhaps change the code so that the delay is used only once, when the gallery is loaded.

// Initialize counter
var counter = 0;

jb.onImageChange = function(e) {

// Set delay only on first image change
var delay = counter === 0 ? 200 : 0;

    // Introduce short delay to ensure required class is present in Document Object Model
    window.setTimeout(function() {

        // The internal image index used for dynamically-generated classes starts at zero so subtract 1 from public image index
        var index = e.id - 1;

        // Form CSS class for currently-displayed image
        var element = '.jb-dt-main-image-' + index;

        // Get URL of currently-displayed image from src attribute of <img> tag
        var src = $(element).find('img').first().attr('src');

        // Extract Flickr photoId from URL
        var id = src.substring(src.lastIndexOf('/') + 1, src.indexOf('_'));

        // Fetch tags of currently-displayed image using Flickr API flickr.tags.getListPhoto method
        // Enter your own Flickr API Key in the line below
        $.getJSON('https://api.flickr.com/services/rest/?method=flickr.tags.getListPhoto&api_key={your_flickr_api_key}&photo_id=' + id + '&format=json&jsoncallback=?', function(json) {

            // Initialize tags array
            var tags = [];

            // Iterate over all tags
            $.each(json.photo.tags.tag, function(i, data) {

                // Add new tag to array
                tags.push(data.raw);

            });

            // Display tags array in output container
            $("#output").html('<p>Tags: ' + (tags.length > 0 ? tags : 'None') + '</p>');

        }).fail(function() {

            // Fail message
            $("#output").html('<p>Cannot find tags.</p>');

        });
    }, delay);

    // Increment counter
    counter++;

};

Edit:
On further investigation, it looks like the Juicebox-Pro API method getImageInfo() returns the thumbURL successfully (but not the imageURL) so you should be able to extract the Flickr photoId from the thumbURL as follows. This avoids the need for any delay at all.

jb.onImageChange = function(e) {

    // Get image info for current image
    var info = jb.getImageInfo(e.id);

    // Get thumbURL for current image
    var src = info.thumbURL;

    // Extract Flickr photoId from thumbURL
    var id = src.substring(src.lastIndexOf('/') + 1, src.indexOf('_'));

    // Fetch tags of currently-displayed image using Flickr API flickr.tags.getListPhoto method
    // Enter your own Flickr API Key in the line below
    $.getJSON('https://api.flickr.com/services/rest/?method=flickr.tags.getListPhoto&api_key={your_flickr_api_key}&photo_id=' + id + '&format=json&jsoncallback=?', function(json) {

        // Initialize tags array
        var tags = [];

        // Iterate over all tags
        $.each(json.photo.tags.tag, function(i, data) {

            // Add new tag to array
            tags.push(data.raw);

        });

        // Display tags array in output container
        $("#output").html('<p>Tags: ' + (tags.length > 0 ? tags : 'None') + '</p>');

    }).fail(function() {

        // Fail message
        $("#output").html('<p>Cannot find tags.</p>');

    });
};

I have logged a bug report with the developers regarding the inability to fetch the imageURL from the getImageInfo() method when using Flickr as a source of images.

Thank you for sharing your solution.

The following notes might not be relevant to your own scenario but they might be of interest to anyone searching through the forum for 'pinch-zoom' and landing here.

It should be possible to pinch-zoom an image within a Juicebox gallery but it can sometimes be quite difficult to do so. You would need to be very precise with your gesture as Juicebox uses its own gestures and the initial movement of a pinch-zoom action could be misinterpreted as the start of a swipe gesture to navigate within the gallery.

Also, you would need to ensure that the viewport of the web page has not been locked (which, for example, it would be by default for an expanded gallery on an iOS device).
For more information on expanded gallery behavior on iOS devices, please see here.

2,678

(3 replies, posted in Juicebox-Pro Support)

No problem. If you no longer have the 'juicebox_pro_1.4.4.zip' file or your purchase email (with the download link), just fill in this Download Link Request Form to the best of your ability and we'll send you a new link.

Keep the link for future use as it will allow you to download new versions of Juicebox-Pro when they are released. Upgrades are free within the same major version number and the download link will always point towards the latest version rather than the version you purchased. Full details can be found on the Upgrading Juicebox support page.

I'm glad you've got the swiping working.
I've tested the delay myself and it seems to work fine. If you find that you are still having problems with it, try changing the delay time. 100ms seems to work OK for my own test scenario but it might be safer to set it to something like 200ms.

Every now and then it will not let me swipe on a picture.

I do not know what might be causing this (the ability to swipe to navigate should obviously be consistent across all images).
Just a thought but maybe the controls on the image overlay (or perhaps even the image overlay itself) is somehow interfering with the swipe gesture.
Try setting showImageOverlay="NEVER" (in JuiceboxBuilder-Pro's 'Customize -> Main Image' section) to see if this makes a difference. If it helps, then you could maybe disable the autohide for the image overlay by setting inactivityTimeout="0" ('Customize -> Main Image') or allow the user to toggle the overlay on or off using the Info Button by setting showInfoButton="TRUE" ('Customize -> Button Bar').

However, whenever I first load the page, for whatever reason, they are not getting loaded.

onImageChange() is fired for the first image in the gallery but the initial search for the '.jb-dt-main-image-0' class might be happening before the element is present in the Document Object Model (DOM). Introducing a short delay (with setTimeout()) before searching for the '.jb-dt-main-image-0' class should work.
Try the following (which introduces a 100ms delay):

jb.onImageChange = function(e) {

    // Introduce short delay to ensure required class is present in Document Object Model
    window.setTimeout(function() {

        // The internal image index used for dynamically-generated classes starts at zero so subtract 1 from public image index
        var index = e.id - 1;

        // Form CSS class for currently-displayed image
        var element = '.jb-dt-main-image-' + index;

        // Get URL of currently-displayed image from src attribute of <img> tag
        var src = $(element).find('img').first().attr('src');

        // Extract Flickr photoId from URL
        var id = src.substring(src.lastIndexOf('/') + 1, src.indexOf('_'));

        // Fetch tags of currently-displayed image using Flickr API flickr.tags.getListPhoto method
        // Enter your own Flickr API Key in the line below
        $.getJSON('https://api.flickr.com/services/rest/?method=flickr.tags.getListPhoto&api_key={your_flickr_api_key}&photo_id=' + id + '&format=json&jsoncallback=?', function(json) {

            // Initialize tags array
            var tags = [];

            // Iterate over all tags
            $.each(json.photo.tags.tag, function(i, data) {

                // Add new tag to array
                tags.push(data.raw);

            });

            // Display tags array in output container
            $("#output").html('<p>Tags: ' + (tags.length > 0 ? tags : 'None') + '</p>');

        }).fail(function() {

            // Fail message
            $("#output").html('<p>Cannot find tags.</p>');

        });
    }, 100);
};

On another un-related to Juicebox note, do you have any experience in generating the auth_token and api_sig for Flickr's api with their oAuth in javascript?

No, sorry. However, I found the following quote on this Flickr help page: https://www.flickr.com/services/api/auth.spec.html

Authentication tokens can be set to expire by the user when they authenticate against the application. This is an advanced feature, hidden by default. Options are 1 hour and never. This may be set for different applications by policy in the future.

I hope this points you in the right direction.
These pages might also help:
User Authentication - https://www.flickr.com/services/api/auth.oauth.html
JavaScript Libraries for OAuth - http://oauth.net/code/ (scroll down to JavaScript section)

2,681

(3 replies, posted in Juicebox-Pro Support)

The bug has been fixed in the current version of the Lightroom plugin (v1.4.4.0).
The plugin now comes bundled inside the Juicebox-Pro download zip package so if you download the current version of Juicebox-Pro (v1.4.4) using the link from your purchase email, then you will find the plugin (with the fixed bug) inside the zip file.
Installation instructions can be found on the plugin's support page.

2,682

(1 replies, posted in Juicebox-Pro Support)

Please check the following:
(1) After saving changes to the 'C:\Program Files (x86)\JuiceboxBuilder-Pro\template\index.html' file, re-open the file in a text editor to ensure that the changes are still there.
(2) After creating or re-saving a gallery with JuiceboxBuilder-Pro, check that the gallery's 'index.html' file includes the modifications you made.
(3) After uploading the new 'index.html' file to your web server, be sure to clear your browser's cache before reloading your web page.

If you have problems with (1) or (2) above, then make sure that the '\template\index.html' file is not read-only ('Right-Click -> Properties') and try turning off VirtualStore in Windows. (Windows may be creating a copy of your modified file in a VirtualStore location but JuiceboxBuilder-Pro needs to read the file from its original location.)
Try a web search with terms such as 'disable virtualstore windows' for instructions.

If you are in any doubt that your old file is not being overwritten with the new version, then delete the old version from your web server first before uploading the new version in its place.

I hope this helps.

Unfortunately, I do not know when this issue will be fixed. All I can do is assure you that is has been officially logged as a bug and will be addressed in due course. Any estimate I give you with regard to time frame could turn out to be extremely inaccurate. I hope you understand.

You're welcome!
I hope your project goes well.

2,685

(1 replies, posted in Juicebox-Pro Support)

The responsiveness of a gallery is determined by the gallery's dimenions and the layout of your web page rather than the configuration options stored in the gallery's XML file (which affect the look and feel of the gallery).
For more information on how you can create a responsive gallery, please see this forum post.

Do you perhaps have AdBlock installed?
There is a known bug whereby images can flicker when loading in Safari with AdBlock installed when imageTransitionType="CROSS_FADE".
The developers are aware of this bug and hopefully it will be fixed in a future version.
In the meantime, workarounds would be to change the imageTransitionType or uninstall AdBlock (although uninstalling AdBlock would work only for your own computer and not for potential visitors to your site who also use the combination of Safari and AdBlock).

If you are not using AdBlock and this is not the cause of your problem, then please let me know and I will investigate further.
Thank you.

Thank you for the links to your web pages.
It looks like the problem may be incorrect or missing MIME types on your web server (specifically for CSS files but there maybe other file types, too).
For example, if I try to open your 'TestForJuiceboxSupport' gallery's 'theme.css' file directly in a browser, I should be able to see the CSS code in the broswer window. Instead, the browser offers to download the file.
Try visiting http://photos.worldofenglish.co.uk/2015 … /theme.css
... and compare the results with http://photos.worldofenglish.co.uk/2015 … /theme.css
(You should be able to see the CSS code in both files but this happens only in your '2015-04-10Gruffudd' gallery.)
Please check that your web server is configured to handle CSS files correctly. (Your web host should be able to help you with this.) This should hopefully solve your problem.

I am wondering how I would go about using a larger touchscreen device and forcing the correct input mode?

You can force the Screen Mode (via the screenMode configuration option) but it is not possible to force the Input Mode (although, if a touch-screen device is detected, you should be able to control the gallery with touch gestures).

... we would need an on-screen keyboard or something popup whenever the field is clicked.

This is something that you might need to look into independently of Juicebox. (It is not something that would be directly integrated with the gallery itself.)
Windows 8.1 has a built-in on-screen touch keyboard which can be enabled to appear automatically when an input field is selected in an app (though not in a desktop browser). This should work OK in Chrome when launched as an app.

(Incidentally, I have modified my code above to store the tags in an array which might be more useful if you need to refer to them later.)

2,689

(3 replies, posted in Juicebox-Pro Support)

The zip file you downloaded using the link you received after purchasing Juicebox-Pro should have the following properties.
Filename: juicebox_pro_1.4.4.zip
File size: 1,897,535 bytes
SHA1: 86ffbf456e14d90a74ad18923783fc75d49fbf8a
You can check the SHA1 hash with a program such as HashCalc (free).

Please check to see if your own file matches the information above and, if it does not, please try downloading it again to be sure that it is not corrupt or incomplete.

When you unzip the file, the 'juicebox_pro.lrwebengine' folder can be found in the following location:
juicebox_pro_1.4.4\adobe-lightroom-plugin\juicebox_pro.lrwebengine

Please note that 'juicebox_pro.lrwebengine' is a folder, rather than a file, although it is seen as a special package on a Mac which can be double-clicked to install. On a Windows PC, you will need to follow the Manual Installation instructions on the plugin's support page.

Please post the URL to your gallery's web page so that I can take a look at the problem for myself and hopefully determine the cause of the problem.

I'm not sure about the exact structure of your gallery (where all your files are) but the problem may be related to the same-origin policy.
Essentially, all gallery files should be on the same domain (or subdomain) as the page containing the JavaScript embedding code. If this is not the case, then you may need to implement a Cross-Origin Resource Sharing (CORS) solution by adding the following line of code to the .htaccess file in the root directory of the domain which hosts the 'jbcore' folder.

Header add Access-Control-Allow-Origin "*"

If it is only the images that are stored on Amazon S3 then this is likely to be OK but if your 'jbcore' folder and the page containing the JavaScript embedding code are on different domains, then this is possibly the cause of your problem.

With regard to your other query, you can point different galleries towards different XML files by using the configURL configuration option.
You can also point towards completely different gallery folders by using the baseURL method of embedding as documented here.

2,691

(1 replies, posted in Juicebox-Pro Support)

Unfortunately, it is not possible to load an existing gallery in Lightroom (or any of the other plugins).
Existing galleries can be opened only in JuiceboxBuilder-Pro.

Just a few quick notes to clarify things that you seems to have solved.

I would like to keep it limited to a single username and only allow the user to change the tags.

Just hardcode the flickrUserName (or flickrUserId) in the gallery's configuration options.

is it possible to allow a "maximize" but still have a header?

No. When expanding a gallery via the Expand Button, only the gallery (and no other elements on the page into which the gallery is embedded) is expanded. I'm glad you are happy with the F11 solution.

anyone see a feasible way to show tags of the current image grabbed from Flickr?

The first challenge is to get the Flickr photoId of the currently-displayed image in the gallery.
The only way I can see to do this is to extract it from the URL (generated dynamically to display the image) using the Juicebox-Pro API and jQuery (and knowledge of how Juicebox constructs the dynamically-generated code and what CSS classes it uses).

The next step would be to use the Flickr API (specifically the flickr.tags.getListPhoto method) to fetch the tags of the image.
Below is an example which displays a comma-separated list of Flickr tags for the currently-displayed image in a container below the gallery. You will need to enter your own Flickr User Name and API Key where noted in the code (replacing {your_flickr_user_name} and {your_flickr_api_key}). You will also need to include jQuery in your web page.
You can modify this to suit your own needs as necessary. I hope this helps.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <style type="text/css">
        body {
            margin: 0px;
        }
        </style>
        <script type="text/javascript" src="jbcore/juicebox.js"></script>
        <script type="text/javascript" src="jquery/jquery-1.11.3.min.js"></script>
        <script>
            var jb = new juicebox({
                containerId: "juicebox-container",

                // Enter your own Flickr User Name in the line below
                flickrUserName: "{your_flickr_user_name}",

                galleryHeight: "400",
                galleryWidth: "600",
                useFlickr: "TRUE"
            });
            jb.onImageChange = function(e) {

                // The internal image index used for dynamically-generated classes starts at zero so subtract 1 from public image index
                var index = e.id - 1;

                // Form CSS class for currently-displayed image
                var element = '.jb-dt-main-image-' + index;

                // Get URL of currently-displayed image from src attribute of <img> tag
                var src = $(element).find('img').first().attr('src');

                // Extract Flickr photoId from URL
                var id = src.substring(src.lastIndexOf('/') + 1, src.indexOf('_'));

                // Fetch tags of currently-displayed image using Flickr API flickr.tags.getListPhoto method
                // Enter your own Flickr API Key in the line below
                $.getJSON('https://api.flickr.com/services/rest/?method=flickr.tags.getListPhoto&api_key={your_flickr_api_key}&photo_id=' + id + '&format=json&jsoncallback=?', function(json) {

                    // Initialize tags array
                    var tags = [];

                    // Iterate over all tags
                    $.each(json.photo.tags.tag, function(i, data) {

                        // Add new tag to array
                        tags.push(data.raw);

                    });

                    // Display tags in output container
                    $("#output").html('<p>Tags: ' + (tags.length > 0 ? tags : 'None') + '</p>');

                }).fail(function() {

                    // Fail message
                    $("#output").html('<p>Cannot find tags.</p>');

                });
            };
        </script>
        <title>Test</title>
    </head>
    <body>
        <div id="juicebox-container"></div>
        <div id="output"></div>
    </body>
</html>

2,693

(3 replies, posted in Juicebox-Pro Support)

Thanks for the outstanding product!

Glad you like it (and thanks for the tip regarding Instagram and Flickr)!

2,694

(3 replies, posted in Juicebox-Pro Support)

In order to open an existing gallery in JuiceboxBuilder-Pro, you need to click 'Open Gallery...' (or 'Gallery -> Open...' from the drop-down menu at the top) and then navigate towards and select the gallery folder itself (not a file) before clicking 'Select Folder'. The gallery folder is the folder which contains the gallery's XML file and the gallery's XML file must be named 'config.xml' (if you have renamed or moved this file, the gallery will not be able to be opened by JuiceboxBuilder-Pro.)

2,695

(7 replies, posted in Juicebox-Pro Support)

The quickest and easiest way to delete all linkURL entries from a gallery's XML file in a single action would be to use the global search and replace functionality of a text editor.

For example, you could use Notepad++ (free) and do the following:
(1) Open your gallery's XML file in Notepad++
(2) Go to 'Search -> Replace...' from the drop down menu at the top to bring up the 'Replace' window
(3) Select 'Regular Expression' Search Mode
(4) In 'Find what' enter: linkURL=".*?"
(5) In 'Replace with' enter: linkURL=""
(6) Click 'Replace All'
(7) Go to 'File -> Save' to save your file

This will replace all linkURLs (even if the entries are different to one another) with blank/empty linkURLs (and the gallery will automatically use the imageURLs as the linkURLs).

2,696

(3 replies, posted in Juicebox-Pro Support)

Using the Flickr feed option would it be possible to use one Flickr account with multiple sets (a set would present one artist's work) and use this single Flickr account to manage multiple galleries?

Yes. With Juicebox-Pro, you can use the flickrSetId configuration option to display a specific Flickr Set.

Also, would it be possible to embed the links to these galleries on one web page using baseUrl?

Yes. Technically, there is no limit to the number of galleries that you can embed on a single page, although please bear in mind that the more galleries you include on a page, the more images the browser will initially preload (which might slow down your web page a bit when it is initially loaded). To counteract this, you might like to set imagePreloading="NEXT" (rather than the default value of imagePreloading="PAGE") to initially preload only a single image per gallery.
This sample page from the Multiple Galleries support section embeds a couple of different galleries on the same page using a unique baseUrl for each gallery but you can embed as many galleries as you like. Please note that when embedding multiple galleries on a single page, the 'juicebox.js' JavaScript file should be loaded just once per page (not once per gallery).
If you just want to include links to your galleries (to display each of them on a separate page), then this is no problem at all.

2,697

(7 replies, posted in Juicebox-Pro Support)

Please check the linkURL entries in your gallery's XML file.
The 'Open Image' button opens the corresponding linkURLs. In order for the images to be used, the linkURLs must either be the same as the imageURLs or empty (in which case Juicebox will use the imageURLs by default).
It sounds like you might currently have the URL to your home page as your linkURLs.

Thank You SO MUCH!!!

You're welcome!

If I upgrade to the paid version, what will that give me in addition?

The main differences between Juicebox-Lite and Juicebox-Pro are:
(1) Juicebox-Pro does not contain any branding (the Juicebox link in the lower-right corner of galleries).
(2) Juicebox-Pro does not have a 50-image per gallery limit.
(3) Juicebox-Pro supports many more configuration options than Juicebox-Lite.

For more differences, please see the comparison chart on the download page.
For reference, a full list of configuration options supported by Juicebox-Pro can be found here.

It looks like you have entered the embedding code into your 'juicebox_gallery.html' page correctly. (It is being treated as HTML code rather than plain text so that's OK.) However, the path to the 'juicebox.js' file is incorrect.

Your gallery would display OK if you left your embedding code exactly as it is and just copied the contents of your gallery folder into the same directory as the page containing the embedding code (your root directory), following the embedding instructions here.

However, as you have already uploaded your complete gallery folder to your web server, you could leave the gallery files exactly where they are and use the baseUrl method of embedding (to point towards the gallery folder) as documented here.
Your embedding code would become:

<!--START JUICEBOX EMBED-->
<script src="/hotelmandarina_juicebox/jbcore/juicebox.js"></script>
<script>
new juicebox({
    baseUrl: "/hotelmandarina_juicebox/",
    containerId: "juicebox-container",
    galleryWidth: "100%",
    galleryHeight: "100%",
    backgroundColor: "rgba(255,204,102,1)"
});
</script>
<div id="juicebox-container"></div>
<!--END JUICEBOX EMBED-->

Either of these suggestions would work fine. I would recommend using the baseUrl method as it allows you to keep your gallery files inside the gallery folder which might help to keeps things organized on your web server.

In that folder is a file I made called "juicebox_index.html" which has some code in it. Do I delete that?

That file would be useful only if you wanted to display the gallery on a page of its own. If you are embedding your gallery in another web page (and do not want to display the gallery on a page of its own), then you can safely delete your 'juicebox_index.html' file.

A couple of other notes which might help:
I notice that your 'juicebox_gallery.html' web page is missing several end tags (for example there are no </body> or </html> tags). You might like to check the code on your web page with the W3C Markup Validation Service and fix the errors reported. Once the code on your web page validates correctly, the page should be rendered with greater predictability and consistency across different browsers.
Also, if you choose to embed your gallery with a percentage height (such as 100%), be sure to give all of your gallery's parent containers heights via CSS as Juicebox will need to know what its height should be 100% of. If you find that a percentage height is giving you any trouble (it may not), then you could always just give your gallery a fixed height (such as 600px) instead.
Also, please see this note regarding Using Percentage Heights.

2,700

(3 replies, posted in Juicebox-Lite Support)

You're welcome!