From 06eb9ae4c2630f37f48df690a1bdb7aa695f2079 Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Mon, 22 Feb 2021 15:49:08 +0800 Subject: [PATCH 1/2] modified gitignore file in admin --- admin/.gitignore | 1 - .../js/plugins/oclazyload/dist/ocLazyLoad.js | 991 ++++++++++++++++++ .../plugins/oclazyload/dist/ocLazyLoad.min.js | 8 + 3 files changed, 999 insertions(+), 1 deletion(-) create mode 100644 admin/js/plugins/oclazyload/dist/ocLazyLoad.js create mode 100644 admin/js/plugins/oclazyload/dist/ocLazyLoad.min.js diff --git a/admin/.gitignore b/admin/.gitignore index 5924dd08..1a2a2212 100644 --- a/admin/.gitignore +++ b/admin/.gitignore @@ -5,7 +5,6 @@ ### Angular ### ## Angular ## # compiled output -dist/ tmp/ app/**/*.js app/**/*.js.map diff --git a/admin/js/plugins/oclazyload/dist/ocLazyLoad.js b/admin/js/plugins/oclazyload/dist/ocLazyLoad.js new file mode 100644 index 00000000..5f9f7049 --- /dev/null +++ b/admin/js/plugins/oclazyload/dist/ocLazyLoad.js @@ -0,0 +1,991 @@ +/** + * oclazyload - Load modules on demand (lazy load) with angularJS + * @version v0.5.2 + * @link https://github.com/ocombe/ocLazyLoad + * @license MIT + * @author Olivier Combe + */ +(function() { + 'use strict'; + var regModules = ['ng'], + initModules = [], + regInvokes = {}, + regConfigs = [], + justLoaded = [], + runBlocks = {}, + ocLazyLoad = angular.module('oc.lazyLoad', ['ng']), + broadcast = angular.noop; + + ocLazyLoad.provider('$ocLazyLoad', ['$controllerProvider', '$provide', '$compileProvider', '$filterProvider', '$injector', '$animateProvider', + function($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) { + var modules = {}, + providers = { + $controllerProvider: $controllerProvider, + $compileProvider: $compileProvider, + $filterProvider: $filterProvider, + $provide: $provide, // other things + $injector: $injector, + $animateProvider: $animateProvider + }, + anchor = document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0], + jsLoader, cssLoader, templatesLoader, + debug = false, + events = false; + + // Let's get the list of loaded modules & components + init(angular.element(window.document)); + + this.$get = ['$log', '$q', '$templateCache', '$http', '$rootElement', '$rootScope', '$cacheFactory', '$interval', function($log, $q, $templateCache, $http, $rootElement, $rootScope, $cacheFactory, $interval) { + var instanceInjector, + filesCache = $cacheFactory('ocLazyLoad'), + uaCssChecked = false, + useCssLoadPatch = false; + + if(!debug) { + $log = {}; + $log['error'] = angular.noop; + $log['warn'] = angular.noop; + $log['info'] = angular.noop; + } + + // Make this lazy because at the moment that $get() is called the instance injector hasn't been assigned to the rootElement yet + providers.getInstanceInjector = function() { + return (instanceInjector) ? instanceInjector : (instanceInjector = ($rootElement.data('$injector') || angular.injector())); + }; + + broadcast = function broadcast(eventName, params) { + if(events) { + $rootScope.$broadcast(eventName, params); + } + if(debug) { + $log.info(eventName, params); + } + } + + /** + * Load a js/css file + * @param type + * @param path + * @returns promise + */ + var buildElement = function buildElement(type, path, params) { + var deferred = $q.defer(), + el, loaded, + cacheBuster = function cacheBuster(url) { + var dc = new Date().getTime(); + if(url.indexOf('?') >= 0) { + if(url.substring(0, url.length - 1) === '&') { + return url + '_dc=' + dc; + } + return url + '&_dc=' + dc; + } else { + return url + '?_dc=' + dc; + } + }; + + // Store the promise early so the file load can be detected by other parallel lazy loads + // (ie: multiple routes on one page) a 'true' value isn't sufficient + // as it causes false positive load results. + if(angular.isUndefined(filesCache.get(path))) { + filesCache.put(path, deferred.promise); + } + + // Switch in case more content types are added later + switch(type) { + case 'css': + el = document.createElement('link'); + el.type = 'text/css'; + el.rel = 'stylesheet'; + el.href = params.cache === false ? cacheBuster(path) : path; + break; + case 'js': + el = document.createElement('script'); + el.src = params.cache === false ? cacheBuster(path) : path; + break; + default: + deferred.reject(new Error('Requested type "' + type + '" is not known. Could not inject "' + path + '"')); + break; + } + el.onload = el['onreadystatechange'] = function(e) { + if((el['readyState'] && !(/^c|loade/.test(el['readyState']))) || loaded) return; + el.onload = el['onreadystatechange'] = null + loaded = 1; + broadcast('ocLazyLoad.fileLoaded', path); + deferred.resolve(); + } + el.onerror = function(e) { + deferred.reject(new Error('Unable to load ' + path)); + } + el.async = params.serie ? 0 : 1; + + var insertBeforeElem = anchor.lastChild; + if(params.insertBefore) { + var element = angular.element(params.insertBefore); + if(element && element.length > 0) { + insertBeforeElem = element[0]; + } + } + anchor.insertBefore(el, insertBeforeElem); + + /* + The event load or readystatechange doesn't fire in: + - iOS < 6 (default mobile browser) + - Android < 4.4 (default mobile browser) + - Safari < 6 (desktop browser) + */ + if(type == 'css') { + if(!uaCssChecked) { + var ua = navigator.userAgent.toLowerCase(); + + // iOS < 6 + if(/iP(hone|od|ad)/.test(navigator.platform)) { + var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/); + var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.')); + useCssLoadPatch = iOSVersion < 6; + } else if(ua.indexOf("android") > -1) { // Android < 4.4 + var androidVersion = parseFloat(ua.slice(ua.indexOf("android") + 8)); + useCssLoadPatch = androidVersion < 4.4; + } else if(ua.indexOf('safari') > -1 && ua.indexOf('chrome') == -1) { + var safariVersion = parseFloat(ua.match(/version\/([\.\d]+)/i)[1]); + useCssLoadPatch = safariVersion < 6; + } + } + + if(useCssLoadPatch) { + var tries = 1000; // * 20 = 20000 miliseconds + var interval = $interval(function() { + try { + el.sheet.cssRules; + $interval.cancel(interval); + el.onload(); + } catch(e) { + if(--tries <= 0) { + el.onerror(); + } + } + }, 20); + } + } + + return deferred.promise; + } + + if(angular.isUndefined(jsLoader)) { + /** + * jsLoader function + * @type Function + * @param paths array list of js files to load + * @param callback to call when everything is loaded. We use a callback and not a promise + * @param params object config parameters + * because the user can overwrite jsLoader and it will probably not use promises :( + */ + jsLoader = function(paths, callback, params) { + var promises = []; + angular.forEach(paths, function loading(path) { + promises.push(buildElement('js', path, params)); + }); + $q.all(promises).then(function success() { + callback(); + }, function error(err) { + callback(err); + }); + } + jsLoader.ocLazyLoadLoader = true; + } + + if(angular.isUndefined(cssLoader)) { + /** + * cssLoader function + * @type Function + * @param paths array list of css files to load + * @param callback to call when everything is loaded. We use a callback and not a promise + * @param params object config parameters + * because the user can overwrite cssLoader and it will probably not use promises :( + */ + cssLoader = function(paths, callback, params) { + var promises = []; + angular.forEach(paths, function loading(path) { + promises.push(buildElement('css', path, params)); + }); + $q.all(promises).then(function success() { + callback(); + }, function error(err) { + callback(err); + }); + } + cssLoader.ocLazyLoadLoader = true; + } + + if(angular.isUndefined(templatesLoader)) { + /** + * templatesLoader function + * @type Function + * @param paths array list of css files to load + * @param callback to call when everything is loaded. We use a callback and not a promise + * @param params object config parameters for $http + * because the user can overwrite templatesLoader and it will probably not use promises :( + */ + templatesLoader = function(paths, callback, params) { + var promises = []; + angular.forEach(paths, function(url) { + var deferred = $q.defer(); + promises.push(deferred.promise); + $http.get(url, params).success(function(data) { + if(angular.isString(data) && data.length > 0) { + angular.forEach(angular.element(data), function(node) { + if(node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') { + $templateCache.put(node.id, node.innerHTML); + } + }); + } + if(angular.isUndefined(filesCache.get(url))) { + filesCache.put(url, true); + } + deferred.resolve(); + }).error(function(err) { + deferred.reject(new Error('Unable to load template file "' + url + '": ' + err)); + }); + }); + return $q.all(promises).then(function success() { + callback(); + }, function error(err) { + callback(err); + }); + } + templatesLoader.ocLazyLoadLoader = true; + } + + var filesLoader = function(config, params) { + var cssFiles = [], + templatesFiles = [], + jsFiles = [], + promises = [], + cachePromise = null; + + angular.extend(params || {}, config); + + var pushFile = function(path) { + cachePromise = filesCache.get(path); + if(angular.isUndefined(cachePromise) || params.cache === false) { + if(/\.(css|less)[^\.]*$/.test(path) && cssFiles.indexOf(path) === -1) { + cssFiles.push(path); + } else if(/\.(htm|html)[^\.]*$/.test(path) && templatesFiles.indexOf(path) === -1) { + templatesFiles.push(path); + } else if(jsFiles.indexOf(path) === -1) { + jsFiles.push(path); + } + } else if(cachePromise) { + promises.push(cachePromise); + } + } + + if(params.serie) { + pushFile(params.files.shift()); + } else { + angular.forEach(params.files, function(path) { + pushFile(path); + }); + } + + if(cssFiles.length > 0) { + var cssDeferred = $q.defer(); + cssLoader(cssFiles, function(err) { + if(angular.isDefined(err) && cssLoader.hasOwnProperty('ocLazyLoadLoader')) { + $log.error(err); + cssDeferred.reject(err); + } else { + cssDeferred.resolve(); + } + }, params); + promises.push(cssDeferred.promise); + } + + if(templatesFiles.length > 0) { + var templatesDeferred = $q.defer(); + templatesLoader(templatesFiles, function(err) { + if(angular.isDefined(err) && templatesLoader.hasOwnProperty('ocLazyLoadLoader')) { + $log.error(err); + templatesDeferred.reject(err); + } else { + templatesDeferred.resolve(); + } + }, params); + promises.push(templatesDeferred.promise); + } + + if(jsFiles.length > 0) { + var jsDeferred = $q.defer(); + jsLoader(jsFiles, function(err) { + if(angular.isDefined(err) && jsLoader.hasOwnProperty('ocLazyLoadLoader')) { + $log.error(err); + jsDeferred.reject(err); + } else { + jsDeferred.resolve(); + } + }, params); + promises.push(jsDeferred.promise); + } + + if(params.serie && params.files.length > 0) { + return $q.all(promises).then(function success() { + return filesLoader(config, params); + }); + } else { + return $q.all(promises); + } + } + + return { + /** + * Let you get a module config object + * @param moduleName String the name of the module + * @returns {*} + */ + getModuleConfig: function(moduleName) { + if(!angular.isString(moduleName)) { + throw new Error('You need to give the name of the module to get'); + } + if(!modules[moduleName]) { + return null; + } + return modules[moduleName]; + }, + + /** + * Let you define a module config object + * @param moduleConfig Object the module config object + * @returns {*} + */ + setModuleConfig: function(moduleConfig) { + if(!angular.isObject(moduleConfig)) { + throw new Error('You need to give the module config object to set'); + } + modules[moduleConfig.name] = moduleConfig; + return moduleConfig; + }, + + /** + * Returns the list of loaded modules + * @returns {string[]} + */ + getModules: function() { + return regModules; + }, + + /** + * Let you check if a module has been loaded into Angular or not + * @param modulesNames String/Object a module name, or a list of module names + * @returns {boolean} + */ + isLoaded: function(modulesNames) { + var moduleLoaded = function(module) { + var isLoaded = regModules.indexOf(module) > -1; + if(!isLoaded) { + isLoaded = !!moduleExists(module); + } + return isLoaded; + } + if(angular.isString(modulesNames)) { + modulesNames = [modulesNames]; + } + if(angular.isArray(modulesNames)) { + var i, len; + for(i = 0, len = modulesNames.length; i < len; i++) { + if(!moduleLoaded(modulesNames[i])) { + return false; + } + } + return true; + } else { + throw new Error('You need to define the module(s) name(s)'); + } + }, + + /** + * Load a module or a list of modules into Angular + * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either + * @param params Object optional parameters + * @returns promise + */ + load: function(module, params) { + var self = this, + config = null, + moduleCache = [], + deferredList = [], + deferred = $q.defer(), + moduleName, + errText; + + if(angular.isUndefined(params)) { + params = {}; + } + + // If module is an array, break it down + if(angular.isArray(module)) { + // Resubmit each entry as a single module + angular.forEach(module, function(m) { + if(m) { + deferredList.push(self.load(m, params)); + } + }); + + // Resolve the promise once everything has loaded + $q.all(deferredList).then(function success() { + deferred.resolve(module); + }, function error(err) { + deferred.reject(err); + }); + + return deferred.promise; + } + + moduleName = getModuleName(module); + + // Get or Set a configuration depending on what was passed in + if(typeof module === 'string') { + config = self.getModuleConfig(module); + if(!config) { + config = { + files: [module] + }; + moduleName = null; + } + } else if(typeof module === 'object') { + config = self.setModuleConfig(module); + } + + if(config === null) { + errText = 'Module "' + moduleName + '" is not configured, cannot load.'; + $log.error(errText); + deferred.reject(new Error(errText)); + } else { + // deprecated + if(angular.isDefined(config.template)) { + if(angular.isUndefined(config.files)) { + config.files = []; + } + if(angular.isString(config.template)) { + config.files.push(config.template); + } else if(angular.isArray(config.template)) { + config.files.concat(config.template); + } + } + } + + moduleCache.push = function(value) { + if(this.indexOf(value) === -1) { + Array.prototype.push.apply(this, arguments); + } + }; + + // If this module has been loaded before, re-use it. + if(angular.isDefined(moduleName) && moduleExists(moduleName) && regModules.indexOf(moduleName) !== -1) { + moduleCache.push(moduleName); + + // if we don't want to load new files, resolve here + if(angular.isUndefined(config.files)) { + deferred.resolve(); + return deferred.promise; + } + } + + var localParams = {}; + angular.extend(localParams, params, config); + + var loadDependencies = function loadDependencies(module) { + var moduleName, + loadedModule, + requires, + diff, + promisesList = []; + + moduleName = getModuleName(module); + if(moduleName === null) { + return $q.when(); + } else { + try { + loadedModule = getModule(moduleName); + } catch(e) { + var deferred = $q.defer(); + $log.error(e.message); + deferred.reject(e); + return deferred.promise; + } + requires = getRequires(loadedModule); + } + + angular.forEach(requires, function(requireEntry) { + // If no configuration is provided, try and find one from a previous load. + // If there isn't one, bail and let the normal flow run + if(typeof requireEntry === 'string') { + var config = self.getModuleConfig(requireEntry); + if(config === null) { + moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway. + return; + } + requireEntry = config; + } + + // Check if this dependency has been loaded previously + if(moduleExists(requireEntry.name)) { + if(typeof module !== 'string') { + // compare against the already loaded module to see if the new definition adds any new files + diff = requireEntry.files.filter(function(n) { + return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0; + }); + + // If the module was redefined, advise via the console + if(diff.length !== 0) { + $log.warn('Module "', moduleName, '" attempted to redefine configuration for dependency. "', requireEntry.name, '"\n Additional Files Loaded:', diff); + } + + // Push everything to the file loader, it will weed out the duplicates. + promisesList.push(filesLoader(requireEntry.files, localParams).then(function() { + return loadDependencies(requireEntry); + })); + } + return; + } else if(typeof requireEntry === 'object') { + if(requireEntry.hasOwnProperty('name') && requireEntry['name']) { + // The dependency doesn't exist in the module cache and is a new configuration, so store and push it. + self.setModuleConfig(requireEntry); + moduleCache.push(requireEntry['name']); + } + + // CSS Loading Handler + if(requireEntry.hasOwnProperty('css') && requireEntry['css'].length !== 0) { + // Locate the document insertion point + angular.forEach(requireEntry['css'], function(path) { + buildElement('css', path, localParams); + }); + } + // CSS End. + } + + // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list. + if(requireEntry.hasOwnProperty('files') && requireEntry.files.length !== 0) { + if(requireEntry.files) { + promisesList.push(filesLoader(requireEntry, localParams).then(function() { + return loadDependencies(requireEntry); + })); + } + } + }); + + // Create a wrapper promise to watch the promise list and resolve it once everything is done. + return $q.all(promisesList); + } + + filesLoader(config, localParams).then(function success() { + if(moduleName === null) { + deferred.resolve(module); + } else { + moduleCache.push(moduleName); + loadDependencies(moduleName).then(function success() { + try { + justLoaded = []; + register(providers, moduleCache, localParams); + } catch(e) { + $log.error(e.message); + deferred.reject(e); + return; + } + deferred.resolve(module); + }, function error(err) { + deferred.reject(err); + }); + } + }, function error(err) { + deferred.reject(err); + }); + + return deferred.promise; + } + }; + }]; + + this.config = function(config) { + if(angular.isDefined(config.jsLoader) || angular.isDefined(config.asyncLoader)) { + if(!angular.isFunction(config.jsLoader || config.asyncLoader)) { + throw('The js loader needs to be a function'); + } + jsLoader = config.jsLoader || config.asyncLoader; + } + + if(angular.isDefined(config.cssLoader)) { + if(!angular.isFunction(config.cssLoader)) { + throw('The css loader needs to be a function'); + } + cssLoader = config.cssLoader; + } + + if(angular.isDefined(config.templatesLoader)) { + if(!angular.isFunction(config.templatesLoader)) { + throw('The template loader needs to be a function'); + } + templatesLoader = config.templatesLoader; + } + + // If we want to define modules configs + if(angular.isDefined(config.modules)) { + if(angular.isArray(config.modules)) { + angular.forEach(config.modules, function(moduleConfig) { + modules[moduleConfig.name] = moduleConfig; + }); + } else { + modules[config.modules.name] = config.modules; + } + } + + if(angular.isDefined(config.debug)) { + debug = config.debug; + } + + if(angular.isDefined(config.events)) { + events = config.events; + } + }; + }]); + + ocLazyLoad.directive('ocLazyLoad', ['$ocLazyLoad', '$compile', '$animate', '$parse', + function($ocLazyLoad, $compile, $animate, $parse) { + return { + restrict: 'A', + terminal: true, + priority: 1000, + compile: function(element, attrs) { + // we store the content and remove it before compilation + var content = element[0].innerHTML; + element.html(''); + + return function($scope, $element, $attr) { + var model = $parse($attr.ocLazyLoad); + $scope.$watch(function() { + // it can be a module name (string), an object, an array, or a scope reference to any of this + return model($scope) || $attr.ocLazyLoad; + }, function(moduleName) { + if(angular.isDefined(moduleName)) { + $ocLazyLoad.load(moduleName).then(function success(moduleConfig) { + $animate.enter($compile(content)($scope), null, $element); + }); + } + }, true); + }; + } + }; + }]); + + /** + * Get the list of required modules/services/... for this module + * @param module + * @returns {Array} + */ + function getRequires(module) { + var requires = []; + angular.forEach(module.requires, function(requireModule) { + if(regModules.indexOf(requireModule) === -1) { + requires.push(requireModule); + } + }); + return requires; + } + + /** + * Check if a module exists and returns it if it does + * @param moduleName + * @returns {boolean} + */ + function moduleExists(moduleName) { + try { + return angular.module(moduleName); + } catch(e) { + if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) { + return false; + } + } + } + + function getModule(moduleName) { + try { + return angular.module(moduleName); + } catch(e) { + // this error message really suxx + if(/No module/.test(e) || (e.message.indexOf('$injector:nomod') > -1)) { + e.message = 'The module "' + moduleName + '" that you are trying to load does not exist. ' + e.message + } + throw e; + } + } + + function invokeQueue(providers, queue, moduleName, reconfig) { + if(!queue) { + return; + } + + var i, len, args, provider; + for(i = 0, len = queue.length; i < len; i++) { + args = queue[i]; + if(angular.isArray(args)) { + if(providers !== null) { + if(providers.hasOwnProperty(args[0])) { + provider = providers[args[0]]; + } else { + throw new Error('unsupported provider ' + args[0]); + } + } + var isNew = registerInvokeList(args, moduleName); + if(args[1] !== 'invoke') { + if(isNew && angular.isDefined(provider)) { + provider[args[1]].apply(provider, args[2]); + } + } else { // config block + var callInvoke = function(fct) { + var invoked = regConfigs.indexOf(moduleName + '-' + fct); + if(invoked === -1 || reconfig) { + if(invoked === -1) { + regConfigs.push(moduleName + '-' + fct); + } + if(angular.isDefined(provider)) { + provider[args[1]].apply(provider, args[2]); + } + } + } + if(angular.isFunction(args[2][0])) { + callInvoke(args[2][0]); + } else if(angular.isArray(args[2][0])) { + for(var j = 0, jlen = args[2][0].length; j < jlen; j++) { + if(angular.isFunction(args[2][0][j])) { + callInvoke(args[2][0][j]); + } + } + } + } + } + } + } + + /** + * Register a new module and load it + * @param providers + * @param registerModules + * @returns {*} + */ + function register(providers, registerModules, params) { + if(registerModules) { + var k, r, moduleName, moduleFn, tempRunBlocks = []; + for(k = registerModules.length - 1; k >= 0; k--) { + moduleName = registerModules[k]; + if(typeof moduleName !== 'string') { + moduleName = getModuleName(moduleName); + } + if(!moduleName || justLoaded.indexOf(moduleName) !== -1) { + continue; + } + var newModule = regModules.indexOf(moduleName) === -1; + moduleFn = angular.module(moduleName); + if(newModule) { // new module + regModules.push(moduleName); + register(providers, moduleFn.requires, params); + } + if(moduleFn._runBlocks.length > 0) { + // new run blocks detected! Replace the old ones (if existing) + runBlocks[moduleName] = []; + while(moduleFn._runBlocks.length > 0) { + runBlocks[moduleName].push(moduleFn._runBlocks.shift()); + } + } + if(angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) { + tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]); + } + invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig); + invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+ + broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName); + registerModules.pop(); + justLoaded.push(moduleName); + } + // execute the run blocks at the end + var instanceInjector = providers.getInstanceInjector(); + angular.forEach(tempRunBlocks, function(fn) { + instanceInjector.invoke(fn); + }); + } + } + + /** + * Register an invoke + * @param args + * @returns {*} + */ + function registerInvokeList(args, moduleName) { + var invokeList = args[2][0], + type = args[1], + newInvoke = false; + if(angular.isUndefined(regInvokes[moduleName])) { + regInvokes[moduleName] = {}; + } + if(angular.isUndefined(regInvokes[moduleName][type])) { + regInvokes[moduleName][type] = []; + } + var onInvoke = function(invokeName) { + newInvoke = true; + regInvokes[moduleName][type].push(invokeName); + broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]); + } + if(angular.isString(invokeList) && regInvokes[moduleName][type].indexOf(invokeList) === -1) { + onInvoke(invokeList); + } else if(angular.isObject(invokeList)) { + angular.forEach(invokeList, function(invoke) { + if(angular.isString(invoke) && regInvokes[moduleName][type].indexOf(invoke) === -1) { + onInvoke(invoke); + } + }); + } else { + return false; + } + return newInvoke; + } + + function getModuleName(module) { + var moduleName = null; + if(angular.isString(module)) { + moduleName = module; + } else if(angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) { + moduleName = module.name; + } + return moduleName; + } + + /** + * Get the list of existing registered modules + * @param element + */ + function init(element) { + if(initModules.length === 0) { + var elements = [element], + names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'], + NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/, + append = function append(elm) { + return (elm && elements.push(elm)); + }; + + angular.forEach(names, function(name) { + names[name] = true; + append(document.getElementById(name)); + name = name.replace(':', '\\:'); + if(element[0].querySelectorAll) { + angular.forEach(element[0].querySelectorAll('.' + name), append); + angular.forEach(element[0].querySelectorAll('.' + name + '\\:'), append); + angular.forEach(element[0].querySelectorAll('[' + name + ']'), append); + } + }); + + angular.forEach(elements, function(elm) { + if(initModules.length === 0) { + var className = ' ' + element.className + ' '; + var match = NG_APP_CLASS_REGEXP.exec(className); + if(match) { + initModules.push((match[2] || '').replace(/\s+/g, ',')); + } else { + angular.forEach(elm.attributes, function(attr) { + if(initModules.length === 0 && names[attr.name]) { + initModules.push(attr.value); + } + }); + } + } + }); + } + if(initModules.length === 0) { + throw 'No module found during bootstrap, unable to init ocLazyLoad'; + } + + var addReg = function addReg(moduleName) { + if(regModules.indexOf(moduleName) === -1) { + // register existing modules + regModules.push(moduleName); + var mainModule = angular.module(moduleName); + + // register existing components (directives, services, ...) + invokeQueue(null, mainModule._invokeQueue, moduleName); + invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+ + + angular.forEach(mainModule.requires, addReg); + } + }; + + angular.forEach(initModules, function(moduleName) { + addReg(moduleName); + }); + } + + var bootstrap = angular.bootstrap; + angular.bootstrap = function(element, modules, config) { + initModules = modules.slice(); // make a clean copy + return bootstrap(element, modules, config); + }; + + // Array.indexOf polyfill for IE8 + if(!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + + var k; + + // 1. Let O be the result of calling ToObject passing + // the this value as the argument. + if(this == null) { + throw new TypeError('"this" is null or not defined'); + } + + var O = Object(this); + + // 2. Let lenValue be the result of calling the Get + // internal method of O with the argument "length". + // 3. Let len be ToUint32(lenValue). + var len = O.length >>> 0; + + // 4. If len is 0, return -1. + if(len === 0) { + return -1; + } + + // 5. If argument fromIndex was passed let n be + // ToInteger(fromIndex); else let n be 0. + var n = +fromIndex || 0; + + if(Math.abs(n) === Infinity) { + n = 0; + } + + // 6. If n >= len, return -1. + if(n >= len) { + return -1; + } + + // 7. If n >= 0, then Let k be n. + // 8. Else, n<0, Let k be len - abs(n). + // If k is less than 0, then let k be 0. + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + + // 9. Repeat, while k < len + while(k < len) { + // a. Let Pk be ToString(k). + // This is implicit for LHS operands of the in operator + // b. Let kPresent be the result of calling the + // HasProperty internal method of O with argument Pk. + // This step can be combined with c + // c. If kPresent is true, then + // i. Let elementK be the result of calling the Get + // internal method of O with the argument ToString(k). + // ii. Let same be the result of applying the + // Strict Equality Comparison Algorithm to + // searchElement and elementK. + // iii. If same is true, return k. + if(k in O && O[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; + } +})(); diff --git a/admin/js/plugins/oclazyload/dist/ocLazyLoad.min.js b/admin/js/plugins/oclazyload/dist/ocLazyLoad.min.js new file mode 100644 index 00000000..3f5e50a5 --- /dev/null +++ b/admin/js/plugins/oclazyload/dist/ocLazyLoad.min.js @@ -0,0 +1,8 @@ +/** + * oclazyload - Load modules on demand (lazy load) with angularJS + * @version v0.5.2 + * @link https://github.com/ocombe/ocLazyLoad + * @license MIT + * @author Olivier Combe + */ +!function(){"use strict";function e(e){var n=[];return angular.forEach(e.requires,function(e){-1===l.indexOf(e)&&n.push(e)}),n}function n(e){try{return angular.module(e)}catch(n){if(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)return!1}}function r(e){try{return angular.module(e)}catch(n){throw(/No module/.test(n)||n.message.indexOf("$injector:nomod")>-1)&&(n.message='The module "'+e+'" that you are trying to load does not exist. '+n.message),n}}function a(e,n,r,a){if(n){var t,i,u,l;for(t=0,i=n.length;i>t;t++)if(u=n[t],angular.isArray(u)){if(null!==e){if(!e.hasOwnProperty(u[0]))throw new Error("unsupported provider "+u[0]);l=e[u[0]]}var s=o(u,r);if("invoke"!==u[1])s&&angular.isDefined(l)&&l[u[1]].apply(l,u[2]);else{var f=function(e){var n=c.indexOf(r+"-"+e);(-1===n||a)&&(-1===n&&c.push(r+"-"+e),angular.isDefined(l)&&l[u[1]].apply(l,u[2]))};if(angular.isFunction(u[2][0]))f(u[2][0]);else if(angular.isArray(u[2][0]))for(var d=0,g=u[2][0].length;g>d;d++)angular.isFunction(u[2][0][d])&&f(u[2][0][d])}}}}function t(e,n,r){if(n){var o,u,s,f=[];for(o=n.length-1;o>=0;o--)if(u=n[o],"string"!=typeof u&&(u=i(u)),u&&-1===d.indexOf(u)){var c=-1===l.indexOf(u);if(s=angular.module(u),c&&(l.push(u),t(e,s.requires,r)),s._runBlocks.length>0)for(g[u]=[];s._runBlocks.length>0;)g[u].push(s._runBlocks.shift());angular.isDefined(g[u])&&(c||r.rerun)&&(f=f.concat(g[u])),a(e,s._invokeQueue,u,r.reconfig),a(e,s._configBlocks,u,r.reconfig),p(c?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",u),n.pop(),d.push(u)}var h=e.getInstanceInjector();angular.forEach(f,function(e){h.invoke(e)})}}function o(e,n){var r=e[2][0],a=e[1],t=!1;angular.isUndefined(f[n])&&(f[n]={}),angular.isUndefined(f[n][a])&&(f[n][a]=[]);var o=function(e){t=!0,f[n][a].push(e),p("ocLazyLoad.componentLoaded",[n,a,e])};if(angular.isString(r)&&-1===f[n][a].indexOf(r))o(r);else{if(!angular.isObject(r))return!1;angular.forEach(r,function(e){angular.isString(e)&&-1===f[n][a].indexOf(e)&&o(e)})}return t}function i(e){var n=null;return angular.isString(e)?n=e:angular.isObject(e)&&e.hasOwnProperty("name")&&angular.isString(e.name)&&(n=e.name),n}function u(e){if(0===s.length){var n=[e],r=["ng:app","ng-app","x-ng-app","data-ng-app"],t=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,o=function(e){return e&&n.push(e)};angular.forEach(r,function(n){r[n]=!0,o(document.getElementById(n)),n=n.replace(":","\\:"),e[0].querySelectorAll&&(angular.forEach(e[0].querySelectorAll("."+n),o),angular.forEach(e[0].querySelectorAll("."+n+"\\:"),o),angular.forEach(e[0].querySelectorAll("["+n+"]"),o))}),angular.forEach(n,function(n){if(0===s.length){var a=" "+e.className+" ",o=t.exec(a);o?s.push((o[2]||"").replace(/\s+/g,",")):angular.forEach(n.attributes,function(e){0===s.length&&r[e.name]&&s.push(e.value)})}})}if(0===s.length)throw"No module found during bootstrap, unable to init ocLazyLoad";var i=function u(e){if(-1===l.indexOf(e)){l.push(e);var n=angular.module(e);a(null,n._invokeQueue,e),a(null,n._configBlocks,e),angular.forEach(n.requires,u)}};angular.forEach(s,function(e){i(e)})}var l=["ng"],s=[],f={},c=[],d=[],g={},h=angular.module("oc.lazyLoad",["ng"]),p=angular.noop;h.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(a,o,s,f,c,g){var h,m,v,y={},L={$controllerProvider:a,$compileProvider:s,$filterProvider:f,$provide:o,$injector:c,$animateProvider:g},w=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0],O=!1,j=!1;u(angular.element(window.document)),this.$get=["$log","$q","$templateCache","$http","$rootElement","$rootScope","$cacheFactory","$interval",function(a,o,u,s,f,c,g,E){var $,x=g("ocLazyLoad"),b=!1,z=!1;O||(a={},a.error=angular.noop,a.warn=angular.noop,a.info=angular.noop),L.getInstanceInjector=function(){return $?$:$=f.data("$injector")||angular.injector()},p=function(e,n){j&&c.$broadcast(e,n),O&&a.info(e,n)};var P=function(e,n,r){var a,t,i=o.defer(),u=function(e){var n=(new Date).getTime();return e.indexOf("?")>=0?"&"===e.substring(0,e.length-1)?e+"_dc="+n:e+"&_dc="+n:e+"?_dc="+n};switch(angular.isUndefined(x.get(n))&&x.put(n,i.promise),e){case"css":a=document.createElement("link"),a.type="text/css",a.rel="stylesheet",a.href=r.cache===!1?u(n):n;break;case"js":a=document.createElement("script"),a.src=r.cache===!1?u(n):n;break;default:i.reject(new Error('Requested type "'+e+'" is not known. Could not inject "'+n+'"'))}a.onload=a.onreadystatechange=function(){a.readyState&&!/^c|loade/.test(a.readyState)||t||(a.onload=a.onreadystatechange=null,t=1,p("ocLazyLoad.fileLoaded",n),i.resolve())},a.onerror=function(){i.reject(new Error("Unable to load "+n))},a.async=r.serie?0:1;var l=w.lastChild;if(r.insertBefore){var s=angular.element(r.insertBefore);s&&s.length>0&&(l=s[0])}if(w.insertBefore(a,l),"css"==e){if(!b){var f=navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(navigator.platform)){var c=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),d=parseFloat([parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3]||0,10)].join("."));z=6>d}else if(f.indexOf("android")>-1){var g=parseFloat(f.slice(f.indexOf("android")+8));z=4.4>g}else if(f.indexOf("safari")>-1&&-1==f.indexOf("chrome")){var h=parseFloat(f.match(/version\/([\.\d]+)/i)[1]);z=6>h}}if(z)var m=1e3,v=E(function(){try{a.sheet.cssRules,E.cancel(v),a.onload()}catch(e){--m<=0&&a.onerror()}},20)}return i.promise};angular.isUndefined(h)&&(h=function(e,n,r){var a=[];angular.forEach(e,function(e){a.push(P("js",e,r))}),o.all(a).then(function(){n()},function(e){n(e)})},h.ocLazyLoadLoader=!0),angular.isUndefined(m)&&(m=function(e,n,r){var a=[];angular.forEach(e,function(e){a.push(P("css",e,r))}),o.all(a).then(function(){n()},function(e){n(e)})},m.ocLazyLoadLoader=!0),angular.isUndefined(v)&&(v=function(e,n,r){var a=[];return angular.forEach(e,function(e){var n=o.defer();a.push(n.promise),s.get(e,r).success(function(r){angular.isString(r)&&r.length>0&&angular.forEach(angular.element(r),function(e){"SCRIPT"===e.nodeName&&"text/ng-template"===e.type&&u.put(e.id,e.innerHTML)}),angular.isUndefined(x.get(e))&&x.put(e,!0),n.resolve()}).error(function(r){n.reject(new Error('Unable to load template file "'+e+'": '+r))})}),o.all(a).then(function(){n()},function(e){n(e)})},v.ocLazyLoadLoader=!0);var D=function(e,n){var r=[],t=[],i=[],u=[],l=null;angular.extend(n||{},e);var s=function(e){l=x.get(e),angular.isUndefined(l)||n.cache===!1?/\.(css|less)[^\.]*$/.test(e)&&-1===r.indexOf(e)?r.push(e):/\.(htm|html)[^\.]*$/.test(e)&&-1===t.indexOf(e)?t.push(e):-1===i.indexOf(e)&&i.push(e):l&&u.push(l)};if(n.serie?s(n.files.shift()):angular.forEach(n.files,function(e){s(e)}),r.length>0){var f=o.defer();m(r,function(e){angular.isDefined(e)&&m.hasOwnProperty("ocLazyLoadLoader")?(a.error(e),f.reject(e)):f.resolve()},n),u.push(f.promise)}if(t.length>0){var c=o.defer();v(t,function(e){angular.isDefined(e)&&v.hasOwnProperty("ocLazyLoadLoader")?(a.error(e),c.reject(e)):c.resolve()},n),u.push(c.promise)}if(i.length>0){var d=o.defer();h(i,function(e){angular.isDefined(e)&&h.hasOwnProperty("ocLazyLoadLoader")?(a.error(e),d.reject(e)):d.resolve()},n),u.push(d.promise)}return n.serie&&n.files.length>0?o.all(u).then(function(){return D(e,n)}):o.all(u)};return{getModuleConfig:function(e){if(!angular.isString(e))throw new Error("You need to give the name of the module to get");return y[e]?y[e]:null},setModuleConfig:function(e){if(!angular.isObject(e))throw new Error("You need to give the module config object to set");return y[e.name]=e,e},getModules:function(){return l},isLoaded:function(e){var r=function(e){var r=l.indexOf(e)>-1;return r||(r=!!n(e)),r};if(angular.isString(e)&&(e=[e]),angular.isArray(e)){var a,t;for(a=0,t=e.length;t>a;a++)if(!r(e[a]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},load:function(u,s){var f,c,g=this,h=null,p=[],m=[],v=o.defer();if(angular.isUndefined(s)&&(s={}),angular.isArray(u))return angular.forEach(u,function(e){e&&m.push(g.load(e,s))}),o.all(m).then(function(){v.resolve(u)},function(e){v.reject(e)}),v.promise;if(f=i(u),"string"==typeof u?(h=g.getModuleConfig(u),h||(h={files:[u]},f=null)):"object"==typeof u&&(h=g.setModuleConfig(u)),null===h?(c='Module "'+f+'" is not configured, cannot load.',a.error(c),v.reject(new Error(c))):angular.isDefined(h.template)&&(angular.isUndefined(h.files)&&(h.files=[]),angular.isString(h.template)?h.files.push(h.template):angular.isArray(h.template)&&h.files.concat(h.template)),p.push=function(e){-1===this.indexOf(e)&&Array.prototype.push.apply(this,arguments)},angular.isDefined(f)&&n(f)&&-1!==l.indexOf(f)&&(p.push(f),angular.isUndefined(h.files)))return v.resolve(),v.promise;var y={};angular.extend(y,s,h);var w=function O(t){var u,l,s,f,c=[];if(u=i(t),null===u)return o.when();try{l=r(u)}catch(d){var h=o.defer();return a.error(d.message),h.reject(d),h.promise}return s=e(l),angular.forEach(s,function(e){if("string"==typeof e){var r=g.getModuleConfig(e);if(null===r)return void p.push(e);e=r}return n(e.name)?void("string"!=typeof t&&(f=e.files.filter(function(n){return g.getModuleConfig(e.name).files.indexOf(n)<0}),0!==f.length&&a.warn('Module "',u,'" attempted to redefine configuration for dependency. "',e.name,'"\n Additional Files Loaded:',f),c.push(D(e.files,y).then(function(){return O(e)})))):("object"==typeof e&&(e.hasOwnProperty("name")&&e.name&&(g.setModuleConfig(e),p.push(e.name)),e.hasOwnProperty("css")&&0!==e.css.length&&angular.forEach(e.css,function(e){P("css",e,y)})),void(e.hasOwnProperty("files")&&0!==e.files.length&&e.files&&c.push(D(e,y).then(function(){return O(e)}))))}),o.all(c)};return D(h,y).then(function(){null===f?v.resolve(u):(p.push(f),w(f).then(function(){try{d=[],t(L,p,y)}catch(e){return a.error(e.message),void v.reject(e)}v.resolve(u)},function(e){v.reject(e)}))},function(e){v.reject(e)}),v.promise}}}],this.config=function(e){if(angular.isDefined(e.jsLoader)||angular.isDefined(e.asyncLoader)){if(!angular.isFunction(e.jsLoader||e.asyncLoader))throw"The js loader needs to be a function";h=e.jsLoader||e.asyncLoader}if(angular.isDefined(e.cssLoader)){if(!angular.isFunction(e.cssLoader))throw"The css loader needs to be a function";m=e.cssLoader}if(angular.isDefined(e.templatesLoader)){if(!angular.isFunction(e.templatesLoader))throw"The template loader needs to be a function";v=e.templatesLoader}angular.isDefined(e.modules)&&(angular.isArray(e.modules)?angular.forEach(e.modules,function(e){y[e.name]=e}):y[e.modules.name]=e.modules),angular.isDefined(e.debug)&&(O=e.debug),angular.isDefined(e.events)&&(j=e.events)}}]),h.directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse",function(e,n,r,a){return{restrict:"A",terminal:!0,priority:1e3,compile:function(t){var o=t[0].innerHTML;return t.html(""),function(t,i,u){var l=a(u.ocLazyLoad);t.$watch(function(){return l(t)||u.ocLazyLoad},function(a){angular.isDefined(a)&&e.load(a).then(function(){r.enter(n(o)(t),null,i)})},!0)}}}}]);var m=angular.bootstrap;angular.bootstrap=function(e,n,r){return s=n.slice(),m(e,n,r)},Array.prototype.indexOf||(Array.prototype.indexOf=function(e,n){var r;if(null==this)throw new TypeError('"this" is null or not defined');var a=Object(this),t=a.length>>>0;if(0===t)return-1;var o=+n||0;if(1/0===Math.abs(o)&&(o=0),o>=t)return-1;for(r=Math.max(o>=0?o:t-Math.abs(o),0);t>r;){if(r in a&&a[r]===e)return r;r++}return-1})}(); \ No newline at end of file From 1ae965d7f913f4fcd1427fc1ae2040a706b0ec3d Mon Sep 17 00:00:00 2001 From: "13621160019@163.com" <13621160019@163.com> Date: Mon, 22 Feb 2021 15:50:00 +0800 Subject: [PATCH 2/2] modified gitignore file in admin & updated READMEs --- README.md | 2 +- README_DE.md | 2 +- README_EN.md | 2 +- web/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a7e8a7bc..c437decd 100644 --- a/README.md +++ b/README.md @@ -177,5 +177,5 @@ MyEMS项目由下列组件构成: [1]. http://github.com/MyEMS/myems -[2]. http://gitee.com/myems/myems +[2]. http://gitee.com/MyEMS/myems diff --git a/README_DE.md b/README_DE.md index 988e586f..21595302 100644 --- a/README_DE.md +++ b/README_DE.md @@ -178,5 +178,5 @@ Weitere Informationen finden Sie im [myems-modbus-tcp](./myems-modbus-tcp/README [1]. http://github.com/MyEMS/myems -[2]. http://gitee.com/myems/myems +[2]. http://gitee.com/MyEMS/myems diff --git a/README_EN.md b/README_EN.md index 635c9c5f..c3db6bb5 100644 --- a/README_EN.md +++ b/README_EN.md @@ -178,5 +178,5 @@ See [myems-modbus-tcp](./myems-modbus-tcp/README.md) for more information. [1]. http://github.com/MyEMS/myems -[2]. http://gitee.com/myems/myems +[2]. http://gitee.com/MyEMS/myems diff --git a/web/README.md b/web/README.md index 142eba33..60932d2c 100644 --- a/web/README.md +++ b/web/README.md @@ -101,7 +101,7 @@ $ sudo systemctl restart nginx ``` Install Upload the file myems-web.tar.gz to you web server. - Note that the following path shoudl be same as that in nginx.conf. + Note that the following path should be same as that was configured in nginx.conf. ``` $ tar xzf myems-web.tar.gz $ sudo rm -r /var/www/html/web