The New Desing
5
web/js/iviewer/.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
*.swp
|
||||
logs
|
||||
public/photos
|
||||
public/phtmp
|
||||
node_modules
|
97
web/js/iviewer/Changelog
Normal file
|
@ -0,0 +1,97 @@
|
|||
Version 0.7.12
|
||||
|
||||
* Add method to enable/disable mousewheel functionality
|
||||
|
||||
Version 0.7.11 (2014/05/02)
|
||||
|
||||
* Bower release!
|
||||
|
||||
Version 0.7.10 (2014/05/02)
|
||||
|
||||
* IE7&8 fixes
|
||||
* remove ui nodes on destroy
|
||||
* gallery-like functionality for iviewer-lightbox test page
|
||||
|
||||
|
||||
Version 0.7.9 (2014/01/05)
|
||||
|
||||
* Grunt based release scripts
|
||||
* Option to fill container
|
||||
* DblClick event added
|
||||
* Zoom on double click
|
||||
* Move more events to the iviewer namespace
|
||||
|
||||
Version 0.7.8 (2013/09/23)
|
||||
|
||||
* handle MozMousePixelScroll oddness in mousewheel handler to use proper pageX
|
||||
and pageY event properties
|
||||
* replace midernizr contain function call with String::indexOf
|
||||
|
||||
Version 0.7.7 (2013/03/12)
|
||||
|
||||
* IE10 touch support
|
||||
* Widget reacts on mouse wheel not only over the image but over the whole
|
||||
container
|
||||
* Do not use jQuery.browser to detect for internet explorer filters (fixes
|
||||
#44)
|
||||
* Force img_object to trigger loaded event asynchronously in all cases (I'm
|
||||
looking at you, IE8)
|
||||
|
||||
Version 0.7.6 (2013/01/26)
|
||||
|
||||
* add public update method
|
||||
* immediately finish zoom animation if iage coordinates are set during it (#39)
|
||||
* do not remove asrc attribute from image when loading new one to prevent
|
||||
additional requests from some browsers (#31)
|
||||
|
||||
Version 0.7.5 (2012/10/24)
|
||||
|
||||
* add image load error callback
|
||||
* clean up DOM when widget is destoyed
|
||||
|
||||
Version 0.7.4 (2012/08/21)
|
||||
|
||||
* remove variable dragInitialized from the global scope
|
||||
|
||||
Version 0.7.3 (2012/08/21)
|
||||
|
||||
* reset max-width css property on image load to avoid breaking in the twitter bootstrap
|
||||
* support gesture events for iOS systems
|
||||
* on zoom with mouse wheel mouse position is preferred over center of image as
|
||||
a fixed point
|
||||
* on ipad zoom will prefer the center of the gesture (thx to colinbashbash!)
|
||||
* ipad panning stability fixes (thx to colinbashbash!)
|
||||
|
||||
Version 0.7.2 (2012/07/20)
|
||||
|
||||
* add mousewheel option to add possibility to disable it
|
||||
* add an ability to return current coordinates from the info method
|
||||
* [bug] Stop previous animation on the subsequent dimensions change
|
||||
* [bug] Round dimension and position values on zoom change to prevent
|
||||
coordinates distortion.
|
||||
|
||||
Version 0.7.1 (2012/03/01)
|
||||
|
||||
* add class iviewer_loading while image is being loaded
|
||||
* move closure function that deals with loaded image to
|
||||
the prototype to allow its expansion
|
||||
* reset image node attribute only after next image was
|
||||
loaded to remove unwanted image flickering.
|
||||
|
||||
Version 0.7 (2012/02/17)
|
||||
|
||||
* all callbacks are now fired with _trigger method of jQuery UI. So the first
|
||||
parameter in every callback now is a jquery event. Other arguments are
|
||||
shifted. Also, this now point to the html element, not the widget object
|
||||
itself.
|
||||
* Added info method to access some image properties from outside world
|
||||
* Updated lightbox example to show, how multiple files can be shown
|
||||
* Rotation filters are now applied event at zero angle to please IE
|
||||
|
||||
Version 0.6 (2012/02/07)
|
||||
|
||||
* Changelog file (eventually)
|
||||
* Image rotation feature
|
||||
* onAfterZoom is working again
|
||||
* onMouseMove callback is working again
|
||||
* Do not animation image on initial load (only zoom will be animated now)
|
75
web/js/iviewer/Gruntfile.js
Normal file
|
@ -0,0 +1,75 @@
|
|||
module.exports = function(grunt) {
|
||||
var fs = require('fs')
|
||||
, version = fs.readFileSync('Changelog', 'utf-8')
|
||||
.split('\n')
|
||||
.shift()
|
||||
.split(/\s+/)
|
||||
.pop();
|
||||
|
||||
grunt.initConfig({
|
||||
version: {
|
||||
options: {
|
||||
release: version,
|
||||
pkg: 'package.json'
|
||||
},
|
||||
|
||||
js: {
|
||||
options: {
|
||||
prefix: "Version:\\s+"
|
||||
},
|
||||
src: ['jquery.iviewer.js']
|
||||
},
|
||||
|
||||
json: {
|
||||
src: ['package.json', 'iviewer.jquery.json', 'bower.json']
|
||||
}
|
||||
},
|
||||
|
||||
uglify: {
|
||||
options: {
|
||||
report: "min",
|
||||
mangle: false,
|
||||
banner: 'set me later'
|
||||
},
|
||||
|
||||
js: {
|
||||
files: {
|
||||
'jquery.iviewer.min.js': ['jquery.iviewer.js']
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-version');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
|
||||
grunt.registerTask('banner', function() {
|
||||
var banner = fs.readFileSync('jquery.iviewer.js', 'utf-8')
|
||||
.match(RegExp("^/\\*[^]*?\\*/"))[0] + '\n\n'
|
||||
|
||||
grunt.config('uglify.options.banner', banner)
|
||||
});
|
||||
|
||||
grunt.registerTask('changelog', function() {
|
||||
var date = new Date()
|
||||
, pad = function(len, symb) {
|
||||
if (symb.toString().length < len) {
|
||||
return '0' + symb;
|
||||
} else {
|
||||
return symb;
|
||||
}
|
||||
}
|
||||
, stamp = '(' + [
|
||||
date.getFullYear(),
|
||||
date.getMonth() + 1,
|
||||
date.getDate()
|
||||
].map(pad.bind(null, 2))
|
||||
.join('/') + ')\n'
|
||||
, file = grunt.file.read('Changelog')
|
||||
.replace(/(.*?)\n/, "$1 " + stamp);
|
||||
|
||||
grunt.file.write('Changelog', file)
|
||||
})
|
||||
|
||||
grunt.registerTask('release', ['version', 'banner', 'changelog', 'uglify'])
|
||||
};
|
20
web/js/iviewer/README
Normal file
|
@ -0,0 +1,20 @@
|
|||
jQuery.iviewer is an jQuery UI widget responsible for image view control with zoom
|
||||
control and a possibility to move image in area by the mouse.
|
||||
|
||||
Widget depends on the jquery.ui.core, jquery.ui.widget and jquery.ui.mouse.
|
||||
|
||||
Features:
|
||||
* Total control over the widget through API.
|
||||
* Controls can be customized with CSS.
|
||||
* Smooth zoom.
|
||||
|
||||
Support: widget is expected to work in ie6+, ff2+, google chrome, opera 9+, safari.
|
||||
|
||||
Demo is availible here:
|
||||
* http://test.dpetroff.ru/jquery.iviewer/test/
|
||||
* http://test.dpetroff.ru/jquery.iviewer/test/index3.html
|
||||
|
||||
Widget is licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
|
||||
|
||||
|
||||
Docs are availible at http://wiki.github.com/can3p/iviewer
|
1
web/js/iviewer/TODO
Normal file
|
@ -0,0 +1 @@
|
|||
* Make smooth zooming without visual discrete steps
|
25
web/js/iviewer/bower.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "iviewer",
|
||||
"version": "0.7.11",
|
||||
"homepage": "https://github.com/can3p/iviewer",
|
||||
"authors": [
|
||||
"Dmitry Petrov <dpetroff@gmail.com>"
|
||||
],
|
||||
"description": "Image viewer widget for jQuery UI",
|
||||
"main": "jquery.iviewer.js",
|
||||
"keywords": [
|
||||
"jquery",
|
||||
"jquery",
|
||||
"ui",
|
||||
"image",
|
||||
"viewer"
|
||||
],
|
||||
"license": "MIT",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
BIN
web/js/iviewer/img/grab.cur
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
web/js/iviewer/img/hand.cur
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
web/js/iviewer/img/iviewer.rotate_left.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
web/js/iviewer/img/iviewer.rotate_right.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
web/js/iviewer/img/iviewer.zoom_fit.gif
Normal file
After Width: | Height: | Size: 95 B |
BIN
web/js/iviewer/img/iviewer.zoom_in.gif
Normal file
After Width: | Height: | Size: 90 B |
BIN
web/js/iviewer/img/iviewer.zoom_out.gif
Normal file
After Width: | Height: | Size: 69 B |
BIN
web/js/iviewer/img/iviewer.zoom_zero.gif
Normal file
After Width: | Height: | Size: 98 B |
38
web/js/iviewer/iviewer.jquery.json
Normal file
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"name": "iviewer",
|
||||
"title": "jQuery.iviewer",
|
||||
"description": "Image viewing widget featuring zoom and image rotation",
|
||||
"keywords": [
|
||||
"image",
|
||||
"widget",
|
||||
"zoom",
|
||||
"rotation"
|
||||
],
|
||||
"version": "0.7.11",
|
||||
"author": {
|
||||
"name": "Dmitry Petrov",
|
||||
"email": "dpetroff@gmail.com",
|
||||
"url": "http://dpetroff.ru"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Dmitry Petrov",
|
||||
"email": "dpetroff@gmail.com",
|
||||
"url": "http://dpetroff.ru"
|
||||
}
|
||||
],
|
||||
"licenses": [
|
||||
{
|
||||
"type": "mit",
|
||||
"url": "http://opensource.org/licenses/MIT"
|
||||
}
|
||||
],
|
||||
"bugs": "https://github.com/can3p/iviewer/issues",
|
||||
"homepage": "https://github.com/can3p/iviewer",
|
||||
"docs": "https://github.com/can3p/iviewer/wiki",
|
||||
"download": "https://github.com/can3p/iviewer/tags",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.5",
|
||||
"jquery ui": "~1.8"
|
||||
}
|
||||
}
|
67
web/js/iviewer/jquery.iviewer.css
Normal file
|
@ -0,0 +1,67 @@
|
|||
.viewer {
|
||||
-ms-touch-action: none;
|
||||
}
|
||||
.viewer img {
|
||||
image-orientation: from-image;
|
||||
}
|
||||
.iviewer_common {
|
||||
position:absolute;
|
||||
bottom:10px;
|
||||
border: 1px solid #000;
|
||||
height: 28px;
|
||||
z-index: 5000;
|
||||
}
|
||||
|
||||
.iviewer_cursor {
|
||||
cursor: url(img/hand.cur) 6 8, pointer;
|
||||
}
|
||||
|
||||
.iviewer_drag_cursor {
|
||||
cursor: url(img/grab.cur) 6 8, pointer;
|
||||
}
|
||||
|
||||
.iviewer_button {
|
||||
width: 28px;
|
||||
cursor: pointer;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_zoom_in {
|
||||
left: 20px;
|
||||
background: url(img/iviewer.zoom_in.gif) center center no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_zoom_out {
|
||||
left: 55px;
|
||||
background: url(img/iviewer.zoom_out.gif) center center no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_zoom_zero {
|
||||
left: 90px;
|
||||
background: url(img/iviewer.zoom_zero.gif) center center no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_zoom_fit {
|
||||
left: 125px;
|
||||
background: url(img/iviewer.zoom_fit.gif) center center no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_zoom_status {
|
||||
left: 160px;
|
||||
font: 1em/28px Sans;
|
||||
color: #000;
|
||||
background-color: #fff;
|
||||
text-align: center;
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.iviewer_rotate_left {
|
||||
left: 227px;
|
||||
background: #fff url(img/iviewer.rotate_left.png) center center no-repeat;
|
||||
}
|
||||
|
||||
.iviewer_rotate_right {
|
||||
left: 262px;
|
||||
background: #fff url(img/iviewer.rotate_right.png) center center no-repeat;
|
||||
}
|
1297
web/js/iviewer/jquery.iviewer.js
Normal file
13
web/js/iviewer/jquery.iviewer.min.js
vendored
Normal file
18
web/js/iviewer/package.json
Normal file
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "iviewer",
|
||||
"version": "0.7.11",
|
||||
"description": "jQuery.iviewer is an jQuery UI widget responsible for image view control with zoom control and a possibility to move image in area by the mouse.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/can3p/iviewer.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/can3p/iviewer/issues"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.2",
|
||||
"grunt-version": "~0.2.2",
|
||||
"grunt-contrib-uglify": "~0.2.7"
|
||||
}
|
||||
}
|
BIN
web/js/iviewer/test/arrow.png
Normal file
After Width: | Height: | Size: 2 KiB |
86
web/js/iviewer/test/index.html
Normal file
|
@ -0,0 +1,86 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>jquery.iviewer test</title>
|
||||
<script type="text/javascript" src="jquery.js" ></script>
|
||||
<script type="text/javascript" src="jqueryui.js" ></script>
|
||||
<script type="text/javascript" src="jquery.mousewheel.min.js" ></script>
|
||||
<script type="text/javascript" src="../jquery.iviewer.js" ></script>
|
||||
<script type="text/javascript">
|
||||
var $ = jQuery;
|
||||
$(document).ready(function(){
|
||||
var iv1 = $("#viewer").iviewer({
|
||||
src: "test_image.jpg",
|
||||
update_on_resize: false,
|
||||
zoom_animation: false,
|
||||
mousewheel: false,
|
||||
onMouseMove: function(ev, coords) { },
|
||||
onStartDrag: function(ev, coords) { return false; }, //this image will not be dragged
|
||||
onDrag: function(ev, coords) { }
|
||||
});
|
||||
|
||||
$("#in").click(function(){ iv1.iviewer('zoom_by', 1); });
|
||||
$("#out").click(function(){ iv1.iviewer('zoom_by', -1); });
|
||||
$("#fit").click(function(){ iv1.iviewer('fit'); });
|
||||
$("#orig").click(function(){ iv1.iviewer('set_zoom', 100); });
|
||||
$("#update").click(function(){ iv1.iviewer('update_container_info'); });
|
||||
|
||||
var iv2 = $("#viewer2").iviewer(
|
||||
{
|
||||
src: "test_image2.jpg"
|
||||
});
|
||||
|
||||
$("#chimg").click(function()
|
||||
{
|
||||
iv2.iviewer('loadImage', "test_image.jpg");
|
||||
return false;
|
||||
});
|
||||
|
||||
var fill = false;
|
||||
$("#fill").click(function()
|
||||
{
|
||||
fill = !fill;
|
||||
iv2.iviewer('fill_container', fill);
|
||||
return false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<link rel="stylesheet" href="../jquery.iviewer.css" />
|
||||
<style>
|
||||
.viewer
|
||||
{
|
||||
width: 50%;
|
||||
height: 500px;
|
||||
border: 1px solid black;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.wrapper
|
||||
{
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>JQuery.iviewer test</h1>
|
||||
<!-- wrapper div is needed for opera because it shows scroll bars for reason -->
|
||||
<div class="wrapper">
|
||||
<span>
|
||||
<a id="in" href="#">+</a>
|
||||
<a id="out" href="#">-</a>
|
||||
<a id="fit" href="#">fit</a>
|
||||
<a id="orig" href="#">orig</a>
|
||||
<a id="update" href="#">update</a>
|
||||
</span>
|
||||
<div id="viewer" class="viewer"></div>
|
||||
<br />
|
||||
<div id="viewer2" class="viewer" style="width: 80%;"></div>
|
||||
<br />
|
||||
<p>
|
||||
<a href="#" id="chimg">Change Image</a>
|
||||
<a href="#" id="fill">Fill container</a>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
173
web/js/iviewer/test/index3.html
Normal file
|
@ -0,0 +1,173 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<title>jquery.iviewer test</title>
|
||||
<script type="text/javascript" src="jquery.js" ></script>
|
||||
<script type="text/javascript" src="jqueryui.js" ></script>
|
||||
<script type="text/javascript" src="jquery.mousewheel.min.js" ></script>
|
||||
<script type="text/javascript" src="../jquery.iviewer.js" ></script>
|
||||
<script type="text/javascript">
|
||||
jQuery(function($){
|
||||
|
||||
var viewer;
|
||||
|
||||
function isInCircle(x, y) {
|
||||
var relative_x = x - this.x;
|
||||
var relative_y = y - this.y;
|
||||
return Math.sqrt(relative_x*relative_x + relative_y*relative_y) <= this.r;
|
||||
}
|
||||
|
||||
function isInRectangle(x, y) {
|
||||
return (this.x1 <= x && x <= this.x2) && (this.y1 <= y && y<= this.y2);
|
||||
}
|
||||
|
||||
function getCircleCenter() { return {x: this.x, y: this.y}; }
|
||||
|
||||
function getRectangleCenter() { return {x: (this.x2+this.x1)/2, y: (this.y2+this.y1)/2}; }
|
||||
|
||||
var objects = [
|
||||
{x: 100, y: 100, r: 50, isInObject: isInCircle, title: 'big circle', getCenter: getCircleCenter },
|
||||
{x: 150, y: 250, r: 35, isInObject: isInCircle, title: 'middle circle', getCenter: getCircleCenter },
|
||||
{x: 500, y: 300, r: 10, isInObject: isInCircle, title: 'small circle', getCenter: getCircleCenter },
|
||||
{x1: 200, y1: 400, x2: 300, y2: 500, isInObject: isInRectangle, title: 'rectangle', getCenter: getRectangleCenter }
|
||||
]
|
||||
|
||||
function whereIam(x, y) {
|
||||
for (var i=0; i<objects.length; i++) {
|
||||
var obj = objects[i];
|
||||
if (obj.isInObject(x, y))
|
||||
return obj;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function showMe(ev, a) {
|
||||
$.each(objects, function(i, object) {
|
||||
if (object.title == $(a).html()) {
|
||||
var center = object.getCenter();
|
||||
var offset = viewer.iviewer('imageToContainer', center.x, center.y);
|
||||
var containerOffset = viewer.iviewer('getContainerOffset');
|
||||
var pointer = $('#pointer');
|
||||
offset.x += containerOffset.left - 20;
|
||||
offset.y += containerOffset.top - 40;
|
||||
pointer.css('display', 'block');
|
||||
pointer.css('left', offset.x+'px');
|
||||
pointer.css('top', offset.y+'px');
|
||||
}
|
||||
});
|
||||
|
||||
ev.preventDefault();
|
||||
}
|
||||
|
||||
window.showMe = showMe;
|
||||
|
||||
viewer = $("#viewer1").iviewer({
|
||||
src: "test_active_with_objects.GIF",
|
||||
|
||||
onClick: function(ev, coords) {
|
||||
var object = whereIam(coords.x, coords.y);
|
||||
|
||||
if (object)
|
||||
alert('Clicked at ('+coords.x+', '+coords.y+'). This is '+object.title);
|
||||
},
|
||||
|
||||
onMouseMove: function(ev, coords) {
|
||||
var object = whereIam(coords.x, coords.y);
|
||||
|
||||
if (object) {
|
||||
$('#status').html('You are in ('+coords.x.toFixed(1)+', '+coords.y.toFixed(1)+'). This is '+object.title);
|
||||
this.container.css('cursor', 'crosshair');
|
||||
} else {
|
||||
$('#status').html('You are in ('+coords.x.toFixed(1)+', '+coords.y.toFixed(1)+'). This is empty space');
|
||||
this.container.css('cursor', null);
|
||||
}
|
||||
},
|
||||
|
||||
onBeforeDrag: function(ev, coords) {
|
||||
// remove pointer if image is getting moving
|
||||
// because it's not actual anymore
|
||||
$('#pointer').css('display', 'none');
|
||||
// forbid dragging when cursor is whithin the object
|
||||
return whereIam(coords.x, coords.y) ? false : true;
|
||||
},
|
||||
|
||||
onZoom: function(ev) {
|
||||
// remove pointer if image is resizing
|
||||
// because it's not actual anymore
|
||||
$('#pointer').css('display', 'none');
|
||||
},
|
||||
|
||||
initCallback: function(ev) {
|
||||
this.container.context.iviewer = this;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<link rel="stylesheet" href="../jquery.iviewer.css" />
|
||||
<style>
|
||||
html, body {
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.viewer
|
||||
{
|
||||
height: 100%;
|
||||
position: relative;
|
||||
background-color: lightgreen;
|
||||
}
|
||||
|
||||
.wrapper
|
||||
{
|
||||
border: 1px solid black;
|
||||
|
||||
position: absolute;
|
||||
top: 5em;
|
||||
left: 1em;
|
||||
bottom: 1em;
|
||||
right: 1em;
|
||||
|
||||
overflow: hidden; /*for opera*/
|
||||
}
|
||||
|
||||
.toolbar
|
||||
{
|
||||
border: 1px solid black;
|
||||
|
||||
position: absolute;
|
||||
top: 1em;
|
||||
left: 1em;
|
||||
right: 1em;
|
||||
height: 3em;
|
||||
}
|
||||
|
||||
#pointer
|
||||
{
|
||||
background-image: url('arrow.png');
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
position: absolute;
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="toolbar">
|
||||
<span id="status"></span>|Show me:
|
||||
<a href="#" onclick="showMe(event, this)">big circle</a>,
|
||||
<a href="#" onclick="showMe(event, this)">middle circle</a>,
|
||||
<a href="#" onclick="showMe(event, this)">small circle</a>,
|
||||
<a href="#" onclick="showMe(event, this)">rectangle</a>
|
||||
</div>
|
||||
|
||||
<div class="wrapper">
|
||||
<div id="viewer1" class="viewer"></div>
|
||||
</div>
|
||||
|
||||
<div id="pointer"></div>
|
||||
</body>
|
||||
</html>
|
5
web/js/iviewer/test/jquery.js
vendored
Normal file
107
web/js/iviewer/test/jquery.mousewheel.js
Normal file
|
@ -0,0 +1,107 @@
|
|||
/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net)
|
||||
* Licensed under the MIT License (LICENSE.txt).
|
||||
*
|
||||
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
||||
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
||||
* Thanks to: Seamus Leahy for adding deltaX and deltaY
|
||||
*
|
||||
* Version: 3.1.1
|
||||
*
|
||||
* Requires: 1.2.2+
|
||||
*/
|
||||
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define(['jquery'], factory);
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
|
||||
var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll'];
|
||||
var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'];
|
||||
var lowestDelta, lowestDeltaXY;
|
||||
|
||||
if ($.event.fixHooks) {
|
||||
for ( var i=toFix.length; i; ) {
|
||||
$.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
|
||||
}
|
||||
}
|
||||
|
||||
$.event.special.mousewheel = {
|
||||
setup: function() {
|
||||
if ( this.addEventListener ) {
|
||||
for ( var i=toBind.length; i; ) {
|
||||
this.addEventListener( toBind[--i], handler, false );
|
||||
}
|
||||
} else {
|
||||
this.onmousewheel = handler;
|
||||
}
|
||||
},
|
||||
|
||||
teardown: function() {
|
||||
if ( this.removeEventListener ) {
|
||||
for ( var i=toBind.length; i; ) {
|
||||
this.removeEventListener( toBind[--i], handler, false );
|
||||
}
|
||||
} else {
|
||||
this.onmousewheel = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.extend({
|
||||
mousewheel: function(fn) {
|
||||
return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
|
||||
},
|
||||
|
||||
unmousewheel: function(fn) {
|
||||
return this.unbind("mousewheel", fn);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function handler(event) {
|
||||
var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0, fn;
|
||||
event = $.event.fix(orgEvent);
|
||||
event.type = "mousewheel";
|
||||
|
||||
// Old school scrollwheel delta
|
||||
if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; }
|
||||
if ( orgEvent.detail ) { delta = orgEvent.detail * -1; }
|
||||
|
||||
// New school wheel delta (wheel event)
|
||||
if ( orgEvent.deltaY ) {
|
||||
deltaY = orgEvent.deltaY * -1;
|
||||
delta = deltaY;
|
||||
}
|
||||
if ( orgEvent.deltaX ) {
|
||||
deltaX = orgEvent.deltaX;
|
||||
delta = deltaX * -1;
|
||||
}
|
||||
|
||||
// Webkit
|
||||
if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; }
|
||||
if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; }
|
||||
|
||||
// Look for lowest delta to normalize the delta values
|
||||
absDelta = Math.abs(delta);
|
||||
if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; }
|
||||
absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
|
||||
if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; }
|
||||
|
||||
// Get a whole value for the deltas
|
||||
fn = delta > 0 ? 'floor' : 'ceil';
|
||||
delta = Math[fn](delta/lowestDelta);
|
||||
deltaX = Math[fn](deltaX/lowestDeltaXY);
|
||||
deltaY = Math[fn](deltaY/lowestDeltaXY);
|
||||
|
||||
// Add event and delta to the front of the arguments
|
||||
args.unshift(event, delta, deltaX, deltaY);
|
||||
|
||||
return ($.event.dispatch || $.event.handle).apply(this, args);
|
||||
}
|
||||
|
||||
}));
|
13
web/js/iviewer/test/jquery.mousewheel.min.js
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
|
||||
* Licensed under the MIT License (LICENSE.txt).
|
||||
*
|
||||
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
|
||||
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
|
||||
* Thanks to: Seamus Leahy for adding deltaX and deltaY
|
||||
*
|
||||
* Version: 3.0.6
|
||||
*
|
||||
* Requires: 1.2.2+
|
||||
*/
|
||||
(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;b.axis!==void 0&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);b.wheelDeltaY!==void 0&&(g=b.wheelDeltaY/120);b.wheelDeltaX!==void 0&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]=
|
||||
d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,false);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
|
50
web/js/iviewer/test/jqueryui.js
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*!
|
||||
* jQuery UI 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI
|
||||
*/
|
||||
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.11",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
|
||||
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
|
||||
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
|
||||
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
|
||||
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
|
||||
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
|
||||
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
|
||||
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
|
||||
;/*!
|
||||
* jQuery UI Widget 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Widget
|
||||
*/
|
||||
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
|
||||
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
|
||||
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
|
||||
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
|
||||
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
|
||||
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
|
||||
;/*!
|
||||
* jQuery UI Mouse 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Mouse
|
||||
*
|
||||
* Depends:
|
||||
* jquery.ui.widget.js
|
||||
*/
|
||||
(function(b){b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
|
||||
a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,e=a.which==1,f=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
|
||||
this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(d){return c._mouseMove(d)};this._mouseUpDelegate=function(d){return c._mouseUp(d)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=
|
||||
true}},_mouseMove:function(a){if(b.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);
|
||||
if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
|
||||
;
|
BIN
web/js/iviewer/test/lightbox-gallery/img/bg_transblack.png
Normal file
After Width: | Height: | Size: 932 B |
BIN
web/js/iviewer/test/lightbox-gallery/img/btn_close.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
web/js/iviewer/test/lightbox-gallery/img/btn_next.png
Normal file
After Width: | Height: | Size: 374 B |
BIN
web/js/iviewer/test/lightbox-gallery/img/btn_prev.png
Normal file
After Width: | Height: | Size: 371 B |
BIN
web/js/iviewer/test/lightbox-gallery/img/btn_zoomin.png
Normal file
After Width: | Height: | Size: 970 B |
BIN
web/js/iviewer/test/lightbox-gallery/img/btn_zoomout.png
Normal file
After Width: | Height: | Size: 959 B |
BIN
web/js/iviewer/test/lightbox-gallery/img/spinner.gif
Normal file
After Width: | Height: | Size: 7.4 KiB |
48
web/js/iviewer/test/lightbox-gallery/index.html
Normal file
|
@ -0,0 +1,48 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>iViewer lightbox example</title>
|
||||
<!-- Lightbox example by Hay Kranen < http://github.com/hay > -->
|
||||
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
<link rel="stylesheet" href="../../jquery.iviewer.css" />
|
||||
<!--[if lt IE 9 ]>
|
||||
<style>
|
||||
/* IE < 9 doesn't display the image for strange reasons... */
|
||||
#iviewer .viewer {
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<a class="go" href="../test_image.jpg" rel="gallery">Show lightbox!</a>
|
||||
<br />
|
||||
<a class="go" href="../test_image2.jpg" rel="gallery">Show another lightbox!</a>
|
||||
|
||||
<div id="iviewer">
|
||||
<div class="loader"></div>
|
||||
|
||||
<div class="viewer"></div>
|
||||
|
||||
<ul class="controls">
|
||||
<li class="close"></li>
|
||||
<li class="zoomin"></li>
|
||||
<li class="zoomout"></li>
|
||||
</ul>
|
||||
|
||||
<div class="info" >
|
||||
<a href="#" id="prevLink" class="go" style="width: 40px;"><img src="img/btn_prev.png"></a>
|
||||
<p id="imageCount"></p>
|
||||
<a href="#" id="nextLink" class="go" style="width: 40px;"><img src="img/btn_next.png"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="../jquery.js" ></script>
|
||||
<script type="text/javascript" src="../jqueryui.js" ></script>
|
||||
<script type="text/javascript" src="../jquery.mousewheel.min.js" ></script>
|
||||
<script type="text/javascript" src="../../jquery.iviewer.js" ></script>
|
||||
<script src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
123
web/js/iviewer/test/lightbox-gallery/main.js
Normal file
|
@ -0,0 +1,123 @@
|
|||
(function($) {
|
||||
var gallery = new Array();
|
||||
function init() {
|
||||
var viewer = $("#iviewer .viewer").
|
||||
width($(window).width() - 80).
|
||||
height($(window).height()).
|
||||
iviewer({
|
||||
ui_disabled : true,
|
||||
zoom : 'fit',
|
||||
onFinishLoad : function(ev) {
|
||||
$("#iviewer .loader").fadeOut();
|
||||
$("#iviewer .viewer").fadeIn();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$("#iviewer .zoomin").click(function(e) {
|
||||
e.preventDefault();
|
||||
viewer.iviewer('zoom_by', 1);
|
||||
});
|
||||
|
||||
$("#iviewer .zoomout").click(function(e) {
|
||||
e.preventDefault();
|
||||
viewer.iviewer('zoom_by', -1);
|
||||
});
|
||||
|
||||
/*
|
||||
* Populate gallery array.
|
||||
* NOTE: In order to add image to gallery, Anchor tag of images that are to be opened in lightbox, should have attribute 'rel' set to 'gallery'.
|
||||
*/
|
||||
$( "a[rel='gallery']" ).each(function( index ) {
|
||||
gallery[index] = $( this ).attr("href");
|
||||
});
|
||||
}
|
||||
|
||||
function open(src) {
|
||||
$("#iviewer").fadeIn().trigger('fadein');
|
||||
$("#iviewer .loader").show();
|
||||
$("#iviewer .viewer").hide();
|
||||
|
||||
var viewer = $("#iviewer .viewer")
|
||||
.iviewer('loadImage', src)
|
||||
.iviewer('set_zoom', 'fit');
|
||||
}
|
||||
|
||||
function close() {
|
||||
$("#iviewer").fadeOut().trigger('fadeout');
|
||||
}
|
||||
|
||||
$('.go').click(function(e) {
|
||||
e.preventDefault();
|
||||
var src = $(this).attr('href');
|
||||
open(src);
|
||||
// Refresh next and prev links
|
||||
refreshNextPrevLinks(src);
|
||||
});
|
||||
|
||||
$("#iviewer .close").click(function(e) {
|
||||
e.preventDefault();
|
||||
close();
|
||||
});
|
||||
|
||||
$("#iviewer").bind('fadein', function() {
|
||||
$(window).keydown(function(e) {
|
||||
if (e.which == 27) close();
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* refreshNextPrevLinks() refreshes Next and previous links
|
||||
*/
|
||||
function refreshNextPrevLinks(src){
|
||||
console.log('RefreshNextPrevLinks called. src: '+src);
|
||||
var imageIndex = 0;
|
||||
//Iterate over gallery and find the index of current image.
|
||||
for (i=0;i<gallery.length;i++)
|
||||
{
|
||||
if(src == gallery[i]){
|
||||
imageIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
//Setting Next link
|
||||
var nextLink = document.getElementById('nextLink');
|
||||
if(gallery.length > imageIndex+1){
|
||||
nextLink.href = gallery[imageIndex+1];
|
||||
nextLink.style.visibility = 'visible';
|
||||
}else{
|
||||
nextLink.href = "#";
|
||||
nextLink.style.visibility = 'hidden';
|
||||
}
|
||||
|
||||
//Setting Prev link
|
||||
var prevLink = document.getElementById('prevLink');
|
||||
if(imageIndex > 0){
|
||||
prevLink.href = gallery[imageIndex-1];
|
||||
prevLink.style.visibility = 'visible';
|
||||
}else{
|
||||
prevLink.setAttribute("href", "#");
|
||||
prevLink.style.visibility = 'hidden';
|
||||
}
|
||||
|
||||
document.getElementById('imageCount').innerHTML= "Image: "+ (imageIndex+1) + "/" + gallery.length;
|
||||
}
|
||||
|
||||
//Binding keypress event of left arrow and right arrow button. Image would be changed, if right arrow or left arrow button is pressed.
|
||||
$(document).keyup(function(e) {
|
||||
//left arrow key
|
||||
if (e.keyCode == 37) {
|
||||
if($("#prevLink").attr("href") != "#"){
|
||||
$("#prevLink").click();
|
||||
}
|
||||
}
|
||||
//right arrow
|
||||
if (e.keyCode == 39) {
|
||||
if($("#nextLink").attr("href") != "#"){
|
||||
$("#nextLink").click();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
init();
|
||||
})(jQuery);
|
4
web/js/iviewer/test/lightbox-gallery/readme.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
lightbox-gallery created under test project, to provide gallery option in lightbox+iviewer intergation.
|
||||
|
||||
Using lightbox-gallery, all images that are in gallery will be grouped, so that navigation from one image to other is possible from lightbox itself.
|
||||
Anchors tag of image that are to be added in gallery, shuld have attribute rel="gallery".
|
79
web/js/iviewer/test/lightbox-gallery/style.css
Normal file
|
@ -0,0 +1,79 @@
|
|||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#iviewer {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: url('img/bg_transblack.png');
|
||||
display: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#iviewer .controls {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
#iviewer .controls li {
|
||||
float: right;
|
||||
clear: right;
|
||||
position: relative;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
#iviewer .controls:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#iviewer .controls .close { background-image: url('img/btn_close.png'); }
|
||||
#iviewer .controls .zoomin { background-image: url('img/btn_zoomin.png'); }
|
||||
#iviewer .controls .zoomout { background-image: url('img/btn_zoomout.png'); }
|
||||
#iviewer .controls .next { background-image: url('img/btn_next.png'); }
|
||||
|
||||
#iviewer .info {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 300px;
|
||||
left: 50%;
|
||||
margin-left: -150px;
|
||||
display: block;
|
||||
text-align:center;
|
||||
color: #ccc;
|
||||
font-size: 18px;
|
||||
padding: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#iviewer .info p {
|
||||
display:inline;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#iviewer .viewer {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 40px;
|
||||
z-index: 2;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#iviewer .loader {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('img/spinner.gif') no-repeat center center;
|
||||
z-index: 2;
|
||||
}
|
BIN
web/js/iviewer/test/lightbox/img/bg_transblack.png
Normal file
After Width: | Height: | Size: 932 B |
BIN
web/js/iviewer/test/lightbox/img/btn_close.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
web/js/iviewer/test/lightbox/img/btn_zoomin.png
Normal file
After Width: | Height: | Size: 970 B |
BIN
web/js/iviewer/test/lightbox/img/btn_zoomout.png
Normal file
After Width: | Height: | Size: 959 B |
BIN
web/js/iviewer/test/lightbox/img/spinner.gif
Normal file
After Width: | Height: | Size: 7.4 KiB |
47
web/js/iviewer/test/lightbox/index.html
Normal file
|
@ -0,0 +1,47 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>iViewer lightbox example</title>
|
||||
<!-- Lightbox example by Hay Kranen < http://github.com/hay > -->
|
||||
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
|
||||
<!--[if lt IE 9 ]>
|
||||
<style>
|
||||
/* IE < 9 doesn't display the image for strange reasons... */
|
||||
#iviewer .viewer {
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<a class="go" href="../test_image.jpg">Show lightbox!</a>
|
||||
<br />
|
||||
<a class="go" href="../test_image2.jpg">Show another lightbox!</a>
|
||||
|
||||
<div id="iviewer">
|
||||
<div class="loader"></div>
|
||||
|
||||
<div class="viewer"></div>
|
||||
|
||||
<ul class="controls">
|
||||
<li class="close"></li>
|
||||
<li class="zoomin"></li>
|
||||
<li class="zoomout"></li>
|
||||
</ul>
|
||||
|
||||
<p class="info">
|
||||
Use your scrollwheel or the zoom buttons to zoom in/out.
|
||||
Click and drag to view other parts of the image when zoomed.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="../jquery.js" ></script>
|
||||
<script type="text/javascript" src="../jqueryui.js" ></script>
|
||||
<script type="text/javascript" src="../jquery.mousewheel.min.js" ></script>
|
||||
<script type="text/javascript" src="../../jquery.iviewer.js" ></script>
|
||||
<script src="main.js"></script>
|
||||
</body>
|
||||
</html>
|
59
web/js/iviewer/test/lightbox/main.js
Normal file
|
@ -0,0 +1,59 @@
|
|||
(function($) {
|
||||
function init() {
|
||||
var viewer = $("#iviewer .viewer").
|
||||
width($(window).width() - 80).
|
||||
height($(window).height()).
|
||||
iviewer({
|
||||
ui_disabled : true,
|
||||
zoom : 'fit',
|
||||
onFinishLoad : function(ev) {
|
||||
$("#iviewer .loader").fadeOut();
|
||||
$("#iviewer .viewer").fadeIn();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
$("#iviewer .zoomin").click(function(e) {
|
||||
e.preventDefault();
|
||||
viewer.iviewer('zoom_by', 1);
|
||||
});
|
||||
|
||||
$("#iviewer .zoomout").click(function(e) {
|
||||
e.preventDefault();
|
||||
viewer.iviewer('zoom_by', -1);
|
||||
});
|
||||
}
|
||||
|
||||
function open(src) {
|
||||
$("#iviewer").fadeIn().trigger('fadein');
|
||||
$("#iviewer .loader").show();
|
||||
$("#iviewer .viewer").hide();
|
||||
|
||||
var viewer = $("#iviewer .viewer")
|
||||
.iviewer('loadImage', src)
|
||||
.iviewer('set_zoom', 'fit');
|
||||
}
|
||||
|
||||
function close() {
|
||||
$("#iviewer").fadeOut().trigger('fadeout');
|
||||
}
|
||||
|
||||
$('.go').click(function(e) {
|
||||
e.preventDefault();
|
||||
var src = $(this).attr('href');
|
||||
open(src);
|
||||
});
|
||||
|
||||
$("#iviewer .close").click(function(e) {
|
||||
e.preventDefault();
|
||||
close();
|
||||
});
|
||||
|
||||
$("#iviewer").bind('fadein', function() {
|
||||
$(window).keydown(function(e) {
|
||||
if (e.which == 27) close();
|
||||
});
|
||||
});
|
||||
|
||||
init();
|
||||
})(jQuery);
|
69
web/js/iviewer/test/lightbox/style.css
Normal file
|
@ -0,0 +1,69 @@
|
|||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#iviewer {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: url('img/bg_transblack.png');
|
||||
display: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#iviewer .controls {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
#iviewer .controls li {
|
||||
float: right;
|
||||
clear: right;
|
||||
position: relative;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
#iviewer .controls:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#iviewer .controls .close { background-image: url('img/btn_close.png'); }
|
||||
#iviewer .controls .zoomin { background-image: url('img/btn_zoomin.png'); }
|
||||
#iviewer .controls .zoomout { background-image: url('img/btn_zoomout.png'); }
|
||||
|
||||
#iviewer .info {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
color: #ccc;
|
||||
font-size: 16px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#iviewer .viewer {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 40px;
|
||||
z-index: 2;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#iviewer .loader {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('img/spinner.gif') no-repeat center center;
|
||||
z-index: 2;
|
||||
}
|
BIN
web/js/iviewer/test/test_active_with_objects.GIF
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
web/js/iviewer/test/test_image.jpg
Normal file
After Width: | Height: | Size: 136 KiB |
BIN
web/js/iviewer/test/test_image2.jpg
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
web/js/iviewer/test/test_image3.jpg
Normal file
After Width: | Height: | Size: 78 KiB |
308
web/js/iviewer/test/ui/jquery.ui.core.js
vendored
Normal file
|
@ -0,0 +1,308 @@
|
|||
/*!
|
||||
* jQuery UI 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
// prevent duplicate loading
|
||||
// this is only a problem because we proxy existing functions
|
||||
// and we don't want to double proxy them
|
||||
$.ui = $.ui || {};
|
||||
if ( $.ui.version ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.extend( $.ui, {
|
||||
version: "1.8.11",
|
||||
|
||||
keyCode: {
|
||||
ALT: 18,
|
||||
BACKSPACE: 8,
|
||||
CAPS_LOCK: 20,
|
||||
COMMA: 188,
|
||||
COMMAND: 91,
|
||||
COMMAND_LEFT: 91, // COMMAND
|
||||
COMMAND_RIGHT: 93,
|
||||
CONTROL: 17,
|
||||
DELETE: 46,
|
||||
DOWN: 40,
|
||||
END: 35,
|
||||
ENTER: 13,
|
||||
ESCAPE: 27,
|
||||
HOME: 36,
|
||||
INSERT: 45,
|
||||
LEFT: 37,
|
||||
MENU: 93, // COMMAND_RIGHT
|
||||
NUMPAD_ADD: 107,
|
||||
NUMPAD_DECIMAL: 110,
|
||||
NUMPAD_DIVIDE: 111,
|
||||
NUMPAD_ENTER: 108,
|
||||
NUMPAD_MULTIPLY: 106,
|
||||
NUMPAD_SUBTRACT: 109,
|
||||
PAGE_DOWN: 34,
|
||||
PAGE_UP: 33,
|
||||
PERIOD: 190,
|
||||
RIGHT: 39,
|
||||
SHIFT: 16,
|
||||
SPACE: 32,
|
||||
TAB: 9,
|
||||
UP: 38,
|
||||
WINDOWS: 91 // COMMAND
|
||||
}
|
||||
});
|
||||
|
||||
// plugins
|
||||
$.fn.extend({
|
||||
_focus: $.fn.focus,
|
||||
focus: function( delay, fn ) {
|
||||
return typeof delay === "number" ?
|
||||
this.each(function() {
|
||||
var elem = this;
|
||||
setTimeout(function() {
|
||||
$( elem ).focus();
|
||||
if ( fn ) {
|
||||
fn.call( elem );
|
||||
}
|
||||
}, delay );
|
||||
}) :
|
||||
this._focus.apply( this, arguments );
|
||||
},
|
||||
|
||||
scrollParent: function() {
|
||||
var scrollParent;
|
||||
if (($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
|
||||
scrollParent = this.parents().filter(function() {
|
||||
return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
|
||||
}).eq(0);
|
||||
} else {
|
||||
scrollParent = this.parents().filter(function() {
|
||||
return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
|
||||
}).eq(0);
|
||||
}
|
||||
|
||||
return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
|
||||
},
|
||||
|
||||
zIndex: function( zIndex ) {
|
||||
if ( zIndex !== undefined ) {
|
||||
return this.css( "zIndex", zIndex );
|
||||
}
|
||||
|
||||
if ( this.length ) {
|
||||
var elem = $( this[ 0 ] ), position, value;
|
||||
while ( elem.length && elem[ 0 ] !== document ) {
|
||||
// Ignore z-index if position is set to a value where z-index is ignored by the browser
|
||||
// This makes behavior of this function consistent across browsers
|
||||
// WebKit always returns auto if the element is positioned
|
||||
position = elem.css( "position" );
|
||||
if ( position === "absolute" || position === "relative" || position === "fixed" ) {
|
||||
// IE returns 0 when zIndex is not specified
|
||||
// other browsers return a string
|
||||
// we ignore the case of nested elements with an explicit value of 0
|
||||
// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
|
||||
value = parseInt( elem.css( "zIndex" ), 10 );
|
||||
if ( !isNaN( value ) && value !== 0 ) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
elem = elem.parent();
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
},
|
||||
|
||||
disableSelection: function() {
|
||||
return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) +
|
||||
".ui-disableSelection", function( event ) {
|
||||
event.preventDefault();
|
||||
});
|
||||
},
|
||||
|
||||
enableSelection: function() {
|
||||
return this.unbind( ".ui-disableSelection" );
|
||||
}
|
||||
});
|
||||
|
||||
$.each( [ "Width", "Height" ], function( i, name ) {
|
||||
var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
|
||||
type = name.toLowerCase(),
|
||||
orig = {
|
||||
innerWidth: $.fn.innerWidth,
|
||||
innerHeight: $.fn.innerHeight,
|
||||
outerWidth: $.fn.outerWidth,
|
||||
outerHeight: $.fn.outerHeight
|
||||
};
|
||||
|
||||
function reduce( elem, size, border, margin ) {
|
||||
$.each( side, function() {
|
||||
size -= parseFloat( $.curCSS( elem, "padding" + this, true) ) || 0;
|
||||
if ( border ) {
|
||||
size -= parseFloat( $.curCSS( elem, "border" + this + "Width", true) ) || 0;
|
||||
}
|
||||
if ( margin ) {
|
||||
size -= parseFloat( $.curCSS( elem, "margin" + this, true) ) || 0;
|
||||
}
|
||||
});
|
||||
return size;
|
||||
}
|
||||
|
||||
$.fn[ "inner" + name ] = function( size ) {
|
||||
if ( size === undefined ) {
|
||||
return orig[ "inner" + name ].call( this );
|
||||
}
|
||||
|
||||
return this.each(function() {
|
||||
$( this ).css( type, reduce( this, size ) + "px" );
|
||||
});
|
||||
};
|
||||
|
||||
$.fn[ "outer" + name] = function( size, margin ) {
|
||||
if ( typeof size !== "number" ) {
|
||||
return orig[ "outer" + name ].call( this, size );
|
||||
}
|
||||
|
||||
return this.each(function() {
|
||||
$( this).css( type, reduce( this, size, true, margin ) + "px" );
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
// selectors
|
||||
function visible( element ) {
|
||||
return !$( element ).parents().andSelf().filter(function() {
|
||||
return $.curCSS( this, "visibility" ) === "hidden" ||
|
||||
$.expr.filters.hidden( this );
|
||||
}).length;
|
||||
}
|
||||
|
||||
$.extend( $.expr[ ":" ], {
|
||||
data: function( elem, i, match ) {
|
||||
return !!$.data( elem, match[ 3 ] );
|
||||
},
|
||||
|
||||
focusable: function( element ) {
|
||||
var nodeName = element.nodeName.toLowerCase(),
|
||||
tabIndex = $.attr( element, "tabindex" );
|
||||
if ( "area" === nodeName ) {
|
||||
var map = element.parentNode,
|
||||
mapName = map.name,
|
||||
img;
|
||||
if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
|
||||
return false;
|
||||
}
|
||||
img = $( "img[usemap=#" + mapName + "]" )[0];
|
||||
return !!img && visible( img );
|
||||
}
|
||||
return ( /input|select|textarea|button|object/.test( nodeName )
|
||||
? !element.disabled
|
||||
: "a" == nodeName
|
||||
? element.href || !isNaN( tabIndex )
|
||||
: !isNaN( tabIndex ))
|
||||
// the element and all of its ancestors must be visible
|
||||
&& visible( element );
|
||||
},
|
||||
|
||||
tabbable: function( element ) {
|
||||
var tabIndex = $.attr( element, "tabindex" );
|
||||
return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" );
|
||||
}
|
||||
});
|
||||
|
||||
// support
|
||||
$(function() {
|
||||
var body = document.body,
|
||||
div = body.appendChild( div = document.createElement( "div" ) );
|
||||
|
||||
$.extend( div.style, {
|
||||
minHeight: "100px",
|
||||
height: "auto",
|
||||
padding: 0,
|
||||
borderWidth: 0
|
||||
});
|
||||
|
||||
$.support.minHeight = div.offsetHeight === 100;
|
||||
$.support.selectstart = "onselectstart" in div;
|
||||
|
||||
// set display to none to avoid a layout bug in IE
|
||||
// http://dev.jquery.com/ticket/4014
|
||||
body.removeChild( div ).style.display = "none";
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// deprecated
|
||||
$.extend( $.ui, {
|
||||
// $.ui.plugin is deprecated. Use the proxy pattern instead.
|
||||
plugin: {
|
||||
add: function( module, option, set ) {
|
||||
var proto = $.ui[ module ].prototype;
|
||||
for ( var i in set ) {
|
||||
proto.plugins[ i ] = proto.plugins[ i ] || [];
|
||||
proto.plugins[ i ].push( [ option, set[ i ] ] );
|
||||
}
|
||||
},
|
||||
call: function( instance, name, args ) {
|
||||
var set = instance.plugins[ name ];
|
||||
if ( !set || !instance.element[ 0 ].parentNode ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( var i = 0; i < set.length; i++ ) {
|
||||
if ( instance.options[ set[ i ][ 0 ] ] ) {
|
||||
set[ i ][ 1 ].apply( instance.element, args );
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// will be deprecated when we switch to jQuery 1.4 - use jQuery.contains()
|
||||
contains: function( a, b ) {
|
||||
return document.compareDocumentPosition ?
|
||||
a.compareDocumentPosition( b ) & 16 :
|
||||
a !== b && a.contains( b );
|
||||
},
|
||||
|
||||
// only used by resizable
|
||||
hasScroll: function( el, a ) {
|
||||
|
||||
//If overflow is hidden, the element might have extra content, but the user wants to hide it
|
||||
if ( $( el ).css( "overflow" ) === "hidden") {
|
||||
return false;
|
||||
}
|
||||
|
||||
var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
|
||||
has = false;
|
||||
|
||||
if ( el[ scroll ] > 0 ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: determine which cases actually cause this to happen
|
||||
// if the element doesn't have the scroll set, see if it's possible to
|
||||
// set the scroll
|
||||
el[ scroll ] = 1;
|
||||
has = ( el[ scroll ] > 0 );
|
||||
el[ scroll ] = 0;
|
||||
return has;
|
||||
},
|
||||
|
||||
// these are odd functions, fix the API or move into individual plugins
|
||||
isOverAxis: function( x, reference, size ) {
|
||||
//Determines when x coordinate is over "b" element axis
|
||||
return ( x > reference ) && ( x < ( reference + size ) );
|
||||
},
|
||||
isOver: function( y, x, top, left, height, width ) {
|
||||
//Determines when x, y coordinates is over "b" element
|
||||
return $.ui.isOverAxis( y, top, height ) && $.ui.isOverAxis( x, left, width );
|
||||
}
|
||||
});
|
||||
|
||||
})( jQuery );
|
156
web/js/iviewer/test/ui/jquery.ui.mouse.js
vendored
Normal file
|
@ -0,0 +1,156 @@
|
|||
/*!
|
||||
* jQuery UI Mouse 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Mouse
|
||||
*
|
||||
* Depends:
|
||||
* jquery.ui.widget.js
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
$.widget("ui.mouse", {
|
||||
options: {
|
||||
cancel: ':input,option',
|
||||
distance: 1,
|
||||
delay: 0
|
||||
},
|
||||
_mouseInit: function() {
|
||||
var self = this;
|
||||
|
||||
this.element
|
||||
.bind('mousedown.'+this.widgetName, function(event) {
|
||||
return self._mouseDown(event);
|
||||
})
|
||||
.bind('click.'+this.widgetName, function(event) {
|
||||
if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) {
|
||||
$.removeData(event.target, self.widgetName + '.preventClickEvent');
|
||||
event.stopImmediatePropagation();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
this.started = false;
|
||||
},
|
||||
|
||||
// TODO: make sure destroying one instance of mouse doesn't mess with
|
||||
// other instances of mouse
|
||||
_mouseDestroy: function() {
|
||||
this.element.unbind('.'+this.widgetName);
|
||||
},
|
||||
|
||||
_mouseDown: function(event) {
|
||||
// don't let more than one widget handle mouseStart
|
||||
// TODO: figure out why we have to use originalEvent
|
||||
event.originalEvent = event.originalEvent || {};
|
||||
if (event.originalEvent.mouseHandled) { return; }
|
||||
|
||||
// we may have missed mouseup (out of window)
|
||||
(this._mouseStarted && this._mouseUp(event));
|
||||
|
||||
this._mouseDownEvent = event;
|
||||
|
||||
var self = this,
|
||||
btnIsLeft = (event.which == 1),
|
||||
elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
|
||||
if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
this.mouseDelayMet = !this.options.delay;
|
||||
if (!this.mouseDelayMet) {
|
||||
this._mouseDelayTimer = setTimeout(function() {
|
||||
self.mouseDelayMet = true;
|
||||
}, this.options.delay);
|
||||
}
|
||||
|
||||
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
|
||||
this._mouseStarted = (this._mouseStart(event) !== false);
|
||||
if (!this._mouseStarted) {
|
||||
event.preventDefault();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Click event may never have fired (Gecko & Opera)
|
||||
if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
|
||||
$.removeData(event.target, this.widgetName + '.preventClickEvent');
|
||||
}
|
||||
|
||||
// these delegates are required to keep context
|
||||
this._mouseMoveDelegate = function(event) {
|
||||
return self._mouseMove(event);
|
||||
};
|
||||
this._mouseUpDelegate = function(event) {
|
||||
return self._mouseUp(event);
|
||||
};
|
||||
$(document)
|
||||
.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
|
||||
.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
|
||||
|
||||
event.preventDefault();
|
||||
event.originalEvent.mouseHandled = true;
|
||||
return true;
|
||||
},
|
||||
|
||||
_mouseMove: function(event) {
|
||||
// IE mouseup check - mouseup happened when mouse was out of window
|
||||
if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
|
||||
return this._mouseUp(event);
|
||||
}
|
||||
|
||||
if (this._mouseStarted) {
|
||||
this._mouseDrag(event);
|
||||
return event.preventDefault();
|
||||
}
|
||||
|
||||
if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
|
||||
this._mouseStarted =
|
||||
(this._mouseStart(this._mouseDownEvent, event) !== false);
|
||||
(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
|
||||
}
|
||||
|
||||
return !this._mouseStarted;
|
||||
},
|
||||
|
||||
_mouseUp: function(event) {
|
||||
$(document)
|
||||
.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
|
||||
.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
|
||||
|
||||
if (this._mouseStarted) {
|
||||
this._mouseStarted = false;
|
||||
|
||||
if (event.target == this._mouseDownEvent.target) {
|
||||
$.data(event.target, this.widgetName + '.preventClickEvent', true);
|
||||
}
|
||||
|
||||
this._mouseStop(event);
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
_mouseDistanceMet: function(event) {
|
||||
return (Math.max(
|
||||
Math.abs(this._mouseDownEvent.pageX - event.pageX),
|
||||
Math.abs(this._mouseDownEvent.pageY - event.pageY)
|
||||
) >= this.options.distance
|
||||
);
|
||||
},
|
||||
|
||||
_mouseDelayMet: function(event) {
|
||||
return this.mouseDelayMet;
|
||||
},
|
||||
|
||||
// These are placeholder methods, to be overriden by extending plugin
|
||||
_mouseStart: function(event) {},
|
||||
_mouseDrag: function(event) {},
|
||||
_mouseStop: function(event) {},
|
||||
_mouseCapture: function(event) { return true; }
|
||||
});
|
||||
|
||||
})(jQuery);
|
262
web/js/iviewer/test/ui/jquery.ui.widget.js
vendored
Normal file
|
@ -0,0 +1,262 @@
|
|||
/*!
|
||||
* jQuery UI Widget 1.8.11
|
||||
*
|
||||
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Widget
|
||||
*/
|
||||
(function( $, undefined ) {
|
||||
|
||||
// jQuery 1.4+
|
||||
if ( $.cleanData ) {
|
||||
var _cleanData = $.cleanData;
|
||||
$.cleanData = function( elems ) {
|
||||
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
||||
$( elem ).triggerHandler( "remove" );
|
||||
}
|
||||
_cleanData( elems );
|
||||
};
|
||||
} else {
|
||||
var _remove = $.fn.remove;
|
||||
$.fn.remove = function( selector, keepData ) {
|
||||
return this.each(function() {
|
||||
if ( !keepData ) {
|
||||
if ( !selector || $.filter( selector, [ this ] ).length ) {
|
||||
$( "*", this ).add( [ this ] ).each(function() {
|
||||
$( this ).triggerHandler( "remove" );
|
||||
});
|
||||
}
|
||||
}
|
||||
return _remove.call( $(this), selector, keepData );
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
$.widget = function( name, base, prototype ) {
|
||||
var namespace = name.split( "." )[ 0 ],
|
||||
fullName;
|
||||
name = name.split( "." )[ 1 ];
|
||||
fullName = namespace + "-" + name;
|
||||
|
||||
if ( !prototype ) {
|
||||
prototype = base;
|
||||
base = $.Widget;
|
||||
}
|
||||
|
||||
// create selector for plugin
|
||||
$.expr[ ":" ][ fullName ] = function( elem ) {
|
||||
return !!$.data( elem, name );
|
||||
};
|
||||
|
||||
$[ namespace ] = $[ namespace ] || {};
|
||||
$[ namespace ][ name ] = function( options, element ) {
|
||||
// allow instantiation without initializing for simple inheritance
|
||||
if ( arguments.length ) {
|
||||
this._createWidget( options, element );
|
||||
}
|
||||
};
|
||||
|
||||
var basePrototype = new base();
|
||||
// we need to make the options hash a property directly on the new instance
|
||||
// otherwise we'll modify the options hash on the prototype that we're
|
||||
// inheriting from
|
||||
// $.each( basePrototype, function( key, val ) {
|
||||
// if ( $.isPlainObject(val) ) {
|
||||
// basePrototype[ key ] = $.extend( {}, val );
|
||||
// }
|
||||
// });
|
||||
basePrototype.options = $.extend( true, {}, basePrototype.options );
|
||||
$[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
|
||||
namespace: namespace,
|
||||
widgetName: name,
|
||||
widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
|
||||
widgetBaseClass: fullName
|
||||
}, prototype );
|
||||
|
||||
$.widget.bridge( name, $[ namespace ][ name ] );
|
||||
};
|
||||
|
||||
$.widget.bridge = function( name, object ) {
|
||||
$.fn[ name ] = function( options ) {
|
||||
var isMethodCall = typeof options === "string",
|
||||
args = Array.prototype.slice.call( arguments, 1 ),
|
||||
returnValue = this;
|
||||
|
||||
// allow multiple hashes to be passed on init
|
||||
options = !isMethodCall && args.length ?
|
||||
$.extend.apply( null, [ true, options ].concat(args) ) :
|
||||
options;
|
||||
|
||||
// prevent calls to internal methods
|
||||
if ( isMethodCall && options.charAt( 0 ) === "_" ) {
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
if ( isMethodCall ) {
|
||||
this.each(function() {
|
||||
var instance = $.data( this, name ),
|
||||
methodValue = instance && $.isFunction( instance[options] ) ?
|
||||
instance[ options ].apply( instance, args ) :
|
||||
instance;
|
||||
// TODO: add this back in 1.9 and use $.error() (see #5972)
|
||||
// if ( !instance ) {
|
||||
// throw "cannot call methods on " + name + " prior to initialization; " +
|
||||
// "attempted to call method '" + options + "'";
|
||||
// }
|
||||
// if ( !$.isFunction( instance[options] ) ) {
|
||||
// throw "no such method '" + options + "' for " + name + " widget instance";
|
||||
// }
|
||||
// var methodValue = instance[ options ].apply( instance, args );
|
||||
if ( methodValue !== instance && methodValue !== undefined ) {
|
||||
returnValue = methodValue;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.each(function() {
|
||||
var instance = $.data( this, name );
|
||||
if ( instance ) {
|
||||
instance.option( options || {} )._init();
|
||||
} else {
|
||||
$.data( this, name, new object( options, this ) );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
};
|
||||
};
|
||||
|
||||
$.Widget = function( options, element ) {
|
||||
// allow instantiation without initializing for simple inheritance
|
||||
if ( arguments.length ) {
|
||||
this._createWidget( options, element );
|
||||
}
|
||||
};
|
||||
|
||||
$.Widget.prototype = {
|
||||
widgetName: "widget",
|
||||
widgetEventPrefix: "",
|
||||
options: {
|
||||
disabled: false
|
||||
},
|
||||
_createWidget: function( options, element ) {
|
||||
// $.widget.bridge stores the plugin instance, but we do it anyway
|
||||
// so that it's stored even before the _create function runs
|
||||
$.data( element, this.widgetName, this );
|
||||
this.element = $( element );
|
||||
this.options = $.extend( true, {},
|
||||
this.options,
|
||||
this._getCreateOptions(),
|
||||
options );
|
||||
|
||||
var self = this;
|
||||
this.element.bind( "remove." + this.widgetName, function() {
|
||||
self.destroy();
|
||||
});
|
||||
|
||||
this._create();
|
||||
this._trigger( "create" );
|
||||
this._init();
|
||||
},
|
||||
_getCreateOptions: function() {
|
||||
return $.metadata && $.metadata.get( this.element[0] )[ this.widgetName ];
|
||||
},
|
||||
_create: function() {},
|
||||
_init: function() {},
|
||||
|
||||
destroy: function() {
|
||||
this.element
|
||||
.unbind( "." + this.widgetName )
|
||||
.removeData( this.widgetName );
|
||||
this.widget()
|
||||
.unbind( "." + this.widgetName )
|
||||
.removeAttr( "aria-disabled" )
|
||||
.removeClass(
|
||||
this.widgetBaseClass + "-disabled " +
|
||||
"ui-state-disabled" );
|
||||
},
|
||||
|
||||
widget: function() {
|
||||
return this.element;
|
||||
},
|
||||
|
||||
option: function( key, value ) {
|
||||
var options = key;
|
||||
|
||||
if ( arguments.length === 0 ) {
|
||||
// don't return a reference to the internal hash
|
||||
return $.extend( {}, this.options );
|
||||
}
|
||||
|
||||
if (typeof key === "string" ) {
|
||||
if ( value === undefined ) {
|
||||
return this.options[ key ];
|
||||
}
|
||||
options = {};
|
||||
options[ key ] = value;
|
||||
}
|
||||
|
||||
this._setOptions( options );
|
||||
|
||||
return this;
|
||||
},
|
||||
_setOptions: function( options ) {
|
||||
var self = this;
|
||||
$.each( options, function( key, value ) {
|
||||
self._setOption( key, value );
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
_setOption: function( key, value ) {
|
||||
this.options[ key ] = value;
|
||||
|
||||
if ( key === "disabled" ) {
|
||||
this.widget()
|
||||
[ value ? "addClass" : "removeClass"](
|
||||
this.widgetBaseClass + "-disabled" + " " +
|
||||
"ui-state-disabled" )
|
||||
.attr( "aria-disabled", value );
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
enable: function() {
|
||||
return this._setOption( "disabled", false );
|
||||
},
|
||||
disable: function() {
|
||||
return this._setOption( "disabled", true );
|
||||
},
|
||||
|
||||
_trigger: function( type, event, data ) {
|
||||
var callback = this.options[ type ];
|
||||
|
||||
event = $.Event( event );
|
||||
event.type = ( type === this.widgetEventPrefix ?
|
||||
type :
|
||||
this.widgetEventPrefix + type ).toLowerCase();
|
||||
data = data || {};
|
||||
|
||||
// copy original event properties over to the new event
|
||||
// this would happen if we could call $.event.fix instead of $.Event
|
||||
// but we don't have a way to force an event to be fixed multiple times
|
||||
if ( event.originalEvent ) {
|
||||
for ( var i = $.event.props.length, prop; i; ) {
|
||||
prop = $.event.props[ --i ];
|
||||
event[ prop ] = event.originalEvent[ prop ];
|
||||
}
|
||||
}
|
||||
|
||||
this.element.trigger( event, data );
|
||||
|
||||
return !( $.isFunction(callback) &&
|
||||
callback.call( this.element[0], event, data ) === false ||
|
||||
event.isDefaultPrevented() );
|
||||
}
|
||||
};
|
||||
|
||||
})( jQuery );
|