The New Desing

This commit is contained in:
Serghey Rodin 2015-05-29 02:07:55 +03:00
commit 067a2c862a
305 changed files with 22231 additions and 7576 deletions

5
web/js/iviewer/.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
*.swp
logs
public/photos
public/phtmp
node_modules

97
web/js/iviewer/Changelog Normal file
View 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)

View 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
View 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
View file

@ -0,0 +1 @@
* Make smooth zooming without visual discrete steps

25
web/js/iviewer/bower.json Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
web/js/iviewer/img/hand.cur Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

View 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"
}
}

View 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;
}

File diff suppressed because it is too large Load diff

13
web/js/iviewer/jquery.iviewer.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

View 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>

View 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

File diff suppressed because one or more lines are too long

View 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);
}
}));

View 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
View 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);
;

Binary file not shown.

After

Width:  |  Height:  |  Size: 932 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View 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>

View 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);

View 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".

View 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 932 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View 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>

View 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);

View 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

308
web/js/iviewer/test/ui/jquery.ui.core.js vendored Normal file
View 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 );

View 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);

View 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 );