@ -0,0 +1,118 @@ |
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
||||||
|
<!-- |
||||||
|
* GoogleMaps Plugin for FCKeditor |
||||||
|
* |
||||||
|
* == BEGIN LICENSE == |
||||||
|
* |
||||||
|
* Licensed under the terms of any of the following licenses at your |
||||||
|
* choice: |
||||||
|
* |
||||||
|
* - GNU General Public License Version 2 or later (the "GPL") |
||||||
|
* http://www.gnu.org/licenses/gpl.html |
||||||
|
* |
||||||
|
* - GNU Lesser General Public License Version 2.1 or later (the "LGPL") |
||||||
|
* http://www.gnu.org/licenses/lgpl.html |
||||||
|
* |
||||||
|
* - Mozilla Public License Version 1.1 or later (the "MPL") |
||||||
|
* http://www.mozilla.org/MPL/MPL-1.1.html |
||||||
|
* |
||||||
|
* == END LICENSE == |
||||||
|
* |
||||||
|
* GMaps Properties dialog window. |
||||||
|
--> |
||||||
|
<html xmlns:v="urn:schemas-microsoft-com:vml"> |
||||||
|
<head> |
||||||
|
<title>Google Maps</title> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||||
|
<meta content="noindex, nofollow" name="robots"> |
||||||
|
<script src="googleMaps.js" type="text/javascript"></script> |
||||||
|
<style type="text/css"> |
||||||
|
div.box { |
||||||
|
height: 60px; |
||||||
|
} |
||||||
|
p { |
||||||
|
margin:0; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
|
||||||
|
<div id="MapInfo" class="box"> |
||||||
|
<table> |
||||||
|
<tr> |
||||||
|
<td> |
||||||
|
<label for="txtWidth" fckLang="DlgImgWidth">Width</label> |
||||||
|
<input id="txtWidth" type="text" size="3"> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<label for="txtHeight" fckLang="DlgImgHeight">Height</label> |
||||||
|
<input id="txtHeight" type="text" size="3"> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<span fckLang="GMapsZoomLevel">Zoom Level</span> |
||||||
|
<select id="cmbZoom"> |
||||||
|
<option value="0">0</option> |
||||||
|
<option value="1">1</option> |
||||||
|
<option value="2">2</option> |
||||||
|
<option value="3">3</option> |
||||||
|
<option value="4">4</option> |
||||||
|
<option value="5">5</option> |
||||||
|
<option value="6">6</option> |
||||||
|
<option value="7">7</option> |
||||||
|
<option value="8">8</option> |
||||||
|
<option value="9">9</option> |
||||||
|
<option value="10">10</option> |
||||||
|
<option value="11">11</option> |
||||||
|
<option value="12">12</option> |
||||||
|
<option value="13">13</option> |
||||||
|
<option value="14">14</option> |
||||||
|
<option value="15">15</option> |
||||||
|
<option value="16">16</option> |
||||||
|
<option value="17">17</option> |
||||||
|
</select> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<label for="apiKey" fckLang="GMapsKey" id="lblApiKey">API Key</label> |
||||||
|
<input id="apiKey" type="text" name="apiKey" size="40" /> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
<table> |
||||||
|
<tr> |
||||||
|
<td> |
||||||
|
<label for="txtCenterLatitude" fckLang="txtLatitude">Latitude</label> |
||||||
|
<input id="txtCenterLatitude" type="text" size="7"> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<label for="txtCenterLongitude" fckLang="txtLongitude">Longitude</label> |
||||||
|
<input id="txtCenterLongitude" type="text" size="7"> |
||||||
|
</td> |
||||||
|
</tr> |
||||||
|
</table> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="SearchInfo" style="display:none;" class="box"> |
||||||
|
<label for="searchDirection" fckLang="GMapsSearchLabel">Search a direction</label> |
||||||
|
<input type="text" id="searchDirection" size="50" > <input type="button" id="searchButton" value="search" fckLang="GMapsSearch"> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="MarkerInfo" style="display:none;" class="box"> |
||||||
|
<img id="btnAddNewMarker" src="../images/AddMarker.png" style="cursor:pointer"> |
||||||
|
<div id="instructions"></div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div id="LineInfo" style="display:none;" class="box"> |
||||||
|
<p><span fckLang="GMapsLineInstructions">Click on the map</span></p> |
||||||
|
|
||||||
|
<div id="info2" style="display:none"> |
||||||
|
<textarea id="encodedPolyline"></textarea> |
||||||
|
<textarea id="encodedLevels"></textarea> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
|
||||||
|
<!-- <span fckLang="DlgImgPreview">Preview</span>--> |
||||||
|
<div id="GMapPreview" style="width:300px; height:200px; outline:0;" tabIndex="-1"></div> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,335 @@ |
|||||||
|
var points = []; |
||||||
|
var highlighted_marker = null; |
||||||
|
var point_markers = []; |
||||||
|
var currentIndex = -1; |
||||||
|
|
||||||
|
// Returns the index of the marker in the polyline.
|
||||||
|
function findMarkerIndex(point_marker) { |
||||||
|
var index = -1; |
||||||
|
|
||||||
|
for (var i = 0; i < point_markers.length; ++i) { |
||||||
|
if (point_markers[i] == point_marker) { |
||||||
|
index = i; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return index; |
||||||
|
} |
||||||
|
|
||||||
|
// Creates a point and adds it to both the polyline and the list.
|
||||||
|
function createPoint(lat, lng, pLevel) { |
||||||
|
var newPoint = { |
||||||
|
lat: lat, |
||||||
|
lon: lng, |
||||||
|
Level: pLevel |
||||||
|
}; |
||||||
|
|
||||||
|
if (currentIndex>-1)
|
||||||
|
points.splice(currentIndex+1, 0, newPoint) ; |
||||||
|
else |
||||||
|
points.push(newPoint); |
||||||
|
|
||||||
|
var point_marker = createPointMarker(new GLatLng(lat, lng), false); |
||||||
|
point_marker.focusable = true ; // To signal that the map must get the focus.
|
||||||
|
map.addOverlay(point_marker); |
||||||
|
|
||||||
|
if (currentIndex>-1)
|
||||||
|
point_markers.splice(currentIndex+1, 0, point_marker) ; |
||||||
|
else |
||||||
|
point_markers.push(point_marker); |
||||||
|
|
||||||
|
highlight(currentIndex+1); |
||||||
|
} |
||||||
|
|
||||||
|
// Creates a marker representing a point in the polyline.
|
||||||
|
function createPointMarker(point, highlighted) { |
||||||
|
var clr = highlighted ? "yellow" : "blue"; |
||||||
|
|
||||||
|
var point_marker = createColorMarker(point, clr); |
||||||
|
|
||||||
|
GEvent.addListener(point_marker, "drag", function() { |
||||||
|
var index = findMarkerIndex(point_marker); |
||||||
|
|
||||||
|
if (index >= 0) { |
||||||
|
var nLat = point_marker.getPoint().lat(); |
||||||
|
var nLng = point_marker.getPoint().lng(); |
||||||
|
|
||||||
|
var pLevel = points[index].Level; |
||||||
|
|
||||||
|
var modifiedPoint = { |
||||||
|
lat: nLat, |
||||||
|
lon: nLng, |
||||||
|
Level: pLevel |
||||||
|
}; |
||||||
|
|
||||||
|
points[index] = modifiedPoint; |
||||||
|
createEncodings(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
GEvent.addListener(point_marker, "click", function() { |
||||||
|
highlight(findMarkerIndex(point_marker)); |
||||||
|
}); |
||||||
|
|
||||||
|
return point_marker; |
||||||
|
} |
||||||
|
|
||||||
|
// Highlights the point specified by index in both the map and the point list.
|
||||||
|
function highlight(index) { |
||||||
|
|
||||||
|
if (point_markers[index] != null |
||||||
|
&& point_markers[index] != highlighted_marker) { |
||||||
|
map.removeOverlay(point_markers[index]); |
||||||
|
} |
||||||
|
|
||||||
|
if (highlighted_marker != null) { |
||||||
|
var oldIndex = findMarkerIndex(highlighted_marker); |
||||||
|
map.removeOverlay(highlighted_marker); |
||||||
|
|
||||||
|
if (oldIndex != index) { |
||||||
|
point_markers[oldIndex] |
||||||
|
= createPointMarker(highlighted_marker.getPoint(), false); |
||||||
|
map.addOverlay(point_markers[oldIndex]); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
highlighted_marker = createPointMarker(point_markers[index].getPoint(), |
||||||
|
true); |
||||||
|
point_markers[index] = highlighted_marker; |
||||||
|
map.addOverlay(highlighted_marker); |
||||||
|
|
||||||
|
currentIndex = index ; |
||||||
|
} |
||||||
|
|
||||||
|
// Encode a signed number in the encode format.
|
||||||
|
function encodeSignedNumber(num) { |
||||||
|
var sgn_num = num << 1; |
||||||
|
|
||||||
|
if (num < 0) { |
||||||
|
sgn_num = ~(sgn_num); |
||||||
|
} |
||||||
|
|
||||||
|
return(encodeNumber(sgn_num)); |
||||||
|
} |
||||||
|
|
||||||
|
// Encode an unsigned number in the encode format.
|
||||||
|
function encodeNumber(num) { |
||||||
|
var encodeString = ""; |
||||||
|
|
||||||
|
while (num >= 0x20) { |
||||||
|
encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63)); |
||||||
|
num >>= 5; |
||||||
|
} |
||||||
|
|
||||||
|
encodeString += (String.fromCharCode(num + 63)); |
||||||
|
return encodeString; |
||||||
|
} |
||||||
|
|
||||||
|
// Delete a point from the polyline.
|
||||||
|
function deletePoint() { |
||||||
|
if (points.length > 0) { |
||||||
|
var point_index = currentIndex; |
||||||
|
|
||||||
|
if (point_index >= 0 && point_index < points.length) { |
||||||
|
points.splice(point_index, 1); |
||||||
|
|
||||||
|
if (highlighted_marker == point_markers[point_index]) { |
||||||
|
highlighted_marker = null; |
||||||
|
currentIndex=-1; |
||||||
|
} |
||||||
|
|
||||||
|
map.removeOverlay(point_markers[point_index]); |
||||||
|
point_markers.splice(point_index, 1); |
||||||
|
createEncodings(); |
||||||
|
} |
||||||
|
|
||||||
|
if (points.length > 0) { |
||||||
|
if (point_index == 0) { |
||||||
|
point_index++; |
||||||
|
} |
||||||
|
|
||||||
|
highlight(point_index - 1); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Create the encoded polyline and level strings.
|
||||||
|
function createEncodings() { |
||||||
|
if (points.length==0)
|
||||||
|
{ |
||||||
|
document.getElementById('encodedLevels').value = ''; |
||||||
|
document.getElementById('encodedPolyline').value = ''; |
||||||
|
if (document.overlay) { |
||||||
|
map.removeOverlay(document.overlay); |
||||||
|
} |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
var encoded_levels=''; |
||||||
|
var encoded_points=''; |
||||||
|
var vZoom, vLevels; |
||||||
|
|
||||||
|
vLevels = 4; |
||||||
|
vZoom = 32; |
||||||
|
|
||||||
|
var plat = 0; |
||||||
|
var plng = 0; |
||||||
|
|
||||||
|
for(var i = 0; i < points.length; ++i) { |
||||||
|
var point = points[i]; |
||||||
|
var lat = point.lat; |
||||||
|
var lng = point.lon; |
||||||
|
var level = point.Level; |
||||||
|
|
||||||
|
var late5 = Math.floor(lat * 1e5); |
||||||
|
var lnge5 = Math.floor(lng * 1e5); |
||||||
|
|
||||||
|
dlat = late5 - plat; |
||||||
|
dlng = lnge5 - plng; |
||||||
|
|
||||||
|
plat = late5; |
||||||
|
plng = lnge5; |
||||||
|
|
||||||
|
encoded_points += encodeSignedNumber(dlat) + encodeSignedNumber(dlng); |
||||||
|
encoded_levels += encodeNumber(level); |
||||||
|
} |
||||||
|
|
||||||
|
document.getElementById('encodedLevels').value = encoded_levels.replace(/\\/g, "\\\\"); |
||||||
|
document.getElementById('encodedPolyline').value = encoded_points.replace(/\\/g, "\\\\"); |
||||||
|
|
||||||
|
if (document.overlay) { |
||||||
|
map.removeOverlay(document.overlay); |
||||||
|
} |
||||||
|
|
||||||
|
if (points.length > 1) { |
||||||
|
document.overlay = GPolyline.fromEncoded({color: "#3333cc", |
||||||
|
weight: 5, |
||||||
|
points: encoded_points, |
||||||
|
zoomFactor: vZoom, |
||||||
|
levels: encoded_levels, |
||||||
|
numLevels: vLevels |
||||||
|
}); |
||||||
|
|
||||||
|
map.addOverlay(document.overlay); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Decode an encoded polyline into a list of lat/lng tuples.
|
||||||
|
function decodeLine (encoded) { |
||||||
|
var len = encoded.length; |
||||||
|
var index = 0; |
||||||
|
var array = []; |
||||||
|
var lat = 0; |
||||||
|
var lng = 0; |
||||||
|
|
||||||
|
while (index < len) { |
||||||
|
var b; |
||||||
|
var shift = 0; |
||||||
|
var result = 0; |
||||||
|
do { |
||||||
|
b = encoded.charCodeAt(index++) - 63; |
||||||
|
result |= (b & 0x1f) << shift; |
||||||
|
shift += 5; |
||||||
|
} while (b >= 0x20); |
||||||
|
var dlat = ((result & 1) ? ~(result >> 1) : (result >> 1)); |
||||||
|
lat += dlat; |
||||||
|
|
||||||
|
shift = 0; |
||||||
|
result = 0; |
||||||
|
do { |
||||||
|
b = encoded.charCodeAt(index++) - 63; |
||||||
|
result |= (b & 0x1f) << shift; |
||||||
|
shift += 5; |
||||||
|
} while (b >= 0x20); |
||||||
|
var dlng = ((result & 1) ? ~(result >> 1) : (result >> 1)); |
||||||
|
lng += dlng; |
||||||
|
|
||||||
|
array.push([lat * 1e-5, lng * 1e-5]); |
||||||
|
} |
||||||
|
|
||||||
|
return array; |
||||||
|
} |
||||||
|
|
||||||
|
// Decode an encoded levels string into a list of levels.
|
||||||
|
function decodeLevels(encoded) { |
||||||
|
var levels = []; |
||||||
|
|
||||||
|
for (var pointIndex = 0; pointIndex < encoded.length; ++pointIndex) { |
||||||
|
var pointLevel = encoded.charCodeAt(pointIndex) - 63; |
||||||
|
levels.push(pointLevel); |
||||||
|
} |
||||||
|
|
||||||
|
return levels; |
||||||
|
} |
||||||
|
|
||||||
|
// Decode the supplied encoded polyline and levels.
|
||||||
|
function decodePolyline() { |
||||||
|
var encoded_points = document.getElementById('encodedPolyline').value; |
||||||
|
encoded_points = encoded_points.replace(/\\\\/g, "\\"); |
||||||
|
|
||||||
|
if (encoded_points.length==0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
var enc_points = decodeLine(encoded_points); |
||||||
|
|
||||||
|
if (enc_points.length==0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
points = []; |
||||||
|
|
||||||
|
for (var i = 0; i < enc_points.length; ++i) { |
||||||
|
createPoint(enc_points[i][0], enc_points[i][1], 3); |
||||||
|
} |
||||||
|
|
||||||
|
createEncodings(); |
||||||
|
} |
||||||
|
|
||||||
|
function ShowLinePoints() |
||||||
|
{ |
||||||
|
if (points.length==0) |
||||||
|
return; |
||||||
|
|
||||||
|
for (var i=0; i<points.length ; i++) |
||||||
|
{ |
||||||
|
var point = points[i] ; |
||||||
|
var point_marker = createPointMarker(new GLatLng(point.lat, point.lon), false); |
||||||
|
map.addOverlay(point_marker); |
||||||
|
point_markers.push(point_marker); |
||||||
|
} |
||||||
|
|
||||||
|
highlight(points.length-1); |
||||||
|
} |
||||||
|
|
||||||
|
function HideLinePoints() |
||||||
|
{ |
||||||
|
for (var i=point_markers.length -1;i>=0 ; i--) |
||||||
|
{ |
||||||
|
map.removeOverlay(point_markers[i]); |
||||||
|
} |
||||||
|
point_markers = [] ; |
||||||
|
highlighted_marker = null; |
||||||
|
currentIndex=-1; |
||||||
|
} |
||||||
|
|
||||||
|
function createColorMarker(point, color) { |
||||||
|
var f = new GIcon(); |
||||||
|
f.image = "http://labs.google.com/ridefinder/images/mm_20_" + color |
||||||
|
+ ".png"; |
||||||
|
f.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png"; |
||||||
|
f.iconSize = new GSize(12,20); |
||||||
|
f.shadowSize = new GSize(22,20); |
||||||
|
f.iconAnchor = new GPoint(6,20); |
||||||
|
f.infoWindowAnchor = new GPoint(6,1); |
||||||
|
f.infoShadowAnchor = new GPoint(13,13); |
||||||
|
|
||||||
|
newMarker = new GMarker(point, |
||||||
|
{icon: f, draggable: true}); |
||||||
|
|
||||||
|
return newMarker; |
||||||
|
} |
||||||
|
|
||||||
|
After Width: | Height: | Size: 318 B |
@ -0,0 +1,11 @@ |
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
||||||
|
"http://www.w3.org/TR/html4/loose.dtd"> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<title>googlemaps plugin index</title> |
||||||
|
<META http-equiv="refresh" content="0;URL=install.html"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<p>You should have been redirected <a href="install.html">to the documentation</a></p> |
||||||
|
</body> |
||||||
|
</html> |
||||||
@ -0,0 +1,152 @@ |
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
||||||
|
"http://www.w3.org/TR/html4/loose.dtd"> |
||||||
|
<html lang="es"> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||||
|
<title>GoogleMaps plugin</title> |
||||||
|
<link href="styles.css" rel="stylesheet" type="text/css"> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body> |
||||||
|
<h1>Plugin de Mapas Google para FCKeditor</h1> |
||||||
|
<div id="languages"> Cambie su idioma |
||||||
|
<ul> |
||||||
|
<li><a href="install.html" lang="en"><img src="uk.png" alt="English" width="23" height="15" border="0"></a></li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<h2>Introducción</h2> |
||||||
|
<p>Este es un plugin basado en una ventana de dialogo para controlar la inserción |
||||||
|
y modificación de <a href="http://maps.google.com">Mapas Google</a> en <a href="http://www.fckeditor.net">FCKeditor</a></p> |
||||||
|
<h3 id="contact">Autor:</h3> |
||||||
|
<p><a href="mailto:amla70@gmail.com">Alfonso Martínez de Lizarrondo</a></p> |
||||||
|
<h3>Patrocinado por:</h3> |
||||||
|
<p><a href="http://dynamical.biz">Dynamical.biz</a></p> |
||||||
|
<p><a href="http://www.uritec.net">Uritec</a></p> |
||||||
|
<p><a href="http://www.incontrolsolutions.com">InControl Solutions</a></p> |
||||||
|
<h3>Historial de versiones : </h3> |
||||||
|
<ol> |
||||||
|
<li>1.0: 25/08/2007. Primera versión.</li> |
||||||
|
<li>1.1: 28/08/2007. Ups, no estaba probado en 2.4.3</li> |
||||||
|
<li>1.2: 31/08/2007. Nuevo icono por Dynamical.biz. Utilizar IMG en vez de |
||||||
|
DIV para mostrar la situación del mapa por el momento.</li> |
||||||
|
<li>1.3: 02/09/2007. Documentación completa en HTML para la instalación y para |
||||||
|
usuarios. </li> |
||||||
|
<li>1.4: 21/09/2007. Utilizar el evento onload para generar el mapa (para evitar problemas con IE), e incluir la llamada a GUnload. |
||||||
|
Eliminar automáticamente el icono de la barra si no existe una clave Google correcta </li> |
||||||
|
<li>1.5 30/09/2007. Soporte para poder dibujar lineas en el mapa. </li> |
||||||
|
<li>1.6 24/10/2007. Soporte de múltiples marcadores.</li> |
||||||
|
<li>1.7 03/02/2008. Soporte de los nuevos cuadros de diálogo en FCKeditor 2.6.</li> |
||||||
|
<li>1.8 02/05/2008. Soporte de la vista Terreno y recordar el tipo de vista seleccionado. Se usan los mapas estáticos en el editor.</li> |
||||||
|
<li>1.9 19/05/2008. Respeta los valores que se pongan de anchura y altura (solo supone que son pixels si se trata de números sin ningún sufijo)<br> |
||||||
|
Parámetros opcionales de configuración: <a href="#WrapperClass">GoogleMaps_WrapperClass</a> y <a href="#PublicKey">GoogleMaps_PublicKey</a> (este código propuesto por <a href="http://www.makerweb.it" target="_blank">Makerweb.it</a>) .</li> |
||||||
|
<li>1.95 12/09/2008. The preview reflects the real type of the map. It shows also the markers.</li> |
||||||
|
</ol> |
||||||
|
<p><a href="http://martinezdelizarrondo.com/googlemaps/">Descarga la última versión |
||||||
|
y/o información actualizada </a> </p> |
||||||
|
<h3>Problemas conocidos :</h3> |
||||||
|
<p>El botón de 'Previsualizar' en FCKeditor no funcionará correctamente si hay |
||||||
|
algún mapa en el contenido. El problema parece debido a la forma en que la |
||||||
|
API de Google Maps realiza la inserción y carga del contenido adicional. </p> |
||||||
|
<p>Estos temas en el grupo del API apuntan al mismo problema :<br> |
||||||
|
<a href="http://groups.google.com/group/Google-Maps-API/browse_thread/thread/7849dfd612181b6c/1c3e5f7fb5fa3301">http://groups.google.com/group/Google-Maps-API/browse_thread/thread/7849dfd612181b6c/1c3e5f7fb5fa3301</a> <br> |
||||||
|
<a href="http://groups.google.com/group/Google-Maps-API/browse_thread/thread/89ea5fa4e0a0ccb9/05c364940447891d">http://groups.google.com/group/Google-Maps-API/browse_thread/thread/89ea5fa4e0a0ccb9/05c364940447891d</a> </p> |
||||||
|
<p>Una solución para este problema podría ser utilizar el plugin de <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1496110&group_id=75348&atid=737639">Previsualización |
||||||
|
mediante el servidor</a> </p> |
||||||
|
<h2>Instalación</h2> |
||||||
|
<h3>1. Copiar los ficheros</h3> |
||||||
|
<p>Extrae los contenidos del zip en tu carpeta de plugins, de forma que quede |
||||||
|
como a continuación<br> |
||||||
|
<img src="installation.png" alt="Captura de pantalla de la instalación" width="311" height="346" longdesc="#install"></p> |
||||||
|
<pre id="install"> |
||||||
|
editor\ |
||||||
|
... |
||||||
|
js\ |
||||||
|
lang\ |
||||||
|
plugins\ |
||||||
|
... |
||||||
|
googlemaps\ |
||||||
|
fckplugin.js |
||||||
|
readme.html |
||||||
|
dialog\ |
||||||
|
docs\ |
||||||
|
images\ |
||||||
|
lang\ |
||||||
|
... |
||||||
|
skins\ |
||||||
|
</pre> |
||||||
|
<h3>2. Añadirlo a FCKeditor</h3> |
||||||
|
<p>Ahora incluye en tu <em>fckconfig.js</em> o fichero de configuración que estes |
||||||
|
usando la siguiente linea: |
||||||
|
<code>FCKConfig.Plugins.Add( 'googlemaps', 'de,en,es,fr,it,nl') ;</code></p> |
||||||
|
<h3>3. Añadirlo a la barra de botones </h3> |
||||||
|
<p>Añade el botón <strong>'googlemaps'</strong> (en minúsculas) a tu barra de |
||||||
|
botones: |
||||||
|
<code>FCKConfig.ToolbarSets["Basic"] = [<br> |
||||||
|
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink', |
||||||
|
'-'<strong>,'googlemaps'</strong>,'-','About']<br> |
||||||
|
] ;</code> |
||||||
|
</p> |
||||||
|
<h3 id="configure">4. Configurar el plugin</h3> |
||||||
|
<p>La parte más importante es tu clave para GoogleMaps. Debe estar establecida |
||||||
|
correctamente para que el plugin funcione, ya que sino Google no proporcionará |
||||||
|
los datos para el mapa. <br> |
||||||
|
Debes obtener una para cada servidor donde quieras utilizar el plugin, puedes |
||||||
|
obtenerlas gratuitamente aquí tras aceptar las condiciones de uso de los Mapas |
||||||
|
Google: <a href="http://www.google.com/apis/maps/signup.html">http://www.google.com/apis/maps/signup.html</a><br> |
||||||
|
(Por favor, no hagais preguntas sobre en que sitios se puede usar GoogleMaps |
||||||
|
o cómo conseguir la clave, ya que son temas que no están relacionados con el |
||||||
|
plugin.)<br> |
||||||
|
Por ejemplo, la clave para "localhost" es<br> |
||||||
|
<span class="key">ABQIAAAAlXu5Pw6DFAUgqM2wQn01gxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSy5hTGQdsosYD3dz6faZHVrO-02A</span></p> |
||||||
|
<p>Una vez que tengas la clave, has de añadirla a tu fichero de configuración:<br> |
||||||
|
<code>FCKConfig.GoogleMaps_Key = '<span class="key">ABQIAAAAlXu5Pw6DFAUgqM2wQn01gxT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSy5hTGQdsosYD3dz6faZHVrO-02A</span>' |
||||||
|
;</code></p> |
||||||
|
<p>(recuerda que has de sustituir la clave en verde por la tuya) </p> |
||||||
|
<p>Nota: si dejas esa variable como una cadena en blanco entonces el icono no se mostrará (así se puede reutilizar la misma configuración |
||||||
|
de la barra para diferentes situaciones y dependiendo de esa variable se mostrará o no, ya que el sistema actual de FCKeditor no permite |
||||||
|
el añadir/eliminar plugins o botones de una forma realmente sencilla)</p> |
||||||
|
<p>Hay varias opciones que puedes establecer para cambiar los valores por defecto |
||||||
|
con los que se crearán los nuevos mapas:</p> |
||||||
|
<ul> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_Width</strong> : La anchura del mapa </li> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_Height</strong> : La altura del mapa</li> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_CenterLat</strong> : La latitud del centro </li> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_CenterLon</strong> : La longitud del centro </li> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_Zoom</strong> : El nivel de zoom </li> |
||||||
|
<li>FCKConfig.<strong>GoogleMaps_MarkerText</strong> : El texto para el marcador </li> |
||||||
|
<li id="WrapperClass">FCKConfig.<strong>GoogleMaps_WrapperClass</strong> : Los mapas Google automaticamente ocupan toda la altura y anchura del div generado, por lo que si quieres mostrar algo de espacio y/o un borde necesitas añadir un div a su alrededor. Si este parámetro no está vacío, entonces se generará ese div con esta clase.<br> |
||||||
|
Importante: ¡en la previsualización en el editor la clase se aplicará a una imagen, no a un div!</li> |
||||||
|
<li id="PublicKey">FCKConfig.<strong>GoogleMaps_PublicKey</strong> : Si estás usando el editor en un dominio diferente a la localización final de la web, los mapas no funcionarán correctamente con la configuración por defecto. En esta situación puedes usar este parámetro. Primero, establece en GoogleMaps_Key la clave del dominio donde funcionará FCKeditor y a continuación tienes dos opciones,: |
||||||
|
<ul> |
||||||
|
<li>Poner un valor en blanco para GoogleMaps_PublicKey (FCKConfig.GoogleMaps_PublicKey = '';) esto significa que el usuario debe proporcionar la clave para el dominio final. Esto es útil si no se sabe de antemano todos los dominios donde esta instalación será usada. Por supuesto, debes explicarle a los usuarios cómo conseguir la clave API correspondiente</li> |
||||||
|
<li>Establecer en GoogleMaps_PublicKey la clave adecuada para el dominio final. Para el usuario esto supone que todo funcionará automáticamente sin ningún problema.</li> |
||||||
|
</ul> |
||||||
|
</ul> |
||||||
|
<p>Estos valores pueden establecerse en el fichero <em>fckconfig.js</em>, |
||||||
|
un fichero de configuración personalizado o en el <a href="http://alfonsoml.blogspot.com/2008/02/adding-configuration-entries-when.html">momento de creación del FCKeditor |
||||||
|
utilizando cualquier lenguaje.</a></p> |
||||||
|
|
||||||
|
<h3>5. Úsalo </h3> |
||||||
|
<p align="right">Ahora vacía la caché del navegador, recarga el editor y el nuevo |
||||||
|
botón |
||||||
|
<img src="../images/mapIcon.gif" alt="Insertar mapa Google" width="16" height="16"> debería |
||||||
|
estar <a href="users_es.html">listo para usarse </a>.</p> |
||||||
|
<h2>Notas finales</h2> |
||||||
|
<p>Si ves que este plugin es útil, considera la opción de realizar una donación |
||||||
|
para que pueda ser mejorado, cualquier cantidad ayudará a que el desarrollo |
||||||
|
siga adelante.</p> |
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> |
||||||
|
<input type="hidden" name="cmd" value="_s-xclick"> |
||||||
|
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> |
||||||
|
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> |
||||||
|
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7----- |
||||||
|
"> |
||||||
|
</form> |
||||||
|
<p>Si necesitas alguna funcionalidad especial para este plugin, o si necesitas |
||||||
|
cualquier otro plugin para FCKeditor, <a href="#contact">contacta conmigo</a> y hablaremos sobre el |
||||||
|
tema</p> |
||||||
|
<h2>Avisos legales </h2> |
||||||
|
<p>FCKeditor © FredCK.com</p> |
||||||
|
<p>Google, Google Maps y el API de Google Maps son propiedades de Google.</p> |
||||||
|
</body> |
||||||
|
</html> |
||||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
@ -0,0 +1,59 @@ |
|||||||
|
body { |
||||||
|
font-family: Arial, Helvetica, sans-serif; |
||||||
|
font-size: 90%; |
||||||
|
} |
||||||
|
h1 { |
||||||
|
text-align:center; |
||||||
|
font-size:180%; |
||||||
|
} |
||||||
|
h2 { |
||||||
|
border-bottom:2px solid #CCC; |
||||||
|
margin:1em 0 0.4em 0; |
||||||
|
} |
||||||
|
h3 { |
||||||
|
margin-bottom:0.4em; |
||||||
|
} |
||||||
|
p { |
||||||
|
margin:0 0 1em 1em; |
||||||
|
text-align:justify; |
||||||
|
} |
||||||
|
ol { |
||||||
|
margin:0 0 1.2em 1em; |
||||||
|
padding:0; |
||||||
|
list-style-type:none; |
||||||
|
} |
||||||
|
ol li { |
||||||
|
margin:0.2em 0; |
||||||
|
} |
||||||
|
pre, code { |
||||||
|
font-size:100%; |
||||||
|
font-family:"Courier New", Courier, mono; |
||||||
|
background-color: #CCCCCC; |
||||||
|
border:1px solid #999; |
||||||
|
padding:0.2em 1em; |
||||||
|
margin: 0.4em 0; |
||||||
|
display:block; |
||||||
|
white-space: pre; |
||||||
|
overflow: auto; |
||||||
|
} |
||||||
|
form { |
||||||
|
margin:0 0 0 1em; |
||||||
|
} |
||||||
|
span.key { |
||||||
|
color: #006600; |
||||||
|
} |
||||||
|
#install { |
||||||
|
display:none |
||||||
|
} |
||||||
|
#languages ul { |
||||||
|
display:inline; |
||||||
|
list-style-type:none; |
||||||
|
margin:0; |
||||||
|
padding:0; |
||||||
|
} |
||||||
|
#languages li { |
||||||
|
display:inline; |
||||||
|
margin:0; |
||||||
|
padding:0; |
||||||
|
vertical-align:bottom; |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 936 B |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 730 B |
|
After Width: | Height: | Size: 705 B |
|
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,752 @@ |
|||||||
|
/* |
||||||
|
GoogleMaps Plugin for FCKeditor |
||||||
|
Dialog plugin to handle insertion and modification of Google Maps in FCKeditor |
||||||
|
|
||||||
|
File Author: |
||||||
|
Alfonso Martinez de Lizarrondo amla70 at gmail dot com |
||||||
|
|
||||||
|
version 1.97 |
||||||
|
|
||||||
|
See readme.html |
||||||
|
*/ |
||||||
|
|
||||||
|
// Check that the Google key is defined
|
||||||
|
if ( typeof( FCKConfig.GoogleMaps_Key ) != 'string') |
||||||
|
{ |
||||||
|
alert( 'Error.\r\nThe configuration doesn\'t contain the Google Maps key.\r\n' +
|
||||||
|
'Please read the Configuration section.') ; |
||||||
|
|
||||||
|
window.open(FCKPlugins.Items['googlemaps'].Path + 'docs/' + FCKLang.GMapsHelpFile + '#configure'); |
||||||
|
} |
||||||
|
|
||||||
|
// If it's empty automatically remove the button from any toolbar.
|
||||||
|
if ( !FCKConfig.GoogleMaps_Key || FCKConfig.GoogleMaps_Key.length === 0) |
||||||
|
{ |
||||||
|
for( var name in FCKConfig.ToolbarSets ) |
||||||
|
RemoveButtonFromToolbarSet( FCKConfig.ToolbarSets[name], 'googlemaps' ) ; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
Helper function |
||||||
|
It does remove a button from an toolbarset.
|
||||||
|
It's better than leaving it disabled as it will avoid questions about why some button is always disabled. |
||||||
|
*/ |
||||||
|
function RemoveButtonFromToolbarSet(ToolbarSet, CommandName) |
||||||
|
{ |
||||||
|
if (!ToolbarSet) |
||||||
|
return; |
||||||
|
|
||||||
|
for ( var x = 0 ; x < ToolbarSet.length ; x++ ) |
||||||
|
{ |
||||||
|
var oToolbarItems = ToolbarSet[x] ; |
||||||
|
|
||||||
|
// If the configuration for the toolbar is missing some element or has any extra comma
|
||||||
|
// this item won't be valid, so skip it and keep on processing.
|
||||||
|
if ( !oToolbarItems )
|
||||||
|
continue ; |
||||||
|
|
||||||
|
if ( typeof( oToolbarItems ) == 'object' ) |
||||||
|
{ |
||||||
|
for ( var j = 0 ; j < oToolbarItems.length ; j++ ) |
||||||
|
{ |
||||||
|
if ( oToolbarItems[j] == CommandName) |
||||||
|
{ |
||||||
|
oToolbarItems.splice(j, 1); |
||||||
|
ToolbarSet[x] = oToolbarItems ; |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Toolbar button
|
||||||
|
|
||||||
|
// Register the related command.
|
||||||
|
FCKCommands.RegisterCommand( 'googlemaps', new FCKDialogCommand( 'googlemaps', FCKLang.DlgGMapsTitle, FCKPlugins.Items['googlemaps'].Path + 'dialog/googleMaps.html', 450, 428 ) ) ; |
||||||
|
|
||||||
|
// Create the "googlemaps" toolbar button.
|
||||||
|
var oGoogleMapsButton = new FCKToolbarButton( 'googlemaps', FCKLang.GMapsBtn, FCKLang.GMapsBtnTooltip) ; |
||||||
|
oGoogleMapsButton.IconPath = FCKPlugins.Items['googlemaps'].Path + 'images/mapIcon.gif' ; |
||||||
|
|
||||||
|
FCKToolbarItems.RegisterItem( 'googlemaps', oGoogleMapsButton ) ; |
||||||
|
|
||||||
|
|
||||||
|
// Detection of existing maps
|
||||||
|
/** |
||||||
|
FCKCommentsProcessor |
||||||
|
--------------------------- |
||||||
|
It's run after a document has been loaded, it detects all the protected source elements |
||||||
|
|
||||||
|
In order to use it, you add your comment parser with
|
||||||
|
FCKCommentsProcessor.AddParser( function ) |
||||||
|
*/ |
||||||
|
if (typeof FCKCommentsProcessor === 'undefined') |
||||||
|
{ |
||||||
|
var FCKCommentsProcessor = FCKDocumentProcessor.AppendNew() ; |
||||||
|
FCKCommentsProcessor.ProcessDocument = function( oDoc ) |
||||||
|
{ |
||||||
|
if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) |
||||||
|
return ; |
||||||
|
|
||||||
|
if ( !oDoc ) |
||||||
|
return ; |
||||||
|
|
||||||
|
//Find all the comments: <!--{PS..0}-->
|
||||||
|
//try to choose the best approach according to the browser:
|
||||||
|
if ( oDoc.evaluate ) |
||||||
|
this.findCommentsXPath( oDoc ); |
||||||
|
else |
||||||
|
{ |
||||||
|
if (oDoc.all) |
||||||
|
this.findCommentsIE( oDoc.body ) ; |
||||||
|
else |
||||||
|
this.findComments( oDoc.body ) ; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
FCKCommentsProcessor.findCommentsXPath = function(oDoc) { |
||||||
|
var nodesSnapshot = oDoc.evaluate('//body//comment()', oDoc.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null ); |
||||||
|
|
||||||
|
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ) |
||||||
|
{ |
||||||
|
this.parseComment( nodesSnapshot.snapshotItem(i) ) ; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FCKCommentsProcessor.findCommentsIE = function(oNode) { |
||||||
|
var aComments = oNode.getElementsByTagName( '!' ); |
||||||
|
for(var i=aComments.length-1; i >=0 ; i--) |
||||||
|
{ |
||||||
|
var comment = aComments[i] ; |
||||||
|
if (comment.nodeType == 8 ) // oNode.COMMENT_NODE)
|
||||||
|
this.parseComment( comment ) ; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Fallback function, iterate all the nodes and its children searching for comments.
|
||||||
|
FCKCommentsProcessor.findComments = function( oNode )
|
||||||
|
{ |
||||||
|
if (oNode.nodeType == 8 ) // oNode.COMMENT_NODE)
|
||||||
|
{ |
||||||
|
this.parseComment( oNode ) ; |
||||||
|
} |
||||||
|
else
|
||||||
|
{ |
||||||
|
if (oNode.hasChildNodes())
|
||||||
|
{ |
||||||
|
var children = oNode.childNodes ; |
||||||
|
for (var i = children.length-1; i >=0 ; i--)
|
||||||
|
this.findComments( children[ i ] ); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// We get a comment node
|
||||||
|
// Check that it's one that we are interested on:
|
||||||
|
FCKCommentsProcessor.parseComment = function( oNode ) |
||||||
|
{ |
||||||
|
var value = oNode.nodeValue ; |
||||||
|
|
||||||
|
// Difference between 2.4.3 and 2.5
|
||||||
|
var prefix = ( FCKConfig.ProtectedSource._CodeTag || 'PS\\.\\.' ) ; |
||||||
|
|
||||||
|
var regex = new RegExp( "\\{" + prefix + "(\\d+)\\}", "g" ) ; |
||||||
|
|
||||||
|
if ( regex.test( value ) )
|
||||||
|
{ |
||||||
|
var index = RegExp.$1 ; |
||||||
|
var content = FCKTempBin.Elements[ index ] ; |
||||||
|
|
||||||
|
// Now call the registered parser handlers.
|
||||||
|
var oCalls = this.ParserHandlers ; |
||||||
|
if ( oCalls ) |
||||||
|
{ |
||||||
|
for ( var i = 0 ; i < oCalls.length ; i++ ) |
||||||
|
oCalls[ i ]( oNode, content, index ) ; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
The users of the object will add a parser here, the callback function gets two parameters: |
||||||
|
oNode: it's the node in the editorDocument that holds the position of our content |
||||||
|
oContent: it's the node (removed from the document) that holds the original contents |
||||||
|
index: the reference in the FCKTempBin of our content |
||||||
|
*/ |
||||||
|
FCKCommentsProcessor.AddParser = function( handlerFunction ) |
||||||
|
{ |
||||||
|
if ( !this.ParserHandlers ) |
||||||
|
this.ParserHandlers = [ handlerFunction ] ; |
||||||
|
else |
||||||
|
{ |
||||||
|
// Check that the event handler isn't already registered with the same listener
|
||||||
|
// It doesn't detect function pointers belonging to an object (at least in Gecko)
|
||||||
|
if ( this.ParserHandlers.IndexOf( handlerFunction ) == -1 ) |
||||||
|
this.ParserHandlers.push( handlerFunction ) ; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
/** |
||||||
|
END of FCKCommentsProcessor |
||||||
|
--------------------------- |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Check if the comment it's one of our scripts:
|
||||||
|
var GoogleMaps_CommentsProcessorParser = function( oNode, oContent, index) |
||||||
|
{ |
||||||
|
if ( FCK.GoogleMapsHandler.detectMapScript( oContent ) ) |
||||||
|
{ |
||||||
|
var oMap = FCK.GoogleMapsHandler.createNew() ; |
||||||
|
oMap.parse( oContent ) ; |
||||||
|
oMap.createHtmlElement( oNode, index ) ; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if ( FCK.GoogleMapsHandler.detectGoogleScript( oContent ) ) |
||||||
|
oNode.parentNode.removeChild( oNode ); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
FCKCommentsProcessor.AddParser( GoogleMaps_CommentsProcessorParser ); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Context menu
|
||||||
|
FCK.ContextMenu.RegisterListener( { |
||||||
|
AddItems : function( menu, tag, tagName ) |
||||||
|
{ |
||||||
|
// under what circumstances do we display this option
|
||||||
|
if ( tagName == 'IMG' && tag.getAttribute( 'MapNumber' ) ) |
||||||
|
{ |
||||||
|
// No other options:
|
||||||
|
menu.RemoveAllItems() ; |
||||||
|
// the command needs the registered command name, the title for the context menu, and the icon path
|
||||||
|
menu.AddItem( 'googlemaps', FCKLang.DlgGMapsTitle, oGoogleMapsButton.IconPath ) ; |
||||||
|
} |
||||||
|
}} |
||||||
|
); |
||||||
|
|
||||||
|
// Double click
|
||||||
|
FCK.RegisterDoubleClickHandler( editMap, 'IMG' ) ; |
||||||
|
|
||||||
|
function editMap( oNode ) |
||||||
|
{ |
||||||
|
if ( !oNode.getAttribute( 'MapNumber' )) |
||||||
|
return ; |
||||||
|
|
||||||
|
FCK.Commands.GetCommand( 'googlemaps' ).Execute() ; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Object that handles the common functions about all the maps
|
||||||
|
FCK.GoogleMapsHandler = { |
||||||
|
// Object to store a reference to each map
|
||||||
|
maps: {}, |
||||||
|
|
||||||
|
getMap: function(id){ |
||||||
|
return this.maps[id]; |
||||||
|
}, |
||||||
|
|
||||||
|
// Verify that the node is a script generated by this plugin.
|
||||||
|
detectMapScript: function( script ) |
||||||
|
{ |
||||||
|
// We only know about version 1:
|
||||||
|
if ( !(/FCK googlemaps v1\.(\d+)/.test(script)) ) |
||||||
|
return false; |
||||||
|
|
||||||
|
return true |
||||||
|
}, |
||||||
|
|
||||||
|
// Self-executed function, we want to run it once at initialization only.
|
||||||
|
// Public key that will be used for the generated maps,
|
||||||
|
// while we are editing we will use only FCKConfig.GoogleMaps_Key
|
||||||
|
publicKey : function() { |
||||||
|
// if FCKConfig.GoogleMaps_PublicKey is set to something, then use it
|
||||||
|
if ( FCKConfig.GoogleMaps_PublicKey ) |
||||||
|
return FCKConfig.GoogleMaps_PublicKey ; |
||||||
|
|
||||||
|
// else we will use GoogleMaps_Key for both the public and private side.
|
||||||
|
return FCKConfig.GoogleMaps_Key ; |
||||||
|
}(), |
||||||
|
|
||||||
|
// Detects both the google script as well as our ending block
|
||||||
|
// both must be removed and then added later only if neccesary
|
||||||
|
detectGoogleScript: function( script ) |
||||||
|
{ |
||||||
|
// Our final script
|
||||||
|
if (/FCK googlemapsEnd v1\./.test(script) ) |
||||||
|
return true ; |
||||||
|
|
||||||
|
// If it is the Google Maps script, get the public key from here:
|
||||||
|
if ( !/^<script src="http:\/\/maps\.google\.com\/.*key=(.*)("|&)/.test(script) ) |
||||||
|
return false; |
||||||
|
|
||||||
|
this.publicKey = RegExp.$1 ; |
||||||
|
return ( true ) ; |
||||||
|
}, |
||||||
|
|
||||||
|
GenerateGoogleScript : function() |
||||||
|
{ |
||||||
|
return '\r\n<script src="http://maps.google.com/maps?file=api&v=2&key=' + FCKConfig.GoogleMaps_Key + '" type="text/javascript" charset="utf-8"></script>' ; |
||||||
|
}, |
||||||
|
|
||||||
|
// This can be called from the dialog
|
||||||
|
createNew: function() |
||||||
|
{ |
||||||
|
var map = new FCKGoogleMap() ; |
||||||
|
this.maps[ map.number ] = map; |
||||||
|
return map; |
||||||
|
}, |
||||||
|
|
||||||
|
BuildEndingScript: function() |
||||||
|
{ |
||||||
|
var versionMarker = '// FCK googlemapsEnd v1.97'; |
||||||
|
|
||||||
|
var aScript = [] ; |
||||||
|
aScript.push('\r\n<script type="text/javascript">') ; |
||||||
|
aScript.push( versionMarker ) ; |
||||||
|
|
||||||
|
aScript.push('function AddMarkers( map, aPoints )'); |
||||||
|
aScript.push('{'); |
||||||
|
aScript.push(' for (var i=0; i<aPoints.length ; i++)'); |
||||||
|
aScript.push(' {'); |
||||||
|
aScript.push(' var point = aPoints[i] ;'); |
||||||
|
aScript.push(' map.addOverlay( createMarker(new GLatLng(point.lat, point.lon), point.text) );'); |
||||||
|
aScript.push(' }'); |
||||||
|
aScript.push('}'); |
||||||
|
|
||||||
|
aScript.push('function createMarker( point, html )'); |
||||||
|
aScript.push('{'); |
||||||
|
aScript.push(' var marker = new GMarker(point);'); |
||||||
|
aScript.push(' GEvent.addListener(marker, "click", function() {'); |
||||||
|
aScript.push(' marker.openInfoWindowHtml(html, {maxWidth:200});'); |
||||||
|
aScript.push(' });'); |
||||||
|
aScript.push(' return marker;'); |
||||||
|
aScript.push('}'); |
||||||
|
|
||||||
|
var maps = this.CreatedMapsNames ; |
||||||
|
for (var i = 0; i < maps.length; i++) |
||||||
|
{ |
||||||
|
// Append event listeners instead of replacing previous ones
|
||||||
|
aScript.push('if (window.addEventListener) {'); |
||||||
|
aScript.push(' window.addEventListener("load", CreateGMap' + maps[i] + ', false);'); |
||||||
|
aScript.push('} else {'); |
||||||
|
aScript.push(' window.attachEvent("onload", CreateGMap' + maps[i] + ');'); |
||||||
|
aScript.push('}'); |
||||||
|
} |
||||||
|
|
||||||
|
aScript.push('onunload = GUnload ;'); |
||||||
|
|
||||||
|
aScript.push('</script>'); |
||||||
|
|
||||||
|
return aScript.join('\r\n'); |
||||||
|
}, |
||||||
|
|
||||||
|
// We will use this to track the number of maps that are generated
|
||||||
|
// This way we know if we must add the Google Script or not.
|
||||||
|
// We store their names so they are called properly from BuildEndingScript
|
||||||
|
CreatedMapsNames : [], |
||||||
|
|
||||||
|
// Function that will be injected into the normal core
|
||||||
|
GetXHTMLAfter: function( node, includeNode, format, Result ) |
||||||
|
{ |
||||||
|
if (FCK.GoogleMapsHandler.CreatedMapsNames.length > 0) |
||||||
|
{ |
||||||
|
Result += FCK.GoogleMapsHandler.BuildEndingScript() ; |
||||||
|
} |
||||||
|
// Reset the counter each time the GetXHTML function is called
|
||||||
|
FCK.GoogleMapsHandler.CreatedMapsNames = []; |
||||||
|
|
||||||
|
return Result ; |
||||||
|
}, |
||||||
|
|
||||||
|
// Store any previous processor so nothing breaks
|
||||||
|
previousProcessor: FCKXHtml.TagProcessors[ 'img' ]
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
// Our object that will handle parsing of the script and creating the new one.
|
||||||
|
var FCKGoogleMap = function()
|
||||||
|
{ |
||||||
|
var now = new Date() ; |
||||||
|
this.number = '' + now.getFullYear() + now.getMonth() + now.getDate() + now.getHours() + now.getMinutes() + now.getSeconds() ; |
||||||
|
|
||||||
|
this.width = FCKConfig.GoogleMaps_Width || 400 ; |
||||||
|
this.height = FCKConfig.GoogleMaps_Height || 240 ; |
||||||
|
|
||||||
|
this.centerLat = FCKConfig.GoogleMaps_CenterLat || 37.4419 ; |
||||||
|
this.centerLon = FCKConfig.GoogleMaps_CenterLon || -122.1419 ; |
||||||
|
this.zoom = FCKConfig.GoogleMaps_Zoom || 11 ; |
||||||
|
|
||||||
|
this.markerPoints = [] ; |
||||||
|
|
||||||
|
this.LinePoints = '' ; |
||||||
|
this.LineLevels = '' ; |
||||||
|
|
||||||
|
this.mapType = 0 ; |
||||||
|
|
||||||
|
this.WrapperClass = FCKConfig.GoogleMaps_WrapperClass || '' ; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
FCKGoogleMap.prototype.createHtmlElement = function( oReplacedNode, index) |
||||||
|
{ |
||||||
|
var oFakeNode = FCK.EditorDocument.createElement( 'IMG' ) ; |
||||||
|
|
||||||
|
// Are we creating a new map?
|
||||||
|
if ( !oReplacedNode ) |
||||||
|
{ |
||||||
|
index = FCKTempBin.AddElement( this.BuildScript() ) ; |
||||||
|
var prefix = ( FCKConfig.ProtectedSource._CodeTag || 'PS..' ) ; |
||||||
|
oReplacedNode = FCK.EditorDocument.createComment( '{' + prefix + index + '}' ) ; |
||||||
|
FCK.InsertElement(oReplacedNode); |
||||||
|
} |
||||||
|
oFakeNode.contentEditable = false ; |
||||||
|
// oFakeNode.setAttribute( '_fckfakelement', 'true', 0 ) ;
|
||||||
|
|
||||||
|
oFakeNode.setAttribute( '_fckrealelement', FCKTempBin.AddElement( oReplacedNode ), 0 ) ; |
||||||
|
oFakeNode.setAttribute( '_fckBinNode', index, 0 ) ; |
||||||
|
|
||||||
|
oFakeNode.src = FCKConfig.FullBasePath + 'images/spacer.gif' ; |
||||||
|
oFakeNode.style.display = 'block' ; |
||||||
|
oFakeNode.style.border = '1px solid black' ; |
||||||
|
oFakeNode.style.background = 'white center center url("' + FCKPlugins.Items['googlemaps'].Path + 'images/maps_res_logo.png' + '") no-repeat' ; |
||||||
|
|
||||||
|
oFakeNode.setAttribute("MapNumber", this.number, 0) ; |
||||||
|
|
||||||
|
oReplacedNode.parentNode.insertBefore( oFakeNode, oReplacedNode ) ; |
||||||
|
oReplacedNode.parentNode.removeChild( oReplacedNode ) ; |
||||||
|
|
||||||
|
// dimensions
|
||||||
|
this.updateHTMLElement( oFakeNode ); |
||||||
|
|
||||||
|
return oFakeNode ; |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.updateScript = function( oFakeNode ) |
||||||
|
{ |
||||||
|
this.updateDimensions( oFakeNode ) ; |
||||||
|
|
||||||
|
var index = oFakeNode.getAttribute( '_fckBinNode' ); |
||||||
|
FCKTempBin.Elements[ index ] = this.BuildScript() ; |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.updateHTMLElement = function( oFakeNode ) |
||||||
|
{ |
||||||
|
oFakeNode.width = this.width ; |
||||||
|
oFakeNode.height = this.height ; |
||||||
|
|
||||||
|
// Static maps preview :-)
|
||||||
|
oFakeNode.src = this.generateStaticMap() ; |
||||||
|
oFakeNode.style.border = 0 ; |
||||||
|
|
||||||
|
// The wrapper class is applied to the IMG not to a wrapping DIV !!!
|
||||||
|
if ( this.WrapperClass !== '') |
||||||
|
oFakeNode.className = this.WrapperClass ; |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.generateStaticMap = function() |
||||||
|
{ |
||||||
|
var w = Math.min(this.width, 640); |
||||||
|
var h = Math.min(this.height, 640); |
||||||
|
var staticMapTypes = ['roadmap', 'satellite', 'hybrid', 'terrain'] ; |
||||||
|
|
||||||
|
return 'http://maps.google.com/staticmap?center=' + this.centerLat + ',' + this.centerLon
|
||||||
|
+ '&zoom=' + this.zoom + '&size=' + w + 'x' + h
|
||||||
|
+ '&maptype=' + staticMapTypes[ this.mapType ] |
||||||
|
+ this.generateStaticMarkers() |
||||||
|
+ '&key=' + FCKConfig.GoogleMaps_Key |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.generateStaticMarkers = function() |
||||||
|
{ |
||||||
|
if (this.markerPoints.length==0) |
||||||
|
return ''; |
||||||
|
|
||||||
|
var aPoints = []; |
||||||
|
for (var i=0; i<this.markerPoints.length ; i++) |
||||||
|
{ |
||||||
|
var point = this.markerPoints[i] ; |
||||||
|
aPoints.push(point.lat + ',' + point.lon);
|
||||||
|
} |
||||||
|
return ('&markers=' + aPoints.join('|') ); |
||||||
|
} |
||||||
|
|
||||||
|
// Paths: http://code.google.com/p/gmaps-api-issues/issues/detail?id=205
|
||||||
|
|
||||||
|
|
||||||
|
// Read the dimensions back from the fake node (the user might have manually resized it)
|
||||||
|
FCKGoogleMap.prototype.updateDimensions = function( oFakeNode ) |
||||||
|
{ |
||||||
|
var iWidth, iHeight ; |
||||||
|
var regexSize = /^\s*(\d+)px\s*$/i ; |
||||||
|
|
||||||
|
if ( oFakeNode.style.width ) |
||||||
|
{ |
||||||
|
var aMatchW = oFakeNode.style.width.match( regexSize ) ; |
||||||
|
if ( aMatchW ) |
||||||
|
{ |
||||||
|
iWidth = aMatchW[1] ; |
||||||
|
oFakeNode.style.width = '' ; |
||||||
|
oFakeNode.width = iWidth ; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if ( oFakeNode.style.height ) |
||||||
|
{ |
||||||
|
var aMatchH = oFakeNode.style.height.match( regexSize ) ; |
||||||
|
if ( aMatchH ) |
||||||
|
{ |
||||||
|
iHeight = aMatchH[1] ; |
||||||
|
oFakeNode.style.height = '' ; |
||||||
|
oFakeNode.height = iHeight ;
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
this.width = iWidth ? iWidth : oFakeNode.width ; |
||||||
|
this.height = iHeight ? iHeight : oFakeNode.height ; |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.decodeText = function(string) |
||||||
|
{ |
||||||
|
return string.replace(/<\\\//g, "</").replace(/\\n/g, "\n").replace(/\\'/g, "'").replace(/\\\\/g, "\\"); |
||||||
|
} |
||||||
|
FCKGoogleMap.prototype.encodeText = function(string) |
||||||
|
{ |
||||||
|
return string.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n").replace(/<\//g, "<\\/"); |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.parse = function( script ) |
||||||
|
{ |
||||||
|
// We only know about version 1:
|
||||||
|
if ( !(/FCK googlemaps v1\.(\d+)/.test(script)) ) |
||||||
|
return false; |
||||||
|
|
||||||
|
var version = parseInt(RegExp.$1, 10) ; |
||||||
|
|
||||||
|
// dimensions:
|
||||||
|
// document.writeln('<div id="gmap1" style="width: 544px; height: 350px;">.</div>');
|
||||||
|
var regexpDimensions = /<div id="gmap(\d+)" style="width\:\s*(\d+)px; height\:\s*(\d+)px;">/ ; |
||||||
|
if (regexpDimensions.test( script ) ) |
||||||
|
{ |
||||||
|
delete FCK.GoogleMapsHandler.maps[this.number] ; |
||||||
|
this.number = RegExp.$1 ; |
||||||
|
FCK.GoogleMapsHandler.maps[this.number] = this ; |
||||||
|
|
||||||
|
this.width = RegExp.$2 ; |
||||||
|
this.height = RegExp.$3 ; |
||||||
|
} |
||||||
|
|
||||||
|
// map.setCenter(new GLatLng(42.4298,-8.07756), 8);
|
||||||
|
var regexpPosition = /map\.setCenter\(new GLatLng\((-?\d{1,3}\.\d{1,6}),(-?\d{1,3}\.\d{1,6})\), (\d{1,2})\);/ ; |
||||||
|
if (regexpPosition.test( script ) ) |
||||||
|
{ |
||||||
|
this.centerLat = RegExp.$1 ; |
||||||
|
this.centerLon = RegExp.$2 ; |
||||||
|
this.zoom = RegExp.$3 ; |
||||||
|
} |
||||||
|
|
||||||
|
// v <= 1.5
|
||||||
|
if ( version<=5 ) |
||||||
|
{ |
||||||
|
// var text = 'En O Carballino ha estado la d\'elegacion diplomatica japonesa';
|
||||||
|
var markerText, markerLat=0, markerLon=0; |
||||||
|
var regexpText = /var text\s*=\s*("|')(.*)\1;\s*\n/ ; |
||||||
|
if (regexpText.test( script ) ) |
||||||
|
{ |
||||||
|
markerText = RegExp.$2 ; |
||||||
|
} |
||||||
|
|
||||||
|
// var point = new GLatLng(42.4298,-8.07756);
|
||||||
|
var regexpMarker = /var point\s*=\s*new GLatLng\((-?\d{1,3}\.\d{1,6}),(-?\d{1,3}\.\d{1,6})\)/ ; |
||||||
|
if (regexpMarker.test( script ) ) |
||||||
|
{ |
||||||
|
markerLat = RegExp.$1 ; |
||||||
|
markerLon = RegExp.$2 ; |
||||||
|
} |
||||||
|
if (markerLat!=0 && markerLon!=0) |
||||||
|
this.markerPoints.push( {lat:markerLat, lon:markerLon, text:this.decodeText(markerText)} ) ; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
// v > 1.5. multiple points.
|
||||||
|
|
||||||
|
// AddMarkers( [{lat:37.45088, lon:-122.21123, text:'Write your text'}] ) ;
|
||||||
|
var regexpMarkers = /\{lat\:(-?\d{1,3}\.\d{1,6}),\s*lon\:(-?\d{1,3}\.\d{1,6}),\s*text\:("|')(.*)\3}(?:,|])/ ; |
||||||
|
var point; |
||||||
|
var sampleText = script ; |
||||||
|
var startIndex = 0; |
||||||
|
var totalLength = sampleText.length; |
||||||
|
var result, pos; |
||||||
|
while (startIndex != totalLength) { |
||||||
|
result = regexpMarkers.exec(sampleText); |
||||||
|
if (result && result.length > 0) { |
||||||
|
pos = sampleText.indexOf(result[0]); |
||||||
|
startIndex += pos; |
||||||
|
|
||||||
|
this.markerPoints.push( {lat:result[1], lon:result[2], text:this.decodeText(result[4])} ) ; |
||||||
|
|
||||||
|
sampleText = sampleText.substr(pos + result[0].length); |
||||||
|
startIndex += result[0].length; |
||||||
|
} else { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
/* |
||||||
|
while (result = regexpMarkers.exec( script ) ) |
||||||
|
{ |
||||||
|
this.markerPoints.push( {lat:result[1], lon:result[2], text:result[4]} ) ; |
||||||
|
} |
||||||
|
*/ |
||||||
|
} |
||||||
|
|
||||||
|
// var encodedPoints = "iuowFf{kbMzH}N`IbJb@zBpYzO{dAvfF{LwDyN`_@`NzKqB|Ec@|L}BKmBbCoPjrBeEdy@uJ`Mn@zoAer@bjA~Xz{JczBa]pIps@de@tW}rCdxSwhPl`XgikCl{soA{dLdAaaF~cCyxCk_Aao@jp@kEvnCgoJ`]y[pVguKhCkUflAwrEzKk@yzCv^k@?mI";
|
||||||
|
var regexpLinePoints = /var encodedPoints\s*=\s*("|')(.*)\1;\s*\n/ ; |
||||||
|
if (regexpLinePoints.test( script ) ) |
||||||
|
{ |
||||||
|
this.LinePoints = RegExp.$2 ; |
||||||
|
} |
||||||
|
|
||||||
|
// var encodedLevels = "B????????????????????????????????????B";
|
||||||
|
var regexpLineLevels = /var encodedLevels\s*=\s*("|')(.*)\1;\s*\n/ ; |
||||||
|
if (regexpLineLevels.test( script ) ) |
||||||
|
{ |
||||||
|
this.LineLevels = RegExp.$2 ; |
||||||
|
} |
||||||
|
|
||||||
|
// 1.8 mapType
|
||||||
|
// map.setMapType( allMapTypes[ 1 ] );
|
||||||
|
var regexpMapType = /setMapType\([^\[]*\[\s*(\d+)\s*\]\s*\)/ ; |
||||||
|
if (regexpMapType.test( script ) ) |
||||||
|
{ |
||||||
|
this.mapType = RegExp.$1 ; |
||||||
|
} |
||||||
|
|
||||||
|
// 1.9 wrapper div with custom class
|
||||||
|
if ( version >= 9 ) |
||||||
|
{ |
||||||
|
var regexpWrapper = /<div class=("|')(.*)\1.*\/\/wrapper/ ; |
||||||
|
if (regexpWrapper.test( script ) ) |
||||||
|
this.WrapperClass = RegExp.$2 ; |
||||||
|
else |
||||||
|
this.WrapperClass = '' ; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
FCKGoogleMap.prototype.BuildScript = function() |
||||||
|
{ |
||||||
|
var versionMarker = '// FCK googlemaps v1.97' ; |
||||||
|
|
||||||
|
var aScript = [] ; |
||||||
|
aScript.push('\r\n<script type="text/javascript">') ; |
||||||
|
aScript.push( versionMarker ) ; |
||||||
|
|
||||||
|
if ( this.WrapperClass !== '') |
||||||
|
aScript.push('document.write(\'<div class="' + this.WrapperClass + '">\'); //wrapper'); |
||||||
|
|
||||||
|
aScript.push('document.write(\'<div id="gmap' + this.number + '" style="width:' + this.width + 'px; height:' + this.height + 'px;">.<\\\/div>\');'); |
||||||
|
|
||||||
|
if ( this.WrapperClass !== '') |
||||||
|
aScript.push('document.write(\'<\\\/div>\'); '); |
||||||
|
|
||||||
|
aScript.push('function CreateGMap' + this.number + '() {'); |
||||||
|
aScript.push(' if(!GBrowserIsCompatible()) return;'); |
||||||
|
|
||||||
|
aScript.push(' var allMapTypes = [G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP] ;'); |
||||||
|
aScript.push(' var map = new GMap2(document.getElementById("gmap' + this.number + '"), {mapTypes:allMapTypes});'); |
||||||
|
aScript.push(' map.setCenter(new GLatLng(' + this.centerLat + ',' + this.centerLon + '), ' + this.zoom + ');'); |
||||||
|
|
||||||
|
aScript.push(' map.setMapType( allMapTypes[ ' + this.mapType + ' ] );'); |
||||||
|
|
||||||
|
aScript.push(' map.addControl(new GSmallMapControl());'); |
||||||
|
aScript.push(' map.addControl(new GMapTypeControl());'); |
||||||
|
|
||||||
|
|
||||||
|
var aPoints = []; |
||||||
|
for (var i=0; i<this.markerPoints.length ; i++) |
||||||
|
{ |
||||||
|
var point = this.markerPoints[i] ; |
||||||
|
aPoints.push('{lat:' + point.lat + ', lon:' + point.lon + ', text:\'' + this.encodeText(point.text) + '\'}');
|
||||||
|
} |
||||||
|
aScript.push(' AddMarkers( map, [' + aPoints.join(',\r\n') + '] ) ;') ; |
||||||
|
|
||||||
|
if ((this.LinePoints !== '') && (this.LineLevels !== '' )) |
||||||
|
{ |
||||||
|
aScript.push('var encodedPoints = "' + this.LinePoints + '";'); |
||||||
|
aScript.push('var encodedLevels = "' + this.LineLevels + '";'); |
||||||
|
aScript.push(''); |
||||||
|
aScript.push('var encodedPolyline = new GPolyline.fromEncoded({'); |
||||||
|
aScript.push(' color: "#3333cc",'); |
||||||
|
aScript.push(' weight: 5,'); |
||||||
|
aScript.push(' points: encodedPoints,'); |
||||||
|
aScript.push(' levels: encodedLevels,'); |
||||||
|
aScript.push(' zoomFactor: 32,'); |
||||||
|
aScript.push(' numLevels: 4'); |
||||||
|
aScript.push(' });'); |
||||||
|
aScript.push('map.addOverlay(encodedPolyline);'); |
||||||
|
} |
||||||
|
aScript.push('}'); |
||||||
|
|
||||||
|
aScript.push('</script>'); |
||||||
|
|
||||||
|
return aScript.join('\r\n'); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Modifications of the core routines of FCKeditor:
|
||||||
|
|
||||||
|
FCKXHtml.GetXHTML = Inject(FCKXHtml.GetXHTML, null, FCK.GoogleMapsHandler.GetXHTMLAfter ) ; |
||||||
|
|
||||||
|
FCKXHtml.TagProcessors.img = function( node, htmlNode, xmlNode ) |
||||||
|
{ |
||||||
|
if ( htmlNode.getAttribute( 'MapNumber' ) ) |
||||||
|
{ |
||||||
|
var oMap = FCK.GoogleMapsHandler.getMap( htmlNode.getAttribute( 'MapNumber' ) ) ; |
||||||
|
FCK.GoogleMapsHandler.CreatedMapsNames.push( oMap.number ) ; |
||||||
|
|
||||||
|
oMap.updateScript( htmlNode ); |
||||||
|
node = FCK.GetRealElement( htmlNode ) ; |
||||||
|
if ( FCK.GoogleMapsHandler.CreatedMapsNames.length == 1 ) |
||||||
|
{ |
||||||
|
// If it is the first map, insert the google maps script
|
||||||
|
var index = FCKTempBin.AddElement( FCK.GoogleMapsHandler.GenerateGoogleScript() ) ; |
||||||
|
var prefix = ( FCKConfig.ProtectedSource._CodeTag || 'PS..' ) ; |
||||||
|
oScriptCommentNode = xmlNode.ownerDocument.createComment( '{' + prefix + index + '}' ) ; |
||||||
|
xmlNode.appendChild( oScriptCommentNode ) ; |
||||||
|
} |
||||||
|
|
||||||
|
return xmlNode.ownerDocument.createComment( node.nodeValue ) ; |
||||||
|
} |
||||||
|
|
||||||
|
if (typeof FCK.GoogleMapsHandler.previousProcessor == 'function')
|
||||||
|
node = FCK.GoogleMapsHandler.previousProcessor( node, htmlNode, xmlNode ) ; |
||||||
|
else |
||||||
|
node = FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; |
||||||
|
|
||||||
|
return node ; |
||||||
|
}; |
||||||
|
|
||||||
|
/** |
||||||
|
@desc inject the function |
||||||
|
@author Aimingoo&Riceball |
||||||
|
*/ |
||||||
|
function Inject( aOrgFunc, aBeforeExec, aAtferExec ) { |
||||||
|
return function() { |
||||||
|
if (typeof(aBeforeExec) == 'function') arguments = aBeforeExec.apply(this, arguments) || arguments; |
||||||
|
//convert arguments object to array
|
||||||
|
var Result, args = [].slice.call(arguments);
|
||||||
|
args.push(aOrgFunc.apply(this, args)); |
||||||
|
if (typeof(aAtferExec) == 'function') Result = aAtferExec.apply(this, args); |
||||||
|
return (typeof(Result) != 'undefined')?Result:args.pop(); |
||||||
|
} ; |
||||||
|
} |
||||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 426 B |
|
After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,11 @@ |
|||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" |
||||||
|
"http://www.w3.org/TR/html4/loose.dtd"> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<title>googlemaps plugin index</title> |
||||||
|
<META http-equiv="refresh" content="0;URL=docs/install.html"> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<p>You should have been redirected <a href="docs/install.html">to the documentation</a></p> |
||||||
|
</body> |
||||||
|
</html> |
||||||