mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-05 03:54:35 +00:00
c0a59befc5
by Anne van Kesteren <bug@annevankesteren.nl>, r+sr=bzbarsky
379 lines
12 KiB
JavaScript
379 lines
12 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (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.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is Mozilla Communicator client code, released
|
|
* March 31, 1998.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1999-2000
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Dan Haddix (dan6992@hotmail.com)
|
|
* Brian King (briano9@yahoo.com)
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
var tHide = false;
|
|
var highCont = false;
|
|
var imageElement = null;
|
|
var mapName = '';
|
|
var imageMap = null;
|
|
var imageEl;
|
|
var srcInputValue = null;
|
|
var marquee = null;
|
|
var frameDoc = null;
|
|
var buttonArray = [];
|
|
|
|
function Startup(){
|
|
if (!GetCurrentEditor())
|
|
{
|
|
window.close();
|
|
return;
|
|
}
|
|
initDialog();
|
|
}
|
|
|
|
function doHelpButton()
|
|
{
|
|
openHelp("imagemap_properties");
|
|
}
|
|
|
|
function initDialog(){
|
|
//Get image element from parent
|
|
imageElement = window.arguments[0];
|
|
if (!imageElement) //If not an image close window
|
|
{
|
|
window.close();
|
|
return;
|
|
}
|
|
|
|
//Get image map from parent
|
|
imageMap = window.arguments[1];
|
|
if (!imageMap) //If no image map close window
|
|
window.close();
|
|
|
|
//find parent inputs
|
|
var srcInput = window.opener.document.getElementById("srcInput");
|
|
var widthInput = window.opener.document.getElementById("widthInput");
|
|
var heightInput = window.opener.document.getElementById("heightInput");
|
|
|
|
//check for relative url
|
|
if (!((srcInput.value.indexOf("http://") != -1) || (srcInput.value.indexOf("file://") != -1))){
|
|
if (IsUrlAboutBlank(GetDocumentUrl())){
|
|
alert(GetString("SaveToUseRelativeUrl"));
|
|
window.close();
|
|
//TODO: add option to save document now
|
|
}
|
|
else{
|
|
var edDoc = GetDocumentUrl();
|
|
var imgDoc = srcInput.value;
|
|
imgDoc = imgDoc.split("../");
|
|
var len = imgDoc.length;
|
|
for (var i=0; i<len; i++){
|
|
if (edDoc.length > (String(GetCurrentEditor().document.location.protocol).length+2))
|
|
edDoc = edDoc.substring(0, edDoc.lastIndexOf("/"));
|
|
}
|
|
imgDoc = edDoc+"/"+imgDoc[imgDoc.length-1];
|
|
srcInputValue = imgDoc;
|
|
}
|
|
}
|
|
else{
|
|
srcInputValue = srcInput.value;
|
|
}
|
|
|
|
//Set iframe pointer
|
|
frameDoc = window.frames[0].document;
|
|
|
|
//Fill button array
|
|
buttonArray[0] = document.getElementById("pointerButton");
|
|
buttonArray[1] = document.getElementById("rectButton");
|
|
buttonArray[2] = document.getElementById("cirButton");
|
|
buttonArray[3] = document.getElementById("polyButton");
|
|
|
|
//Create marquee
|
|
var marquee = frameDoc.createElement("div");
|
|
marquee.setAttribute("id", "marquee");
|
|
frameDoc.body.appendChild(marquee);
|
|
|
|
//Create background div
|
|
var bgDiv = frameDoc.createElement("div");
|
|
if ( bgDiv ) {
|
|
bgDiv.setAttribute("id", "bgDiv");
|
|
frameDoc.body.appendChild(bgDiv);
|
|
}
|
|
|
|
//Place Image
|
|
var newImg = frameDoc.createElement("img");
|
|
if ( newImg ) {
|
|
newImg.setAttribute("src", srcInputValue);
|
|
if (parseInt(widthInput.value) > 0)
|
|
newImg.setAttribute("width", widthInput.value);
|
|
if (parseInt(heightInput.value) > 0)
|
|
newImg.setAttribute("height", heightInput.value);
|
|
newImg.setAttribute("id", "mainImg");
|
|
imageEl = frameDoc.getElementById("bgDiv").appendChild(newImg);
|
|
imageEl.addEventListener("error", imgError, false);
|
|
}
|
|
|
|
//Resize background DIV to fit image
|
|
fixBgDiv();
|
|
|
|
//Recreate Image Map if it exists
|
|
recreateMap();
|
|
}
|
|
|
|
function imgError(){
|
|
alert(GetString("ImapError")+" " + srcInputValue+"."+GetString("ImapCheck"));
|
|
}
|
|
|
|
function fixBgDiv(){
|
|
imageEl = frameDoc.getElementById("mainImg");
|
|
if (imageEl.offsetWidth != 0){
|
|
frameDoc.getElementById("bgDiv").style.width = imageEl.offsetWidth;
|
|
frameDoc.getElementById("bgDiv").style.height = imageEl.offsetHeight;
|
|
}
|
|
else
|
|
setTimeout("fixBgDiv()", 100);
|
|
}
|
|
|
|
function hideToolbar(){
|
|
// Check to see if toolbar is already hidden
|
|
if (tHide){
|
|
// If it is show it
|
|
document.getElementById("toolbar").collapsed = false;
|
|
// Set the menu items text back to "Hide Toolbar"
|
|
document.getElementById("view_hidetoolbar").setAttribute("label", GetString("HideToolbar"));
|
|
tHide = false
|
|
}
|
|
else{
|
|
// If not hide it
|
|
document.getElementById("toolbar").collapsed = true;
|
|
//Set the menu items text to "Show Toolbar"
|
|
document.getElementById("view_hidetoolbar").setAttribute("label", GetString("ShowToolbar"));
|
|
tHide = true;
|
|
}
|
|
}
|
|
|
|
function highContrast(){
|
|
if (highCont == true){
|
|
frameDoc.getElementById("bgDiv").style.background = "url('chrome://editor/skin/images/Map_checker.gif')";
|
|
frameDoc.getElementById("bgDiv").style.backgroundColor = "white";
|
|
imageEl.style.setProperty("opacity", "1.0", true);
|
|
document.getElementById("Map:Contrast").setAttribute("checked", "false");
|
|
document.getElementById("Map:Contrast").setAttribute("toggled", "false");
|
|
highCont = false;
|
|
}
|
|
else{
|
|
frameDoc.getElementById("bgDiv").style.background = "url('')";
|
|
frameDoc.getElementById("bgDiv").style.backgroundColor = "#D2D2D2";
|
|
imageEl.style.setProperty("opacity", ".3", true);
|
|
document.getElementById("Map:Contrast").setAttribute("checked", "true");
|
|
document.getElementById("Map:Contrast").setAttribute("toggled", "true");
|
|
highCont = true;
|
|
}
|
|
}
|
|
|
|
function recreateMap(){
|
|
var areaCollection = imageMap.childNodes;
|
|
var areaColLen = areaCollection.length;
|
|
for(var j=0; j<areaColLen; j++){
|
|
area = areaCollection[j];
|
|
shape = area.getAttribute("shape");
|
|
shape = shape.toLowerCase();
|
|
coords = area.getAttribute("coords");
|
|
href = area.getAttribute("href");
|
|
target = area.getAttribute("target");
|
|
alt = area.getAttribute("alt");
|
|
if (shape == "rect")
|
|
Rect(coords, href, target, alt, true);
|
|
else if (shape == "circle")
|
|
Circle(coords, href, target, alt, true);
|
|
else
|
|
Poly(coords, href, target, alt, true);
|
|
}
|
|
}
|
|
|
|
function finishMap(){
|
|
if (!setMapName())
|
|
return false;
|
|
if (!deleteAreas())
|
|
return false;
|
|
|
|
spots = frameDoc.getElementsByName("hotspot");
|
|
var len = spots.length;
|
|
if (len >= 1){
|
|
for(i=0; i<len; i++){
|
|
dump(i+"\n");
|
|
curSpot = spots[i];
|
|
if (curSpot.getAttribute("class") == "rect")
|
|
createRect(curSpot);
|
|
else if (curSpot.getAttribute("class") == "cir")
|
|
createCir(curSpot);
|
|
else
|
|
createPoly(curSpot);
|
|
}
|
|
//try{
|
|
// GetCurrentEditor().root.appendChild(imageMap);
|
|
//} catch (e) {}
|
|
//returnValue = "test";
|
|
//try{
|
|
// window.arguments[0] = "test"; //GetCurrentEditor().insertElementAtSelection(imageMap, false);
|
|
// dump(window.arguments[0]+"\n");
|
|
//} catch (e) {}
|
|
dump("imageMap.childNodes.length = "+imageMap.childNodes.length+"\n");
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function setMapName() {
|
|
//try {
|
|
// imageMap = GetCurrentEditor().createElementWithDefaults("map");
|
|
//} catch (e) {}
|
|
//dump(imageMap+"\n");
|
|
//imageMap = frameDoc.createElement("map");
|
|
|
|
mapName = imageMap.getAttribute("name");
|
|
if (mapName == ""){
|
|
mapName = String(frameDoc.getElementById("mainImg").getAttribute("src"));
|
|
mapName = mapName.substring(mapName.lastIndexOf("/"), mapName.length);
|
|
mapName = mapName.substring(mapName.lastIndexOf("\\"), mapName.length);
|
|
mapName = mapName.substring(1, mapName.lastIndexOf("."));
|
|
if (mapName == ""){
|
|
// BUG causes substring to return nothing when
|
|
// parameters are 1 & 13 (i.e. string.substring(1, 13);)
|
|
mapName = "hack";
|
|
}
|
|
imageMap.setAttribute("name", mapName);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function createRect(which){
|
|
var newRect;
|
|
//try {
|
|
// newRect = editor.createElementWithDefaults("area");
|
|
//} catch (e) {}
|
|
newRect = frameDoc.createElement("area");
|
|
newRect.setAttribute("shape", "rect");
|
|
coords = parseInt(which.style.left)+","+parseInt(which.style.top)+","+(parseInt(which.style.left)+parseInt(which.style.width))+","+(parseInt(which.style.top)+parseInt(which.style.height));
|
|
newRect.setAttribute("coords", coords);
|
|
if (which.getAttribute("hsHref") != ""){
|
|
newRect.setAttribute("href", which.getAttribute("hsHref"));
|
|
}
|
|
else{
|
|
newRect.setAttribute("nohref", "");
|
|
}
|
|
if (which.getAttribute("hsTarget") != ""){
|
|
newRect.setAttribute("target", which.getAttribute("hsTarget"));
|
|
}
|
|
if (which.getAttribute("hsAlt") != ""){
|
|
newRect.setAttribute("alt", which.getAttribute("hsAlt"));
|
|
}
|
|
//newRect.removeAttribute("id");
|
|
imageMap.appendChild(newRect);
|
|
}
|
|
|
|
function createCir(which){
|
|
var newCir;
|
|
//try {
|
|
// newCir = editor.createElementWithDefaults("area");
|
|
//} catch (e) {}
|
|
newCir = frameDoc.createElement("area");
|
|
if ( !newCir )
|
|
return;
|
|
|
|
newCir.setAttribute("shape", "circle");
|
|
radius = Math.floor(parseInt(which.style.width)/2);
|
|
coords = (parseInt(which.style.left)+radius)+","+(parseInt(which.style.top)+radius)+","+radius;
|
|
newCir.setAttribute("coords", coords);
|
|
if (which.getAttribute("hsHref") != "")
|
|
newCir.setAttribute("href", which.getAttribute("hsHref"));
|
|
else{
|
|
newCir.setAttribute("nohref", "");
|
|
}
|
|
if (which.getAttribute("hsTarget") != ""){
|
|
newCir.setAttribute("target", which.getAttribute("hsTarget"));
|
|
}
|
|
if (which.getAttribute("hsAlt") != ""){
|
|
newCir.setAttribute("alt", which.getAttribute("hsAlt"));
|
|
}
|
|
//newCir.removeAttribute("id");
|
|
imageMap.appendChild(newCir);
|
|
}
|
|
|
|
function createPoly(which){
|
|
var newPoly;
|
|
//try {
|
|
// newPoly = editor.createElementWithDefaults("area");
|
|
//} catch (e) {}
|
|
newPoly = frameDoc.createElement("area");
|
|
if ( !newPoly )
|
|
return;
|
|
|
|
newPoly.setAttribute("shape", "poly");
|
|
var coords = '';
|
|
var len = which.childNodes.length;
|
|
for(l=0; l<len; l++){
|
|
coords += (parseInt(which.style.left)+parseInt(which.childNodes[l].style.left))+","+(parseInt(which.style.top)+parseInt(which.childNodes[l].style.top))+",";
|
|
}
|
|
coords = coords.substring(0, (coords.length-1));
|
|
newPoly.setAttribute("coords", coords);
|
|
if (which.getAttribute("hsHref") != "")
|
|
newPoly.setAttribute("href", which.getAttribute("hsHref"));
|
|
else{
|
|
newPoly.setAttribute("nohref", "");
|
|
}
|
|
if (which.getAttribute("hsTarget") != ""){
|
|
newPoly.setAttribute("target", which.getAttribute("hsTarget"));
|
|
}
|
|
if (which.getAttribute("hsAlt") != ""){
|
|
newPoly.setAttribute("alt", which.getAttribute("hsAlt"));
|
|
}
|
|
//newPoly.removeAttribute("id");
|
|
imageMap.appendChild(newPoly);
|
|
}
|
|
|
|
function hotSpotProps(which){
|
|
var currentRect = null;
|
|
var currentCir = null;
|
|
if (which == null)
|
|
return;
|
|
hotSpotWin = window.openDialog("chrome://editor/content/EdImageMapHotSpot.xul", "_blank", "chrome,close,titlebar,modal", which);
|
|
}
|
|
|
|
function deleteAreas(){
|
|
dump("deleteAreas called\n");
|
|
area = imageMap.firstChild;
|
|
while (area != null){
|
|
dump(area+"\n");
|
|
imageMap.removeChild(area);
|
|
area = imageMap.firstChild;
|
|
}
|
|
return true;
|
|
}
|
|
|