123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687 |
- /*!
- * B-JUI v1.2 (http://b-jui.com)
- * Git@OSC (http://git.oschina.net/xknaan/B-JUI)
- * Copyright 2014 K'naan (xknaan@163.com).
- * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
- */
- /* ========================================================================
- * B-JUI: bjui-dialog.js v1.2
- * @author K'naan (xknaan@163.com)
- * -- Modified from dwz.dialog.js, dwz.dialogDrag.js, dwz.resize.js (author:Roger Wu)
- * http://git.oschina.net/xknaan/B-JUI/blob/master/BJUI/js/bjui-dialog.js
- * ========================================================================
- * Copyright 2014 K'naan.
- * Licensed under Apache (http://www.apache.org/licenses/LICENSE-2.0)
- * ======================================================================== */
- +function ($) {
- 'use strict';
-
- // DIALOG GLOBAL ELEMENTS
- // ======================
-
- var $resizable
- var $current, shadow, zindex
-
- $(function() {
- var INIT_DIALOG = function() {
- $resizable = $('#bjui-resizable')
- shadow = 'dialogShadow'
- zindex = Dialog.ZINDEX
-
- $('body').append('<!-- dialog resizable -->').append(FRAG.resizable)
- }
-
- INIT_DIALOG()
- })
-
- // DIALOG CLASS DEFINITION
- // ======================
- var Dialog = function(element, options) {
- this.$element = $(element)
- this.options = options
- this.tools = this.TOOLS()
- }
-
- Dialog.DEFAULTS = {
- id : 'dialog',
- title : 'New Dialog',
- url : undefined,
- type : 'GET',
- data : {},
- loadingmask : true,
- width : 500,
- height : 300,
- minW : 65,
- minH : 40,
- max : false,
- mask : false,
- resizable : true,
- drawable : true,
- maxable : true,
- minable : true,
- fresh : false,
- onLoad : null,
- beforeClose : null,
- onClose : null
- }
-
- Dialog.ZINDEX = 30
-
- Dialog.prototype.TOOLS = function() {
- var that = this
- var tools = {
- getDefaults: function() {
- return Dialog.DEFAULTS
- },
- init: function($dialog) {
- var width = that.options.width > that.options.minW ? that.options.width : that.options.minW
- var height = that.options.height > that.options.minH ? that.options.height : that.options.minH
- var wW = $(window).width(),
- wH = $(window).height(),
- iTop = that.options.max ? 0 : ((wH - height) / 2)
-
- if (width > wW) width = wW
- if (height > wH) height = wH
-
- $dialog
- .height(height)
- .width(width)
- .show()
- .css({left:(wW - width) / 2, top:0, opacity:0.1})
- .animate({top:iTop > 0 ? iTop : 0, opacity:1})
- .addClass(shadow)
- .find('> .dialogContent').height(height - $('> .dialogHeader', $dialog).outerHeight() - 6)
-
- $('body').find('> .bjui-dialog-container').not($dialog).removeClass(shadow)
- },
- reload: function($dialog, options) {
- var $dialogContent = $dialog.find('> .dialogContent'), onLoad
-
- options = options || $dialog.data('initOptions')
- onLoad = options.onLoad ? options.onLoad.toFunc() : null
-
- $dialog.trigger(BJUI.eventType.beforeLoadDialog)
-
- if (options.url) {
- $dialogContent.ajaxUrl({
- type:options.type || 'GET', url:options.url, data:options.data || {}, loadingmask:options.loadingmask, callback:function(response) {
- if (onLoad) onLoad.apply(that, [$dialog])
- if (BJUI.ui.clientPaging && $dialog.data('bjui.clientPaging')) $dialog.pagination('setPagingAndOrderby', $dialog)
- }
- })
- } else if (options.target) {
- var html = $(options.target).html() || $dialog.data('bjui.dialog.target')
-
- $(options.target).empty()
- $dialog.data('bjui.dialog.target', html)
- $dialogContent.trigger(BJUI.eventType.beforeAjaxLoad).html(html).initui()
-
- if (onLoad) onLoad.apply(that, [$dialog])
- }
- },
- resizeContent:function($dialog, width, height) {
- var $dialogContent = $dialog.find('> .dialogContent')
-
- $dialogContent
- .css({width:(width - 12), height:(height - $dialog.find('> .dialogHeader').outerHeight() - 6)})
- .resizePageH()
-
- $(window).trigger(BJUI.eventType.resizeGrid)
- }
- }
-
- return tools
- }
-
- Dialog.prototype.open = function() {
- var that = this, options = that.options
- var $body = $('body')
- var $dialog = $body.data(options.id)
-
- if (!options.target || !$(options.target).length) {
- if (!options.url && options.href) options.url = options.href
- if (!options.url) {
- BJUI.debug('Dialog Plugin: Error trying to open a dialog, url is undefined!')
- return
- } else {
- options.url = decodeURI(options.url).replacePlh(that.$element.closest('.unitBox'))
-
- if (!options.url.isFinishedTm()) {
- that.$element.alertmsg('error', (options.warn || FRAG.alertPlhMsg.replace('#plhmsg#', BJUI.regional.plhmsg)))
- BJUI.debug('Dialog Plugin: The new dialog\'s url is incorrect, url: '+ options.url)
- return
- }
-
- options.url = encodeURI(options.url)
- }
- } else {
- options.url = undefined
- }
- if ($dialog) { //if the dialog id already exists
- var op = $dialog.data('initOptions') || options
-
- this.switchDialog($dialog)
- if ($dialog.is(':hidden')) $dialog.show()
- if (op.fresh || options.fresh || !op.url || op.url != options.url) {
- that.reload(options)
- $dialog.data('initOptions', options)
- }
- } else { //open a new dialog
- var dr = BJUI.regional.dialog
- var dialog = FRAG.dialog
- .replace('#close#', dr.close)
- .replace('#maximize#', dr.maximize)
- .replace('#restore#', dr.restore)
- .replace('#minimize#', dr.minimize)
- .replace('#title#', dr.title)
-
- $dialog = $(dialog)
- .data('options', options)
- .data('initOptions', options)
- .css('zIndex', (zindex += 1))
- .hide()
- .appendTo($body)
-
- $dialog.find('> .dialogHeader > h1 > span.title').html(options.title)
-
- this.tools.init($dialog)
-
- if (options.maxable) $dialog.find('a.maximize').show()
- else $dialog.find('a.maximize').hide()
- if (options.minable) $dialog.find('a.minimize').show()
- else $dialog.find('a.minimize').hide()
- if (options.max) that.maxsize($dialog)
- if (options.mask) this.addMask($dialog)
- else if (options.minable && $.fn.taskbar) this.$element.taskbar({id:options.id, title:options.title})
-
- $dialog.on('click', function(e) {
- if (!$(e.target).data('bjui.dialog'))
- if ($current && $current[0] != $dialog[0]) that.switchDialog($dialog)
- }).on('click', '.btn-close', function(e) {
- that.close($dialog)
-
- e.preventDefault()
- }).on('click', '.dialogHeader > a', function(e) {
- var $a = $(this)
-
- if ($a.hasClass('close')) that.close($dialog)
- if ($a.hasClass('minimize')) {
- that.minimize($dialog)
- }
- if ($a.hasClass('maximize')) {
- that.switchDialog($dialog)
- that.maxsize($dialog)
- }
- if ($a.hasClass('restore')) that.restore($dialog)
-
- e.preventDefault()
- e.stopPropagation()
- }).on('dblclick', '.dialogHeader > h1', function(e) {
- if (options.maxable) {
- if ($dialog.find('> .dialogHeader > a.restore').is(':hidden')) $dialog.find('a.maximize').trigger('click')
- else $dialog.find('> .dialogHeader > a.restore').trigger('click')
- }
- }).on('mousedown.bjui.dialog.drag', '.dialogHeader > h1', function(e) {
- that.switchDialog($dialog)
-
- if (!options.drawable || $dialog.data('max')) return
-
- $dialog.data('bjui.dialog.task', true)
- setTimeout($.proxy(function () {
- if ($dialog.data('bjui.dialog.task')) that.drag(e, $dialog)
- }, that), 150)
-
- e.preventDefault()
- }).on('mouseup.bjui.dialog.drag', '.dialogHeader > h1', function(e) {
- $dialog.data('bjui.dialog.task', false)
- }).on('mousedown.bjui.dialog.resize', 'div[class^="resizable"]', function(e) {
- if (!options.drawable || $dialog.data('max')) return
-
- var $bar = $(this)
-
- that.switchDialog($dialog)
- that.resizeInit(e, $('#bjui-resizable'), $dialog, $bar)
- $bar.show()
-
- e.preventDefault()
- }).on('mouseup.bjui.dialog.resize', 'div[class^="resizable"]', function(e) {
- e.preventDefault()
- })
-
- $body.data(options.id, $dialog)
- this.tools.reload($dialog, options)
- }
-
- $.CurrentDialog = $current = $dialog
- }
-
- Dialog.prototype.addMask = function($dialog) {
- var $mask = $dialog.data('bjui.dialog.mask')
-
- $dialog.wrap('<div style="z-index:'+ zindex +'" class="bjui-dialog-wrap"></div>')
- $dialog.find('> .dialogHeader > a.minimize').hide()
- if (!$mask || !$mask.length) {
- $mask = $(FRAG.dialogMask)
- $mask.css('zIndex', 1).show().insertBefore($dialog)
- $dialog.data('bjui.dialog.mask', $mask)
- }
- }
-
- Dialog.prototype.refresh = function(id) {
- if (id && typeof id == 'string') {
- var arr = id.split(',')
-
- for (var i = 0; i < arr.length; i++) {
- var $dialog = $('body').data(arr[i].trim())
-
- if ($dialog) {
- $dialog.removeData('bjui.clientPaging')
- this.tools.reload($dialog)
- }
- }
- } else {
- $current.removeData('bjui.clientPaging')
- this.tools.reload($current)
- }
- }
-
- Dialog.prototype.reload = function(option, initOptionFlag) {
- var that = this
- var options = $.extend({}, typeof option == 'object' && option)
- var $dialog = (options.id && $('body').data(options.id)) || that.getCurrent()
-
- if ($dialog && $dialog.length) {
- var initOptions = $dialog.data('initOptions'), op = $.extend({}, initOptions, options)
- var _reload = function() {
- var $dialogContent = $dialog.find('> .dialogContent')
-
- if (initOptions.width != op.width) {
- if (!op.max) {
- $dialog.animate({ width:op.width}, 'normal', function() { $dialogContent.width(op.width) })
- } else {
- $dialog.width(op.width)
- $dialogContent.width(op.width)
- }
- }
- if (initOptions.height != op.height) {
- if (!op.max) {
- $dialog.animate({ height:op.height }, 'normal', function() {
- $dialogContent.height(op.height - $dialog.find('> .dialogHeader').outerHeight() - 6).resizePageH()
- })
- } else {
- $dialog.height(op.height)
- $dialogContent.height(op.height - $dialog.find('> .dialogHeader').outerHeight() - 6)
- }
- }
- if (initOptions.maxable != op.maxable) {
- if (op.maxable) $dialog.find('a.maximize').show()
- else $dialog.find('a.maximize').hide()
- }
- if (initOptions.minable != op.minable) {
- if (op.minable) $dialog.find('a.minimize').show()
- else $dialog.find('a.minimize').hide()
- }
- if (initOptions.max != op.max && op.max) setTimeout(that.maxsize($dialog), 10)
- if (initOptions.mask != op.mask) {
- if (op.mask) {
- that.addMask($dialog)
- if ($.fn.taskbar) that.$element.taskbar('closeDialog', op.id)
- } else if (op.minable && $.fn.taskbar) {
- that.$element.taskbar({id:op.id, title:op.title})
- }
- }
- if (initOptions.title != op.title) {
- $dialog.find('> .dialogHeader > h1 > span.title').html(op.title)
- $dialog.taskbar('changeTitle', op.id, op.title)
- }
-
- $dialog.data('options', op)
-
- if (!initOptionFlag) $dialog.data('initOptions', op)
-
- that.tools.reload($dialog, op)
- }
-
- if (op.reloadWarn) {
- $dialog.alertmsg('confirm', op.reloadWarn, {
- okCall: function() {
- _reload()
- }
- })
- } else {
- _reload()
- }
- }
- }
-
- Dialog.prototype.reloadForm = function(clearQuery, option) {
- var $dialog, options
-
- if (typeof option == 'string') {
- $dialog = $('body').data(option)
- options = $dialog.data('options')
- } else if (typeof option == 'object') {
- $dialog = (option.id && $('body').data(option.id)) || this.getCurrent()
- }
- if ($dialog) {
- if (typeof option == 'object') {
- if (option.title) $dialog.find('> .dialogHeader > h1 > span.title').html(option.title)
- options = $.extend({}, option, $dialog.data('options'))
- }
- var $pagerForm = $dialog.find('#pagerForm'), data = {}, pageData = {}
-
- if ($pagerForm.attr('action')) options.url = $pagerForm.attr('action')
- if ($pagerForm && $pagerForm.length) {
- pageData = $pagerForm.serializeJson()
- if (!option || !option.type) options.type = $pagerForm.attr('method') || 'POST'
- if (clearQuery) {
- var pageInfo = BJUI.pageInfo
-
- for (var key in pageInfo) {
- data[pageInfo[key]] = pageData[pageInfo[key]]
- }
- } else {
- data = pageData
- }
- options.data = $.extend({}, options.data || {}, data)
- }
-
- this.reload(options, true)
- }
- }
-
- Dialog.prototype.getCurrent = function() {
- return $current
- }
-
- Dialog.prototype.switchDialog = function($dialog) {
- var index = $dialog.css('zIndex')
-
- if ($current && $current != $dialog) {
- var cindex = $current.css('zIndex')
-
- $current.css('zIndex', index)
- $dialog.css('zIndex', cindex)
- $.CurrentDialog = $current = $dialog
- if ($.fn.taskbar) this.$element.taskbar('switchTask', $dialog.data('options').id)
- }
-
- $dialog.addClass(shadow)
- $('body').find('> .bjui-dialog-container').not($dialog).removeClass(shadow)
- }
-
- Dialog.prototype.close = function(dialog) {
- var that = this
- var $dialog = (typeof dialog == 'string') ? $('body').data(dialog) : dialog
- var $mask = $dialog.data('bjui.dialog.mask')
- var options = $dialog.data('options')
- var target = $dialog.data('bjui.dialog.target')
- var beforeClose = options.beforeClose ? options.beforeClose.toFunc() : null
- var onClose = options.onClose ? options.onClose.toFunc() : null
- var canClose = true
-
- if (!$dialog || !options) return
- if (beforeClose) canClose = beforeClose.apply(that, [$dialog])
- if (!canClose) {
- that.switchDialog($dialog)
- return
- }
- if (options.target && target) $(options.target).html(target)
- if ($mask && $mask.length) {
- $mask.remove()
- $dialog.unwrap()
- } else if ($.fn.taskbar) {
- this.$element.taskbar('closeDialog', options.id)
- }
-
- $dialog.animate({top:-$dialog.outerHeight(), opacity:0.1}, 'normal', function() {
- $('body').removeData(options.id)
- $dialog.trigger(BJUI.eventType.beforeCloseDialog).remove()
- if (onClose) onClose.apply(that)
-
- var $dialogs = $('body').find('.bjui-dialog-container')
- var $_current = undefined
-
- if ($dialogs.length) {
- $_current = that.$element.getMaxIndexObj($dialogs)
- } else {
- zindex = Dialog.ZINDEX
- $current = null
- }
- if ($_current && $_current.is(':visible')) that.switchDialog($_current)
- })
- }
-
- Dialog.prototype.closeCurrent = function() {
- this.close($current)
- }
-
- Dialog.prototype.checkTimeout = function() {
- var $dialogConetnt = $current.find('> .dialogContent')
- var json = JSON.parse($dialogConetnt.html())
-
- if (json && json[BJUI.keys.statusCode] == BJUI.statusCode.timeout) this.closeCurrent()
- }
-
- Dialog.prototype.maxsize = function($dialog) {
- $dialog.data('original', {
- top: $dialog.css('top'),
- left: $dialog.css('left'),
- width: $dialog.css('width'),
- height: $dialog.css('height')
- }).data('max', true)
- $dialog.find('> .dialogHeader > a.maximize').hide()
- $dialog.find('> .dialogHeader > a.restore').show()
-
- var iContentW = $(window).width()
- var iContentH = $(window).height() - $('#bjui-taskbar').height() - 1
-
- $dialog.css({ top:0, left:0, width:iContentW, height:iContentH })
- this.tools.resizeContent($dialog, iContentW, iContentH)
- }
-
- Dialog.prototype.restore = function($dialog) {
- var original = $dialog.data('original')
- var dwidth = parseInt(original.width)
- var dheight = parseInt(original.height)
-
- $dialog.css({
- top: original.top,
- left: original.left,
- width: dwidth,
- height: dheight
- })
- this.tools.resizeContent($dialog, dwidth, dheight)
- $dialog.find('> .dialogHeader > a.maximize').show()
- $dialog.find('> .dialogHeader > a.restore').hide()
- $dialog.data('max', false)
- }
-
- Dialog.prototype.minimize = function($dialog) {
- $dialog.hide()
- if ($.fn.taskbar) this.$element.taskbar('minimize', $dialog)
- }
-
- Dialog.prototype.drag = function(e, $dialog) {
- var $shadow = $('#bjui-dialogProxy')
-
- $dialog.find('> .dialogContent').css('opacity', '.3')
- $dialog.basedrag({
- selector : '> .dialogHeader',
- stop : function() {
- $dialog
- .css({left:$dialog.css('left'), top:$dialog.css('top')})
- .find('> .dialogContent').css('opacity', 1)
- },
- event : e,
- nounbind : true
- })
- }
-
- Dialog.prototype.resizeDialog = function($resizable, $dialog, target) {
- var tmove
- var oleft = parseInt($resizable.css('left'))
- var otop = parseInt($resizable.css('top'))
- var height = parseInt($resizable.css('height'))
- var width = parseInt($resizable.css('width'))
-
- if (target == 'n' || target == 'nw') tmove = parseInt($dialog.css('top')) - otop
- else tmove = height - parseInt($dialog.css('height'))
-
- if (otop < 0) otop = 0
-
- $dialog
- .css({top:otop, left:oleft, width:width + 2, height:height + 1})
- .find('> .dialogContent').css('width', (width - 10))
-
- if (target != 'w' && target != 'e') {
- var $dialogContent = $dialog.find('> .dialogContent')
-
- $dialogContent
- .css({height:height - $dialog.find('> .dialogHeader').outerHeight() - 6})
- .resizePageH()
- }
- $(window).trigger(BJUI.eventType.resizeGrid)
- }
-
- Dialog.prototype.resizeInit = function(e, $resizable, $dialog, $bar) {
- var that = this
- var target = $bar.attr('tar')
-
- $('body').css('cursor', target +'-resize')
- $resizable
- .css({
- top : $dialog.css('top'),
- left : $dialog.css('left'),
- height : $dialog.outerHeight(),
- width : $dialog.css('width')
- })
- .show()
-
- if (!this.options.dragCurrent) {
- this.options.dragCurrent = {
- $resizable : $resizable,
- $dialog : $dialog,
- target : target,
- oleft : parseInt($resizable.css('left')) || 0,
- owidth : parseInt($resizable.css('width')) || 0,
- otop : parseInt($resizable.css('top')) || 0,
- oheight : parseInt($resizable.css('height')) || 0,
- ox : e.pageX || e.screenX,
- oy : e.pageY || e.clientY
- }
- $(document).on('mouseup.bjui.dialog.resize', $.proxy(that.resizeStop, that))
- $(document).on('mousemove.bjui.dialog.resize', $.proxy(that.resizeStart, that))
- }
- }
-
- Dialog.prototype.resizeStart = function(e) {
- var current = this.options.dragCurrent
-
- if (!current) return
- if (!e) var e = window.event
-
- var lmove = (e.pageX || e.screenX) - current.ox
- var tmove = (e.pageY || e.clientY) - current.oy
-
- var $mask = current.$dialog.data('bjui.dialog.mask')
-
- if (!$mask || !$mask.length)
- if ((e.pageY || e.clientY) <= 0 || (e.pageY || e.clientY) >= ($(window).height() - current.$dialog.find('> .dialogHeader').outerHeight())) return
-
- var target = current.target
- var width = current.owidth
- var height = current.oheight
-
- if (target != 'n' && target != 's')
- width += (target.indexOf('w') >= 0) ? -lmove : lmove
- if (width >= this.options.minW) {
- if (target.indexOf('w') >= 0)
- current.$resizable.css('left', (current.oleft + lmove))
- if (target != 'n' && target != 's')
- current.$resizable.css('width', width)
- }
- if (target != 'w' && target != 'e')
- height += (target.indexOf('n') >= 0) ? -tmove : tmove
- if (height >= this.options.minH) {
- if (target.indexOf('n') >= 0)
- current.$resizable.css('top', (current.otop + tmove))
- if (target != 'w' && target != 'e')
- current.$resizable.css('height', height)
- }
- }
-
- Dialog.prototype.resizeStop = function(e) {
- var current = this.options.dragCurrent
-
- if (!current) return false
-
- $(document).off('mouseup.bjui.dialog.resize')
- $(document).off('mousemove.bjui.dialog.resize')
- this.options.dragCurrent = null
- this.resizeDialog(current.$resizable, current.$dialog, current.target)
- $('body').css('cursor', '')
- current.$resizable.hide()
- }
-
- // DIALOG PLUGIN DEFINITION
- // =======================
-
- function Plugin(option) {
- var args = arguments
- var property = option
-
- return this.each(function () {
- var $this = $(this)
- var options = $.extend({}, Dialog.DEFAULTS, typeof option == 'object' && option)
- var data = $this.data('bjui.dialog')
-
- if (!data) $this.data('bjui.dialog', (data = new Dialog(this, options)))
-
- if (typeof property == 'string' && $.isFunction(data[property])) {
- [].shift.apply(args)
- if (!args) data[property]()
- else data[property].apply(data, args)
- } else {
- data = new Dialog(this, options)
- data.open()
- }
- })
- }
- var old = $.fn.dialog
- $.fn.dialog = Plugin
- $.fn.dialog.Constructor = Dialog
-
- // DIALOG NO CONFLICT
- // =================
-
- $.fn.dialog.noConflict = function () {
- $.fn.dialog = old
- return this
- }
-
- // DIALOG DATA-API
- // ==============
- $(document).on('click.bjui.dialog.data-api', '[data-toggle="dialog"]', function(e) {
- var $this = $(this), href = $this.attr('href'), data = $this.data(), options = data.options
-
- if (options) {
- if (typeof options == 'string') options = options.toObj()
- if (typeof options == 'object')
- $.extend(data, options)
- }
-
- if (!data.title) data.title = $this.text()
- if (href && !data.url) data.url = href
-
- Plugin.call($this, data)
-
- e.preventDefault()
- })
- }(jQuery);
|