diff --git a/npm/packs/core/src/abp.js b/npm/packs/core/src/abp.js index b72b8b49e5..4c87489e22 100644 --- a/npm/packs/core/src/abp.js +++ b/npm/packs/core/src/abp.js @@ -1,5 +1,5 @@ -var abp = abp || {}; -(function ($) { +var abp = abp || {}; +(function () { /* Application paths *****************************************/ @@ -187,41 +187,32 @@ abp.message = abp.message || {}; - var showMessage = function (message, title) { + abp.message._showMessage = function (message, title) { alert((title || '') + ' ' + message); - - if (!$) { - abp.log.warn('abp.message can not return promise since jQuery is not defined!'); - return null; - } - - return $.Deferred(function ($dfd) { - $dfd.resolve(); - }); }; abp.message.info = function (message, title) { abp.log.warn('abp.message.info is not implemented!'); - return showMessage(message, title); + return abp.message._showMessage(message, title); }; abp.message.success = function (message, title) { abp.log.warn('abp.message.success is not implemented!'); - return showMessage(message, title); + return abp.message._showMessage(message, title); }; abp.message.warn = function (message, title) { abp.log.warn('abp.message.warn is not implemented!'); - return showMessage(message, title); + return abp.message._showMessage(message, title); }; abp.message.error = function (message, title) { abp.log.warn('abp.message.error is not implemented!'); - return showMessage(message, title); + return abp.message._showMessage(message, title); }; abp.message.confirm = function (message, titleOrCallback, callback) { - abp.log.warn('abp.message.confirm is not implemented!'); + abp.log.warn('abp.message.confirm is not properly implemented!'); if (titleOrCallback && !(typeof titleOrCallback == 'string')) { callback = titleOrCallback; @@ -229,15 +220,6 @@ var result = confirm(message); callback && callback(result); - - if (!$) { - abp.log.warn('abp.message can not return promise since jQuery is not defined!'); - return null; - } - - return $.Deferred(function ($dfd) { - $dfd.resolve(result); - }); }; /* UI *******************************************************/ @@ -422,12 +404,6 @@ }; abp.utils.isFunction = function (obj) { - if ($) { - //Prefer to use jQuery if possible - return $.isFunction(obj); - } - - //alternative for $.isFunction return !!(obj && obj.constructor && obj.call && obj.apply); }; diff --git a/npm/packs/jquery/src/abp.dom.js b/npm/packs/jquery/src/abp.dom.js deleted file mode 100644 index 9cf66a6eb4..0000000000 --- a/npm/packs/jquery/src/abp.dom.js +++ /dev/null @@ -1,59 +0,0 @@ -var abp = abp || {}; -(function ($) { - - if (!$) { - return; - } - - abp.dom = abp.dom || {}; - - abp.dom.onNodeAdded = function (callback) { - abp.event.on('abp.dom.nodeAdded', callback); - }; - - abp.dom.onNodeRemoved = function (callback) { - abp.event.on('abp.dom.nodeRemoved', callback); - }; - - $.fn.findWithSelf = function (selector) { - return this.filter(selector).add(this.find(selector)); - }; - - var mutationObserverCallback = function(mutationsList) { - for (var i = 0; i < mutationsList.length; i++) { - var mutation = mutationsList[i]; - if (mutation.type === 'childList') { - if (mutation.addedNodes && mutation.removedNodes.length) { - for (var k = 0; k < mutation.removedNodes.length; k++) { - abp.event.trigger( - 'abp.dom.nodeRemoved', - { - $el: $(mutation.removedNodes[k]) - } - ); - } - } - - if (mutation.addedNodes && mutation.addedNodes.length) { - for (var j = 0; j < mutation.addedNodes.length; j++) { - abp.event.trigger( - 'abp.dom.nodeAdded', - { - $el: $(mutation.addedNodes[j]) - } - ); - } - } - } - } - }; - - new MutationObserver(mutationObserverCallback).observe( - $('body')[0], - { - subtree: true, - childList: true - } - ); - -})(jQuery); \ No newline at end of file diff --git a/npm/packs/jquery/src/abp.ajax.js b/npm/packs/jquery/src/abp.jquery.js similarity index 51% rename from npm/packs/jquery/src/abp.ajax.js rename to npm/packs/jquery/src/abp.jquery.js index 605b254a7b..bf4c920815 100644 --- a/npm/packs/jquery/src/abp.ajax.js +++ b/npm/packs/jquery/src/abp.jquery.js @@ -1,13 +1,93 @@ var abp = abp || {}; -(function ($) { +(function($) { if (!$) { - return; + throw "abp/jquery library requires the jquery library included to the page!"; } - /* JQUERY ENHANCEMENTS ***************************************************/ + // ABP CORE OVERRIDES ///////////////////////////////////////////////////// - // abp.ajax -> uses $.ajax ------------------------------------------------ + abp.message._showMessage = function (message, title) { + alert((title || '') + ' ' + message); + + return $.Deferred(function ($dfd) { + $dfd.resolve(); + }); + }; + + abp.message.confirm = function (message, titleOrCallback, callback) { + if (titleOrCallback && !(typeof titleOrCallback == 'string')) { + callback = titleOrCallback; + } + + var result = confirm(message); + callback && callback(result); + + return $.Deferred(function ($dfd) { + $dfd.resolve(result); + }); + }; + + abp.utils.isFunction = function (obj) { + return $.isFunction(obj); + }; + + // JQUERY EXTENSIONS ////////////////////////////////////////////////////// + + $.fn.findWithSelf = function (selector) { + return this.filter(selector).add(this.find(selector)); + }; + + // DOM //////////////////////////////////////////////////////////////////// + + abp.dom = abp.dom || {}; + + abp.dom.onNodeAdded = function (callback) { + abp.event.on('abp.dom.nodeAdded', callback); + }; + + abp.dom.onNodeRemoved = function (callback) { + abp.event.on('abp.dom.nodeRemoved', callback); + }; + + var mutationObserverCallback = function (mutationsList) { + for (var i = 0; i < mutationsList.length; i++) { + var mutation = mutationsList[i]; + if (mutation.type === 'childList') { + if (mutation.addedNodes && mutation.removedNodes.length) { + for (var k = 0; k < mutation.removedNodes.length; k++) { + abp.event.trigger( + 'abp.dom.nodeRemoved', + { + $el: $(mutation.removedNodes[k]) + } + ); + } + } + + if (mutation.addedNodes && mutation.addedNodes.length) { + for (var j = 0; j < mutation.addedNodes.length; j++) { + abp.event.trigger( + 'abp.dom.nodeAdded', + { + $el: $(mutation.addedNodes[j]) + } + ); + } + } + } + } + }; + + new MutationObserver(mutationObserverCallback).observe( + $('body')[0], + { + subtree: true, + childList: true + } + ); + + // AJAX /////////////////////////////////////////////////////////////////// abp.ajax = function (userOptions) { userOptions = userOptions || {}; @@ -187,4 +267,123 @@ abp.ajax.defaultError404.details = l('DefaultErrorMessage404Detail'); }); + // RESOURCE LOADER //////////////////////////////////////////////////////// + + /* UrlStates enum */ + var UrlStates = { + LOADING: 'LOADING', + LOADED: 'LOADED', + FAILED: 'FAILED' + }; + + /* UrlInfo class */ + function UrlInfo(url) { + this.url = url; + this.state = UrlStates.LOADING; + this.loadCallbacks = []; + this.failCallbacks = []; + } + + UrlInfo.prototype.succeed = function () { + this.state = UrlStates.LOADED; + for (var i = 0; i < this.loadCallbacks.length; i++) { + this.loadCallbacks[i](); + } + }; + + UrlInfo.prototype.failed = function () { + this.state = UrlStates.FAILED; + for (var i = 0; i < this.failCallbacks.length; i++) { + this.failCallbacks[i](); + } + }; + + UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { + switch (this.state) { + case UrlStates.LOADED: + loadCallback && loadCallback(); + break; + case UrlStates.FAILED: + failCallback && failCallback(); + break; + case UrlStates.LOADING: + this.addCallbacks(loadCallback, failCallback); + break; + } + }; + + UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { + loadCallback && this.loadCallbacks.push(loadCallback); + failCallback && this.failCallbacks.push(failCallback); + }; + + /* ResourceLoader API */ + + abp.ResourceLoader = (function () { + + var _urlInfos = {}; + + function getCacheKey(url) { + return url; + } + + function appendTimeToUrl(url) { + + if (url.indexOf('?') < 0) { + url += '?'; + } else { + url += '&'; + } + + url += '_=' + new Date().getTime(); + + return url; + } + + var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { + + var cacheKey = getCacheKey(url); + + var urlInfo = _urlInfos[cacheKey]; + + if (urlInfo) { + urlInfo.handleCallbacks(loadCallback, failCallback); + return; + } + + _urlInfos[cacheKey] = urlInfo = new UrlInfo(url); + urlInfo.addCallbacks(loadCallback, failCallback); + + serverLoader(urlInfo); + }; + + var _loadScript = function (url, loadCallback, failCallback) { + _loadFromUrl(url, loadCallback, failCallback, function (urlInfo) { + $.getScript(url) + .done(function () { + urlInfo.succeed(); + }) + .fail(function () { + urlInfo.failed(); + }); + }); + }; + + var _loadStyle = function (url) { + _loadFromUrl(url, undefined, undefined, function (urlInfo) { + + $('', { + rel: 'stylesheet', + type: 'text/css', + href: appendTimeToUrl(url) + }).appendTo('head'); + }); + }; + + return { + loadScript: _loadScript, + loadStyle: _loadStyle + } + })(); + })(jQuery); \ No newline at end of file diff --git a/npm/packs/jquery/src/abp.resource-loader.js b/npm/packs/jquery/src/abp.resource-loader.js deleted file mode 100644 index f2634dd5a5..0000000000 --- a/npm/packs/jquery/src/abp.resource-loader.js +++ /dev/null @@ -1,125 +0,0 @@ -/** - * abp.ResourceLoader can be used to load a script/style file from a URL on demand. - * It ensures that a script/style is only loaded once. - */ -var abp = abp || {}; -(function ($) { - - /* UrlStates enum */ - var UrlStates = { - LOADING: 'LOADING', - LOADED: 'LOADED', - FAILED: 'FAILED' - }; - - /* UrlInfo class */ - function UrlInfo(url) { - this.url = url; - this.state = UrlStates.LOADING; - this.loadCallbacks = []; - this.failCallbacks = []; - } - - UrlInfo.prototype.succeed = function () { - this.state = UrlStates.LOADED; - for (var i = 0; i < this.loadCallbacks.length; i++) { - this.loadCallbacks[i](); - } - }; - - UrlInfo.prototype.failed = function () { - this.state = UrlStates.FAILED; - for (var i = 0; i < this.failCallbacks.length; i++) { - this.failCallbacks[i](); - } - }; - - UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { - switch (this.state) { - case UrlStates.LOADED: - loadCallback && loadCallback(); - break; - case UrlStates.FAILED: - failCallback && failCallback(); - break; - case UrlStates.LOADING: - this.addCallbacks(loadCallback, failCallback); - break; - } - }; - - UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { - loadCallback && this.loadCallbacks.push(loadCallback); - failCallback && this.failCallbacks.push(failCallback); - }; - - /* ResourceLoader API */ - - abp.ResourceLoader = (function () { - - var _urlInfos = {}; - - function getCacheKey(url) { - return url; - } - - function appendTimeToUrl(url) { - - if (url.indexOf('?') < 0) { - url += '?'; - } else { - url += '&'; - } - - url += '_=' + new Date().getTime(); - - return url; - } - - var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) { - - var cacheKey = getCacheKey(url); - - var urlInfo = _urlInfos[cacheKey]; - - if (urlInfo) { - urlInfo.handleCallbacks(loadCallback, failCallback); - return; - } - - _urlInfos[cacheKey] = urlInfo = new UrlInfo(url); - urlInfo.addCallbacks(loadCallback, failCallback); - - serverLoader(urlInfo); - }; - - var _loadScript = function (url, loadCallback, failCallback) { - _loadFromUrl(url, loadCallback, failCallback, function(urlInfo) { - $.getScript(url) - .done(function () { - urlInfo.succeed(); - }) - .fail(function () { - urlInfo.failed(); - }); - }); - }; - - var _loadStyle = function (url) { - _loadFromUrl(url, undefined, undefined, function (urlInfo) { - - $('', { - rel: 'stylesheet', - type: 'text/css', - href: appendTimeToUrl(url) - }).appendTo('head'); - }); - }; - - return { - loadScript: _loadScript, - loadStyle: _loadStyle - } - })(); - -})(jQuery); \ No newline at end of file diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs index 733331e28a..026d118771 100644 --- a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs +++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Bundling/SharedThemeGlobalScriptContributor.cs @@ -31,9 +31,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling { //TODO: Move to their own contributors, but first consider to change abp.js a bit "/libs/abp/core/abp.js", - "/libs/abp/jquery/abp.dom.js", - "/libs/abp/jquery/abp.ajax.js", - "/libs/abp/jquery/abp.resource-loader.js", + "/libs/abp/jquery/abp.jquery.js", "/libs/abp/aspnetcore.mvc.ui.theme.shared/jquery/jquery-extensions.js", "/libs/abp/aspnetcore.mvc.ui.theme.shared/jquery-form/jquery-form-extensions.js",