gecko-dev/editor/ui/dialogs/content/EdListProps.js

373 строки
10 KiB
JavaScript

/*
* The contents of this file are subject to the Netscape 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/NPL/
*
* 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 Netscape are
* Copyright (C) 1998-1999 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
//Cancel() is in EdDialogCommon.js
var tagname = "TAG NAME"
var BulletStyleIndex = 0;
var NumberStyleIndex = 0;
var ListElement;
var originalListType = "";
var ListType = "";
var MixedListSelection = false;
var BulletStyleType = "";
var originalBulletStyleType = "";
// dialog initialization code
function Startup()
{
if (!InitEditorShell())
return;
gDialog.ListTypeList = document.getElementById("ListType");
gDialog.BulletStyleList = document.getElementById("BulletStyle");
gDialog.BulletStyleLabel = document.getElementById("BulletStyleLabel");
gDialog.StartingNumberInput = document.getElementById("StartingNumber");
gDialog.StartingNumberLabel = document.getElementById("StartingNumberLabel");
gDialog.AdvancedEditButton = document.getElementById("AdvancedEditButton1");
gDialog.RadioGroup = document.getElementById("RadioGroup");
gDialog.ChangeAllRadio = document.getElementById("ChangeAll");
gDialog.ChangeSelectedRadio = document.getElementById("ChangeSelected");
// Try to get an existing list(s)
var mixedObj = new Object;
ListType = editorShell.GetListState(mixedObj);
// We may have mixed list and non-list, or > 1 list type in selection
MixedListSelection = mixedObj.value;
// Get the list element at the anchor node
ListElement = editorShell.GetElementOrParentByTagName("list", null);
// The copy to use in AdvancedEdit
if (ListElement)
globalElement = ListElement.cloneNode(false);
// Radio button index is persistent
if (ListElement && gDialog.RadioGroup.getAttribute("index") == "1")
gDialog.RadioGroup.selectedItem = gDialog.ChangeSelectedRadio;
else
gDialog.RadioGroup.selectedItem = gDialog.ChangeAllRadio;
// Show extra options for changing entire list only if we already have a list
gDialog.RadioGroup.setAttribute("collapsed", ListElement ? "false" : "true");
InitDialog();
originalListType = ListType;
gDialog.ListTypeList.focus();
SetWindowLocation();
}
function InitDialog()
{
// Note that if mixed, we we pay attention
// only to the anchor node's list type
// (i.e., don't confuse user with "mixed" designation)
if (ListElement)
ListType = ListElement.nodeName.toLowerCase();
else
ListType = "";
BuildBulletStyleList();
gDialog.StartingNumberInput.value = "";
var type = globalElement ? GetHTMLOrCSSStyleValue(globalElement, "type", "list-style-type") : null;
if (type)
type = type.toLowerCase();
var index = 0;
if (ListType == "ul")
{
if (type)
{
if (type == "disc")
index = 1;
else if (type == "circle")
index = 2;
else if (type == "square")
index = 3;
}
}
else if (ListType == "ol")
{
switch (type)
{
case "1":
case "decimal":
index = 1;
break;
case "I":
case "upper-roman":
index = 2;
break;
case "i":
case "lower-roman":
index = 3;
break;
case "A":
case "upper-alpha":
index = 4;
break;
case "a":
case "lower-alpha":
index = 5;
break;
}
gDialog.StartingNumberInput.value = globalElement.getAttribute("start");
}
gDialog.BulletStyleList.selectedIndex = index;
originalBulletStyleType = type;
}
function BuildBulletStyleList()
{
ClearMenulist(gDialog.BulletStyleList);
var label;
if (ListType == "ul")
{
gDialog.BulletStyleList.removeAttribute("disabled");
gDialog.BulletStyleLabel.removeAttribute("disabled");
gDialog.StartingNumberInput.setAttribute("disabled", "true");
gDialog.StartingNumberLabel.setAttribute("disabled", "true");
label = GetString("BulletStyle");
AppendStringToMenulistById(gDialog.BulletStyleList,"Automatic");
AppendStringToMenulistById(gDialog.BulletStyleList,"SolidCircle");
AppendStringToMenulistById(gDialog.BulletStyleList,"OpenCircle");
AppendStringToMenulistById(gDialog.BulletStyleList,"SolidSquare");
gDialog.BulletStyleList.selectedIndex = BulletStyleIndex;
gDialog.ListTypeList.selectedIndex = 1;
}
else if (ListType == "ol")
{
gDialog.BulletStyleList.removeAttribute("disabled");
gDialog.BulletStyleLabel.removeAttribute("disabled");
gDialog.StartingNumberInput.removeAttribute("disabled");
gDialog.StartingNumberLabel.removeAttribute("disabled");
label = GetString("NumberStyle");
AppendStringToMenulistById(gDialog.BulletStyleList,"Automatic");
AppendStringToMenulistById(gDialog.BulletStyleList,"Style_1");
AppendStringToMenulistById(gDialog.BulletStyleList,"Style_I");
AppendStringToMenulistById(gDialog.BulletStyleList,"Style_i");
AppendStringToMenulistById(gDialog.BulletStyleList,"Style_A");
AppendStringToMenulistById(gDialog.BulletStyleList,"Style_a");
gDialog.BulletStyleList.selectedIndex = NumberStyleIndex;
gDialog.ListTypeList.selectedIndex = 2;
}
else
{
gDialog.BulletStyleList.setAttribute("disabled", "true");
gDialog.BulletStyleLabel.setAttribute("disabled", "true");
gDialog.StartingNumberInput.setAttribute("disabled", "true");
gDialog.StartingNumberLabel.setAttribute("disabled", "true");
if (ListType == "dl")
gDialog.ListTypeList.selectedIndex = 3;
else
{
// No list or mixed selection that starts outside a list
// ??? Setting index to 0 fails to draw menulist correctly!
gDialog.ListTypeList.selectedIndex = 1;
gDialog.ListTypeList.selectedIndex = 0;
}
}
// Disable advanced edit button if changing to "normal"
if (ListType)
gDialog.AdvancedEditButton.removeAttribute("disabled");
else
gDialog.AdvancedEditButton.setAttribute("disabled","true");
if (label)
gDialog.BulletStyleLabel.setAttribute("label",label);
}
function SelectListType()
{
var NewType;
switch (gDialog.ListTypeList.selectedIndex)
{
case 1:
NewType = "ul";
break;
case 2:
NewType = "ol";
SetTextboxFocus(gDialog.StartingNumberInput);
break;
case 3:
NewType = "dl";
break;
default:
NewType = "";
break;
}
if (ListType != NewType)
{
ListType = NewType;
// Create a newlist object for Advanced Editing
if (ListType)
globalElement = editorShell.CreateElementWithDefaults(ListType);
BuildBulletStyleList();
}
}
function SelectBulletStyle()
{
// Save the selected index so when user changes
// list style, restore index to associated list
if (ListType == "ul")
BulletStyleIndex = gDialog.BulletStyleList.selectedIndex;
else if (ListType == "ol")
{
var index = gDialog.BulletStyleList.selectedIndex;
if (NumberStyleIndex != index)
{
NumberStyleIndex = index;
SetTextboxFocus(gDialog.StartingNumberInput);
}
}
}
function ValidateData()
{
var type = 0;
// globalElement should already be of the correct type
if (globalElement)
{
if (ListType == "ul")
{
switch (gDialog.BulletStyleList.selectedIndex)
{
// Index 0 = automatic, the default, so we don't set it explicitly
case 1:
type = "disc";
break;
case 2:
type = "circle";
break;
case 3:
type = "square";
break;
}
BulletStyleType = type;
if (type && gDialog.ChangeAllRadio.selected)
globalElement.setAttribute("type",type);
else
globalElement.removeAttribute("type");
}
else if (ListType == "ol")
{
switch (gDialog.BulletStyleList.selectedIndex)
{
// Index 0 = automatic, the default, so we don't set it explicitly
case 1:
type = "1";
break;
case 2:
type = "I";
break;
case 3:
type = "i";
break;
case 4:
type = "A";
break;
case 5:
type = "a";
break;
}
BulletStyleType = type;
if (type && gDialog.ChangeAllRadio.selected)
globalElement.setAttribute("type",type);
else
globalElement.removeAttribute("type");
var startingNumber = TrimString(gDialog.StartingNumberInput.value);
if (startingNumber)
globalElement.setAttribute("start",startingNumber);
else
globalElement.removeAttribute("start");
}
}
return true;
}
function onAccept()
{
if (ValidateData())
{
// Coalesce into one undo transaction
editorShell.BeginBatchChanges();
// Remember which radio button was selected
if (ListElement)
gDialog.RadioGroup.setAttribute("index", gDialog.ChangeAllRadio.selected ? "0" : "1");
var changeList;
if (ListElement && gDialog.ChangeAllRadio.selected)
{
changeList = true;
}
else
changeList = MixedListSelection || ListType != originalListType || BulletStyleType != originalBulletStyleType;
if (changeList)
{
editorShell.MakeOrChangeList(ListType, gDialog.ChangeAllRadio.selected,
(BulletStyleType != originalBulletStyleType) ? BulletStyleType : null);
if (ListType)
{
// Get the new list created:
ListElement = editorShell.GetElementOrParentByTagName(ListType, null);
}
else
{
// We removed an existing list
ListElement = null;
}
}
// Set the new list attributes
if (ListElement)
editorShell.CloneAttributes(ListElement, globalElement);
editorShell.EndBatchChanges();
SaveWindowLocation();
return true;
}
return false;
}