mirror of
https://github.com/Esri/offline-editor-js.git
synced 2025-12-15 15:20:05 +00:00
refactored _storeTile() to TilesCore
This commit is contained in:
parent
76bb3e2d6b
commit
deaac929b9
@ -2,6 +2,7 @@ define([
|
||||
"dojo/query",
|
||||
"dojo/request",
|
||||
"dojo/_base/declare",
|
||||
"tiles/TilesCore",
|
||||
"tiles/base64utils",
|
||||
"tiles/TilesStore",
|
||||
"tiles/tilingScheme",
|
||||
@ -12,7 +13,7 @@ define([
|
||||
"esri/layers/TileInfo",
|
||||
"esri/SpatialReference",
|
||||
"esri/layers/TiledMapServiceLayer"
|
||||
], function(query, request, declare,Base64Utils,TilesStore,TilingScheme,
|
||||
], function(query, request, declare,TilesCore,Base64Utils,TilesStore,TilingScheme,
|
||||
FileSaver,LOD,Point,Extent,TileInfo,SpatialReference,TiledMapServerLayer)
|
||||
{
|
||||
"use strict";
|
||||
@ -23,6 +24,7 @@ define([
|
||||
_level: null, //current zoom level
|
||||
_minZoom: null,
|
||||
_maxZoom: null,
|
||||
_tilesCore:null,
|
||||
|
||||
constructor:function(url,callback,state){
|
||||
|
||||
@ -31,6 +33,8 @@ define([
|
||||
callback(false);
|
||||
}
|
||||
|
||||
this._tilesCore = new TilesCore();
|
||||
|
||||
//For calculating minZoom and maxZoom
|
||||
Array.prototype.sortNumber = function(){return this.sort(function(a,b){return a - b})};
|
||||
|
||||
@ -545,7 +549,9 @@ define([
|
||||
{
|
||||
var cell = cells[i];
|
||||
|
||||
this._storeTile(cell.level,cell.row,cell.col, function(success, error)
|
||||
var url = this._getTileUrl(cell.level,cell.row,cell.col);
|
||||
|
||||
this._tilesCore._storeTile(url,this.offline.proxyPath,this.offline.store,function(success, error)
|
||||
{
|
||||
if(!success)
|
||||
{
|
||||
@ -567,45 +573,6 @@ define([
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
_storeTile : function(level,row,col,callback) // callback(success, msg)
|
||||
{
|
||||
var store = this.offline.store;
|
||||
var url = this._getTileUrl(level,row,col);
|
||||
url = url.split("?")[0];
|
||||
|
||||
/* download the tile */
|
||||
var imgurl = this.offline.proxyPath? this.offline.proxyPath + "?" + url : url;
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("GET", imgurl, true);
|
||||
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
|
||||
|
||||
req.onload = function()
|
||||
{
|
||||
if( req.status === 200 && req.responseText !== "")
|
||||
{
|
||||
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
|
||||
|
||||
var tile = {
|
||||
url: url,
|
||||
img: img
|
||||
};
|
||||
|
||||
store.store(tile,callback);
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
|
||||
}
|
||||
};
|
||||
req.onerror = function(e)
|
||||
{
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, e);
|
||||
};
|
||||
req.send(null);
|
||||
},
|
||||
|
||||
parseGetTileInfo: function(data,callback){
|
||||
|
||||
var fixedResponse = data.replace(/\\'/g, "'");
|
||||
|
||||
@ -3,10 +3,46 @@
|
||||
* and OfflineTilesEnablerLayer.js
|
||||
*/
|
||||
define([
|
||||
"dojo/_base/declare"],
|
||||
function(declare){
|
||||
"dojo/query",
|
||||
"tiles/base64utils",
|
||||
],
|
||||
function(query,Base64Utils){
|
||||
"use strict";
|
||||
return declare([],{
|
||||
var TilesCore = function(){
|
||||
this._storeTile= function(url,proxyPath,store,callback) // callback(success, msg)
|
||||
{
|
||||
url = url.split("?")[0];
|
||||
|
||||
})
|
||||
})
|
||||
/* download the tile */
|
||||
var imgurl = proxyPath ? proxyPath + "?" + url : url;
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("GET", imgurl, true);
|
||||
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
|
||||
|
||||
req.onload = function () {
|
||||
if (req.status === 200 && req.responseText !== "") {
|
||||
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
|
||||
|
||||
var tile = {
|
||||
url: url,
|
||||
img: img
|
||||
};
|
||||
|
||||
store.store(tile, callback);
|
||||
}
|
||||
else {
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
|
||||
}
|
||||
};
|
||||
req.onerror = function (e) {
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, e);
|
||||
};
|
||||
req.send(null);
|
||||
}
|
||||
}
|
||||
|
||||
return TilesCore;
|
||||
}
|
||||
)
|
||||
|
||||
@ -2,11 +2,12 @@ define([
|
||||
"dojo/query",
|
||||
"dojo/request",
|
||||
"dojo/_base/declare",
|
||||
"tiles/TilesCore",
|
||||
"tiles/base64utils",
|
||||
"tiles/TilesStore",
|
||||
"tiles/tilingScheme",
|
||||
"tiles/FileSaver"
|
||||
], function(query, request, declare,Base64Utils,TilesStore,TilingScheme,FileSaver)
|
||||
], function(query, request, declare,TilesCore,Base64Utils,TilesStore,TilingScheme,FileSaver)
|
||||
{
|
||||
"use strict";
|
||||
return declare([],{
|
||||
@ -34,6 +35,7 @@ define([
|
||||
{
|
||||
console.log("extending layer", layer.url);
|
||||
|
||||
layer._tilesCore = new TilesCore();
|
||||
layer._lastTileUrl = "";
|
||||
layer._imageType = "";
|
||||
|
||||
@ -461,7 +463,9 @@ define([
|
||||
{
|
||||
var cell = cells[i];
|
||||
|
||||
this._storeTile(cell.level,cell.row,cell.col, function(success, error)
|
||||
var url = this._getTileUrl(cell.level,cell.row,cell.col);
|
||||
|
||||
layer._tilesCore._storeTile(url,this.offline.proxyPath,this.offline.store, function(success, error)
|
||||
{
|
||||
if(!success)
|
||||
{
|
||||
@ -482,45 +486,6 @@ define([
|
||||
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
layer._storeTile = function(level,row,col,callback) // callback(success, msg)
|
||||
{
|
||||
var store = this.offline.store;
|
||||
var url = this._getTileUrl(level,row,col);
|
||||
url = url.split("?")[0];
|
||||
|
||||
/* download the tile */
|
||||
var imgurl = this.offline.proxyPath? this.offline.proxyPath + "?" + url : url;
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("GET", imgurl, true);
|
||||
req.overrideMimeType("text/plain; charset=x-user-defined"); // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FUsing_XMLHttpRequest#Handling_binary_data
|
||||
|
||||
req.onload = function()
|
||||
{
|
||||
if( req.status === 200 && req.responseText !== "")
|
||||
{
|
||||
var img = Base64Utils.wordToBase64(Base64Utils.stringToWord(this.responseText));
|
||||
|
||||
var tile = {
|
||||
url: url,
|
||||
img: img
|
||||
};
|
||||
|
||||
store.store(tile,callback);
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, req.status + " " + req.statusText + ": " + req.response + " when downloading " + imgurl);
|
||||
}
|
||||
};
|
||||
req.onerror = function(e)
|
||||
{
|
||||
console.log("xhr failed for", imgurl);
|
||||
callback(false, e);
|
||||
};
|
||||
req.send(null);
|
||||
};
|
||||
}
|
||||
}); // declare
|
||||
}); // define
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
var g_map;
|
||||
var g_basemapLayer;
|
||||
var g_offlineTilesEnabler;
|
||||
var g_tilesCore;
|
||||
|
||||
require(["esri/map",
|
||||
"esri/layers/GraphicsLayer", "esri/graphic", "esri/symbols/SimpleFillSymbol",
|
||||
@ -60,7 +61,7 @@
|
||||
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
jasmineEnv.updateInterval = 1000;
|
||||
jasmineEnv.defaultTimeoutInterval = 10000; // 10 sec
|
||||
jasmineEnv.defaultTimeoutInterval = 15000; // 15 sec
|
||||
var htmlReporter = new jasmine.HtmlReporter();
|
||||
|
||||
jasmineEnv.addReporter(htmlReporter);
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
|
||||
var g_map;
|
||||
var g_basemapLayer;
|
||||
var tilesCore;
|
||||
|
||||
require(["esri/map",
|
||||
"esri/layers/GraphicsLayer", "esri/graphic", "esri/symbols/SimpleFillSymbol",
|
||||
@ -34,13 +35,14 @@
|
||||
"dojo/dom", "dojo/on", "dojo/query",
|
||||
"esri/urlUtils", "esri/geometry/webMercatorUtils",
|
||||
"tiles/OfflineTilesEnablerLayer",
|
||||
"tiles/TilesCore",
|
||||
"dojo/dom-construct", "dojo/domReady!"],
|
||||
function(Map,
|
||||
GraphicsLayer, Graphic, SimpleFillSymbol,
|
||||
Scalebar, esriUtils, geometry,
|
||||
dom, on, query,
|
||||
urlUtils, webMercatorUtils,
|
||||
OfflineTilesEnablerLayer,
|
||||
OfflineTilesEnablerLayer,TilesCore,
|
||||
domConstruct)
|
||||
{
|
||||
g_basemapLayer = new OfflineTilesEnablerLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",function(evt){
|
||||
@ -57,6 +59,8 @@
|
||||
|
||||
g_map.addLayer(g_basemapLayer);
|
||||
|
||||
tilesCore = new TilesCore();
|
||||
|
||||
function test()
|
||||
{
|
||||
var jasmineEnv = jasmine.getEnv();
|
||||
|
||||
@ -78,7 +78,10 @@ describe("offline enabler custom layer library", function()
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
{
|
||||
expect(usage.tileCount).toEqual(0);
|
||||
g_basemapLayer._storeTile(14,6177,8023, function(success)
|
||||
|
||||
var url = g_basemapLayer._getTileUrl(14,6177,8023);
|
||||
|
||||
tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
|
||||
{
|
||||
expect(success).toEqual(true);
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
@ -95,7 +98,10 @@ describe("offline enabler custom layer library", function()
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
{
|
||||
expect(usage.tileCount).toEqual(1);
|
||||
g_basemapLayer._storeTile(14,6177,8023, function(success)
|
||||
|
||||
var url = g_basemapLayer._getTileUrl(14,6177,8023);
|
||||
|
||||
tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
|
||||
{
|
||||
expect(success).toEqual(true);
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
|
||||
@ -29,10 +29,10 @@ describe("offline enabler library", function()
|
||||
expect(g_basemapLayer.getTileUrl).toEqual(jasmine.any(Function));
|
||||
expect(g_basemapLayer._getTileUrl).toEqual(jasmine.any(Function));
|
||||
expect(g_basemapLayer.prepareForOffline).toEqual(jasmine.any(Function));
|
||||
expect(g_basemapLayer._storeTile).toEqual(jasmine.any(Function));
|
||||
expect(g_basemapLayer.deleteAllTiles).toEqual(jasmine.any(Function));
|
||||
expect(g_basemapLayer.offline).toEqual(jasmine.any(Object));
|
||||
expect(g_basemapLayer.offline.store).toEqual(jasmine.any(Object));
|
||||
expect(g_basemapLayer._tilesCore._storeTile).toEqual(jasmine.any(Function));
|
||||
|
||||
g_basemapLayer.offline.proxyPath = "../lib/resource-proxy/proxy.php";
|
||||
done();
|
||||
@ -78,7 +78,10 @@ describe("offline enabler library", function()
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
{
|
||||
expect(usage.tileCount).toEqual(0);
|
||||
g_basemapLayer._storeTile(14,6177,8023, function(success)
|
||||
|
||||
var url = g_basemapLayer._getTileUrl(14,6177,8023);
|
||||
|
||||
g_basemapLayer._tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
|
||||
{
|
||||
expect(success).toEqual(true);
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
@ -95,8 +98,10 @@ describe("offline enabler library", function()
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
{
|
||||
expect(usage.tileCount).toEqual(1);
|
||||
g_basemapLayer._storeTile(14,6177,8023, function(success)
|
||||
{
|
||||
var url = g_basemapLayer._getTileUrl(14,6177,8023);
|
||||
|
||||
g_basemapLayer._tilesCore._storeTile(url,g_basemapLayer.offline.proxyPath,g_basemapLayer.offline.store, function(success)
|
||||
{
|
||||
expect(success).toEqual(true);
|
||||
g_basemapLayer.getOfflineUsage(function(usage)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user