| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- /**
- * EasyUI for jQuery 1.5.5.4
- *
- * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
- *
- * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
- * To use it on other terms please contact us: info@jeasyui.com
- *
- */
- /**
- * window - EasyUI for jQuery
- *
- * Dependencies:
- * panel
- * draggable
- * resizable
- *
- */
- (function($){
- function moveWindow(target, param){
- var state = $.data(target, 'window');
- if (param){
- if (param.left != null) state.options.left = param.left;
- if (param.top != null) state.options.top = param.top;
- }
- $(target).panel('move', state.options);
- if (state.shadow){
- state.shadow.css({
- left: state.options.left,
- top: state.options.top
- });
- }
- }
-
- /**
- * center the window only horizontally
- */
- function hcenter(target, tomove){
- var opts = $.data(target, 'window').options;
- var pp = $(target).window('panel');
- var width = pp._outerWidth();
- if (opts.inline){
- var parent = pp.parent();
- opts.left = Math.ceil((parent.width() - width) / 2 + parent.scrollLeft());
- } else {
- opts.left = Math.ceil(($(window)._outerWidth() - width) / 2 + $(document).scrollLeft());
- }
- if (tomove){moveWindow(target);}
- }
-
- /**
- * center the window only vertically
- */
- function vcenter(target, tomove){
- var opts = $.data(target, 'window').options;
- var pp = $(target).window('panel');
- var height = pp._outerHeight();
- if (opts.inline){
- var parent = pp.parent();
- opts.top = Math.ceil((parent.height() - height) / 2 + parent.scrollTop());
- } else {
- opts.top = Math.ceil(($(window)._outerHeight() - height) / 2 + $(document).scrollTop());
- }
- if (tomove){moveWindow(target);}
- }
-
- function create(target){
- var state = $.data(target, 'window');
- var opts = state.options;
- var win = $(target).panel($.extend({}, state.options, {
- border: false,
- doSize: true, // size the panel, the property undefined in window component
- closed: true, // close the panel
- cls: 'window ' + (!opts.border?'window-thinborder window-noborder ':(opts.border=='thin'?'window-thinborder ':'')) + (opts.cls || ''),
- headerCls: 'window-header ' + (opts.headerCls || ''),
- bodyCls: 'window-body ' + (opts.noheader ? 'window-body-noheader ' : ' ') + (opts.bodyCls||''),
-
- onBeforeDestroy: function(){
- if (opts.onBeforeDestroy.call(target) == false){return false;}
- if (state.shadow){state.shadow.remove();}
- if (state.mask){state.mask.remove();}
- },
- onClose: function(){
- if (state.shadow){state.shadow.hide();}
- if (state.mask){state.mask.hide();}
- opts.onClose.call(target);
- },
- onOpen: function(){
- if (state.mask){
- state.mask.css($.extend({
- display:'none',
- zIndex: $.fn.window.defaults.zIndex++
- }, $.fn.window.getMaskSize(target)));
- }
- if (state.shadow){
- state.shadow.css({
- display:'none',
- zIndex: $.fn.window.defaults.zIndex++,
- left: opts.left,
- top: opts.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- }
- state.window.css('z-index', $.fn.window.defaults.zIndex++);
-
- opts.onOpen.call(target);
- },
- onResize: function(width, height){
- var popts = $(this).panel('options');
- $.extend(opts, {
- width: popts.width,
- height: popts.height,
- left: popts.left,
- top: popts.top
- });
- if (state.shadow){
- state.shadow.css({
- left: opts.left,
- top: opts.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- }
- opts.onResize.call(target, width, height);
- },
- onMinimize: function(){
- if (state.shadow){state.shadow.hide();}
- if (state.mask){state.mask.hide();}
- state.options.onMinimize.call(target);
- },
- onBeforeCollapse: function(){
- if (opts.onBeforeCollapse.call(target) == false){return false;}
- if (state.shadow){state.shadow.hide();}
- },
- onExpand: function(){
- if (state.shadow){state.shadow.show();}
- opts.onExpand.call(target);
- }
- }));
-
- state.window = win.panel('panel');
-
- // create mask
- if (state.mask){state.mask.remove();}
- if (opts.modal){
- state.mask = $('<div class="window-mask" style="display:none"></div>').insertAfter(state.window);
- }
-
- // create shadow
- if (state.shadow){state.shadow.remove();}
- if (opts.shadow){
- state.shadow = $('<div class="window-shadow" style="display:none"></div>').insertAfter(state.window);
- }
-
- // center and open the window
- var closed = opts.closed;
- if (opts.left == null){hcenter(target);}
- if (opts.top == null){vcenter(target);}
- moveWindow(target);
- if (!closed){win.window('open');}
- }
- function constrain(left, top, width, height){
- var target = this;
- var state = $.data(target, 'window');
- var opts = state.options;
- if (!opts.constrain){return {};}
- if ($.isFunction(opts.constrain)){
- return opts.constrain.call(target, left, top, width, height);
- }
- var win = $(target).window('window');
- var parent = opts.inline ? win.parent() : $(window);
- if (left < 0){left = 0;}
- if (top < parent.scrollTop()){top = parent.scrollTop();}
- if (left + width > parent.width()){
- if (width == win.outerWidth()){ // moving
- left = parent.width() - width;
- } else { // resizing
- width = parent.width() - left;
- }
- }
- if (top - parent.scrollTop() + height > parent.height()){
- if (height == win.outerHeight()){ // moving
- top = parent.height() - height + parent.scrollTop();
- } else { // resizing
- height = parent.height() - top + parent.scrollTop();
- }
- }
- return {
- left:left,
- top:top,
- width:width,
- height:height
- };
- }
-
-
- /**
- * set window drag and resize property
- */
- function setProperties(target){
- var state = $.data(target, 'window');
-
- state.window.draggable({
- handle: '>div.panel-header>div.panel-title',
- disabled: state.options.draggable == false,
- onBeforeDrag: function(e){
- if (state.mask) state.mask.css('z-index', $.fn.window.defaults.zIndex++);
- if (state.shadow) state.shadow.css('z-index', $.fn.window.defaults.zIndex++);
- state.window.css('z-index', $.fn.window.defaults.zIndex++);
- },
- onStartDrag: function(e){
- start1(e);
- },
- onDrag: function(e){
- proc1(e);
- return false;
- },
- onStopDrag: function(e){
- stop1(e, 'move');
- }
- });
-
- state.window.resizable({
- disabled: state.options.resizable == false,
- onStartResize:function(e){
- start1(e);
- },
- onResize: function(e){
- proc1(e);
- return false;
- },
- onStopResize: function(e){
- stop1(e, 'resize');
- }
- });
- function start1(e){
- if (state.pmask){state.pmask.remove();}
- state.pmask = $('<div class="window-proxy-mask"></div>').insertAfter(state.window);
- state.pmask.css({
- display: 'none',
- zIndex: $.fn.window.defaults.zIndex++,
- left: e.data.left,
- top: e.data.top,
- width: state.window._outerWidth(),
- height: state.window._outerHeight()
- });
- if (state.proxy){state.proxy.remove();}
- state.proxy = $('<div class="window-proxy"></div>').insertAfter(state.window);
- state.proxy.css({
- display: 'none',
- zIndex: $.fn.window.defaults.zIndex++,
- left: e.data.left,
- top: e.data.top
- });
- state.proxy._outerWidth(e.data.width)._outerHeight(e.data.height);
- state.proxy.hide();
- setTimeout(function(){
- if (state.pmask){state.pmask.show();}
- if (state.proxy){state.proxy.show();}
- }, 500);
- }
- function proc1(e){
- $.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width, e.data.height));
- state.pmask.show();
- state.proxy.css({
- display: 'none',
- left: e.data.left,
- top: e.data.top
- });
- state.proxy._outerWidth(e.data.width);
- state.proxy._outerHeight(e.data.height);
- }
- function stop1(e, method){
- $.extend(e.data, constrain.call(target, e.data.left, e.data.top, e.data.width+0.1, e.data.height+0.1));
- $(target).window(method, e.data);
- state.pmask.remove();
- state.pmask = null;
- state.proxy.remove();
- state.proxy = null;
- }
- }
-
- // when window resize, reset the width and height of the window's mask
- $(function(){
- if (!$._positionFixed){
- $(window).resize(function(){
- $('body>div.window-mask:visible').css({
- width: '',
- height: ''
- });
- setTimeout(function(){
- $('body>div.window-mask:visible').css($.fn.window.getMaskSize());
- }, 50);
- });
- }
- });
-
- $.fn.window = function(options, param){
- if (typeof options == 'string'){
- var method = $.fn.window.methods[options];
- if (method){
- return method(this, param);
- } else {
- return this.panel(options, param);
- }
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'window');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'window', {
- options: $.extend({}, $.fn.window.defaults, $.fn.window.parseOptions(this), options)
- });
- if (!state.options.inline){
- document.body.appendChild(this);
- }
- }
- create(this);
- setProperties(this);
- });
- };
-
- $.fn.window.methods = {
- options: function(jq){
- var popts = jq.panel('options');
- var wopts = $.data(jq[0], 'window').options;
- return $.extend(wopts, {
- closed: popts.closed,
- collapsed: popts.collapsed,
- minimized: popts.minimized,
- maximized: popts.maximized
- });
- },
- window: function(jq){
- return $.data(jq[0], 'window').window;
- },
- move: function(jq, param){
- return jq.each(function(){
- moveWindow(this, param);
- });
- },
- hcenter: function(jq){
- return jq.each(function(){
- hcenter(this, true);
- });
- },
- vcenter: function(jq){
- return jq.each(function(){
- vcenter(this, true);
- });
- },
- center: function(jq){
- return jq.each(function(){
- hcenter(this);
- vcenter(this);
- moveWindow(this);
- });
- }
- };
- $.fn.window.getMaskSize = function(target){
- var state = $(target).data('window');
- if (state && state.options.inline){
- return {};
- } else if ($._positionFixed){
- return {position: 'fixed'};
- } else {
- return {
- width: $(document).width(),
- height: $(document).height()
- };
- }
- };
-
- $.fn.window.parseOptions = function(target){
- return $.extend({}, $.fn.panel.parseOptions(target), $.parser.parseOptions(target, [
- {draggable:'boolean',resizable:'boolean',shadow:'boolean',modal:'boolean',inline:'boolean'}
- ]));
- };
-
- // Inherited from $.fn.panel.defaults
- $.fn.window.defaults = $.extend({}, $.fn.panel.defaults, {
- zIndex: 9000,
- draggable: true,
- resizable: true,
- shadow: true,
- modal: false,
- border: true, // possible values are: true,false,'thin','thick'
- inline: false, // true to stay inside its parent, false to go on top of all elements
-
- // window's property which difference from panel
- title: 'New Window',
- collapsible: true,
- minimizable: true,
- maximizable: true,
- closable: true,
- closed: false,
- constrain: false
- /*
- constrain: function(left,top,width,height){
- return {
- left:left,
- top:top,
- width:width,
- height:height
- };
- }
- */
- });
- })(jQuery);
|