image_viewer_rails 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|