| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- ///////////////////////////////////////////////////////////////////////////
- // Copyright © 2014 - 2018 Esri. All Rights Reserved.
- //
- // Licensed under the Apache License Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- ///////////////////////////////////////////////////////////////////////////
- //****************************************************************
- //The main function of the env.js is to initialize apiUrl and path
- //****************************************************************
- /* jshint unused: false */
- /********************************
- Global variables:
- isXT: XT builder or not. This variable is set by builder node server.
- isBuilder: is builder or app. This flag is used to distinguish the build and app in jimu.js
- isRunInPortal: whether the app/builder is in portal or not.
- builderNls: the builder nls bundle
- portalUrl: the portal url
- configWindow: in builder only, the config app window object
- previewWindow: in builder only, the preview app window object
- setConfigViewerTopic: in builder only, used to communicate between builder and config window
- setPreviewViewerTopic: in builder only, used to communicate between builder and preview window
- appId: in builder only, the current opened app id.
- apiUrl: the URL of the ArcGIS API for JavaScript
- allCookies: all cookies
- path: the builder/app path section in window.location
- appPath: the app's path. In app, it's the same with path; In builder, it's not.
- queryObject: the query parameters
- jimuNls: the jimu nls bundle
- isRTL: the language is right to left,
- wabVersion: the wab version, like 1.1, 1.2
- productVersion: the product version, like portal10.3, online3.5, developer edition1.0
- dojoConfig: the dojo config object
- jimuConfig: defined in jimu/main
- weinreUrl: for mobile debug
- debug: boolean. If it's debug mode, the app will load weinre file
- Global functions:
- loadResource: load JS or CSS
- loadResources: load array of JS or CSS
- testLoad: load JS/CSS by condition
- loadingCallback: the resources loaded callback
- *******************************/
- /*global testLoad, ActiveXObject */
- var
- // the URL of the ArcGIS API for JavaScript, you can change it to point to your own API.
- apiUrl = null,
- //weinreUrl: String
- // weinre is a tool which can help debug the app on mobile devices.
- // Please see: http://people.apache.org/~pmuellr/weinre/docs/latest/Home.html
- weinreUrl = '//launch.chn.esri.com:8081/target/target-script-min.js',
- //debug: Boolean
- // If it's debug mode, the app will load weinre file
- debug = false,
- path = null,
- isXT = false,
- allCookies,
- //This version number will be appended to URL to avoid cache.
- //The reason we do not use wabVersion is to avoid force user to change wabVersion when they are customizing app.
- deployVersion = '2.11';
- // console.time('before map');
- /////Builder server will remove this line's comment, so set isXT flag to true
- //isXT = true;
- /////////////////////////////////////
- (function(global){
- //init API URL
- var queryObject = getQueryObject();
- var apiVersion = '4.11';
- ////////uncomment the following line when downloading the app
- apiUrl = 'https://js.arcgis.com/4.11';
- //////////////////////////////////////////////////////////////
- allCookies = getAllCookies();
- window.appInfo = {isRunInPortal: !isXT};
- if (queryObject.apiurl3d) {
- if(!checkApiUrl(queryObject.apiurl3d)){
- console.error('?apiurl must point to an ULR that is in the app or in esri.com/arcgis.com domain.');
- return;
- }
- apiUrl = queryObject.apiurl3d;
- }
- if (!apiUrl) {
- if (isXT) {
- apiUrl = 'https://js.arcgis.com/' + apiVersion;
- } else {
- var portalUrl = getPortalUrlFromLocation();
- if (portalUrl.indexOf('arcgis.com') > -1) {
- if(portalUrl.indexOf('devext.arcgis.com') > -1){
- apiUrl = '//jsdev.arcgis.com/' + apiVersion;
- }else if(portalUrl.indexOf('qa.arcgis.com') > -1){
- apiUrl = '//jsqa.arcgis.com/' + apiVersion;
- }else{
- apiUrl = '//js.arcgis.com/' + apiVersion;
- }
- // apiUrl = 'https://js.arcgis.com/' + apiVersion;
- } else {
- apiUrl = portalUrl + 'jsapi/jsapi4/';
- }
- }
- }
- if (apiUrl.substr(apiUrl.length - 1, apiUrl.length) !== '/') {
- apiUrl = apiUrl + '/';
- }
- path = getPath();
- function getAllCookies(){
- var strAllCookie = document.cookie;
- var cookies = {};
- if (strAllCookie) {
- var strCookies = strAllCookie.split(';');
- for(var i = 0; i < strCookies.length; i++){
- var splits = strCookies[i].split('=');
- if(splits && splits.length > 1){
- cookies[splits[0].replace(/^\s+|\s+$/gm, '')] = splits[1];
- }
- }
- }
- return cookies;
- }
- function checkApiUrl(url){
- if(/^\/\//.test(url) || /^https?:\/\//.test(url)){
- return /(?:[\w\-\_]+\.)+(?:esri|arcgis)\.com/.test(url); //api url must be in esri.com or arcgis.com
- }else{
- return true;
- }
- }
- function getPortalUrlFromLocation(){
- var portalUrl = getPortalServerFromLocation() + getDeployContextFromLocation();
- return portalUrl;
- }
- function getPortalServerFromLocation(){
- var server = window.location.protocol + '//' + window.location.host;
- return server;
- }
- function getDeployContextFromLocation (){
- var keyIndex = window.location.href.indexOf("/home");
- if(keyIndex < 0){
- keyIndex = window.location.href.indexOf("/apps");
- }
- var context = window.location.href.substring(window.location.href.indexOf(
- window.location.host) + window.location.host.length + 1, keyIndex);
- if (context !== "/") {
- context = "/" + context + "/";
- }
- return context;
- }
- function getPath() {
- var fullPath, path;
- fullPath = window.location.pathname;
- if (fullPath === "/GISBIM/map") {
- fullPath = "/GISBIM/";
- }
- if (fullPath === '/' || fullPath.substr(fullPath.length - 1) === '/') {
- path = fullPath;
- }else{
- var sections = fullPath.split('/');
- var lastSection = sections.pop();
- if (/\.html$/.test(lastSection) || /\.aspx$/.test(lastSection) ||
- /\.jsp$/.test(lastSection) || /\.php$/.test(lastSection)) {
- //index.html may be renamed to index.jsp, etc.
- path = sections.join('/') + '/';
- } else {
- return false;
- }
- }
- return path;
- }
- function getQueryObject(){
- var query = window.location.search;
- if (query.indexOf('?') > -1) {
- query = query.substr(1);
- }
- var pairs = query.split('&');
- var queryObject = {};
- for(var i = 0; i < pairs.length; i++){
- var splits = decodeURIComponent(pairs[i]).split('=');
- queryObject[splits[0]] = splits[1];
- }
- return queryObject;
- }
- function _loadPolyfills(prePath, cb) {
- prePath = prePath || "";
- var ap = Array.prototype,
- fp = Function.prototype,
- sp = String.prototype,
- loaded = 0,
- completeCb = function() {
- loaded++;
- if (loaded === tests.length) {
- cb();
- }
- },
- tests = [{
- test: window.console,
- failure: prePath + "libs/polyfills/console.js",
- callback: completeCb
- }, {
- test: ap.indexOf && ap.lastIndexOf && ap.forEach && ap.every && ap.some &&
- ap.filter && ap.map && ap.reduce && ap.reduceRight,
- failure: prePath + "libs/polyfills/array.generics.js",
- callback: completeCb
- }, {
- test: fp.bind,
- failure: prePath + "libs/polyfills/bind.js",
- callback: completeCb
- }, {
- test: Date.now,
- failure: prePath + "libs/polyfills/now.js",
- callback: completeCb
- }, {
- test: sp.trim,
- failure: prePath + "libs/polyfills/trim.js",
- callback: completeCb
- }, {
- test: false,
- failure: prePath + "libs/polyfills/FileSaver.js",
- callback: completeCb
- }, {
- test: typeof Blob !== 'undefined',
- failure: prePath + "libs/polyfills/FileSaver.ie9.js",
- callback: completeCb
- }];
- for(var i = 0; i < tests.length; i++){
- testLoad(tests[i]);
- }
- }
- function localeIsSame(locale1, locale2){
- return locale1.split('-')[0] === locale2.split('-')[0];
- }
- function _setRTL(locale){
- var rtlLocales = ["ar", "he"];
- var dirNode = document.getElementsByTagName("html")[0];
- var isRTLLocale = false;
- for (var i = 0; i < rtlLocales.length; i++) {
- if (localeIsSame(rtlLocales[i], locale)) {
- isRTLLocale = true;
- }
- }
- if (isRTLLocale) {
- dirNode.setAttribute("dir", "rtl");
- dirNode.className += " esriRtl jimu-rtl";
- dirNode.className += " " + locale + " " +
- (locale.indexOf("-") !== -1 ? locale.split("-")[0] : "");
- }else {
- dirNode.setAttribute("dir", "ltr");
- dirNode.className += " esriLtr jimu-ltr";
- dirNode.className += " " + locale + " " +
- (locale.indexOf("-") !== -1 ? locale.split("-")[0] : "");
- }
- window.isRTL = isRTLLocale;
- }
- global._loadPolyfills = _loadPolyfills;
- global.queryObject = queryObject;
- global._setRTL = _setRTL;
- })(window);
|