321 lines
9.7 KiB
JavaScript
321 lines
9.7 KiB
JavaScript
var utils = require('cordova/utils'),
|
|
common = require('./Common'),
|
|
event = require('./event'),
|
|
Overlay = require('./Overlay');
|
|
|
|
/*****************************************************************************
|
|
* StreetViewPanorama Class
|
|
*****************************************************************************/
|
|
var exec;
|
|
var StreetViewPanorama = function(streetViewId, _exec) {
|
|
exec = _exec;
|
|
Overlay.call(this, this, {}, 'StreetViewPanorama', _exec, {
|
|
__pgmId: streetViewId
|
|
});
|
|
|
|
var self = this;
|
|
self.set('visible', true);
|
|
self.set('gesture_panning', true);
|
|
self.set('gesture_zoom', true);
|
|
self.set('control_navigation', true);
|
|
self.set('control_streetNames', true);
|
|
self.set('camera_zoom', 0);
|
|
self.set('camera_tilt', 0);
|
|
self.set('camera_bearing', 0);
|
|
|
|
//-----------------------------------------------
|
|
// Sets event listeners
|
|
//-----------------------------------------------
|
|
self.on('gesture_panning_changed', function() {
|
|
var booleanValue = self.get('gesture_panning');
|
|
self.exec.call(self, null, self.errorHandler, self.__pgmId, 'setPanningGesturesEnabled', [booleanValue]);
|
|
});
|
|
self.on('gesture_zoom_changed', function() {
|
|
var booleanValue = self.get('gesture_zoom');
|
|
self.exec.call(self, null, self.errorHandler, self.__pgmId, 'setZoomGesturesEnabled', [booleanValue]);
|
|
});
|
|
self.on('control_navigation_changed', function() {
|
|
var booleanValue = self.get('control_navigation');
|
|
self.exec.call(self, null, self.errorHandler, self.__pgmId, 'setNavigationEnabled', [booleanValue]);
|
|
});
|
|
self.on('control_streetNames_changed', function() {
|
|
var booleanValue = self.get('control_streetNames');
|
|
self.exec.call(self, null, self.errorHandler, self.__pgmId, 'setStreetNamesEnabled', [booleanValue]);
|
|
});
|
|
self.on('visible_changed', function() {
|
|
var booleanValue = self.get('visible');
|
|
self.exec.call(self, null, self.errorHandler, self.__pgmId, 'setVisible', [booleanValue]);
|
|
});
|
|
};
|
|
|
|
|
|
utils.extend(StreetViewPanorama, Overlay);
|
|
|
|
StreetViewPanorama.prototype.getPluginName = function() {
|
|
return this.map.getId() + '-streetview';
|
|
};
|
|
|
|
StreetViewPanorama.prototype.getHashCode = function() {
|
|
return this.hashCode;
|
|
};
|
|
|
|
StreetViewPanorama.prototype.getId = function() {
|
|
return this.__pgmId;
|
|
};
|
|
StreetViewPanorama.prototype.getPanorama = function(meta, panorama, div, options) {
|
|
var self = this,
|
|
args = [meta];
|
|
options = options || {};
|
|
|
|
|
|
//self.set('clickable', options.clickable === false ? false : true);
|
|
self.set('visible', options.visible === false ? false : true, true);
|
|
args.push(options);
|
|
|
|
// Initial camera options
|
|
if ('camera' in options) {
|
|
self.set('camera', options.camera, true);
|
|
if ('zoom' in options.camera) {
|
|
self.set('camera_zoom', options.camera.zoom, true);
|
|
}
|
|
if ('bearing' in options.camera) {
|
|
self.set('camera_bearing', options.camera.bearing, true);
|
|
}
|
|
if ('tilt' in options.camera) {
|
|
self.set('camera_tilt', options.camera.tilt, true);
|
|
}
|
|
if ('target' in options.camera) {
|
|
self.set('position', options.camera.target, true);
|
|
}
|
|
}
|
|
|
|
// Gesture options
|
|
options.gestures = options.gestures || {};
|
|
options.gestures.panning = common.defaultTrueOption(options.gestures.panning);
|
|
options.gestures.zoom = common.defaultTrueOption(options.gestures.zoom);
|
|
self.set('gesture_panning', options.gestures.panning, true);
|
|
self.set('gesture_zoom', options.gestures.zoom, true);
|
|
|
|
// Controls options
|
|
options.controls = options.controls || {};
|
|
options.controls.navigation = common.defaultTrueOption(options.controls.navigation);
|
|
options.controls.streetNames = common.defaultTrueOption(options.controls.streetNames);
|
|
self.set('control_navigation', options.controls.navigation, true);
|
|
self.set('control_streetNames', options.controls.streetNames, true);
|
|
|
|
// Gets the map div size.
|
|
// The plugin needs to consider the viewport zoom ratio
|
|
// for the case window.innerHTML > body.offsetWidth.
|
|
self.set('div', div);
|
|
var elemId = common.getPluginDomId(div);
|
|
args.push(elemId);
|
|
|
|
exec.call({
|
|
_isReady: true
|
|
}, function() {
|
|
|
|
//------------------------------------------------------------------------
|
|
// Clear background colors of map div parents after the map is created
|
|
//------------------------------------------------------------------------
|
|
var positionCSS;
|
|
for (var i = 0; i < div.children.length; i++) {
|
|
positionCSS = common.getStyle(div.children[i], 'position');
|
|
if (positionCSS === 'static') {
|
|
div.children[i].style.position = 'relative';
|
|
}
|
|
}
|
|
//div.insertBefore(self._layers.info, div.firstChild);
|
|
|
|
|
|
while (div.parentNode) {
|
|
div.style.backgroundColor = 'rgba(0,0,0,0) !important';
|
|
|
|
common.attachTransparentClass(div);
|
|
|
|
div = div.parentNode;
|
|
}
|
|
cordova.fireDocumentEvent('plugin_touch', {
|
|
force: true
|
|
});
|
|
self._privateInitialize();
|
|
delete self._privateInitialize;
|
|
|
|
self.trigger(event.PANORAMA_READY, self);
|
|
}, self.errorHandler, 'CordovaGoogleMaps', 'getPanorama', args, {
|
|
sync: true
|
|
});
|
|
};
|
|
|
|
StreetViewPanorama.prototype.setVisible = function(isVisible) {
|
|
this.set('visible', common.parseBoolean(isVisible));
|
|
return this;
|
|
};
|
|
|
|
StreetViewPanorama.prototype.getVisible = function() {
|
|
return this.get('visible');
|
|
};
|
|
|
|
StreetViewPanorama.prototype.getDiv = function() {
|
|
return this.get('div');
|
|
};
|
|
StreetViewPanorama.prototype.getMap = function() {
|
|
// stub
|
|
};
|
|
|
|
StreetViewPanorama.prototype.setPanningGesturesEnabled = function (boolValue) {
|
|
boolValue = common.parseBoolean(boolValue);
|
|
this.set('gesture_panning', boolValue);
|
|
return this;
|
|
};
|
|
StreetViewPanorama.prototype.getPanningGesturesEnabled = function () {
|
|
return this.get('gesture_panning');
|
|
};
|
|
StreetViewPanorama.prototype.setZoomGesturesEnabled = function (boolValue) {
|
|
boolValue = common.parseBoolean(boolValue);
|
|
this.set('gesture_zoom', boolValue);
|
|
return this;
|
|
};
|
|
StreetViewPanorama.prototype.getZoomGesturesEnabled = function () {
|
|
return this.get('gesture_zoom');
|
|
};
|
|
StreetViewPanorama.prototype.setNavigationEnabled = function (boolValue) {
|
|
boolValue = common.parseBoolean(boolValue);
|
|
this.set('control_navigation', boolValue);
|
|
return this;
|
|
};
|
|
StreetViewPanorama.prototype.getNavigationEnabled = function () {
|
|
return this.get('control_navigation');
|
|
};
|
|
StreetViewPanorama.prototype.setStreetNamesEnabled = function (boolValue) {
|
|
boolValue = common.parseBoolean(boolValue);
|
|
this.set('control_streetNames', boolValue);
|
|
return this;
|
|
};
|
|
StreetViewPanorama.prototype.getStreetNamesEnabled = function () {
|
|
return this.get('control_streetNames');
|
|
};
|
|
StreetViewPanorama.prototype.getLinks = function () {
|
|
return this.get('links');
|
|
};
|
|
StreetViewPanorama.prototype.getLocation = function () {
|
|
return this.get('location');
|
|
};
|
|
StreetViewPanorama.prototype.getPanoId = function () {
|
|
return this.get('pano');
|
|
};
|
|
StreetViewPanorama.prototype.getPosition = function () {
|
|
return this.get('position');
|
|
};
|
|
|
|
StreetViewPanorama.prototype.setPosition = function(cameraPosition, callback) {
|
|
var self = this;
|
|
cameraPosition = cameraPosition || {};
|
|
if (typeof cameraPosition === 'string') {
|
|
// case: panorama.setPosition(panoId);
|
|
cameraPosition = {
|
|
target : cameraPosition
|
|
};
|
|
}
|
|
if (typeof cameraPosition.target === 'object') {
|
|
// case: panorama.setPosition({
|
|
// target: {lat: ..., lng: ...}
|
|
// });
|
|
self.set('position', cameraPosition.target);
|
|
}
|
|
self.exec.call(self, function() {
|
|
if (typeof callback === 'function') {
|
|
callback.call(self);
|
|
}
|
|
}, self.errorHandler, self.__pgmId, 'setPosition', [cameraPosition], {
|
|
sync: true
|
|
});
|
|
return this;
|
|
};
|
|
|
|
StreetViewPanorama.prototype.setPov = function(pov, callback) {
|
|
var self = this;
|
|
pov = pov || {};
|
|
if ('zoom' in pov) {
|
|
self.set('camera_zoom', pov.zoom);
|
|
}
|
|
if ('bearing' in pov) {
|
|
self.set('camera_bearing', pov.bearing);
|
|
}
|
|
if ('tilt' in pov) {
|
|
self.set('camera_tilt', pov.tilt);
|
|
}
|
|
self.exec.call(self, function() {
|
|
if (typeof callback === 'function') {
|
|
callback.call(self);
|
|
}
|
|
}, self.errorHandler, self.__pgmId, 'setPov', [pov], {
|
|
sync: true
|
|
});
|
|
return this;
|
|
};
|
|
|
|
|
|
StreetViewPanorama.prototype.remove = function(callback) {
|
|
var self = this;
|
|
|
|
var resolver = function(resolve, reject) {
|
|
self.exec.call(self,
|
|
function() {
|
|
self.destroy();
|
|
resolve.call(self);
|
|
},
|
|
reject.bind(self),
|
|
'CordovaGoogleMaps', 'removeMap', [self.__pgmId], {
|
|
sync: true,
|
|
remove: true
|
|
});
|
|
};
|
|
|
|
if (typeof callback === 'function') {
|
|
resolver(callback, self.errorHandler);
|
|
} else {
|
|
return new Promise(resolver);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.trigger('remove');
|
|
};
|
|
StreetViewPanorama.prototype._onPanoramaCameraChange = function(eventName, cameraPosition) {
|
|
var self = this;
|
|
self.set('camera', utils.clone(self.get('camera') || {}, cameraPosition));
|
|
self.set('camera_zoom', cameraPosition.zoom);
|
|
self.set('camera_bearing', cameraPosition.bearing);
|
|
self.set('camera_tilt', cameraPosition.viewAngle || cameraPosition.tilt);
|
|
self.set('links', cameraPosition.links || []);
|
|
if (self._isReady) {
|
|
self._onPanoramaEvent(eventName, cameraPosition);
|
|
}
|
|
};
|
|
|
|
StreetViewPanorama.prototype._onPanoramaLocationChange = function(eventName, panoramaLocation) {
|
|
var self = this;
|
|
self.set('location', panoramaLocation);
|
|
self.set('pano', panoramaLocation ? panoramaLocation.panoId : null);
|
|
self.set('position', panoramaLocation ? panoramaLocation.latLng : null);
|
|
if (self._isReady) {
|
|
self._onPanoramaEvent(eventName, panoramaLocation);
|
|
}
|
|
};
|
|
|
|
StreetViewPanorama.prototype._onPanoramaEvent = function() {
|
|
var self = this;
|
|
if (self._isReady) {
|
|
var args = Array.prototype.slice.call(arguments, 0);
|
|
args.push(self);
|
|
self.trigger.apply(self, args);
|
|
}
|
|
};
|
|
|
|
module.exports = StreetViewPanorama;
|