image_viewer_rails 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +5 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/image_viewer_rails/application.js +16 -0
- data/app/assets/javascripts/image_viewer_rails/image_viewer.js +392 -0
- data/app/assets/javascripts/image_viewer_rails/jquery.rotate.js +313 -0
- data/app/assets/javascripts/image_viewer_rails/keymaster.js +236 -0
- data/app/assets/javascripts/image_viewer_rails/keymaster_filter.js +23 -0
- data/app/controllers/image_viewer_rails/application_controller.rb +4 -0
- data/app/helpers/image_viewer_rails/application_helper.rb +4 -0
- data/app/views/layouts/image_viewer_rails/application.html.erb +14 -0
- data/config/routes.rb +2 -0
- data/lib/image_viewer_rails.rb +4 -0
- data/lib/image_viewer_rails/engine.rb +5 -0
- data/lib/image_viewer_rails/version.rb +3 -0
- data/lib/tasks/image_viewer_rails_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/image_viewer_rails_test.rb +7 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +157 -0
    
        data/MIT-LICENSE
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright 2013 Jonathan Jackson
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            +
            the following conditions:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.rdoc
    ADDED
    
    
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            #!/usr/bin/env rake
         | 
| 2 | 
            +
            begin
         | 
| 3 | 
            +
              require 'bundler/setup'
         | 
| 4 | 
            +
            rescue LoadError
         | 
| 5 | 
            +
              puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
            begin
         | 
| 8 | 
            +
              require 'rdoc/task'
         | 
| 9 | 
            +
            rescue LoadError
         | 
| 10 | 
            +
              require 'rdoc/rdoc'
         | 
| 11 | 
            +
              require 'rake/rdoctask'
         | 
| 12 | 
            +
              RDoc::Task = Rake::RDocTask
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            RDoc::Task.new(:rdoc) do |rdoc|
         | 
| 16 | 
            +
              rdoc.rdoc_dir = 'rdoc'
         | 
| 17 | 
            +
              rdoc.title    = 'ImageViewerRails'
         | 
| 18 | 
            +
              rdoc.options << '--line-numbers'
         | 
| 19 | 
            +
              rdoc.rdoc_files.include('README.rdoc')
         | 
| 20 | 
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 21 | 
            +
            end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
         | 
| 24 | 
            +
            load 'rails/tasks/engine.rake'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
             | 
| 28 | 
            +
            Bundler::GemHelper.install_tasks
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            require 'rake/testtask'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            Rake::TestTask.new(:test) do |t|
         | 
| 33 | 
            +
              t.libs << 'lib'
         | 
| 34 | 
            +
              t.libs << 'test'
         | 
| 35 | 
            +
              t.pattern = 'test/**/*_test.rb'
         | 
| 36 | 
            +
              t.verbose = false
         | 
| 37 | 
            +
            end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 | 
            +
            task :default => :test
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            // This is a manifest file that'll be compiled into application.js, which will include all the files
         | 
| 2 | 
            +
            // listed below.
         | 
| 3 | 
            +
            //
         | 
| 4 | 
            +
            // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
         | 
| 5 | 
            +
            // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
         | 
| 6 | 
            +
            //
         | 
| 7 | 
            +
            // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
         | 
| 8 | 
            +
            // the compiled file.
         | 
| 9 | 
            +
            //
         | 
| 10 | 
            +
            // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
         | 
| 11 | 
            +
            // GO AFTER THE REQUIRES BELOW.
         | 
| 12 | 
            +
            //
         | 
| 13 | 
            +
            //
         | 
| 14 | 
            +
            //= require jquery
         | 
| 15 | 
            +
            //= require jquery_ujs
         | 
| 16 | 
            +
            //= require_tree .
         | 
| @@ -0,0 +1,392 @@ | |
| 1 | 
            +
            (function($) {
         | 
| 2 | 
            +
              $.fn.imageViewer = function(method) {
         | 
| 3 | 
            +
                var settings = {
         | 
| 4 | 
            +
                  'height': '550',
         | 
| 5 | 
            +
                  'nav_links':true,
         | 
| 6 | 
            +
                  'zoomLevel': 75,
         | 
| 7 | 
            +
                  'increment' : 50,
         | 
| 8 | 
            +
                  'images' : null,
         | 
| 9 | 
            +
                  'mainDivId' : this,
         | 
| 10 | 
            +
                  'mainDiv' : null,
         | 
| 11 | 
            +
                  'imageOverlay': null,
         | 
| 12 | 
            +
                  'imageViewerImg': null,
         | 
| 13 | 
            +
                  'imageIndex': null,
         | 
| 14 | 
            +
                  'currentImageDiv': null,
         | 
| 15 | 
            +
                  'keyBindings' : {},
         | 
| 16 | 
            +
                  'suppressed_keys' : [],
         | 
| 17 | 
            +
                  'calculate_height_with_header' : true,
         | 
| 18 | 
            +
                  'calculate_height_with_footer' : false
         | 
| 19 | 
            +
                };
         | 
| 20 | 
            +
                var self = $.fn.imageViewer;
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                $.fn.imageViewer.scrollPage = function(increment){
         | 
| 23 | 
            +
                  if(settings["imageIndex"] === 0 && increment === -1) {
         | 
| 24 | 
            +
                    settings["imageIndex"] = (settings["images"].length - 1);
         | 
| 25 | 
            +
                  } else if(settings["imageIndex"] == (settings["images"].length - 1) && increment == 1){
         | 
| 26 | 
            +
                    settings["imageIndex"] = 0;
         | 
| 27 | 
            +
                  } else {
         | 
| 28 | 
            +
                    settings["imageIndex"] += increment;
         | 
| 29 | 
            +
                  }
         | 
| 30 | 
            +
                  showPage(settings["imageIndex"]);
         | 
| 31 | 
            +
                };
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                $.fn.imageViewer.settings = function(str) {
         | 
| 34 | 
            +
                  if (settings[str] !== undefined) {
         | 
| 35 | 
            +
                    return settings[str];
         | 
| 36 | 
            +
                  }
         | 
| 37 | 
            +
                };
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                $.fn.imageViewer.teardownKeyBindings = function() { teardownKeyBindings(); };
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                $.fn.imageViewer.setupKeyBindings = function() { setupKeyBindings(); };
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                $.fn.imageViewer.displayLegend =  function() {
         | 
| 44 | 
            +
                  var id = $('#dialog');
         | 
| 45 | 
            +
                  var maskHeight = $(document).height();
         | 
| 46 | 
            +
                  var maskWidth = $(window).width();
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  $('#mask').css({'width':maskWidth,'height':maskHeight});
         | 
| 49 | 
            +
                  $('#mask').fadeIn(600);
         | 
| 50 | 
            +
                  $('#mask').fadeTo("slow",0.8);
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  var winH = $(window).height();
         | 
| 53 | 
            +
                  var winW = $(window).width();
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  $(id).css('top',  winH/2-$(id).height()/2);
         | 
| 56 | 
            +
                  $(id).css('left', winW/2-$(id).width()/2);
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  $(id).fadeIn(2000);
         | 
| 59 | 
            +
                };
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                $.fn.imageViewer.scroll =  function(left, top){
         | 
| 62 | 
            +
                  settings["currentImageDiv"].scrollTop(settings["currentImageDiv"].scrollTop() + top);
         | 
| 63 | 
            +
                  settings["currentImageDiv"].scrollLeft(settings["currentImageDiv"].scrollLeft() + left);
         | 
| 64 | 
            +
                };
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                $.fn.imageViewer.zoom = function(increment){
         | 
| 67 | 
            +
                  if(increment < 0 && settings["zoomLevel"] <= settings["increment"]) increment = 0;
         | 
| 68 | 
            +
                  zoomAbsolute(settings["zoomLevel"] + increment);
         | 
| 69 | 
            +
                };
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                $.fn.imageViewer.rotate_all = function(increment){
         | 
| 72 | 
            +
                  $.each(settings["images"], function(index, image) {
         | 
| 73 | 
            +
                    showPage(index);
         | 
| 74 | 
            +
                    rotate(increment, index);
         | 
| 75 | 
            +
                  });
         | 
| 76 | 
            +
                  showPage(0);
         | 
| 77 | 
            +
                };
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                $.fn.imageViewer.rotate = function(increment){
         | 
| 80 | 
            +
                  rotate(increment);
         | 
| 81 | 
            +
                };
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                $.fn.imageViewer.print = function() {
         | 
| 84 | 
            +
                  var myWindow = window.open("", '_newtab');
         | 
| 85 | 
            +
                  var image_tags = "";
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  $.each(settings["images"], function(index, image) {
         | 
| 88 | 
            +
                    image_tags += '<img style="clear:both;width:100%;page-break-after:always;max-width:none;" src="' + image + '" />';
         | 
| 89 | 
            +
                  });
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  var print_script = '<script type=\'text/javascript\'>' +
         | 
| 92 | 
            +
                                     'function PrintWindow() {CheckWindowState(); }' +
         | 
| 93 | 
            +
                                     'function CheckWindowState(){' +
         | 
| 94 | 
            +
                                     'if(document.readyState=="complete")' +
         | 
| 95 | 
            +
                                      '{ window.print();window.close();}' +
         | 
| 96 | 
            +
                                     'else{setTimeout("CheckWindowState()", 2000)}}' +
         | 
| 97 | 
            +
                                      'PrintWindow();' +
         | 
| 98 | 
            +
                                     '</script>';
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  myWindow.document.write(image_tags + print_script);
         | 
| 101 | 
            +
                  myWindow.document.close();
         | 
| 102 | 
            +
                };
         | 
| 103 | 
            +
             | 
| 104 | 
            +
             | 
| 105 | 
            +
                function init(image_path_array, options){
         | 
| 106 | 
            +
                  main_div_id = (settings["mainDivId"]).attr("id");
         | 
| 107 | 
            +
                  if ( options )
         | 
| 108 | 
            +
                    $.extend( settings, options );
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  this.data("settings", settings);
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  if (main_div_id !== undefined)
         | 
| 113 | 
            +
                    settings["mainDivId"] = main_div_id;
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  setupContainers();
         | 
| 116 | 
            +
                  setupHeight();
         | 
| 117 | 
            +
                  setupKeyBindings();
         | 
| 118 | 
            +
                  if (settings['nav_links'] === true) {createNavTable();}
         | 
| 119 | 
            +
                  setupImages(image_path_array);
         | 
| 120 | 
            +
                  setupLegend();
         | 
| 121 | 
            +
                  setupMaskListener();
         | 
| 122 | 
            +
                  handleWindowResize();
         | 
| 123 | 
            +
                }
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                function setupLegend() {
         | 
| 126 | 
            +
                  var modal_container = "<div id='key-bindings'></div>";
         | 
| 127 | 
            +
                  var mask_div = "<div id='mask'></div>";
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                  var key_binding_div = "<div class='window' id='dialog'>" +
         | 
| 130 | 
            +
                  "<a href='#' style='float:right;' class='close'>(X) Close</a>" +
         | 
| 131 | 
            +
                      "<table>" +
         | 
| 132 | 
            +
                      "  <thead>" +
         | 
| 133 | 
            +
                      "    <tr>" +
         | 
| 134 | 
            +
                      "      <th>Keystroke</th>" +
         | 
| 135 | 
            +
                      "      <th>Description</th>" +
         | 
| 136 | 
            +
                      "    </tr>" +
         | 
| 137 | 
            +
                      "  </thead>" +
         | 
| 138 | 
            +
                      "  <tbody>" +
         | 
| 139 | 
            +
                      "    <tr><td>'\\'</td><td>Toggle Command Mode</td></tr>" +
         | 
| 140 | 
            +
                      "    <tr><td>'i'</td><td>Zoom In</td></tr>" +
         | 
| 141 | 
            +
                      "    <tr><td>'k', 'o'</td><td>Zoom Out</td></tr>" +
         | 
| 142 | 
            +
                      "    <tr><td>'l', 'n'</td><td>Next</td></tr>" +
         | 
| 143 | 
            +
                      "    <tr><td>'j', 'p'</td><td>Previous</td></tr>" +
         | 
| 144 | 
            +
                      "    <tr><td>'e', 'up arrow'</td><td>Scroll Up</td></tr>" +
         | 
| 145 | 
            +
                      "    <tr><td>'d', 'down arrow'</td><td>Scroll Down</td></tr>" +
         | 
| 146 | 
            +
                      "    <tr><td>'s', 'left arrow'</td><td>Scroll Left</td></tr>" +
         | 
| 147 | 
            +
                      "    <tr><td>'f', 'right arrow'</td><td>Scroll Right</td></tr>" +
         | 
| 148 | 
            +
                      "    <tr><td>'r'</td><td>Rotate Clockwise</td></tr>" +
         | 
| 149 | 
            +
                      "    <tr><td>'t'</td><td>Rotate All Clockwise</td></tr>" +
         | 
| 150 | 
            +
                      "    <tr><td>';', 'page down'</td><td>Page Down</td></tr>" +
         | 
| 151 | 
            +
                      "    <tr><td>'a', 'page up'</td><td>Page Up</td></tr>" +
         | 
| 152 | 
            +
                      "  </tbody>" +
         | 
| 153 | 
            +
                      "</table>" +
         | 
| 154 | 
            +
                  "</div>";
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                  $('body').prepend(modal_container);
         | 
| 157 | 
            +
                  $('#key-bindings').append(key_binding_div);
         | 
| 158 | 
            +
                  $('#key-bindings').append(mask_div);
         | 
| 159 | 
            +
                }
         | 
| 160 | 
            +
                function setupMaskListener(){
         | 
| 161 | 
            +
                  $('.window .close').click(function (e) {
         | 
| 162 | 
            +
                          //Cancel the link behavior
         | 
| 163 | 
            +
                          e.preventDefault();
         | 
| 164 | 
            +
                          $('#mask, .window').hide();
         | 
| 165 | 
            +
                      });
         | 
| 166 | 
            +
                  $('#mask').click(function () {
         | 
| 167 | 
            +
                      $(this).hide();
         | 
| 168 | 
            +
                      $('.window').hide();
         | 
| 169 | 
            +
                  });
         | 
| 170 | 
            +
                }
         | 
| 171 | 
            +
                function reload(){
         | 
| 172 | 
            +
                  image_array                 = settings["images"];
         | 
| 173 | 
            +
                  settings["zoomLevel"]       = 75;
         | 
| 174 | 
            +
                  settings["images"]          = null;
         | 
| 175 | 
            +
                  settings["mainDiv"]         = null;
         | 
| 176 | 
            +
                  settings["imageOverlay"]    = null;
         | 
| 177 | 
            +
                  settings["imageViewerImg"]  = null;
         | 
| 178 | 
            +
                  settings["imageIndex"]      = null;
         | 
| 179 | 
            +
                  settings["currentImageDiv"] = null;
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                  init(image_array);
         | 
| 182 | 
            +
                }
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                function createNavTable() {
         | 
| 185 | 
            +
                  table = '<table id="navlinks-for-' + settings['mainDivId'] + '" class="table" style="margin:0px;">' +
         | 
| 186 | 
            +
                  '<tr>' +
         | 
| 187 | 
            +
                  '<td>' + createNavLink('scrollPage(-1)', 'previous') + '</td>' +
         | 
| 188 | 
            +
                  '<td>' + createNavLink('scrollPage(1)', 'next') + '</td>' +
         | 
| 189 | 
            +
                  '<td>' + createNavLink('scroll(-1 * ' + settings["increment"] + ",0)", 'left') + '</td>' +
         | 
| 190 | 
            +
                  '<td>' + createNavLink('scroll(' + settings["increment"] + ",0)", 'right') + '</td>' +
         | 
| 191 | 
            +
                  '<td>' + createNavLink('scroll(0, -1 * ' + settings["increment"] + ")", 'up') + '</td>' +
         | 
| 192 | 
            +
                  '<td>' + createNavLink('scroll(0,' + settings["increment"] + ")", 'down') + '</td>' +
         | 
| 193 | 
            +
                  '<td>' + createNavLink('zoom(' + settings["increment"] + ")", 'zoom in') + '</td>' +
         | 
| 194 | 
            +
                  '<td>' + createNavLink('zoom(-1 * ' + settings["increment"] + ")", 'zoom out') + '</td>' +
         | 
| 195 | 
            +
                  '<td>' + createNavLink('rotate(90)', 'rotate') + '</td>' +
         | 
| 196 | 
            +
                  '<td>' + createNavLink('rotate_all(90)', 'rotate all') + '</td>' +
         | 
| 197 | 
            +
                  '<td>' + createNavLink('print()', 'print') + '</td>' +
         | 
| 198 | 
            +
                  '<td>' + createNavLink('displayLegend()', 'legend') + '</td>' +
         | 
| 199 | 
            +
                  '</tr>' +
         | 
| 200 | 
            +
                  '</table>';
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                  settings["mainDiv"].prepend(table);
         | 
| 203 | 
            +
                }
         | 
| 204 | 
            +
                function createNavLink( call, name ) {
         | 
| 205 | 
            +
                  var div_id = '#' + settings["mainDivId"];
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                  return '<a href="#" onclick="' +
         | 
| 208 | 
            +
                  '$(\'' + div_id + '\')' +
         | 
| 209 | 
            +
                  '.imageViewer.' +  call + ';return false;">' +
         | 
| 210 | 
            +
                  name +
         | 
| 211 | 
            +
                  '</a>';
         | 
| 212 | 
            +
                }
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                function setupContainers(){
         | 
| 215 | 
            +
                  settings["mainDiv"] = $('#' + settings["mainDivId"]);
         | 
| 216 | 
            +
                  settings["mainDiv"].empty();
         | 
| 217 | 
            +
                  settings["mainDiv"].addClass('image-viewer-container');
         | 
| 218 | 
            +
                  settings["mainDiv"].css("width", settings["width"]);
         | 
| 219 | 
            +
                  settings["mainDiv"].append('<div id="' + settings["mainDivId"] + '-image-overlay" class="image-overlay"></div>');
         | 
| 220 | 
            +
                  settings["imageOverlay"] = $('#' + settings["mainDivId"] + '-image-overlay');
         | 
| 221 | 
            +
                }
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                function  setupImages(images){
         | 
| 224 | 
            +
                  settings["images"] = images;
         | 
| 225 | 
            +
                  var style = "";
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                  $.each(images, function(index, image){
         | 
| 228 | 
            +
                    if(index !== 0)
         | 
| 229 | 
            +
                      style += "display: none;";
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                    settings["mainDiv"].append('<div id="' + settings["mainDivId"] + '-image-viewer-' + index + '" ' +
         | 
| 232 | 
            +
                    'class="image-viewer" ' +
         | 
| 233 | 
            +
                    'style="' + style + '">' +
         | 
| 234 | 
            +
                    '<img id="' + settings["mainDivId"] + '-full-image-' + index + '" ' +
         | 
| 235 | 
            +
                    'src="' + image + '" ' +
         | 
| 236 | 
            +
                    'alt="Full Image" ' +
         | 
| 237 | 
            +
                    'style="width:100%;max-width:none;" ' +
         | 
| 238 | 
            +
                    'angle="0"/>' +
         | 
| 239 | 
            +
                    '</div>');
         | 
| 240 | 
            +
             | 
| 241 | 
            +
                  });
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                  settings["currentImageDiv"] = $('#' + settings["mainDivId"] + '-image-viewer-0');
         | 
| 244 | 
            +
                  settings["imageViewerImg"] = $('#' + settings["mainDivId"] + '-full-image-0');
         | 
| 245 | 
            +
                  settings["imageIndex"] = 0;
         | 
| 246 | 
            +
                  updateOverlay();
         | 
| 247 | 
            +
                }
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                function delayedRedirect(){
         | 
| 250 | 
            +
                  window.location = "/";
         | 
| 251 | 
            +
                }
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                function teardownKeyBindings(){
         | 
| 254 | 
            +
                  key.deleteScope('imageviewer');
         | 
| 255 | 
            +
                }
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                function addKeyToKeyMaster(keyString, keyScope, func){
         | 
| 258 | 
            +
                  var keys = typeof(keyString) === 'string' ? [keyString] : keyString
         | 
| 259 | 
            +
                  $.each(keys, function(index, k) {
         | 
| 260 | 
            +
                    if ($.inArray(k, settings['suppressed_keys']) === -1) {
         | 
| 261 | 
            +
                      key(k, keyScope, func);
         | 
| 262 | 
            +
                    }
         | 
| 263 | 
            +
                  });
         | 
| 264 | 
            +
                }
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                function  setupKeyBindings(){
         | 
| 267 | 
            +
                  teardownKeyBindings();
         | 
| 268 | 
            +
             | 
| 269 | 
            +
                  key.setScope('imageviewer');
         | 
| 270 | 
            +
             | 
| 271 | 
            +
                  keymasterCommandModeCallback = updateOverlay;
         | 
| 272 | 
            +
             | 
| 273 | 
            +
                  // prevent alt+f4 from closing browser
         | 
| 274 | 
            +
                  addKeyToKeyMaster('alt+f4', 'imageviewer', function(){ alert('NO WAY JOSE! (Don\'t hit Alt+F4!!!)'); return false; });
         | 
| 275 | 
            +
                  // zoom out
         | 
| 276 | 
            +
                  addKeyToKeyMaster(['k','shift+k','o','shift+o'], 'imageviewer', function(){ self.zoom(-1 * settings["increment"]); return false;});
         | 
| 277 | 
            +
                  // zoom in
         | 
| 278 | 
            +
                  addKeyToKeyMaster(['i','shift+i'], 'imageviewer', function(){ self.zoom(settings["increment"]); return false;});
         | 
| 279 | 
            +
                  // scroll up
         | 
| 280 | 
            +
                  addKeyToKeyMaster(['e','shift+e','up'], 'imageviewer', function(){ self.scroll(0,-1 * settings["increment"]); return false;});
         | 
| 281 | 
            +
                  // scroll down
         | 
| 282 | 
            +
                  addKeyToKeyMaster(['d','shift+d','down'], 'imageviewer', function(){ self.scroll(0,settings["increment"]); return false;});
         | 
| 283 | 
            +
                  // page up
         | 
| 284 | 
            +
                  addKeyToKeyMaster(['a','shift+a','pageup'], 'imageviewer', function(){ self.scroll(0,-1 * (settings["increment"] * 5)); return false;});
         | 
| 285 | 
            +
                  // page down
         | 
| 286 | 
            +
                  addKeyToKeyMaster([';','pagedown'], 'imageviewer', function(){ self.scroll(0,(settings["increment"] * 5)); return false;});
         | 
| 287 | 
            +
                  // scroll right
         | 
| 288 | 
            +
                  addKeyToKeyMaster(['f','shift+f','right'], 'imageviewer', function(){ self.scroll(settings["increment"],0); return false;});
         | 
| 289 | 
            +
                  // scroll left
         | 
| 290 | 
            +
                  addKeyToKeyMaster(['s','shift+s','left'], 'imageviewer', function(){ self.scroll((-1 * settings["increment"]),0); return false; });
         | 
| 291 | 
            +
                  // previous page
         | 
| 292 | 
            +
                  addKeyToKeyMaster(['j','shift+j','p','shift+p'], 'imageviewer', function(){ self.scrollPage(-1); return false; });
         | 
| 293 | 
            +
                  // next page
         | 
| 294 | 
            +
                  addKeyToKeyMaster(['l','shift+l','n','shift+n'], 'imageviewer', function(){ self.scrollPage(1); return false; });
         | 
| 295 | 
            +
                  // rotate
         | 
| 296 | 
            +
                  addKeyToKeyMaster(['r','shift+r'], 'imageviewer', function(){ self.rotate(90); return false; });
         | 
| 297 | 
            +
                  // rotate all
         | 
| 298 | 
            +
                  addKeyToKeyMaster(['t','shift+t'], 'imageviewer', function(){ self.rotate_all(90); return false; });
         | 
| 299 | 
            +
                }
         | 
| 300 | 
            +
             | 
| 301 | 
            +
                function setupHeight(){
         | 
| 302 | 
            +
                  var window_height = $(window).height();
         | 
| 303 | 
            +
                  var footer        = $('#footer');
         | 
| 304 | 
            +
                  var navlinks      = $('#navlinks-for-' + settings['mainDivId']);
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                  var footer_height, menu_offset;
         | 
| 307 | 
            +
             | 
| 308 | 
            +
                  if (settings['calculate_height_with_header']) {
         | 
| 309 | 
            +
                    menu_offset = settings["mainDiv"].offset().top;
         | 
| 310 | 
            +
                  } else {
         | 
| 311 | 
            +
                    menu_offset = 0;
         | 
| 312 | 
            +
                  }
         | 
| 313 | 
            +
             | 
| 314 | 
            +
                  if(footer && settings['calculate_height_with_footer']){
         | 
| 315 | 
            +
                    footer_height = footer.height() + 7;
         | 
| 316 | 
            +
                  } else {
         | 
| 317 | 
            +
                    footer_height = 0;
         | 
| 318 | 
            +
                  }
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                  var new_height = window_height - menu_offset - footer_height - 20;
         | 
| 321 | 
            +
             | 
| 322 | 
            +
                  settings["mainDiv"].css('height', new_height + 'px');
         | 
| 323 | 
            +
                  settings["mainDiv"].css('top', '0px');
         | 
| 324 | 
            +
             | 
| 325 | 
            +
                  $('.image-viewer').css('height', (settings["mainDiv"].height() - navlinks.height()) + 'px');
         | 
| 326 | 
            +
                }
         | 
| 327 | 
            +
             | 
| 328 | 
            +
                function handleWindowResize(){
         | 
| 329 | 
            +
                  $(window).bind('resize', setupHeight);
         | 
| 330 | 
            +
                }
         | 
| 331 | 
            +
             | 
| 332 | 
            +
                function zoomAbsolute(zoomLevel){
         | 
| 333 | 
            +
                  previous_zoomLevel = settings["zoomLevel"];
         | 
| 334 | 
            +
                  settings["zoomLevel"] = zoomLevel;
         | 
| 335 | 
            +
             | 
| 336 | 
            +
                  object_to_zoom = $('#' + settings["mainDivId"] + '-full-image-' + settings["imageIndex"]);
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                  object_to_zoom.css('width', settings["zoomLevel"] + '%');
         | 
| 339 | 
            +
                  self.scroll(0,0);
         | 
| 340 | 
            +
                }
         | 
| 341 | 
            +
             | 
| 342 | 
            +
                function showPage(page){
         | 
| 343 | 
            +
                  settings["imageIndex"] = page;
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                  settings["currentImageDiv"].hide();
         | 
| 346 | 
            +
                  settings["currentImageDiv"] = $('#' + settings["mainDivId"] + '-image-viewer-' + page);
         | 
| 347 | 
            +
                  settings["imageViewerImg"] = $('#' + settings["mainDivId"] + '-full-image-' + page);
         | 
| 348 | 
            +
                  settings["currentImageDiv"].show();
         | 
| 349 | 
            +
                  updateOverlay();
         | 
| 350 | 
            +
                }
         | 
| 351 | 
            +
             | 
| 352 | 
            +
                function updateOverlay(commandMode){
         | 
| 353 | 
            +
                  var s = (settings["imageIndex"] + 1) + ' / ' + settings["images"].length;
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                  if(commandMode === undefined)
         | 
| 356 | 
            +
                    commandMode = settings["imageOverlay"].html().search(/CM/) !== -1;
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                  if(commandMode === true)
         | 
| 359 | 
            +
                    s += ' CM';
         | 
| 360 | 
            +
             | 
| 361 | 
            +
                  settings["imageOverlay"].html(s);
         | 
| 362 | 
            +
                }
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                function rotate(increment, imageIndex){
         | 
| 365 | 
            +
                  if (imageIndex === undefined) imageIndex = settings["imageIndex"];
         | 
| 366 | 
            +
                  var image = $('#' + settings["mainDivId"] + '-full-image-' + imageIndex);
         | 
| 367 | 
            +
                  var current_angle = parseInt(image.attr('angle'),10);
         | 
| 368 | 
            +
             | 
| 369 | 
            +
                  zoomAbsolute(100);
         | 
| 370 | 
            +
             | 
| 371 | 
            +
                  image.rotate(current_angle + increment);
         | 
| 372 | 
            +
                  current_angle = parseInt(image.getRotateAngle(),10) % 360;
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                  if (current_angle === 90 || current_angle === 270) {
         | 
| 375 | 
            +
                    var offset = image.height()/2 - image.width()/2;
         | 
| 376 | 
            +
                    image.css('margin-top', -1 * offset);
         | 
| 377 | 
            +
                    image.css('margin-left', offset);
         | 
| 378 | 
            +
                  } else {
         | 
| 379 | 
            +
                    image.css('margin-top', 0);
         | 
| 380 | 
            +
                    image.css('margin-left', 0);
         | 
| 381 | 
            +
                  }
         | 
| 382 | 
            +
             | 
| 383 | 
            +
                  image.attr('angle',current_angle);
         | 
| 384 | 
            +
                }
         | 
| 385 | 
            +
             | 
| 386 | 
            +
                if ( typeof method === 'object' || ! method )
         | 
| 387 | 
            +
                  return init.apply( this, arguments);
         | 
| 388 | 
            +
                else
         | 
| 389 | 
            +
                  $.error( 'Method ' +  method + ' does not exist on jQuery.imageViewer' );
         | 
| 390 | 
            +
             | 
| 391 | 
            +
              };
         | 
| 392 | 
            +
              })(jQuery);
         |