<? // // Copyright (c) 2013 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ // // Permission to use, copy, modify, and/or distribute this software for any purpose // with or without fee is hereby granted, provided that the above copyright notice // and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, // OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS // ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // require_once("header.php"); ?> <style type="text/css"> .image { width: 180px; height: 180px; display: inline-block; text-align: center; vertical-align: middle; } .image img { border:3px solid #e8e8e8; border-radius: 2px; box-shadow: 0 1px 3px rgba(0,0,0,0.055); } #imageViewer_sidebar { opacity: 0.9; position: fixed; top: 0; bottom: 0; left: 0; width: 200px; z-index: 1032; overflow: scroll; padding-top: 8px; background-color: #ffffff; -webkit-box-shadow: 0 1px 10px rgba(0,0,0,0.1); -moz-box-shadow: 0 1px 10px rgba(0,0,0,0.1); box-shadow: 0 1px 10px rgba(0,0,0,0.1); } @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { #imageViewer_sidebar { width: 100px; } } #imageViewer_close { padding-right: 18px; padding-top: 2px; } #imageViewer_sidebar .basic_info { padding-top: 5px; padding-left: 5px; padding-right: 5px; } #imageViewer_sidebar .tags { padding-top: 5px; padding-left: 5px; padding-right: 5px; } #imageViewer_sidebar .tags_edit { width: 180px; height: 250px; } @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { #imageViewer_sidebar .tags_edit { width: 80px; height: 150px; } } #imageViewer_main { position: fixed; z-index: 1031; border:4px solid #ffffff; border-radius: 4px; background-color: #ffffff; -webkit-box-shadow: 0 1px 10px rgba(0,0,0,0.1); -moz-box-shadow: 0 1px 10px rgba(0,0,0,0.1); box-shadow: 0 1px 10px rgba(0,0,0,0.1); } #backdrop { opacity: 0.8; position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1030; background-color: #000000; } </style> <div id="images_loader" style="display: none;"></div> <div id="images_main"></div> <?if (isset($_MGM['user']) && $_MGM['user']['level']<=2) {?> <div id="imageViewer_confirmDelete" class="modal hide fade" tabindex="-1" role="dialog"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h3>Delete Image</h3> </div> <div class="modal-body"> <p>You are about to delete an image from the database.</p> <p>Are you sure you wish to do this?</p> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true">No</button> <button class="btn btn-danger" data-dismiss="modal" id="imageViewer_confirmDelete_yes">Yes</button> </div> </div> <?}?> <div id="imageViewer_sidebar" class="hide"> <button type="button" class="btn" id="imageViewer_previousButton"><div class="icon-arrow-left"></div></button> <button type="button" class="btn" id="imageViewer_nextButton"><div class="icon-arrow-right"></div></button> <button type="button" class="close" id="imageViewer_close">×</button> <div class="basic_info"></div> <div class="tags"></div> <?if (isset($_MGM['user'])) {?> <textarea class="tags_edit hide"></textarea> <button type="button" class="btn" id="imageViewer_editTags">Edit Tags</button> <?if ($_MGM['user']['level']<=2) {?> <button type="button" class="btn btn-danger" id="imageViewer_delete">Delete</button> <?}?> <div id="imageViewer_apiloader" style="display: none;"></div> <?}?> </div> <div id="imageViewer_main" class="hide"></div> <div id="backdrop" class="hide"></div> <script type="text/javascript"> var filter = ""; var readyToLoad = false; var loadingPage = false; var currentPage = 0; function loadPage(page) { if (loadingPage) { return; } currentPage = page; loadingPage = true; //console.log("Loading "+page); $("#images_loader").load("<?=generateURL("api")?>/"+page, {filter: filter}, function(response, status, xhr) { $("#images_main").append($("#images_loader #content").html()); $("#images_loader #content").html(""); if ($("#images_loader #next_page").text()!="") { readyToLoad = true; } loadingPage = false; }); } var imageViewing = ""; function repositionImage(animate) { if (imageViewing=="") { return; } var image = $("#images_main .image[hash='"+imageViewing+"']"); var width = image.attr("image_width"); var height = image.attr("image_height"); var spaceWidth = ($(window).width()-$("#imageViewer_sidebar").width())-20; var spaceHeight = $(window).height()-20; var newWidth = width; var newHeight = height; if (width>spaceWidth || height>spaceHeight) { var widthFactor = spaceWidth/width; var heightFactor = spaceHeight/height; var scaleFactor = 1; if (widthFactor<heightFactor) scaleFactor = widthFactor; else scaleFactor = heightFactor; newWidth = Math.round(width*scaleFactor); newHeight = Math.round(height*scaleFactor); } $("imageViewer_main img").css({width: newWidth, height: newHeight}); if (animate==1) { $("#imageViewer_main").css({top: (newWidth*-1)-20, right: ((spaceWidth-newWidth)/2)+5, width: newWidth, height: newHeight}); $("#imageViewer_main").animate({top: ((spaceHeight-newHeight)/2)+5}); } else if (animate==2) { $("#imageViewer_main").css({top: ((spaceHeight-newHeight)/2)+5, right: ((spaceWidth-newWidth)/2)+5, width: newWidth, height: newHeight}); $("#imageViewer_main").animate({top: spaceHeight+20}, {duration: 400, complete: function() { $("#imageViewer_main").addClass("hide"); }}); } else if (animate==3 || animate==4) { $("#imageViewer_main").css({top: ((spaceHeight-newHeight)/2)+5, right: ((spaceWidth-newWidth)/2)+5, width: newWidth, height: newHeight}); $("#imageViewer_main").animate({right: (spaceWidth*-1)-20}, {duration: 400, complete: function() { if (animate==3) { loadImage(image.next(), 1); } else { loadImage(image.prev(), 1); } }}); } else { $("#imageViewer_main").css({top: ((spaceHeight-newHeight)/2)+5, right: ((spaceWidth-newWidth)/2)+5, width: newWidth, height: newHeight}); } } function bytesToSize(bytes) { var size = bytes; var type = "Bytes"; if (size>=1024) { size = size/1024; type = "KB"; } if (size>=1024) { size = size/1024; type = "MB"; } if (size>=1024) { size = size/1024; type = "GB"; } return (Math.round(size*100)/100)+" "+type; } function loadImage(image, animate) { if (animate==0) { $("#backdrop").css("opacity", 0); $("#backdrop").removeClass("hide"); $("#backdrop").animate({opacity: 0.8}); $("#imageViewer_sidebar").css("left", "-210px"); $("#imageViewer_sidebar").removeClass("hide"); $("#imageViewer_sidebar").animate({left: 0}); } imageViewing = image.attr("hash"); $("#imageViewer_main").removeClass("hide"); $("#imageViewer_main").html("<a href=\""+image.attr("original")+"\" target=\"blank\"><img src=\""+image.attr("original")+"\" /></a>"); repositionImage(1); $("#imageViewer_sidebar .basic_info").html(""); $("#imageViewer_sidebar .basic_info").append("<a href=\"<?=generateURL("hash/")?>"+image.attr("hash")+"/\">Image Link</a><br />"); $("#imageViewer_sidebar .basic_info").append("Date: "+date("m/d/y h:i:s A", image.attr("time"))+"<br />"); $("#imageViewer_sidebar .basic_info").append("Size: "+image.attr("image_width")+"x"+image.attr("image_height")+"<br />"); $("#imageViewer_sidebar .basic_info").append("File Size: "+bytesToSize(image.attr("file_size"))+"<br />"); $("#imageViewer_sidebar .tags").html(""); <?if (isset($_MGM['user'])) {?> $("#imageViewer_sidebar .tags_edit").val(image.attr("tags")); <?}?> var tags = image.attr("tags").split(" "); for (var i=0; i<tags.length; i++) { var tag = tags[i].replace(/_/g, " "); $("#imageViewer_sidebar .tags").append(tag+"<br />"); } <?if (isset($_MGM['user']) && $_MGM['user']['level']>=4) {?> if (image.attr("user")=="<?=$_MGM['user']['docid']?>") { $("#imageViewer_editTags").show(); } else { $("#imageViewer_editTags").hide(); } <?}?> if (image.prev().length!=0) { $("#imageViewer_previousButton").removeAttr("disabled"); } else { $("#imageViewer_previousButton").attr("disabled","disabled"); } if (image.next().length!=0) { $("#imageViewer_nextButton").removeAttr("disabled"); } else { $("#imageViewer_nextButton").attr("disabled","disabled"); } } $(document).ready(function() { $("#images_main").on("click", ".image", function() { loadImage($(this), 0); }); $("#imageViewer_previousButton").click(function() { repositionImage(4); }); $("#imageViewer_nextButton").click(function() { repositionImage(3); }); function closeImageViewer() { $("#backdrop").animate({opacity: 0}, {duration: 400, complete: function() { $("#backdrop").addClass("hide"); }}); $("#imageViewer_sidebar").animate({left: "-210px"}, {duration: 400, complete: function() { $("#imageViewer_sidebar").addClass("hide"); }}); <?if (isset($_MGM['user'])) {?> $("#imageViewer_sidebar .tags").removeClass("hide"); $("#imageViewer_sidebar .tags_edit").addClass("hide"); $("#imageViewer_editTags").text("Edit Tags"); <?}?> repositionImage(2); } $("#backdrop, #imageViewer_close").click(closeImageViewer); $(window).resize(function() { repositionImage(0); }); <?if (isset($_MGM['user'])) {?> $("#imageViewer_editTags").click(function() { if (imageViewing=="") { return; } if ($(this).text()=="Edit Tags") { $(this).text("Save Tags"); $("#imageViewer_sidebar .tags").addClass("hide"); $("#imageViewer_sidebar .tags_edit").removeClass("hide"); } else { $(this).text("Edit Tags"); $("#imageViewer_sidebar .tags").removeClass("hide"); $("#imageViewer_sidebar .tags_edit").addClass("hide"); $("#imageViewer_sidebar .tags").html(""); var tags = $("#imageViewer_sidebar .tags_edit").val().split(" "); for (var i=0; i<tags.length; i++) { var tag = tags[i].replace(/_/g, " "); $("#imageViewer_sidebar .tags").append(tag+"<br />"); } $("#imageViewer_apiloader").load("<?=generateURL("api/save_tags")?>/", {hash: imageViewing, tags: $("#imageViewer_sidebar .tags_edit").val()}); } }); <?if ($_MGM['user']['level']<=2) {?> $("#imageViewer_delete").click(function() { if (imageViewing=="") { return; } $("#imageViewer_confirmDelete").modal(); }); $("#imageViewer_confirmDelete_yes").click(function() { $("#imageViewer_apiloader").load("<?=generateURL("api/delete")?>/", {hash: imageViewing}); closeImageViewer(); $("#images_main .image[hash='"+imageViewing+"']").remove(); }); <?}?> <?}?> filter = $("#filter_field").val(); loadPage(0); $(window).scroll(function(){ if (readyToLoad && $(window).scrollTop()>=($(document).height()-$(window).height())-300) { readyToLoad = false; loadPage($("#images_loader #next_page").text()); } }); $("#filter_form").submit(function() { filter = $("#filter_field").val(); $("#images_main").html(""); loadPage(0); return false; }); }); </script> <? require_once("footer.php"); ?>