mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
394 lines
14 KiB
394 lines
14 KiB
<HTML id=dlgOrganizeFavorites STYLE="font-family: MS Shell Dlg; font-size: 8pt; width: 41.2em; height: 31.0em">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
|
|
<head>
|
|
|
|
<style>
|
|
.button {color: BUTTONTEXT; font-size: 8pt}
|
|
.info {font-size: 8pt; color: WINDOWTEXT}
|
|
.btext {color: BUTTONTEXT}
|
|
LI {line-height:10pt}
|
|
A {text-decoration: none; color: WINDOWTEXT}
|
|
</style>
|
|
|
|
<TITLE id=txtTitleOrgFavsDialog>
|
|
Organize Favorites
|
|
</TITLE>
|
|
|
|
<script>
|
|
#define IDH_ORG_FAVORITES_MOVE 50006 // was 0x3050
|
|
#define IDH_ORG_FAVORITES_RENAME 50007 // was 0x3051
|
|
#define IDH_ORG_FAVORITES_DELETE 50008 // was 0x3052
|
|
#define IDH_ORG_FAVORITES_CLOSE 50010 // was 0x3054
|
|
#define IDH_ORGFAVS_NEW_FOLDER 50484
|
|
#define IDH_ORGFAVS_SYNCHRO 50486
|
|
#define IDH_ORGFAVS_PROPERTIES 50489
|
|
#define IDH_ORGFAVS_LIST 50490
|
|
|
|
window.onerror = HandleError;
|
|
|
|
var g_strUrl; //the currently selected url
|
|
var g_rgUrlsToSynch = new Array(0); //list of urls to synch on close, urls are used as indices
|
|
var g_fSubscriptionsEnabled;
|
|
var g_dxEllipses = 0;
|
|
var g_dxEllipsesBold = 0;
|
|
var L_Ellipses_Text = "..."; //an ellipses
|
|
|
|
function callHelp(elm)
|
|
{
|
|
if (null != elm.helpid)
|
|
{
|
|
window.showHelp(elm.helpfile, "" + parseInt(elm.helpid), "popup");
|
|
}
|
|
else
|
|
{
|
|
if ("BODY" != elm.tagName)
|
|
{
|
|
callHelp(elm.parentElement);
|
|
}
|
|
}
|
|
}
|
|
document.onhelp = new Function("callHelp(window.event.srcElement)");
|
|
|
|
|
|
function documentMouseUp()
|
|
{
|
|
// displays popup help when right mouse button clicked
|
|
|
|
if (window.event.button == 2)
|
|
{
|
|
callHelp(window.event.srcElement);
|
|
}
|
|
}
|
|
|
|
document.onmouseup = new Function("documentMouseUp()");
|
|
|
|
//+-------------------------------------------------------------------
|
|
//
|
|
// Synopsis: Turns off error messages in dialogs
|
|
//
|
|
// Arguments: none
|
|
//
|
|
// returns: true (tells browser not to handle message)
|
|
//
|
|
//--------------------------------------------------------------------
|
|
function HandleError(message, url, line)
|
|
{
|
|
//#ifdef IE5_40989
|
|
var L_Dialog_ErrorMessage = "An error has occured in this dialog.";
|
|
var L_ErrorNumber_Text = "Error: ";
|
|
|
|
var str = L_Dialog_ErrorMessage + "\n\n"
|
|
+ L_ErrorNumber_Text + line + "\n"
|
|
+ message;
|
|
|
|
alert (str);
|
|
window.close();
|
|
//#endif
|
|
return true;
|
|
}
|
|
|
|
function BodyOnKeyPress(nCode)
|
|
{
|
|
if (nCode == 27) //ESC
|
|
{
|
|
window.close();
|
|
return;
|
|
}
|
|
}
|
|
|
|
function MeasureText(strText, fBold, widthMaximum)
|
|
{
|
|
// if text is not clipped, do nothing
|
|
// get the width of the ellipses
|
|
// get the ratio of width of div to length of text to determine initial cutoff point
|
|
// from cutoff point, cut off up to 30 additional chars one char at a time
|
|
// alert("MeasureText: " + strText + " widthMaximum: " + widthMaximum);
|
|
if (spanMeasure.offsetWidth < widthMaximum)
|
|
return strText;
|
|
|
|
var dxEllipses = (fBold ? g_dxEllipsesBold : g_dxEllipses);
|
|
var iCutoff = strText.length * (widthMaximum / (spanMeasure.offsetWidth + dxEllipses));
|
|
|
|
if (fBold)
|
|
{
|
|
spanMeasure.innerHTML = "<B>" + strText.substring(0, iCutoff - 1) + L_Ellipses_Text + "</B>"
|
|
iCutoff += 3;
|
|
}
|
|
else
|
|
spanMeasure.innerHTML = strText.substring(0, iCutoff - 1) + L_Ellipses_Text; //iCutoff??
|
|
|
|
for (cExtraCutoff = 1; (spanMeasure.offsetWidth > widthMaximum) && (cExtraCutoff < 30); cExtraCutoff++)
|
|
{
|
|
spanMeasure.innerHTML = spanMeasure.innerHTML.substring(0, iCutoff-cExtraCutoff) + L_Ellipses_Text + (fBold ? "</B>" : "");
|
|
}
|
|
// alert(spanMeasure.innerHTML + " " + spanMeasure.offsetWidth + ":::" + cExtraCutoff);
|
|
return spanMeasure.innerHTML;
|
|
}
|
|
|
|
function OnSelectionChange(cItems, hItem, strName, strUrl, cVisits, strDate, fAvailableOffline)
|
|
{
|
|
//hack to get escape from nsc
|
|
if (cItems == -1)
|
|
{
|
|
BodyOnKeyPress(27);
|
|
return;
|
|
}
|
|
|
|
//nothing selected
|
|
if (cItems == 0)
|
|
{
|
|
textProperties.innerHTML = "";
|
|
return;
|
|
}
|
|
|
|
g_strUrl = strUrl;
|
|
|
|
if (g_dxEllipses == 0)
|
|
{
|
|
spanMeasure.innerHTML = L_Ellipses_Text;
|
|
g_dxEllipses = spanMeasure.offsetWidth;
|
|
spanMeasure.innerHTML = "<B>" + L_Ellipses_Text + "</B>";
|
|
g_dxEllipsesBold = spanMeasure.offsetWidth;
|
|
}
|
|
|
|
spanMeasure.innerHTML = "<B>" + strName + "</B>";
|
|
strNameShort = MeasureText(spanMeasure.innerText, true, textProperties.offsetWidth - 4);
|
|
|
|
spanMeasure.innerHTML = strUrl;
|
|
strUrlShort = MeasureText(spanMeasure.innerText, false, textProperties.offsetWidth - 4);
|
|
|
|
//so the span doesn't take up space and make the dialog scrollable
|
|
spanMeasure.innerHTML = "";
|
|
|
|
// these have to be defined here, because the loc tools break on the "var re = /'/g" below
|
|
var L_FavoritesFolder_Text = "Favorites Folder"; //Favorites folder
|
|
var L_ModifiedColon_Text = "Modified:"; //Last modified date of directory, followed by a colon
|
|
|
|
//if it is not a folder
|
|
if (cVisits != -1)
|
|
{
|
|
var strOffline = "";
|
|
|
|
var L_MakeAvailableOffline_Text = "Make available <U>o</U>ffline"; //Make available offline
|
|
var L_MakeAvailableOfflineAccesskey_Text = "o"; //this must be the single character that is underlined above
|
|
var L_Properties_Text = "<U>P</U>roperties"; //Properties button for make available offline
|
|
var L_PropertiesAccesskey_Text = "p"; //this must be the single character that is underlined above
|
|
|
|
if (g_fSubscriptionsEnabled && (strUrl.substring(0,4) == "http") )
|
|
{
|
|
strOffline = "<input type=checkbox align=";
|
|
if(document.dir == "rtl")
|
|
{
|
|
strOffline +="right";
|
|
}
|
|
else
|
|
{
|
|
strOffline +="left";
|
|
}
|
|
strOffline +=" TABINDEX=5 ACCESSKEY=" + L_MakeAvailableOfflineAccesskey_Text + " id=chkOffline "
|
|
if (fAvailableOffline != 0)
|
|
strOffline += "CHECKED"
|
|
strOffline += " onclick='ToggleOffline(this)' helpid=50486 helpfile='iexplore.hlp'><LABEL FOR=chkOffline TABINDEX=-1>" + L_MakeAvailableOffline_Text + "</LABEL>";
|
|
strOffline += "<BR><BR><BUTTON id=btnProperties TABINDEX=6 style='visibility: "
|
|
if (fAvailableOffline != 0)
|
|
strOffline += "visible"
|
|
else
|
|
strOffline += "hidden"
|
|
|
|
strOffline += "' class=button ACCESSKEY=" + L_PropertiesAccesskey_Text + " onclick='Properties()' helpid=50489 helpfile='iexplore.hlp'>" + L_Properties_Text + "</BUTTON><BR>";
|
|
}
|
|
|
|
var L_TimesVisited_Text = "times visited: "; //number of times the favorite has been visited
|
|
var L_LastVisited_Text = "last visited: "; //date the favorite was last visited
|
|
var L_LastVisitedNeedsLineBreak_Text = ""; //localizers, add a <BR> here if the last visited string + the date is too wide to fit the dialog. this will put the time and date on a new line.
|
|
|
|
//hack so that single quotes don't confuse innerHTML
|
|
var strTemp = strName + "\n" + strUrl;
|
|
var re = /'/g;
|
|
strTemp = strTemp.replace(re, "´");
|
|
|
|
#ifndef UNIX
|
|
textProperties.innerHTML = "<A TITLE='" + strTemp +"'><B>" + strNameShort + "</B><BR>" + strUrlShort + "</A><BR>" + L_TimesVisited_Text + cVisits + "<BR>" + L_LastVisited_Text + L_LastVisitedNeedsLineBreak_Text + strDate + "<BR>" + strOffline;
|
|
#else
|
|
textProperties.innerHTML = "<A TITLE='" + strTemp +"'><B>" + strNameShort + "</B><BR>" + strUrlShort + "</A><BR>" + L_TimesVisited_Text + cVisits + "<BR>" + L_LastVisited_Text + L_LastVisitedNeedsLineBreak_Text + strDate;
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
textProperties.innerHTML = "<B>" + strNameShort + "</B><BR>" + L_FavoritesFolder_Text + "<BR><BR>" +
|
|
"<B>" + L_ModifiedColon_Text + "</B><BR>" + strDate;
|
|
}
|
|
|
|
//do this here so the default size is correct
|
|
tdProperties.noWrap=true;
|
|
textProperties.noWrap=true;
|
|
}
|
|
|
|
function EnableButtons()
|
|
{
|
|
#ifndef UNIX
|
|
g_fSubscriptionsEnabled = nsc.SubscriptionsEnabled;
|
|
#else
|
|
g_fSubscriptionsEnabled = false;
|
|
#endif
|
|
|
|
var pszInitialDir = window.dialogArguments;
|
|
|
|
if (pszInitialDir && (pszInitialDir.length > 0))
|
|
{
|
|
nsc.SetRoot(pszInitialDir);
|
|
}
|
|
|
|
tdNsc.blur();
|
|
tdNewFolder.focus();
|
|
}
|
|
|
|
function ToggleOffline(chkOffline)
|
|
{
|
|
#ifndef UNIX
|
|
if (chkOffline.checked)
|
|
{
|
|
//if it fails to create a subscription, clear the check box
|
|
if (!nsc.CreateSubscriptionForSelection())
|
|
chkOffline.checked = false;
|
|
else
|
|
{
|
|
g_rgUrlsToSynch[g_strUrl] = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!nsc.DeleteSubscriptionForSelection())
|
|
chkOffline.checked = true;
|
|
else
|
|
delete g_rgUrlsToSynch[g_strUrl];
|
|
}
|
|
btnProperties.style.visibility = (chkOffline.checked ? "visible" : "hidden");
|
|
#endif
|
|
}
|
|
|
|
function BuildSynchList()
|
|
{
|
|
window.returnValue = "";
|
|
#ifndef UNIX
|
|
for (strUrl in g_rgUrlsToSynch)
|
|
{
|
|
window.returnValue += strUrl + "\0";
|
|
}
|
|
#endif
|
|
}
|
|
|
|
function Properties()
|
|
{
|
|
nsc.InvokeContextMenuCommand("properties");
|
|
}
|
|
|
|
function OnResize()
|
|
{
|
|
//HACK until trident fixes dynamic properties
|
|
document.recalc(true);
|
|
}
|
|
|
|
function TdNscWidth()
|
|
{
|
|
return Math.max(0, document.body.offsetWidth - tableButtons.offsetWidth - (tableMain.border * 3) - (2 * parseInt(tdNsc.style.borderWidth)) - 6); //6 was enough
|
|
}
|
|
|
|
function TdPropertiesHeight()
|
|
{
|
|
return Math.max(0, document.body.offsetHeight - (tableMain.border * 2) - tdProperties.offsetTop - tdDone.offsetHeight - 8);
|
|
}
|
|
</script>
|
|
|
|
</HEAD>
|
|
|
|
|
|
<body style="margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 0; background: threedface; align: center"
|
|
scroll="no" onkeydown="BodyOnKeyPress(event.keyCode)" onkeypress="BodyOnKeyPress(event.keyCode)" onload="EnableButtons()" onunload="BuildSynchList()" onresize="OnResize()">
|
|
#ifdef DAVEMI_DEBUGONLY
|
|
<input type=text id=text1></input><input type=button onclick="eval(text1.value)"></input>
|
|
#endif
|
|
<table id=tableMain cols=3 border=10 bordercolor=THREEDFACE>
|
|
<TR id=mainrow>
|
|
<TD valign=top id=infotext class=info>
|
|
To create a new folder, click on the Create Folder button. To rename or delete an item, select the item and click Rename or Delete.
|
|
</TD>
|
|
<TD id=tdColSpacing width=0>
|
|
</TD>
|
|
<TD id=tdNscHolder rowspan=3 height=100%>
|
|
<TABLE cols=1 width=100% height=100%>
|
|
<TD id=tdNsc style="height:100%; border:2px inset WINDOW;">
|
|
<object id=nsc TABINDEX=10 title="Favorites list" accesskey="t"
|
|
style="background:window; HEIGHT=100%; WIDTH=100%"
|
|
CLASSID='clsid:55136805-B2DE-11D1-B9F2-00A0C98BC547'
|
|
onkeypress="BodyOnKeyPress(event.keyCode)"
|
|
helpid=IDH_ORGFAVS_LIST
|
|
helpfile="iexplore.hlp">
|
|
</OBJECT>
|
|
</TD>
|
|
</TABLE>
|
|
</TD>
|
|
</TR>
|
|
<TR id=rowButtons>
|
|
<TD>
|
|
<table id=tableButtons cols=2 width=200>
|
|
<tr height=20>
|
|
<TD align=center width=50%>
|
|
<BUTTON id=tdNewFolder TABINDEX=1 style="width: 9em;" ACCESSKEY=c class=button onclick="nsc.NewFolder(); event.returnValue = false" helpid=IDH_ORGFAVS_NEW_FOLDER helpfile="iexplore.hlp">
|
|
<U>C</U>reate Folder
|
|
</BUTTON>
|
|
</TD>
|
|
<TD align=center width=50%>
|
|
<BUTTON id=tdRename TABINDEX=2 style="width: 9em;" ACCESSKEY=r class=button onclick="nsc.InvokeContextMenuCommand('rename'); event.returnValue = false" helpid=IDH_ORG_FAVORITES_RENAME helpfile="iexplore.hlp">
|
|
<U>R</U>ename
|
|
</BUTTON>
|
|
</TD>
|
|
</tr>
|
|
<tr height=20>
|
|
<td width=50% align=center>
|
|
<BUTTON id=tdMoveTo TABINDEX=3 style="width: 9em;" ACCESSKEY=m class=button onclick="nsc.MoveSelectionTo(); event.returnValue = false" helpid=IDH_ORG_FAVORITES_MOVE helpfile="iexplore.hlp">
|
|
<U>M</U>ove to Folder...
|
|
</BUTTON>
|
|
</td>
|
|
<td width=50% align=center>
|
|
<BUTTON id=tdDelete TABINDEX=4 style="width: 9em;" ACCESSKEY=d class=button onclick="nsc.InvokeContextMenuCommand('delete'); event.returnValue = false" helpid=IDH_ORG_FAVORITES_DELETE helpfile="iexplore.hlp">
|
|
<U>D</U>elete
|
|
</BUTTON>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</TD>
|
|
</TR>
|
|
<TR id=rowProperties vAlign=top style="padding-left:1px; padding-right:0px">
|
|
<TD id=tdProperties style="border-width:2px; margin-left:5px; margin-top:5px; margin-right:5px;" vAlign=top>
|
|
<DIV id=textProperties class=info style="border-width:2px; border-style:groove; border-color:window; width:100%; height:expression(Math.max(0, tdProperties.offsetHeight - (2 * parseInt(tdProperties.style.borderWidth)))); overflow:hidden; nowrap:true; position:absolute;">
|
|
Select a Favorite to view its properties or to make it available for offline viewing.
|
|
</DIV>
|
|
</TD>
|
|
</TR>
|
|
<TR id=rowCloseButton>
|
|
<TD id= cellCloseButton colspan=3 align=right>
|
|
<BUTTON id=tdDone TABINDEX=11 style="width: 9em;" ACCESSKEY=l class=button onclick="window.close();" helpid=IDH_ORG_FAVORITES_CLOSE helpfile="iexplore.hlp">
|
|
C<U>l</U>ose
|
|
</BUTTON>
|
|
</TD>
|
|
</TR>
|
|
</table>
|
|
|
|
|
|
<SPAN id=spanMeasure style="visibility:hidden;" class=info></SPAN>
|
|
|
|
<script defer for=nsc event="FavoritesSelectionChange(cItems, hItem, strName, strUrl, cVisits, strDate, fAvailableOffline)">
|
|
OnSelectionChange(cItems, hItem, strName, strUrl, cVisits, strDate, fAvailableOffline);
|
|
</script>
|
|
|
|
<script defer>
|
|
//expressions are asynchronous, so wait to hook them up
|
|
tdNscHolder.style.setExpression("width", "TdNscWidth()");
|
|
rowProperties.style.setExpression("height", "TdPropertiesHeight()");
|
|
</script>
|
|
|
|
|
|
</BODY>
|
|
</HTML>
|