%PDF- %PDF-
| Direktori : /home1/lightco1/www/administrator/components/com_poweradmin/assets/js/joomlashine/ |
| Current File : //home1/lightco1/www/administrator/components/com_poweradmin/assets/js/joomlashine/jsn.window.js |
/**
*
* Window plugin support open multi-window with variables
*
* @author JoomlaShine.com http://www.joomlashine.com
* @copyright Copyright (C) 2011 JoomlaShine.com. All rights reserved.
* @license GNU/GPL v2 http://www.gnu.org/licenses/gpl-2.0.html
Descriptions:
1. Required files/libs:
- jQuery lib
- jQuery UI
**/
(function($){
var _internalCheck,
_uiwIndex = 0,
_uiWindowInstances = [];
$.extend({
/**
*
* Add popup window. An customize of jQuery UI dialog.
*
* @param: (string) (link) is url page you want to open in popup
* @param: (string) (array) is setting for that window and jQueryUI dialog
* @return: POPUP page and jQuery object
*/
JSNUIWindow: function(link, options){
var ops = $.extend({
width : 800,
height : 500,
autoOpen : true,
closeOnEscape: false,
draggable : true,
hide : false,
modal : true,
position : 'center',
resizable : false,
show : true,
buttons : {},
open : {},
dialogClass : 'ui-window-site-manager',
close : undefined,
search : undefined,
switchMode : undefined,
scrollContent: true,
tmplComponent: /tmpl=component/.test( link ),
title : ''
}, options);
_uiwIndex++;
var $this = this;
var $id = 'uiwindow'+'-'+_uiwIndex;
if (_uiWindowInstances[$id] !== undefined) return _uiWindowInstances[$id];
if (ops.modal){
$('.jsnui-window-iframe').parent().remove();
}
var $iframeId = 'iframe-'+$id;
var imgLoadingId = 'img-loading-'+$id;
var $w = $('<div/>', {
'id' : $id,
'style': 'overflow:hidden;'
});
var $el = $('<iframe />', {
'id' : $iframeId,
'frameborder' : '0',
'name' : 'jsnuiwindow',
'class' : 'jsnui-window-iframe',
'scrolling' : (options.scrollContent == false) ? 'no' : 'yes'
})
.appendTo($w)
.css({
'width' : ops.width-30,
'height' : ops.height-70,
'overflow-y' : (options.scrollContent == false) ? 'hidden' : 'scroll',
'overflow-x' : 'hidden'
});
if ((/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(link))){
$el.attr('src', link);
}
/**
* Call dialog of jQuery UI
*/
if (ops.modal){
_uiWindowInstances = new Array();
$('.ui-window-site-manager').remove();
}
if ( ops.close == undefined ){
ops.close = function(event, e){
$w.remove();
};
}
$w.appendTo('header');
$w.dialog({
width : ops.width,
height : ops.height,
autoOpen : ops.autoOpen,
closeOnEscape: ops.closeOnEscape,
draggable : false,
hide : ops.hide,
modal : ops.modal,
position : ops.position,
resizable : ops.resizable,
//show : ops.show,
buttons : ops.buttons,
open : ops.open,
dialogClass : ops.dialogClass,
resizeStop : function(event, e){
$w.trigger("jsn.window.resize");
$el.animate({
width : $w.parent().width()-30,
height: $w.parent().height()-70
}, 500 );
},
close : ops.close,
title : ops.title
});
$w.css('padding-left','5px');
//Swich mode
if ( ops.switchMode && ops.switchMode.modes.length > 0){
var switchMode = $('<button />', {
'id' : 'ui-window-switchmode',
'class' : 'ui-window-switchmode'
}).appendTo($('.ui-window-toolbar-button'));
var opSwitchMode = $.extend({
modes : [
{
name : 'Switch to text mode',
action : function(event, obj){
},
defaultMode : false
},
{
name : 'Switch to visual mode',
action : function(event, obj){
},
defaultMode : true
}
]
}, ops.switchMode);
switchMode.text(opSwitchMode.modes[0].name);
switchMode.currentMode = 0;
switchMode.modeAction = opSwitchMode.modes[0].action;
switchMode.css('left', (ops.width / 2) - (switchMode.width() / 2) - 15);
$w.unbind("jsn.window.resize").bind("jsn.window.resize", function(){
switchMode.animate({
'left' : (ops.width / 2) - (switchMode.width() / 2) - 15
});
});
switchMode.unbind("click").click(function(e){
switchMode.modeAction(e, this, $this);
opSwitchMode.changeMode();
});
/**
*
* Change modes. Can to change multi modes
*/
opSwitchMode.changeMode = function(){
if (switchMode.currentMode == opSwitchMode.modes.length - 1){
switchMode.currentMode = 0;
}else{
switchMode.currentMode += 1;
}
switchMode.html(opSwitchMode.modes[switchMode.currentMode].name);
switchMode.modeAction = opSwitchMode.modes[switchMode.currentMode].action;
};
/**
* Get default mode
*/
for(var i = 0; i < opSwitchMode.modes.length; i++){
if ( opSwitchMode.modes[i].defaultMode ){
switchMode.html(opSwitchMode.modes[i].name);
switchMode.currentMode = i;
switchMode.modeAction = opSwitchMode.modes[i].action;
switchMode.unbind("click").click(function(e){
switchMode.modeAction(e, this, $this);
opSwitchMode.changeMode();
});
switchMode.css('left', (ops.width / 2) - (switchMode.width() / 2) - 15);
}
}
}
//Search
if (ops.search){
var search = $('<input type="text"/>');
var searchWrapper = $('<span class="jsn-bootstrap ui-window-searchbar-wrapper"/>');
searchWrapper.appendTo($('.ui-dialog-titlebar'));
search.appendTo(searchWrapper);
var opSearch = $.extend({
text : '',
css : {},
classSet : '',
attrs : {},
onChange : undefined,
onKeyup : undefined,
onKeydown : undefined,
onBlur : undefined,
onFocus : undefined,
onClick : undefined,
ondblClick : undefined,
onKeypress : undefined,
closeTextKeyword : false,
defaultText : '',
afterAddTextCloseSearch: function(obj){},
closeTextClick : function(obj, searchbox){}
}, ops.search);
search.val(opSearch.text);
search.css(opSearch.css);
search.addClass(opSearch.classSet);
for(name in opSearch.attrs){
search.attr(name, opSearch.attrs[name]);
}
search.change(opSearch.onChange);
search.keyup(opSearch.onKeyup);
search.keydown(opSearch.onKeydown);
search.blur(opSearch.onBlur);
search.focus(opSearch.onFocus);
search.click(opSearch.onClick);
search.dblclick(opSearch.ondblClick);
search.keypress(opSearch.onKeypress);
search.mouseup(function (){
search.focus();
});
if ( opSearch.closeTextKeyword ){
var closeTextKeyword = $('<a />', {
'class' : 'ui-window-closetext-keyword',
'id' : 'ui-window-closetext-keyword',
'href' : 'javascript:void(0);'
}).click(function(){
opSearch.closeTextClick( $(this), search );
});
opSearch.afterAddTextCloseSearch(closeTextKeyword);
search.after(closeTextKeyword);
search.change(function(){
if ($(this).val().trim() == opSearch.defaultText || $(this).val().trim() == ''){
closeTextKeyword.hide();
}else{
closeTextKeyword.show();
}
});
}
}
//Add image loading
if ($('.ui-widget-overlay').find('.img-box-loading').length){
$('.ui-widget-overlay').find('.img-box-loading').remove();
}
var imgBoxLoading = $('<div />', {
'class' : 'img-box-loading'
})
.appendTo($('.ui-widget-overlay'))
.css({
'top' : $(window).height()/2-12+'px',
'left' : $(document).width()/2-12+'px',
'z-index' : $.topZIndex()
});
$('<img />', {
'id' : imgLoadingId,
'class' : 'imgLoading',
'src' : baseUrl+'plugins/system/jsnframework/assets/joomlashine/images/icons-24/icon-24-dark-loading-circle.gif'
})
.appendTo(imgBoxLoading);
if ($w.parent()[0].tagName != 'body'){
$w.parent().css('left','-900000px');
//$w.parent().hide();
}
if ($.browser.msie && $.browser.version < 9){
var subHeight = 60;
}else{
var subHeight = 59;
}
$el.load(function(){
if ($.checkResponse !== undefined) {
$.checkResponse($el.contents());
}
if ( ops.tmplComponent ){
var form = $(this).contents().find('form[name="adminForm"]');
if ( !/tmpl=component/.test( form.attr('action') ) ){
form.attr('action', form.attr('action') + '&tmpl=component');
}
}
if ( $.browser.msie && $.browser.version < 8 ){
$el.css({
'width' : ops.width + 18,
'height': ops.height
});
}else{
$el.css({
'width' : ops.width,
'height': ops.height - subHeight
});
}
$w.css({
'height': ops.height - subHeight
})
.parent()
.css({
'top': $(window).height() / 2 - $w.parent().height()/2,
'left': $(window).width() / 2 - $w.parent().width()/2
});
// Make iframe scrollable on ios devices
// (Ios version equal or below 5.1.1 render not well)
if (/iPhone|iPod|iPad/.test(navigator.userAgent)) {
$w.css({
'height': $el.css('height'),
'overflow': 'auto',
'-webkit-overflow-scrolling': 'touch'
});
}
$el.trigger("uiwindow.iframeloaded");
});
/**
*
* Resize window
*
* @param: (Array) (options) is array store options new size
*/
this.resize = function(options)
{
var _newSize = $.extend({
width : ops.width,
height : ops.height,
complete : function(){
}
}, options);
ops.width = _newSize.width;
ops.height = _newSize.height;
$w.trigger("jsn.window.resize");
$el.css('visibility', 'hidden');
$w.parent().animate({
width : _newSize.width,
height : _newSize.height,
left : $(window).width()/2 - _newSize.width/2,
top : $(window).height()/2 - _newSize.height/2
}, 500, function(){
$w.dialog("option", _newSize);
$w.css({
'width' : $w.parent().width(),
'height' : $w.parent().height()-65,
'padding-left': '5px'
});
$el.css({
'width' : $w.parent().width(),
'height' : $w.parent().height()-65
});
$el.css('visibility', 'visible');
_newSize.complete();
});
};
/**
*
* Change SRC of iframe content
*
* @param: (string) (src) is link of page need to show
*/
this.changeIframeSrc = function(newSrc)
{
if ((/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(newSrc))){
var loading = $('<div />', {
'class' : 'ui-widget-overlay-changemode'
});
$('<img />', {
'id' : 'img-loading',
'src' : baseUrl+'plugins/system/jsnframework/assets/joomlashine/images/icons-24/icon-24-loading-circle.gif'
})
.appendTo(loading)
.css({
'position': 'relative',
'top' : $w.height()/2-12+'px',
'left' : $w.width()/2-12+'px'
});
$w.resize(function(){
loading.css({
'width' : 0,
'height': 0
}).css({
'width' : $w.width(),
'height': $w.height()
});
loading.find('img#img-loading').css
(
{
'position': 'relative',
'top' : $(this).height()/2-12+'px',
'left' : $(this).width()/2-12+'px'
}
);
});
$w.append(loading);
$el.attr('src', newSrc);
$el.css('visibility', 'hidden').unbind("uiwindow.iframeloaded").bind("uiwindow.iframeloaded", function(){
$el.css('visibility', 'visible');
$w.find('div.ui-widget-overlay-changemode').remove();
});
}
};
/**
*
* Get Iframe of content window
*
* @return: jQuery Element
*/
this.getDialogBox = function(){
return $w;
};
/**
*
* Get Iframe of content window
*
* @return: jQuery Element
*/
this.getIframe = function(){
return $el;
};
/**
*
* Show function
*
* @return: None/show dialog
*/
this.show = function(){
$w.dialog("open");
};
/**
*
* Close
*
* @return: None/Close dialog
*/
this.close = function(){
$w.dialog("close");
};
/**
*
* Option (overwrite)
*
* @param: (jQuery object) (option)
* @return: None
*/
this.option = function(option){
$w.dialog("option", option);
};
/**
*
* Submit form
*
* @param: (string) (task) is joomla task name submit
* @return: Submit page
*/
this.submitForm = function(task, submitType, __stateReadyCallback){
submitType = ( submitType == undefined ) ? 'Save' : submitType;
var completed_require_fields = true;
if ($el.contents().find('form[name="adminForm"]').length == 0) return false;
$el.contents().find('input[class~="required"]').each(function(){
if ($(this).val() == ''){
$(this).removeClass('invalid').addClass('invalid');
$(this).attr('aria-invalid', 'true');
completed_require_fields = false;
if ($(this).prev().hasClass('required')){
$(this).prev().removeClass('invalid').addClass('invalid');
$(this).prev().attr('aria-invalid', 'true');
}
}
});
if (completed_require_fields){
if ( submitType.trim().toLowerCase() == 'save & close' ){
$w.parent().fadeOut(300, function(){
$el.load(function(){
if(!$(this).contents().find('#system-message-container dd.error>ul>li,dd.warning>ul>li').text()){
$w.dialog("close");
}else{
$w.parent().fadeIn(200);
}
});
});
}
$el[0].onload = function(){
if ($.isFunction(__stateReadyCallback)){
__stateReadyCallback();
}
};
$el.contents().find('input[name="task"]').val(task);
$el.contents().find('form[name="adminForm"]').submit();
return true;
}
return false;
};
//Somthing jqueryui dialog hidden body page
clearInterval(_internalCheck);
_internalCheck = setInterval(function(){
if ($('body').css('display') == 'none'){
$('body').show();
}
if ( parseFloat($w.parent().css('top')) < 0){
$w.parent().css({
'top': $(window).height() / 2 - $w.parent().height()/2
});
}
}, 100);
//reassignment
$this = this;
_uiWindowInstances[$id] = this;
return this;
},
/**
*
* Add an popup window message. An customize of jQuery UI dialog.
*
* @param: (string) (msg) is text of message
* @param: 9string) (delay) is (number of time delay)
* @return: Add jQuery element
*/
JSNUIMessage: function(msg, delay){
if ( $('#jsn-poweradmin-message').length > 0 ){
$('#jsn-poweradmin-message').dialog("close");
$('#jsn-poweradmin-message').remove();
}
$('body').append('<div id="jsn-poweradmin-message">'+msg+'</div>');
var w_msg = $('#jsn-poweradmin-message');
w_msg.dialog({
title : JSNLang.translate( 'JSN_MESSAGE_TITLE' ),
width : 500,
height : 60,
resizable : false,
modal : false,
draggable : false,
dialogClass : 'ui-window-site-manager jsn-poweradmin-message',
close : function(){
w_msg.remove();
}
}).prev().hide();
w_msg.css('height', 'auto')
.parent()
.css({
'height' : 0,
'bottom' : 20,
'left' : parseInt($(window).width())/2 - parseInt(w_msg.width())/2,
'top' : '',
'position' : 'fixed'
});
w_msg.parent().animate({
"height": w_msg.height()
}, "slow");
setTimeout(function(){
if (w_msg.length){
w_msg.parent().animate({
"height" : "toggle",
"opacity": "toggle"
}, { duration: "slow" }, function(){
w_msg.dialog("close");
$('#jsn-poweradmin-message').remove();
});
}
}, delay);
}
});
/**
*
* Get Instances JSNUIWindow
*
* @return: Close all windows
*/
$.closeAllJSNWindow = function(){
try{
$('.jsnui-window-iframe').parent().dialog("close");
}catch(e){
console.log(e.message);
}
};
})(JoomlaShine.jQuery);