mirror of https://github.com/abpframework/abp.git
41 changed files with 8380 additions and 8382 deletions
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
@ -1,56 +1,56 @@ |
|||||
@keyframes spin { |
@keyframes spin { |
||||
0% { |
0% { |
||||
transform: translateZ(0) rotate(0deg); |
transform: translateZ(0) rotate(0deg); |
||||
} |
} |
||||
|
|
||||
100% { |
100% { |
||||
transform: translateZ(0) rotate(360deg); |
transform: translateZ(0) rotate(360deg); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
.abp-block-area { |
.abp-block-area { |
||||
position: fixed; |
position: fixed; |
||||
top: 0; |
top: 0; |
||||
left: 0; |
left: 0; |
||||
width: 100%; |
width: 100%; |
||||
height: 100%; |
height: 100%; |
||||
z-index: 102; |
z-index: 102; |
||||
background-color: #fff; |
background-color: #fff; |
||||
opacity: .8; |
opacity: .8; |
||||
transition: opacity .25s; |
transition: opacity .25s; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-disappearing { |
.abp-block-area.abp-block-area-disappearing { |
||||
opacity: 0; |
opacity: 0; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:after { |
.abp-block-area.abp-block-area-busy:after { |
||||
content: attr(data-text); |
content: attr(data-text); |
||||
display: block; |
display: block; |
||||
max-width: 125px; |
max-width: 125px; |
||||
position: absolute; |
position: absolute; |
||||
top: 50%; |
top: 50%; |
||||
left: 50%; |
left: 50%; |
||||
transform: translate(-50%, -50%); |
transform: translate(-50%, -50%); |
||||
font-size: 20px; |
font-size: 20px; |
||||
font-family: sans-serif; |
font-family: sans-serif; |
||||
color: #343a40; |
color: #343a40; |
||||
text-align: center; |
text-align: center; |
||||
text-transform: uppercase; |
text-transform: uppercase; |
||||
} |
} |
||||
|
|
||||
.abp-block-area.abp-block-area-busy:before { |
.abp-block-area.abp-block-area-busy:before { |
||||
content: ""; |
content: ""; |
||||
display: block; |
display: block; |
||||
width: 150px; |
width: 150px; |
||||
height: 150px; |
height: 150px; |
||||
border-radius: 50%; |
border-radius: 50%; |
||||
border-width: 2px; |
border-width: 2px; |
||||
border-style: solid; |
border-style: solid; |
||||
border-color: transparent #228ae6 #228ae6 #228ae6; |
border-color: transparent #228ae6 #228ae6 #228ae6; |
||||
position: absolute; |
position: absolute; |
||||
top: calc(50% - 75px); |
top: calc(50% - 75px); |
||||
left: calc(50% - 75px); |
left: calc(50% - 75px); |
||||
will-change: transform; |
will-change: transform; |
||||
animation: spin .75s infinite ease-in-out; |
animation: spin .75s infinite ease-in-out; |
||||
} |
} |
||||
|
|||||
File diff suppressed because it is too large
@ -1,393 +1,393 @@ |
|||||
var abp = abp || {}; |
var abp = abp || {}; |
||||
(function($) { |
(function($) { |
||||
|
|
||||
if (!$) { |
if (!$) { |
||||
throw "abp/jquery library requires the jquery library included to the page!"; |
throw "abp/jquery library requires the jquery library included to the page!"; |
||||
} |
} |
||||
|
|
||||
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
// ABP CORE OVERRIDES /////////////////////////////////////////////////////
|
||||
|
|
||||
abp.message._showMessage = function (message, title) { |
abp.message._showMessage = function (message, title) { |
||||
alert((title || '') + ' ' + message); |
alert((title || '') + ' ' + message); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(); |
$dfd.resolve(); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.message.confirm = function (message, titleOrCallback, callback) { |
abp.message.confirm = function (message, titleOrCallback, callback) { |
||||
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
if (titleOrCallback && !(typeof titleOrCallback == 'string')) { |
||||
callback = titleOrCallback; |
callback = titleOrCallback; |
||||
} |
} |
||||
|
|
||||
var result = confirm(message); |
var result = confirm(message); |
||||
callback && callback(result); |
callback && callback(result); |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$dfd.resolve(result); |
$dfd.resolve(result); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
abp.utils.isFunction = function (obj) { |
abp.utils.isFunction = function (obj) { |
||||
return $.isFunction(obj); |
return $.isFunction(obj); |
||||
}; |
}; |
||||
|
|
||||
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
// JQUERY EXTENSIONS //////////////////////////////////////////////////////
|
||||
|
|
||||
$.fn.findWithSelf = function (selector) { |
$.fn.findWithSelf = function (selector) { |
||||
return this.filter(selector).add(this.find(selector)); |
return this.filter(selector).add(this.find(selector)); |
||||
}; |
}; |
||||
|
|
||||
// DOM ////////////////////////////////////////////////////////////////////
|
// DOM ////////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.dom = abp.dom || {}; |
abp.dom = abp.dom || {}; |
||||
|
|
||||
abp.dom.onNodeAdded = function (callback) { |
abp.dom.onNodeAdded = function (callback) { |
||||
abp.event.on('abp.dom.nodeAdded', callback); |
abp.event.on('abp.dom.nodeAdded', callback); |
||||
}; |
}; |
||||
|
|
||||
abp.dom.onNodeRemoved = function (callback) { |
abp.dom.onNodeRemoved = function (callback) { |
||||
abp.event.on('abp.dom.nodeRemoved', callback); |
abp.event.on('abp.dom.nodeRemoved', callback); |
||||
}; |
}; |
||||
|
|
||||
var mutationObserverCallback = function (mutationsList) { |
var mutationObserverCallback = function (mutationsList) { |
||||
for (var i = 0; i < mutationsList.length; i++) { |
for (var i = 0; i < mutationsList.length; i++) { |
||||
var mutation = mutationsList[i]; |
var mutation = mutationsList[i]; |
||||
if (mutation.type === 'childList') { |
if (mutation.type === 'childList') { |
||||
if (mutation.addedNodes && mutation.removedNodes.length) { |
if (mutation.addedNodes && mutation.removedNodes.length) { |
||||
for (var k = 0; k < mutation.removedNodes.length; k++) { |
for (var k = 0; k < mutation.removedNodes.length; k++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeRemoved', |
'abp.dom.nodeRemoved', |
||||
{ |
{ |
||||
$el: $(mutation.removedNodes[k]) |
$el: $(mutation.removedNodes[k]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
if (mutation.addedNodes && mutation.addedNodes.length) { |
if (mutation.addedNodes && mutation.addedNodes.length) { |
||||
for (var j = 0; j < mutation.addedNodes.length; j++) { |
for (var j = 0; j < mutation.addedNodes.length; j++) { |
||||
abp.event.trigger( |
abp.event.trigger( |
||||
'abp.dom.nodeAdded', |
'abp.dom.nodeAdded', |
||||
{ |
{ |
||||
$el: $(mutation.addedNodes[j]) |
$el: $(mutation.addedNodes[j]) |
||||
} |
} |
||||
); |
); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
new MutationObserver(mutationObserverCallback).observe( |
new MutationObserver(mutationObserverCallback).observe( |
||||
$('body')[0], |
$('body')[0], |
||||
{ |
{ |
||||
subtree: true, |
subtree: true, |
||||
childList: true |
childList: true |
||||
} |
} |
||||
); |
); |
||||
|
|
||||
// AJAX ///////////////////////////////////////////////////////////////////
|
// AJAX ///////////////////////////////////////////////////////////////////
|
||||
|
|
||||
abp.ajax = function (userOptions) { |
abp.ajax = function (userOptions) { |
||||
userOptions = userOptions || {}; |
userOptions = userOptions || {}; |
||||
|
|
||||
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
var options = $.extend(true, {}, abp.ajax.defaultOpts, userOptions); |
||||
|
|
||||
options.success = undefined; |
options.success = undefined; |
||||
options.error = undefined; |
options.error = undefined; |
||||
|
|
||||
return $.Deferred(function ($dfd) { |
return $.Deferred(function ($dfd) { |
||||
$.ajax(options) |
$.ajax(options) |
||||
.done(function (data, textStatus, jqXHR) { |
.done(function (data, textStatus, jqXHR) { |
||||
$dfd.resolve(data); |
$dfd.resolve(data); |
||||
userOptions.success && userOptions.success(data); |
userOptions.success && userOptions.success(data); |
||||
}).fail(function (jqXHR) { |
}).fail(function (jqXHR) { |
||||
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
if (jqXHR.getResponseHeader('_AbpErrorFormat') === 'true') { |
||||
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} else { |
} else { |
||||
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
abp.ajax.handleNonAbpErrorResponse(jqXHR, userOptions, $dfd); |
||||
} |
} |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
$.extend(abp.ajax, { |
$.extend(abp.ajax, { |
||||
defaultOpts: { |
defaultOpts: { |
||||
dataType: 'json', |
dataType: 'json', |
||||
type: 'POST', |
type: 'POST', |
||||
contentType: 'application/json', |
contentType: 'application/json', |
||||
headers: { |
headers: { |
||||
'X-Requested-With': 'XMLHttpRequest' |
'X-Requested-With': 'XMLHttpRequest' |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
defaultError: { |
defaultError: { |
||||
message: 'An error has occurred!', |
message: 'An error has occurred!', |
||||
details: 'Error detail not sent by server.' |
details: 'Error detail not sent by server.' |
||||
}, |
}, |
||||
|
|
||||
defaultError401: { |
defaultError401: { |
||||
message: 'You are not authenticated!', |
message: 'You are not authenticated!', |
||||
details: 'You should be authenticated (sign in) in order to perform this operation.' |
details: 'You should be authenticated (sign in) in order to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError403: { |
defaultError403: { |
||||
message: 'You are not authorized!', |
message: 'You are not authorized!', |
||||
details: 'You are not allowed to perform this operation.' |
details: 'You are not allowed to perform this operation.' |
||||
}, |
}, |
||||
|
|
||||
defaultError404: { |
defaultError404: { |
||||
message: 'Resource not found!', |
message: 'Resource not found!', |
||||
details: 'The resource requested could not found on the server.' |
details: 'The resource requested could not found on the server.' |
||||
}, |
}, |
||||
|
|
||||
logError: function (error) { |
logError: function (error) { |
||||
abp.log.error(error); |
abp.log.error(error); |
||||
}, |
}, |
||||
|
|
||||
showError: function (error) { |
showError: function (error) { |
||||
if (error.details) { |
if (error.details) { |
||||
return abp.message.error(error.details, error.message); |
return abp.message.error(error.details, error.message); |
||||
} else { |
} else { |
||||
return abp.message.error(error.message || abp.ajax.defaultError.message); |
return abp.message.error(error.message || abp.ajax.defaultError.message); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleTargetUrl: function (targetUrl) { |
handleTargetUrl: function (targetUrl) { |
||||
if (!targetUrl) { |
if (!targetUrl) { |
||||
location.href = abp.appPath; |
location.href = abp.appPath; |
||||
} else { |
} else { |
||||
location.href = targetUrl; |
location.href = targetUrl; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleErrorStatusCode: function (status) { |
handleErrorStatusCode: function (status) { |
||||
switch (status) { |
switch (status) { |
||||
case 401: |
case 401: |
||||
abp.ajax.handleUnAuthorizedRequest( |
abp.ajax.handleUnAuthorizedRequest( |
||||
abp.ajax.showError(abp.ajax.defaultError401), |
abp.ajax.showError(abp.ajax.defaultError401), |
||||
abp.appPath |
abp.appPath |
||||
); |
); |
||||
break; |
break; |
||||
case 403: |
case 403: |
||||
abp.ajax.showError(abp.ajax.defaultError403); |
abp.ajax.showError(abp.ajax.defaultError403); |
||||
break; |
break; |
||||
case 404: |
case 404: |
||||
abp.ajax.showError(abp.ajax.defaultError404); |
abp.ajax.showError(abp.ajax.defaultError404); |
||||
break; |
break; |
||||
default: |
default: |
||||
abp.ajax.showError(abp.ajax.defaultError); |
abp.ajax.showError(abp.ajax.defaultError); |
||||
break; |
break; |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleNonAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleErrorStatusCode(jqXHR.status); |
abp.ajax.handleErrorStatusCode(jqXHR.status); |
||||
} |
} |
||||
|
|
||||
$dfd.reject.apply(this, arguments); |
$dfd.reject.apply(this, arguments); |
||||
userOptions.error && userOptions.error.apply(this, arguments); |
userOptions.error && userOptions.error.apply(this, arguments); |
||||
}, |
}, |
||||
|
|
||||
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
handleAbpErrorResponse: function (jqXHR, userOptions, $dfd) { |
||||
var messagePromise = null; |
var messagePromise = null; |
||||
|
|
||||
if (userOptions.abpHandleError !== false) { |
if (userOptions.abpHandleError !== false) { |
||||
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
messagePromise = abp.ajax.showError(jqXHR.responseJSON.error); |
||||
} |
} |
||||
|
|
||||
abp.ajax.logError(jqXHR.responseJSON.error); |
abp.ajax.logError(jqXHR.responseJSON.error); |
||||
|
|
||||
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
$dfd && $dfd.reject(jqXHR.responseJSON.error, jqXHR); |
||||
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
userOptions.error && userOptions.error(jqXHR.responseJSON.error, jqXHR); |
||||
|
|
||||
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
if (jqXHR.status === 401 && userOptions.abpHandleError !== false) { |
||||
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
abp.ajax.handleUnAuthorizedRequest(messagePromise); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
handleUnAuthorizedRequest: function (messagePromise, targetUrl) { |
||||
if (messagePromise) { |
if (messagePromise) { |
||||
messagePromise.done(function () { |
messagePromise.done(function () { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
}); |
}); |
||||
} else { |
} else { |
||||
abp.ajax.handleTargetUrl(targetUrl); |
abp.ajax.handleTargetUrl(targetUrl); |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
blockUI: function (options) { |
blockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //block whole page
|
if (options.blockUI === true) { //block whole page
|
||||
abp.ui.setBusy(); |
abp.ui.setBusy(); |
||||
} else { //block an element
|
} else { //block an element
|
||||
abp.ui.setBusy(options.blockUI); |
abp.ui.setBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
unblockUI: function (options) { |
unblockUI: function (options) { |
||||
if (options.blockUI) { |
if (options.blockUI) { |
||||
if (options.blockUI === true) { //unblock whole page
|
if (options.blockUI === true) { //unblock whole page
|
||||
abp.ui.clearBusy(); |
abp.ui.clearBusy(); |
||||
} else { //unblock an element
|
} else { //unblock an element
|
||||
abp.ui.clearBusy(options.blockUI); |
abp.ui.clearBusy(options.blockUI); |
||||
} |
} |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
ajaxSendHandler: function (event, request, settings) { |
ajaxSendHandler: function (event, request, settings) { |
||||
var token = abp.security.antiForgery.getToken(); |
var token = abp.security.antiForgery.getToken(); |
||||
if (!token) { |
if (!token) { |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
if (!settings.headers || settings.headers[abp.security.antiForgery.tokenHeaderName] === undefined) { |
||||
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
request.setRequestHeader(abp.security.antiForgery.tokenHeaderName, token); |
||||
} |
} |
||||
} |
} |
||||
}); |
}); |
||||
|
|
||||
$(document).ajaxSend(function (event, request, settings) { |
$(document).ajaxSend(function (event, request, settings) { |
||||
return abp.ajax.ajaxSendHandler(event, request, settings); |
return abp.ajax.ajaxSendHandler(event, request, settings); |
||||
}); |
}); |
||||
|
|
||||
abp.event.on('abp.configurationInitialized', function () { |
abp.event.on('abp.configurationInitialized', function () { |
||||
var l = abp.localization.getResource('AbpUi'); |
var l = abp.localization.getResource('AbpUi'); |
||||
|
|
||||
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
abp.ajax.defaultError.message = l('DefaultErrorMessage'); |
||||
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
abp.ajax.defaultError.details = l('DefaultErrorMessageDetail'); |
||||
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
abp.ajax.defaultError401.message = l('DefaultErrorMessage401'); |
||||
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
abp.ajax.defaultError401.details = l('DefaultErrorMessage401Detail'); |
||||
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
abp.ajax.defaultError403.message = l('DefaultErrorMessage403'); |
||||
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
abp.ajax.defaultError403.details = l('DefaultErrorMessage403Detail'); |
||||
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
abp.ajax.defaultError404.message = l('DefaultErrorMessage404'); |
||||
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); |
||||
}); |
}); |
||||
|
|
||||
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
// RESOURCE LOADER ////////////////////////////////////////////////////////
|
||||
|
|
||||
/* UrlStates enum */ |
/* UrlStates enum */ |
||||
var UrlStates = { |
var UrlStates = { |
||||
LOADING: 'LOADING', |
LOADING: 'LOADING', |
||||
LOADED: 'LOADED', |
LOADED: 'LOADED', |
||||
FAILED: 'FAILED' |
FAILED: 'FAILED' |
||||
}; |
}; |
||||
|
|
||||
/* UrlInfo class */ |
/* UrlInfo class */ |
||||
function UrlInfo(url) { |
function UrlInfo(url) { |
||||
this.url = url; |
this.url = url; |
||||
this.state = UrlStates.LOADING; |
this.state = UrlStates.LOADING; |
||||
this.loadCallbacks = []; |
this.loadCallbacks = []; |
||||
this.failCallbacks = []; |
this.failCallbacks = []; |
||||
} |
} |
||||
|
|
||||
UrlInfo.prototype.succeed = function () { |
UrlInfo.prototype.succeed = function () { |
||||
this.state = UrlStates.LOADED; |
this.state = UrlStates.LOADED; |
||||
for (var i = 0; i < this.loadCallbacks.length; i++) { |
for (var i = 0; i < this.loadCallbacks.length; i++) { |
||||
this.loadCallbacks[i](); |
this.loadCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.failed = function () { |
UrlInfo.prototype.failed = function () { |
||||
this.state = UrlStates.FAILED; |
this.state = UrlStates.FAILED; |
||||
for (var i = 0; i < this.failCallbacks.length; i++) { |
for (var i = 0; i < this.failCallbacks.length; i++) { |
||||
this.failCallbacks[i](); |
this.failCallbacks[i](); |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { |
||||
switch (this.state) { |
switch (this.state) { |
||||
case UrlStates.LOADED: |
case UrlStates.LOADED: |
||||
loadCallback && loadCallback(); |
loadCallback && loadCallback(); |
||||
break; |
break; |
||||
case UrlStates.FAILED: |
case UrlStates.FAILED: |
||||
failCallback && failCallback(); |
failCallback && failCallback(); |
||||
break; |
break; |
||||
case UrlStates.LOADING: |
case UrlStates.LOADING: |
||||
this.addCallbacks(loadCallback, failCallback); |
this.addCallbacks(loadCallback, failCallback); |
||||
break; |
break; |
||||
} |
} |
||||
}; |
}; |
||||
|
|
||||
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { |
||||
loadCallback && this.loadCallbacks.push(loadCallback); |
loadCallback && this.loadCallbacks.push(loadCallback); |
||||
failCallback && this.failCallbacks.push(failCallback); |
failCallback && this.failCallbacks.push(failCallback); |
||||
}; |
}; |
||||
|
|
||||
/* ResourceLoader API */ |
/* ResourceLoader API */ |
||||
|
|
||||
abp.ResourceLoader = (function () { |
abp.ResourceLoader = (function () { |
||||
|
|
||||
var _urlInfos = {}; |
var _urlInfos = {}; |
||||
|
|
||||
function getCacheKey(url) { |
function getCacheKey(url) { |
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
function appendTimeToUrl(url) { |
function appendTimeToUrl(url) { |
||||
|
|
||||
if (url.indexOf('?') < 0) { |
if (url.indexOf('?') < 0) { |
||||
url += '?'; |
url += '?'; |
||||
} else { |
} else { |
||||
url += '&'; |
url += '&'; |
||||
} |
} |
||||
|
|
||||
url += '_=' + new Date().getTime(); |
url += '_=' + new Date().getTime(); |
||||
|
|
||||
return url; |
return url; |
||||
} |
} |
||||
|
|
||||
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { |
||||
|
|
||||
var cacheKey = getCacheKey(url); |
var cacheKey = getCacheKey(url); |
||||
|
|
||||
var urlInfo = _urlInfos[cacheKey]; |
var urlInfo = _urlInfos[cacheKey]; |
||||
|
|
||||
if (urlInfo) { |
if (urlInfo) { |
||||
urlInfo.handleCallbacks(loadCallback, failCallback); |
urlInfo.handleCallbacks(loadCallback, failCallback); |
||||
return; |
return; |
||||
} |
} |
||||
|
|
||||
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url); |
||||
urlInfo.addCallbacks(loadCallback, failCallback); |
urlInfo.addCallbacks(loadCallback, failCallback); |
||||
|
|
||||
serverLoader(urlInfo); |
serverLoader(urlInfo); |
||||
}; |
}; |
||||
|
|
||||
var _loadScript = function (url, loadCallback, failCallback) { |
var _loadScript = function (url, loadCallback, failCallback) { |
||||
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { |
||||
$.get({ |
$.get({ |
||||
url: url, |
url: url, |
||||
dataType: 'text' |
dataType: 'text' |
||||
}) |
}) |
||||
.done(function (script) { |
.done(function (script) { |
||||
$.globalEval(script); |
$.globalEval(script); |
||||
urlInfo.succeed(); |
urlInfo.succeed(); |
||||
}) |
}) |
||||
.fail(function () { |
.fail(function () { |
||||
urlInfo.failed(); |
urlInfo.failed(); |
||||
}); |
}); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
var _loadStyle = function (url) { |
var _loadStyle = function (url) { |
||||
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
_loadFromUrl(url, undefined, undefined, function (urlInfo) { |
||||
|
|
||||
$('<link/>', { |
$('<link/>', { |
||||
rel: 'stylesheet', |
rel: 'stylesheet', |
||||
type: 'text/css', |
type: 'text/css', |
||||
href: appendTimeToUrl(url) |
href: appendTimeToUrl(url) |
||||
}).appendTo('head'); |
}).appendTo('head'); |
||||
}); |
}); |
||||
}; |
}; |
||||
|
|
||||
return { |
return { |
||||
loadScript: _loadScript, |
loadScript: _loadScript, |
||||
loadStyle: _loadStyle |
loadStyle: _loadStyle |
||||
} |
} |
||||
})(); |
})(); |
||||
|
|
||||
})(jQuery); |
})(jQuery); |
||||
Binary file not shown.
Loading…
Reference in new issue