summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-06-17 08:57:24 +0800
committer <unostar@danalan.info>2009-06-17 13:51:21 +0800
commit15f3d58b0275c1e59d380730e01c061747e95067 (patch)
tree4cbf89154503d2a3202ce98d3f2219673bd56e54
parent8af66822e203c8546a293f9c31a3836fb89c97df (diff)
Add the real image url to the anchor elements for our full size links
so that right clicking works. Turn the full size rendering code into a function and call it with arguments, instead of creating a hacky named data structure to hold the info. Further partial fixes for ticket #427. Signed-off-by: <unostar@danalan.info>
-rw-r--r--modules/gallery/helpers/gallery_menu.php11
-rw-r--r--themes/default/js/fullsize.js134
-rw-r--r--themes/default/views/photo.html.php18
3 files changed, 80 insertions, 83 deletions
diff --git a/modules/gallery/helpers/gallery_menu.php b/modules/gallery/helpers/gallery_menu.php
index 4499e50a..fb0234b1 100644
--- a/modules/gallery/helpers/gallery_menu.php
+++ b/modules/gallery/helpers/gallery_menu.php
@@ -96,12 +96,11 @@ class gallery_menu_Core {
static function photo($menu, $theme) {
if (access::can("view_full", $theme->item())) {
- $menu
- ->append(Menu::factory("link")
- ->id("fullsize")
- ->label(t("View full size"))
- ->url("#")
- ->css_class("gFullSizeLink"));
+ $menu->append(Menu::factory("link")
+ ->id("fullsize")
+ ->label(t("View full size"))
+ ->url($theme->item()->file_url())
+ ->css_class("gFullSizeLink"));
}
}
diff --git a/themes/default/js/fullsize.js b/themes/default/js/fullsize.js
index f95dc428..b2895c23 100644
--- a/themes/default/js/fullsize.js
+++ b/themes/default/js/fullsize.js
@@ -1,78 +1,76 @@
/**
* @todo Move inline CSS out to external style sheet (theme style sheet)
*/
-$(document).ready(function() {
- $(".gFullSizeLink").click(function() {
- var width = $(document).width();
- var height = $(document).height();
+var show_full_size = function(image_url, image_width, image_height) {
+ /*
+ * Calculate the size of the image panel based on the size of the image and the size of the
+ * window. Scale the image so the entire panel fits in the view port.
+ */
+ function _auto_fit(imageWidth, imageHeight) {
+ // ui-dialog gives a padding of 2 pixels
+ var windowWidth = $(window).width() - 10;
+ var windowHeight = $(window).height() - 10;
- $("body").append('<div id="gFullsizeOverlay" class="ui-dialog-overlay" ' +
- 'style="border: none; margin: 0; padding: 0; background-color: #000; ' +
- 'position: absolute; top: 0px; left: 0px; ' +
- 'width: ' + width + 'px; height: ' + height + 'px; opacity: 0.7; filter: alpha(opacity=70);' +
- '-moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; ' +
- '-moz-background-inline-policy: -moz-initial; z-index: 1001;"> </div>');
+ /* If the width is greater then scale the image width first */
+ if (imageWidth > windowWidth) {
+ var ratio = windowWidth / imageWidth;
+ imageWidth *= ratio;
+ imageHeight *= ratio;
+ }
+ /* after scaling the width, check that the height fits */
+ if (imageHeight > windowHeight) {
+ var ratio = windowHeight / imageHeight;
+ imageWidth *= ratio;
+ imageHeight *= ratio;
+ }
- var image_size = _auto_fit(fullsize_detail.width, fullsize_detail.height);
+ // handle the case where the calculation is almost zero (2.14e-14)
+ return {
+ top: ((windowHeight - imageHeight) / 2).toFixed(2),
+ left: ((windowWidth - imageWidth) / 2).toFixed(2),
+ width: imageWidth.toFixed(2),
+ height: imageHeight.toFixed(2)
+ };
+ }
- $("body").append('<div id="gFullsize" class="ui-dialog ui-widget" ' +
- 'style="overflow: hidden; display: block; ' +
- 'position: absolute; z-index: 1002; outline-color: -moz-use-text-color; ' +
- 'outline-style: none; outline-width: 0px; ' +
- 'height: ' + image_size.height + 'px; ' +
- 'width: ' + image_size.width + 'px; ' +
- 'top: ' + image_size.top + 'px; left: ' + image_size.left + 'px;">' +
- '<img id="gFullSizeImage" src="' + fullsize_detail.url + '"' +
- 'height="' + image_size.height + '" width="' + image_size.width + '"/></div>');
+ var width = $(document).width();
+ var height = $(document).height();
- $("#gFullsize").append('<span id="gFullsizeClose" class="fg-button ui-icon ui-state-default ' +
- 'ui-icon-closethick ui-corner-all" style="z-index: 1003; position: absolute; ' +
- 'right: 1em; top: 1em;"></span>');
- $("#gFullsizeClose").click(function() {
- $("#gFullsizeOverlay*").remove();
- $("#gFullsize").remove();
- });
- $(window).resize(function() {
- $("#gFullsizeOverlay").width($(document).width());
- $("#gFullsizeOverlay").height($(document).height());
- image_size = _auto_fit(fullsize_detail.width, fullsize_detail.height);
- $("#gFullsize").height(image_size.height);
- $("#gFullsize").width(image_size.width);
- $("#gFullsize").css("top", image_size.top);
- $("#gFullsize").css("left", image_size.left);
- $("#gFullSizeImage").height(image_size.height);
- $("#gFullSizeImage").width(image_size.width);
- });
- });
-});
+ $("body").append('<div id="gFullsizeOverlay" class="ui-dialog-overlay" ' +
+ 'style="border: none; margin: 0; padding: 0; background-color: #000; ' +
+ 'position: absolute; top: 0px; left: 0px; ' +
+ 'width: ' + width + 'px; height: ' + height + 'px; opacity: 0.7; filter: alpha(opacity=70);' +
+ '-moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; ' +
+ '-moz-background-inline-policy: -moz-initial; z-index: 1001;"> </div>');
-/*
- * Calculate the size of the image panel based on the size of the image and the size of the
- * window. Scale the image so the entire panel fits in the view port.
- */
-function _auto_fit(imageWidth, imageHeight) {
- // ui-dialog gives a padding of 2 pixels
- var windowWidth = $(window).width() - 10;
- var windowHeight = $(window).height() - 10;
+ var image_size = _auto_fit(image_width, image_height);
- /* If the width is greater then scale the image width first */
- if (imageWidth > windowWidth) {
- var ratio = windowWidth / imageWidth;
- imageWidth *= ratio;
- imageHeight *= ratio;
- }
- /* after scaling the width, check that the height fits */
- if (imageHeight > windowHeight) {
- var ratio = windowHeight / imageHeight;
- imageWidth *= ratio;
- imageHeight *= ratio;
- }
+ $("body").append('<div id="gFullsize" class="ui-dialog ui-widget" ' +
+ 'style="overflow: hidden; display: block; ' +
+ 'position: absolute; z-index: 1002; outline-color: -moz-use-text-color; ' +
+ 'outline-style: none; outline-width: 0px; ' +
+ 'height: ' + image_size.height + 'px; ' +
+ 'width: ' + image_size.width + 'px; ' +
+ 'top: ' + image_size.top + 'px; left: ' + image_size.left + 'px;">' +
+ '<img id="gFullSizeImage" src="' + image_url + '"' +
+ 'height="' + image_size.height + '" width="' + image_size.width + '"/></div>');
- // handle the case where the calculation is almost zero (2.14e-14)
- return {
- top: ((windowHeight - imageHeight) / 2).toFixed(2),
- left: ((windowWidth - imageWidth) / 2).toFixed(2),
- width: imageWidth.toFixed(2),
- height: imageHeight.toFixed(2)
- };
-}
+ $("#gFullsize").append('<span id="gFullsizeClose" class="fg-button ui-icon ui-state-default ' +
+ 'ui-icon-closethick ui-corner-all" style="z-index: 1003; position: absolute; ' +
+ 'right: 1em; top: 1em;"></span>');
+ $("#gFullsizeClose").click(function() {
+ $("#gFullsizeOverlay*").remove();
+ $("#gFullsize").remove();
+ });
+ $(window).resize(function() {
+ $("#gFullsizeOverlay").width($(document).width());
+ $("#gFullsizeOverlay").height($(document).height());
+ image_size = _auto_fit(image_width, image_height);
+ $("#gFullsize").height(image_size.height);
+ $("#gFullsize").width(image_size.width);
+ $("#gFullsize").css("top", image_size.top);
+ $("#gFullsize").css("left", image_size.left);
+ $("#gFullSizeImage").height(image_size.height);
+ $("#gFullSizeImage").width(image_size.width);
+ });
+};
diff --git a/themes/default/views/photo.html.php b/themes/default/views/photo.html.php
index 0fbaa3e0..ddea75bc 100644
--- a/themes/default/views/photo.html.php
+++ b/themes/default/views/photo.html.php
@@ -1,15 +1,15 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<? if (access::can("view_full", $theme->item())): ?>
-<script type="text/javascript">
- var fullsize_detail = {
- close: "<?= url::file("modules/gallery/images/ico-close.png") ?>",
- url: "<?= $theme->item()->file_url() ?>",
- width: "<?= $theme->item()->width ?>",
- height: "<?= $theme->item()->height ?>"
- };
-</script>
<script src="<?= url::file("themes/default/js/fullsize.js") ?>" type="text/javascript"></script>
+<script>
+ $(document).ready(function() {
+ $(".gFullSizeLink").click(function() {
+ show_full_size("<?= $theme->item()->file_url() ?>", "<?= $theme->item()->width ?>", "<?= $theme->item()->height ?>");
+ return false;
+ });
+ });
+</script>
<? endif ?>
<div id="gItem">
@@ -40,7 +40,7 @@
<div id="gPhoto">
<?= $theme->resize_top($item) ?>
<? if (access::can("view_full", $item)): ?>
- <a href="#" class="gFullSizeLink" title="<?= t("View full size") ?>">
+ <a href="<?= $item->file_url() ?>" class="gFullSizeLink" title="<?= t("View full size") ?>">
<? endif ?>
<?= $item->resize_img(array("id" => "gPhotoId-{$item->id}", "class" => "gResize")) ?>
<? if (access::can("view_full", $item)): ?>