Add WebCms

This commit is contained in:
2016-11-07 12:56:17 -05:00
parent dfe92218f4
commit 15911f33c0
2750 changed files with 365672 additions and 133 deletions
@@ -0,0 +1,637 @@
; (function ($) {
var ie6 = $.browser && $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== 'object',
ie7 = $.browser && $.browser.msie && parseInt($.browser.version) === 7,
ieQuirks = null,
w = [];
/*
* Create and display a modal dialog.
*
* @param {string, object} data A string, jQuery object or DOM object
* @param {object} [options] An optional object containing options overrides
*/
$.fullmodal = function (data, options) {
return $.fullmodal.impl.init(data, options);
};
/*
* Close the modal dialog.
*/
$.fullmodal.close = function () {
$.fullmodal.impl.close();
};
/*
* Set focus on first or last visible input in the modal dialog. To focus on the last
* element, call $.fullmodal.focus('last'). If no input elements are found, focus is placed
* on the data wrapper element.
*/
$.fullmodal.focus = function (pos) {
$.fullmodal.impl.focus(pos);
};
/*
* Determine and set the dimensions of the modal dialog container.
* setPosition() is called if the autoPosition option is true.
*/
$.fullmodal.setContainerDimensions = function () {
$.fullmodal.impl.setContainerDimensions();
};
/*
* Re-position the modal dialog.
*/
$.fullmodal.setPosition = function () {
$.fullmodal.impl.setPosition();
};
/*
* Update the modal dialog. If new dimensions are passed, they will be used to determine
* the dimensions of the container.
*
* setContainerDimensions() is called, which in turn calls setPosition(), if enabled.
* Lastly, focus() is called is the focus option is true.
*/
$.fullmodal.update = function (height, width) {
$.fullmodal.impl.update(height, width);
};
/*
* Chained function to create a modal dialog.
*
* @param {object} [options] An optional object containing options overrides
*/
$.fn.fullmodal = function (options) {
return $.fullmodal.impl.init(this, options);
};
/*
* SimpleModal default options
*
* appendTo: (String:'body') The jQuery selector to append the elements to. For .NET, use 'form'.
* focus: (Boolean:true) Focus in the first visible, enabled element?
* opacity: (Number:50) The opacity value for the overlay div, from 0 - 100
* overlayId: (String:'fullmodal-overlay') The DOM element id for the overlay div
* overlayCss: (Object:{}) The CSS styling for the overlay div
* containerId: (String:'fullmodal-container') The DOM element id for the container div
* containerCss: (Object:{}) The CSS styling for the container div
* dataId: (String:'fullmodal-data') The DOM element id for the data div
* dataCss: (Object:{}) The CSS styling for the data div
* minHeight: (Number:null) The minimum height for the container
* minWidth: (Number:null) The minimum width for the container
* maxHeight: (Number:null) The maximum height for the container. If not specified, the window height is used.
* maxWidth: (Number:null) The maximum width for the container. If not specified, the window width is used.
* autoResize: (Boolean:false) Automatically resize the container if it exceeds the browser window dimensions?
* autoPosition: (Boolean:true) Automatically position the container upon creation and on window resize?
* zIndex: (Number: 1000) Starting z-index value
* close: (Boolean:true) If true, closeHTML, escClose and overClose will be used if set.
If false, none of them will be used.
* closeHTML: (String:'<a class="modalCloseImg" title="Close"></a>') The HTML for the default close link.
SimpleModal will automatically add the closeClass to this element.
* closeClass: (String:'fullmodal-close') The CSS class used to bind to the close event
* escClose: (Boolean:true) Allow Esc keypress to close the dialog?
* overlayClose: (Boolean:false) Allow click on overlay to close the dialog?
* position: (Array:null) Position of container [top, left]. Can be number of pixels or percentage
* persist: (Boolean:false) Persist the data across modal calls? Only used for existing
DOM elements. If true, the data will be maintained across modal calls, if false,
the data will be reverted to its original state.
* modal: (Boolean:true) User will be unable to interact with the page below the modal or tab away from the dialog.
If false, the overlay, iframe, and certain events will be disabled allowing the user to interact
with the page below the dialog.
* onOpen: (Function:null) The callback function used in place of SimpleModal's open
* onShow: (Function:null) The callback function used after the modal dialog has opened
* onClose: (Function:null) The callback function used in place of SimpleModal's close
*/
$.fullmodal.defaults = {
appendTo: 'body',
focus: true,
opacity: 50,
overlayId: 'fullmodal-overlay',
overlayCss: {},
containerId: 'fullmodal-container',
containerCss: {},
dataId: 'fullmodal-data',
dataCss: {},
minHeight: null,
minWidth: null,
maxHeight: null,
maxWidth: null,
autoResize: false,
autoPosition: true,
zIndex: 1000,
close: true,
closeHTML: '<a class="modalCloseImg" title="Close"></a>',
closeClass: 'fullmodal-close',
escClose: true,
overlayClose: false,
position: null,
persist: false,
modal: true,
onOpen: null,
onShow: null,
onClose: null
};
/*
* Main modal object
* o = options
*/
$.fullmodal.impl = {
/*
* Contains the modal dialog elements and is the object passed
* back to the callback (onOpen, onShow, onClose) functions
*/
d: {},
/*
* Initialize the modal dialog
*/
init: function (data, options) {
var s = this;
// don't allow multiple calls
if (s.d.data) {
return false;
}
// $.boxModel is undefined if checked earlier
ieQuirks = $.browser.msie && !$.boxModel;
// merge defaults and user options
s.o = $.extend({}, $.fullmodal.defaults, options);
// keep track of z-index
s.zIndex = s.o.zIndex;
// set the onClose callback flag
s.occb = false;
// determine how to handle the data based on its type
if (typeof data === 'object') {
// convert DOM object to a jQuery object
data = data instanceof jQuery ? data : $(data);
s.d.placeholder = false;
// if the object came from the DOM, keep track of its parent
if (data.parent().parent().size() > 0) {
data.before($('<span></span>')
.attr('id', 'fullmodal-placeholder')
.css({ display: 'none' }));
s.d.placeholder = true;
s.display = data.css('display');
// persist changes? if not, make a clone of the element
if (!s.o.persist) {
s.d.orig = data.clone(true);
}
}
}
else if (typeof data === 'string' || typeof data === 'number') {
// just insert the data as innerHTML
data = $('<div></div>').html(data);
}
else {
// unsupported data type!
alert('SimpleModal Error: Unsupported data type: ' + typeof data);
return s;
}
// create the modal overlay, container and, if necessary, iframe
s.create(data);
data = null;
// display the modal dialog
s.open();
// useful for adding events/manipulating data in the modal dialog
if ($.isFunction(s.o.onShow)) {
s.o.onShow.apply(s, [s.d]);
}
// don't break the chain =)
return s;
},
/*
* Create and add the modal overlay and container to the page
*/
create: function (data) {
var s = this;
// get the window properties
w = s.getDimensions();
// add an iframe to prevent select options from bleeding through
if (s.o.modal && ie6) {
s.d.iframe = $('<iframe src="javascript:false;"></iframe>')
.css($.extend(s.o.iframeCss, {
display: 'none',
opacity: 0,
position: 'fixed',
height: w[0],
width: w[1],
zIndex: s.o.zIndex,
top: 0,
left: 0
}))
.appendTo(s.o.appendTo);
}
// create the overlay
s.d.overlay = $('<div></div>')
.attr('id', s.o.overlayId)
.addClass('fullmodal-overlay')
.css($.extend(s.o.overlayCss, {
display: 'none',
opacity: s.o.opacity / 100,
height: s.o.modal ? w[0] : 0,
width: s.o.modal ? w[1] : 0,
position: 'fixed',
left: 0,
top: 0,
zIndex: s.o.zIndex + 1
}))
.appendTo(s.o.appendTo);
// create the container
s.d.container = $('<div></div>')
.attr('id', s.o.containerId)
.addClass('fullmodal-container')
.css($.extend(s.o.containerCss, {
display: 'none',
position: 'fixed',
zIndex: s.o.zIndex + 2
}))
.append(s.o.close && s.o.closeHTML
? $(s.o.closeHTML).addClass(s.o.closeClass)
: '')
.appendTo(s.o.appendTo);
s.d.wrap = $('<div></div>')
.attr('tabIndex', -1)
.addClass('fullmodal-wrap')
.css({ height: '100%', outline: 0, width: '100%' })
.appendTo(s.d.container);
// add styling and attributes to the data
// append to body to get correct dimensions, then move to wrap
s.d.data = data
.attr('id', data.attr('id') || s.o.dataId)
.addClass('fullmodal-data')
.css($.extend(s.o.dataCss, {
display: 'none'
}))
.appendTo('body');
data = null;
s.setContainerDimensions();
s.d.data.appendTo(s.d.wrap);
// fix issues with IE
if (ie6 || ieQuirks) {
s.fixIE();
}
},
/*
* Bind events
*/
bindEvents: function () {
var s = this;
// bind the close event to any element with the closeClass class
$('.' + s.o.closeClass).bind('click.fullmodal', function (e) {
e.preventDefault();
s.close();
});
// bind the overlay click to the close function, if enabled
if (s.o.modal && s.o.close && s.o.overlayClose) {
s.d.overlay.bind('click.fullmodal', function (e) {
e.preventDefault();
s.close();
});
}
// bind keydown events
$(document).bind('keydown.fullmodal', function (e) {
if (s.o.modal && e.keyCode === 9) { // TAB
s.watchTab(e);
}
else if ((s.o.close && s.o.escClose) && e.keyCode === 27) { // ESC
e.preventDefault();
s.close();
}
});
// update window size
$(window).bind('resize.fullmodal', function () {
// redetermine the window width/height
w = s.getDimensions();
// reposition the dialog
s.o.autoResize ? s.setContainerDimensions() : s.o.autoPosition && s.setPosition();
if (ie6 || ieQuirks) {
s.fixIE();
}
else if (s.o.modal) {
// update the iframe & overlay
s.d.iframe && s.d.iframe.css({ height: w[0], width: w[1] });
s.d.overlay.css({ height: w[0], width: w[1] });
}
});
},
/*
* Unbind events
*/
unbindEvents: function () {
$('.' + this.o.closeClass).unbind('click.fullmodal');
$(document).unbind('keydown.fullmodal');
$(window).unbind('resize.fullmodal');
this.d.overlay.unbind('click.fullmodal');
},
/*
* Fix issues in IE6 and IE7 in quirks mode
*/
fixIE: function () {
var s = this, p = s.o.position;
// simulate fixed position - adapted from BlockUI
$.each([s.d.iframe || null, !s.o.modal ? null : s.d.overlay, s.d.container], function (i, el) {
if (el) {
var bch = 'document.body.clientHeight', bcw = 'document.body.clientWidth',
bsh = 'document.body.scrollHeight', bsl = 'document.body.scrollLeft',
bst = 'document.body.scrollTop', bsw = 'document.body.scrollWidth',
ch = 'document.documentElement.clientHeight', cw = 'document.documentElement.clientWidth',
sl = 'document.documentElement.scrollLeft', st = 'document.documentElement.scrollTop',
s = el[0].style;
s.position = 'absolute';
if (i < 2) {
s.removeExpression('height');
s.removeExpression('width');
s.setExpression('height', '' + bsh + ' > ' + bch + ' ? ' + bsh + ' : ' + bch + ' + "px"');
s.setExpression('width', '' + bsw + ' > ' + bcw + ' ? ' + bsw + ' : ' + bcw + ' + "px"');
}
else {
var te, le;
if (p && p.constructor === Array) {
var top = p[0]
? typeof p[0] === 'number' ? p[0].toString() : p[0].replace(/px/, '')
: el.css('top').replace(/px/, '');
te = top.indexOf('%') === -1
? top + ' + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"'
: parseInt(top.replace(/%/, '')) + ' * ((' + ch + ' || ' + bch + ') / 100) + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"';
if (p[1]) {
var left = typeof p[1] === 'number' ? p[1].toString() : p[1].replace(/px/, '');
le = left.indexOf('%') === -1
? left + ' + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"'
: parseInt(left.replace(/%/, '')) + ' * ((' + cw + ' || ' + bcw + ') / 100) + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"';
}
}
else {
te = '(' + ch + ' || ' + bch + ') / 2 - (this.offsetHeight / 2) + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"';
le = '(' + cw + ' || ' + bcw + ') / 2 - (this.offsetWidth / 2) + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"';
}
s.removeExpression('top');
s.removeExpression('left');
s.setExpression('top', te);
s.setExpression('left', le);
}
}
});
},
/*
* Place focus on the first or last visible input
*/
focus: function (pos) {
var s = this, p = pos && $.inArray(pos, ['first', 'last']) !== -1 ? pos : 'first';
// focus on dialog or the first visible/enabled input element
var input = $(':input:enabled:visible:' + p, s.d.wrap);
setTimeout(function () {
input.length > 0 ? input.focus() : s.d.wrap.focus();
}, 10);
},
getDimensions: function () {
var el = $(window);
// fix a jQuery/Opera bug with determining the window height
var h = $.browser && $.browser.opera && $.browser.version > '9.5' && $.fn.jquery < '1.3'
|| $.browser && $.browser.opera && $.browser.version < '9.5' && $.fn.jquery > '1.2.6'
? el[0].innerHeight : el.height();
return [h, el.width()];
},
getVal: function (v, d) {
return v ? (typeof v === 'number' ? v
: v === 'auto' ? 0
: v.indexOf('%') > 0 ? ((parseInt(v.replace(/%/, '')) / 100) * (d === 'h' ? w[0] : w[1]))
: parseInt(v.replace(/px/, '')))
: null;
},
/*
* Update the container. Set new dimensions, if provided.
* Focus, if enabled. Re-bind events.
*/
update: function (height, width) {
var s = this;
// prevent update if dialog does not exist
if (!s.d.data) {
return false;
}
// reset orig values
s.d.origHeight = s.getVal(height, 'h');
s.d.origWidth = s.getVal(width, 'w');
// hide data to prevent screen flicker
s.d.data.hide();
height && s.d.container.css('height', height);
width && s.d.container.css('width', width);
s.setContainerDimensions();
s.d.data.show();
s.o.focus && s.focus();
// rebind events
s.unbindEvents();
s.bindEvents();
},
setContainerDimensions: function () {
var s = this,
badIE = ie6 || ie7;
// get the dimensions for the container and data
var ch = s.d.origHeight ? s.d.origHeight : $.browser.opera ? s.d.container.height() : s.getVal(badIE ? s.d.container[0].currentStyle['height'] : s.d.container.css('height'), 'h'),
cw = s.d.origWidth ? s.d.origWidth : $.browser.opera ? s.d.container.width() : s.getVal(badIE ? s.d.container[0].currentStyle['width'] : s.d.container.css('width'), 'w'),
dh = s.d.data.outerHeight(true), dw = s.d.data.outerWidth(true);
s.d.origHeight = s.d.origHeight || ch;
s.d.origWidth = s.d.origWidth || cw;
// mxoh = max option height, mxow = max option width
var mxoh = s.o.maxHeight ? s.getVal(s.o.maxHeight, 'h') : null,
mxow = s.o.maxWidth ? s.getVal(s.o.maxWidth, 'w') : null,
mh = mxoh && mxoh < w[0] ? mxoh : w[0],
mw = mxow && mxow < w[1] ? mxow : w[1];
// moh = min option height
var moh = s.o.minHeight ? s.getVal(s.o.minHeight, 'h') : 'auto';
if (!ch) {
if (!dh) { ch = moh; }
else {
if (dh > mh) { ch = mh; }
else if (s.o.minHeight && moh !== 'auto' && dh < moh) { ch = moh; }
else { ch = dh; }
}
}
else {
ch = s.o.autoResize && ch > mh ? mh : ch < moh ? moh : ch;
}
// mow = min option width
var mow = s.o.minWidth ? s.getVal(s.o.minWidth, 'w') : 'auto';
if (!cw) {
if (!dw) { cw = mow; }
else {
if (dw > mw) { cw = mw; }
else if (s.o.minWidth && mow !== 'auto' && dw < mow) { cw = mow; }
else { cw = dw; }
}
}
else {
cw = s.o.autoResize && cw > mw ? mw : cw < mow ? mow : cw;
}
s.d.container.css({ height: ch, width: cw });
s.d.wrap.css({ overflow: (dh > ch || dw > cw) ? 'auto' : 'visible' });
s.o.autoPosition && s.setPosition();
},
setPosition: function () {
var s = this, top, left,
hc = (w[0] / 2) - (s.d.container.outerHeight(true) / 2),
vc = (w[1] / 2) - (s.d.container.outerWidth(true) / 2);
if (s.o.position && Object.prototype.toString.call(s.o.position) === '[object Array]') {
top = s.o.position[0] || hc;
left = s.o.position[1] || vc;
} else {
top = hc;
left = vc;
}
s.d.container.css({ left: left, top: top });
},
watchTab: function (e) {
var s = this;
if ($(e.target).parents('.fullmodal-container').length > 0) {
// save the list of inputs
s.inputs = $(':input:enabled:visible:first, :input:enabled:visible:last', s.d.data[0]);
// if it's the first or last tabbable element, refocus
if ((!e.shiftKey && e.target === s.inputs[s.inputs.length - 1]) ||
(e.shiftKey && e.target === s.inputs[0]) ||
s.inputs.length === 0) {
e.preventDefault();
var pos = e.shiftKey ? 'last' : 'first';
s.focus(pos);
}
}
else {
// might be necessary when custom onShow callback is used
e.preventDefault();
s.focus();
}
},
/*
* Open the modal dialog elements
* - Note: If you use the onOpen callback, you must "show" the
* overlay and container elements manually
* (the iframe will be handled by SimpleModal)
*/
open: function () {
var s = this;
// display the iframe
s.d.iframe && s.d.iframe.show();
if ($.isFunction(s.o.onOpen)) {
// execute the onOpen callback
s.o.onOpen.apply(s, [s.d]);
}
else {
// display the remaining elements
s.d.overlay.show();
s.d.container.show();
s.d.data.show();
}
s.o.focus && s.focus();
// bind default events
s.bindEvents();
},
/*
* Close the modal dialog
* - Note: If you use an onClose callback, you must remove the
* overlay, container and iframe elements manually
*
* @param {boolean} external Indicates whether the call to this
* function was internal or external. If it was external, the
* onClose callback will be ignored
*/
close: function () {
var s = this;
// prevent close when dialog does not exist
if (!s.d.data) {
return false;
}
// remove the default events
s.unbindEvents();
if ($.isFunction(s.o.onClose) && !s.occb) {
// set the onClose callback flag
s.occb = true;
// execute the onClose callback
s.o.onClose.apply(s, [s.d]);
}
else {
// if the data came from the DOM, put it back
if (s.d.placeholder) {
var ph = $('#fullmodal-placeholder');
// save changes to the data?
if (s.o.persist) {
// insert the (possibly) modified data back into the DOM
ph.replaceWith(s.d.data.removeClass('fullmodal-data').css('display', s.display));
}
else {
// remove the current and insert the original,
// unmodified data back into the DOM
s.d.data.hide().remove();
ph.replaceWith(s.d.orig);
}
}
else {
// otherwise, remove it
s.d.data.hide().remove();
}
// remove the remaining elements
s.d.container.hide().remove();
s.d.overlay.hide();
s.d.iframe && s.d.iframe.hide().remove();
setTimeout(function () {
// opera work-around
s.d.overlay.remove();
// reset the dialog object
s.d = {};
}, 10);
}
}
};
})(jQuery);
+402
View File
@@ -0,0 +1,402 @@
/// <reference path="/umbraco_client/Application/NamespaceManager.js" />
Umbraco.Sys.registerNamespace("Umbraco.Controls");
(function($) {
$.fn.ModalWindowAPI = function() {
/// <summary>jQuery plugin exposes the modal window api for the selected object</summary>
//if there's more than item in the selector, throw exception
if ($(this).length != 1) {
throw "ModalWindowAPI selector requires that there be exactly one control selected";
};
return $(this).data("ModalWindowAPI") == null ? null : $(this).data("ModalWindowAPI");
};
$.fn.ModalWindowShow = function (name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback) {
/// <summary>Shows a modal window based on existing content in the DOM</summary>
return $(this).each(function () {
//check if the modal exists already
if ($(this).closest(".umbModalBox").length > 0) {
Umbraco.Controls.ModalWindow.cntr++;
var api = $(this).closest(".umbModalBox").ModalWindowAPI();
api._obj.jqmShow(); //since it exist, just re-show it
}
else {
var modal = Umbraco.Controls.ModalWindow();
modal.show(this, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback);
}
});
};
$.fn.ModalWindowShowWithoutBackground = function(name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback) {
/// <summary>Shows a modal window based on existing content in the DOM</summary>
return $(this).each(function() {
//check if the modal exists already
if ($(this).closest(".umbModalBox").length > 0) {
Umbraco.Controls.ModalWindow.cntr++;
var api = $(this).closest(".umbModalBox").ModalWindowAPI();
api._hideOverlay = true;
api._obj.jqmShow(); //since it exist, just re-show it
}
else {
var modal = Umbraco.Controls.ModalWindow();
modal._hideOverlay = true;
modal.show(this, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback);
}
});
};
Umbraco.Controls.ModalWindow = function () {
/// <summary>
/// Modal window class, when open is called, it will create a temporary html element to attach the window to.
/// The modal will attempt to be created in the top most frame if all of the libraries are found there, if not,
/// it uses the current frame's document/jquery objects.
/// </summary>
var m = {
_wId: Umbraco.Utils.generateRandom().toString().replace(".", ""), //the modal window ID that will be assigned
_obj: null, //the jquery element for the modal window
_rVal: null, //a return value specified when closing that gets passed to the onCloseCallback method
_cntr: Umbraco.Controls.ModalWindow.cntr++, //counts instances
_hideOverlay: false, // hides the overlay between the modal and the backgground
//get a reference to the topmost jquery object if there is a modal framework there, otherwise use current
_$: (window.top.jQuery && window.top.jQuery.jqm) ? window.top.jQuery : $,
//get a reference to the topmost document if we're selecting the topmost jquery, otherwise use the current
_document: (window.top.jQuery && window.top.jQuery.jqm) ? window.top.document : document,
show: function(selector, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback) {
/// <summary>Shows a modal window based on existing content in the DOM</summary>
//check if the modal elems exist
if (!this._modalElemsExist()) {
this._createModalElems(false, selector);
}
var _this = this;
this._open(name, showHeader,
width, height, top, leftOffset,
closeTriggers, onCloseCallback,
function(h) {
//insert the content
var umbModal = _this._$(h.w);
var umbModalContent = _this._$(".umbModalBoxContent", umbModal);
umbModalContent.append(_this._$(selector));
_this._$(selector).show();
});
},
open: function(url, name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback) {
/// <summary>Shows a modal window with content specified in the url in an iframe</summary>
//check if the modal elems exist
if (!this._modalElemsExist()) {
this._createModalElems(true);
}
var _this = this;
this._open(name, showHeader,
width, height, top, leftOffset,
closeTriggers, onCloseCallback,
function(h) {
//get the iframe, and set the url
var umbModal = _this._$(h.w);
var iframe = _this._$("iframe", umbModal);
iframe.attr('src', _this._getUniqueUrl(url));
iframe.width(width);
iframe.height(showHeader ? height - 30 : height);
iframe.show();
});
},
_open: function(name, showHeader, width, height, top, leftOffset, closeTriggers, onCloseCallback, onCreate) {
/// <summary>Opens a modal window</summary>
/// <param name="top">Optional</param>
/// <param name="leftOffset">Optional</param>
/// <param name="closeTriggers">
/// Optional: An array of jQuery selectors that will trigger the modal window to close
/// </param>
/// <param name="onCloseCallback">
/// A method that is called when the window is closing. the callback method will receive an instance
/// of the jQuery object for the popup window/iframe so that you can query against the contents of the window
/// to extract any information.
/// The callback will receive one parameter with 2 properties:
/// modalContent = the jQuery object for the popup window to query against
/// outVal = the value passed to the close window method that was used to close the window (if it was specified)
/// </param>
/// <returns>The generated jquery object bound to the modal window</returns>
var _this = this;
this._obj.jqm({
onShow: function(h) {
var umbModal = _this._$(h.w);
//remove the header if it shouldn't be shown
if (!showHeader) {
_this._obj.find(".umbModalBoxHeader").remove();
_this._obj.find(".umbracModalBoxClose").remove();
}
else {
//set the title
_this._obj.find(".umbModalBoxHeader").html(name);
}
//if the height is set, then set it
if (height > 0) {
umbModal.height(height);
}
//if the width is set, then set it in the center
if (width > 0) {
umbModal.width(width);
umbModal.css("left", ((_this._$(_this._document).width() - width) / 2) + "px");
}
//if the top is set
if (top > 0) {
umbModal.css("top", top + "px");
}
//if the leftOffset is set
if (leftOffset > 0) {
var newLeft = parseInt(umbModal.css("left").replace("px", "")) + leftOffset;
umbModal.css("left", newLeft);
}
umbModal.fadeIn(250);
if (_this._hideOverlay)
jQuery('.jqmOverlay').attr('class','');
if (typeof onCreate == "function") {
onCreate.call(_this, h)
}
_this._$(_this._document).keyup(function(event) {
if (event.keyCode == 27 && umbModal.css("display") == "block") {
_this.close();
}
});
if (closeTriggers) {
for (var x in closeTriggers) {
//Ok, this is a bit weird, but it makes sense. Since the selector passed in might be a selector
//that exists in the root jquery obj, the current jquery object, or an item in the iframe if there is one
//we'll try to find them all.
var trigger = closeTriggers[x];
//first check if the object passed in is already a jquery object
if (!trigger.jquery) {
trigger = _this._$(closeTriggers[x]); //find object in the doc that owns the modal container
if (trigger.length == 0) {
trigger = $(closeTriggers[x]); //find object in the doc that owns the curr jquery object
}
if (trigger.length == 0) {
try {
trigger = h.w.find("iframe").contents().find(closeTriggers[x]);
}
catch (err) { } //IE throws an exception when navigating iframes, but it stil works...
}
}
_this._obj.jqmAddClose(trigger);
}
}
},
onHide: function(h) {
var umbModal = _this._$(h.w);
var umbModalContent = _this._$(".umbModalBoxContent", umbModal);
var iframe = umbModalContent.find("iframe");
if (typeof onCloseCallback == "function") {
//call the callback if specified, pass the jquery content object as a param and the output value array
//pass the iframe if there is one
var e = { modalContent: iframe.length > 0 ? iframe : umbModalContent, outVal: _this._rVal };
onCloseCallback.call(_this, e);
}
h.w.fadeOut(300, function() {
//remove the modal objects and iframes if it's an iframe modal box
if (iframe.length > 0) {
iframe.attr('src', 'javascript:false;document.write(\'\');');
_this._obj.remove();
}
h.o.remove();
_this._close();
});
}
});
this._obj.jqmShow();
//store the api in this objects data store
this._obj.data("ModalWindowAPI", this);
return this._obj;
},
close: function(rVal) {
/// <summary>Closes the modal window</summary>
/// <param name="rVal">if specified, will add this parameter to the onCloseCallback method's outVal parameter so it may be used in the closing callback method
this._rVal = rVal;
top.focus();
this._obj.jqmHide(); //do the hiding, this will call the onHide handler
},
_close: function() {
/// <summary>Finalizes the objects counter and instance manager</summary>
//remove the instance from the instance manager
Umbraco.Controls.ModalWindow.inst[this._cntr] = null;
Umbraco.Controls.ModalWindow.inst[this._wId] = null;
Umbraco.Controls.ModalWindow.cntr--; //reduce the counter
},
_createModalElems: function(withIFrame, selector) {
/// <summary>This will create the html elements required for the modal overlay if they do not already exist in the DOM</summary>
var overlayHtml = this._getOverlayHtml(withIFrame);
if (!selector) {
this._obj = this._$(overlayHtml).appendTo(this._$("body"));
}
else {
this._obj = this._$(overlayHtml).appendTo(this._$(selector).parent());
}
//update the z-index so it stacks
this._obj.css("z-index", 10000 + (this._cntr * 10));
var _this = this;
if (this._$.fn.draggable) {
this._obj.draggable({
cursor: 'move',
distance: 5,
iframeFix: withIFrame,
helper: function(event) {
var o = _this._$(this).clone();
o.children().remove();
o.css("border-width", "1px");
return o;
},
start: function(event, ui) {
ui.helper.css("z-index", 20000);
},
stop: function(event, ui) {
_this._obj.css("top", ui.position.top);
_this._obj.css("left", ui.position.left);
}
});
}
else {
this._obj.find(".umbModalBoxHeader").css("cursor", "default"); //remove the move cursor if we can't move
}
},
_getOverlayHtml: function(withIFrame) {
var overlayHtml = "<div id=\"" + this._wId + "_modal\" class=\"umbModalBox\">" +
"<div class=\"umbModalBoxHeader\"></div><a href=\"#\" class=\"umbracModalBoxClose jqmClose\">&times;</a>" +
"<div class=\"umbModalBoxContent\">";
if (withIFrame) {
overlayHtml += "<iframe frameborder=\"0\" class=\"umbModalBoxIframe\" src=\"javascript:false;document.write(\'\');\"></iframe>";
}
overlayHtml += "</div></div>";
return overlayHtml;
},
_modalElemsExist: function() {
return (this._$("#" + this._wId + "_modal").length > 0);
},
_getUniqueUrl: function(url) {
var r = Umbraco.Utils.generateRandom();
if (url.indexOf("?") > -1)
return url += "&rndo=" + r;
else
return url += "?rndo=" + r;
}
};
//store a reference to this api by the id and the counter
Umbraco.Controls.ModalWindow.inst[m._cntr] = m;
Umbraco.Controls.ModalWindow.inst[m._wId] = Umbraco.Controls.ModalWindow.inst[m._cntr];
return m;
};
// instance manager
Umbraco.Controls.ModalWindow.cntr = 0;
Umbraco.Controls.ModalWindow.inst = {};
})(jQuery);
//
// jqModal - Minimalist Modaling with jQuery
// (http://dev.iceburg.net/jquery/jqModal/)
//
// Copyright (c) 2007,2008 Brice Burgess <bhb@iceburg.net>
// Dual licensed under the MIT and GPL licenses:
// http://www.opensource.org/licenses/mit-license.php
// http://www.gnu.org/licenses/gpl.html
//
// $Version: 07/06/2008 +r13
//
(function($) {
$.fn.jqm = function(o) {
var p = {
overlay: 50,
overlayClass: 'jqmOverlay',
closeClass: 'jqmClose',
trigger: '.jqModal',
ajax: F,
ajaxText: '',
target: F,
modal: true,
toTop: F,
onShow: F,
onHide: F,
onLoad: F
};
return this.each(function() {
if (this._jqm) return H[this._jqm].c = $.extend({}, H[this._jqm].c, o); s++; this._jqm = s;
H[s] = { c: $.extend(p, $.jqm.params, o), a: F, w: $(this).addClass('jqmID' + s), s: s };
if (p.trigger) $(this).jqmAddTrigger(p.trigger);
});
};
$.fn.jqmAddClose = function(e) { return hs(this, e, 'jqmHide'); };
$.fn.jqmAddTrigger = function(e) { return hs(this, e, 'jqmShow'); };
$.fn.jqmShow = function(t) { return this.each(function() { $.jqm.open(this._jqm, t); }); };
$.fn.jqmHide = function(t) { return this.each(function() { $.jqm.close(this._jqm, t); }); };
$.jqm = {
hash: {},
open: function(s, t) {
var h = H[s], c = h.c, cc = '.' + c.closeClass, z = (parseInt(h.w.css('z-index'))), z = (z > 0) ? z : 3000, o = $('<div></div>').css({ height: '100%', width: '100%', position: 'fixed', left: 0, top: 0, 'z-index': z - 1 }); if (h.a) return F; h.t = t; h.a = true; h.w.css('z-index', z);
if (c.modal) { if (!A[0]) L('bind'); A.push(s); }
else if (c.overlay > 0) h.w.jqmAddClose(o);
else o = F;
h.o = (o) ? o.addClass(c.overlayClass).prependTo('body') : F;
if (ie6) { $('html,body').css({ height: '100%', width: '100%' }); if (o) { o = o.css({ position: 'absolute' })[0]; for (var y in { Top: 1, Left: 1 }) o.style.setExpression(y.toLowerCase(), "(_=(document.documentElement.scroll" + y + " || document.body.scroll" + y + "))+'px'"); } }
if (c.ajax) {
var r = c.target || h.w, u = c.ajax, r = (typeof r == 'string') ? $(r, h.w) : $(r), u = (u.substr(0, 1) == '@') ? $(t).attr(u.substring(1)) : u;
r.html(c.ajaxText).load(u, function() { if (c.onLoad) c.onLoad.call(this, h); if (cc) h.w.jqmAddClose($(cc, h.w)); e(h); });
}
else if (cc) h.w.jqmAddClose($(cc, h.w));
if (c.toTop && h.o) h.w.before('<span id="jqmP' + h.w[0]._jqm + '"></span>').insertAfter(h.o);
(c.onShow) ? c.onShow(h) : h.w.show(); e(h); return F;
},
close: function(s) {
var h = H[s]; if (!h.a) return F; h.a = F;
if (A[0]) { A.pop(); if (!A[0]) L('unbind'); }
if (h.c.toTop && h.o) $('#jqmP' + h.w[0]._jqm).after(h.w).remove();
if (h.c.onHide) h.c.onHide(h); else { h.w.hide(); if (h.o) h.o.remove(); } return F;
},
params: {}
};
var s = 0, H = $.jqm.hash, A = [], ie6 = $.browser && $.browser.msie && ($.browser.version == "6.0"), F = false,
i = $('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({ opacity: 0 }),
e = function(h) { if (ie6) if (h.o) h.o.html('<p style="width:100%;height:100%"/>').prepend(i); else if (!$('iframe.jqm', h.w)[0]) h.w.prepend(i); },
//f = function(h) { try { $(':input:visible', h.w)[0].focus(); } catch (_) { } },
L = function(t) { $()[t]("keypress", m)[t]("keydown", m)[t]("mousedown", m); },
m = function(e) { var h = H[A[A.length - 1]], r = (!$(e.target).parents('.jqmID' + h.s)[0]); if (r) f(h); return !r; },
hs = function(w, t, c) {
return w.each(function() {
var s = this._jqm; $(t).each(function() {
if (!this[c]) { this[c] = []; $(this).click(function() { for (var i in { jqmShow: 1, jqmHide: 1 }) for (var s in this[i]) if (H[this[i][s]]) H[this[i][s]].w[i](this); return F; }); } this[c].push(s);
});
});
};
})(jQuery);
Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

+66
View File
@@ -0,0 +1,66 @@
/* TODO: Change these to classes to support many modal boxes */
div#umbModalBox,
div.umbModalBox {
position: absolute;
top: 0;
border: 5px #a3a3a3 solid;
/*border-top: none;*/
text-align: left;
z-index: 10000;
display: none;
background: #fff ! important;
font: bold 100% "Lucida Grande", Arial, sans-serif;
}
div#umbModalBox.loaded,
div.umbModalBox.loaded
{
background-image: none;
}
.jqmOverlay {background: url(modalBackground.gif)}
div#umbModalBoxHeader,
div.umbModalBoxHeader {
margin: 0;
text-shadow: #FFF 0 1px 0;
padding: .5em 2em .5em .75em;
margin: 0;
text-align: left;
}
div#umbModalBoxContent,
div.umbModalBoxContent {
padding: 0px;
overflow: hidden;
/*height: 100%;*/
background: #fff ! important;
}
a#umbracModalBoxClose,
a.umbracModalBoxClose {
display: block;
position: absolute;
right: 5px; top: 2px;
padding: 2px 3px;
font-weight: bold;
text-decoration: none;
font-size: 13px;
}
div#umbModalBoxContent,
div.umbModalBoxContent {border-top: 1px solid #F9F9F9; }
div#umbModalBoxHeader,
div.umbModalBoxHeader {
background: url(modalGradiant.gif) repeat-x bottom #fff ! important;
border-bottom: 1px solid #CCC;
color: #378080;
cursor:move;
}
div#umbracModalBoxClose,
div.umbracModalBoxClose { color: #777 }
div#umbracModalBoxClose:hover,
div.umbracModalBoxClose:hover { color: #000 }