зеркало из https://github.com/mozilla/gecko-dev.git
373 строки
10 KiB
JavaScript
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;
|
|
}
|