📄 dtree.js
字号:
{
if (typeof(paths)=='string') return paths ? ((dt_canPrefix(paths) ? prefix : '') + paths) : '';
else
{
var p=[];
for (var i=0; i<paths.ln(); i++)
if (paths[i]) p[i] = (dt_canPrefix(paths[i]) ? prefix : '') + paths[i];
else p[i] = '';
return p;
}
}
//##############################################################################
// PARAMETERS & INDIVIDUAL STYLES FUNCTIONS
//##############################################################################
function dt_getParam (param, defParam) {
return (typeof(param)!="undefined" && param)?param:defParam;
}
function dt_getStyleParam(pName, sInd, sType, defValue)
// Returns an individual style value from a styles array for item/submenu
{
if (sInd==-1 || ''+sInd+''=='') return defValue;
var sp = (sType==1)?tstyles[sInd]:tXPStyles[sInd]; // get submenu or item style
// Search for parameter name
var f=0;
for (var i=0; i<sp.ln(); i++)
if (typeof(sp[i])==tuf) return defValue;
else
if (sp[i].io(pName)>=0)
{
f=1;
break;
}
if (!f) return defValue;
var val = sp[i].split('=')[1]; // get parameters' value
if (val.io(',')>=0) val = val.split(','); // if values is array -> create the array of values
return val;
}
function dt_setStandardXPStyle()
{
var standardXPStyle =
{
xpBtn : dt_setPathPrefix(tXPExpandBtn, tpathPrefix_img),
xpTitleBackColor : tXPTitleBackColor,
xpTitleLeft : dt_setPathPrefix(tXPTitleLeft, tpathPrefix_img),
xpTitleLeftW : tXPTitleLeftWidth,
xpTitleBackImage : dt_setPathPrefix(tXPTitleBackImg, tpathPrefix_img)
}
return standardXPStyle;
}
function dt_setStandardItStyle()
{
var standardItStyle =
{
backColor : titemBackColor,
backImage : dt_setPathPrefix(titemBackImage, tpathPrefix_img),
// Font
fntColor : tfontColor,
fntStyle : tfontStyle,
fntDecor : tfontDecoration
}
return standardItStyle;
}
function dt_getXPStyle(menu, sInd)
{
var st = menu.standardXPStyle;
if (typeof(sInd)==tuf) return st;
var btnI = dt_getStyleParam('tXPExpandBtn', sInd, 0, '');
var lI = dt_getStyleParam('tXPTitleLeft', sInd, 0, '');
var bI = dt_getStyleParam('tXPTitleBackImg', sInd, 0, '');
var style =
{
xpBtn : btnI ? dt_setPathPrefix(btnI, tpathPrefix_img) : st.xpBtn,
xpTitleBackColor : dt_getStyleParam('tXPTitleBackColor', sInd, 0, st.xpTitleBackColor),
xpTitleLeft : lI ? dt_setPathPrefix(lI, tpathPrefix_img) : st.xpTitleLeft,
xpTitleLeftW : dt_getStyleParam('tXPTitleLeftWidth', sInd, 0, st.xpTitleLeftW),
xpTitleBackImage : bI ? dt_setPathPrefix(bI, tpathPrefix_img) : st.xpTitleBackImage
};
return style;
}
function dt_getItemStyle(menu, sInd)
{
var st = menu.standardItStyle;
if (typeof(sInd)==tuf) return st;
var bI = dt_getStyleParam("titemBackImage", sInd, 1, '');
var style =
{
backColor : dt_getStyleParam('titemBackColor', sInd, 1, st.backColor),
backImage : bI ? dt_setPathPrefix(bI, tpathPrefix_img) : st.backImage,
// Font
fntColor : dt_getStyleParam("tfontColor", sInd, 1, st.fntColor),
fntStyle : dt_getStyleParam("tfontStyle", sInd, 1, st.fntStyle),
fntDecor : dt_getStyleParam("tfontDecoration", sInd, 1, st.fntDecor)
};
return style;
}
//##############################################################################
// BASIC FUNCTIONS
//##############################################################################
function dt_createMenuParams(curInd)
// Creates menu parameters
{
dt_menu[curInd] =
{
i : [], // root items array
ind : curInd, // index of the menu
id : 'dt_'+curInd, // HTML id
parentIt : null, // do not erase
maxLevel : 0, // max items level
itCount : 0, // current items count
idCount : 0, // number of items that were created, used for id of new items
absPos : tabsolute,
left : tleft,
top : ttop,
width : tmenuWidth,
height : tmenuHeight,
itemH : titemHeight,
nowrap : tnoWrap?'nowrap':'',
dx : tlevelDX,
// Expand/collapse vars
expandClick : texpandItemClick,
closeExpanded : tcloseExpanded,
closeExpandedXP: tcloseExpandedXP,
// Floatable Menu
floating : tfloatable,
floatingX : tfloatableX,
floatingY : tfloatableY,
iterations : tfloatIterations,
// Moveable Menu
moving : tmoveable,
moveClr : tmoveColor,
moveImage : tmoveImage,
moveHeight : tmoveImageHeight,
// Appearance
brdWidth : tmenuBorderWidth, // border width
brdStyle : tmenuBorderStyle,
brdColor : tmenuBorderColor,
backColor : tmenuBackColor, // menu background color
backImage : dt_setPathPrefix(tmenuBackImage, tpathPrefix_img), // menu background image
fntColorDisabled : tfontColorDisabled,
// Common
btns : dt_setPathPrefix(texpandBtn, tpathPrefix_img),
btnW : texpandBtnW,
btnH : texpandBtnH,
btnAlign : texpandBtnAlign,
iconAlign : ticonAlign,
hasPoints : tpoints,
pointsImg : dt_setPathPrefix(tpointsImage, tpathPrefix_img),
pointsVImg : dt_setPathPrefix(tpointsVImage, tpathPrefix_img),
pointsCImg : dt_setPathPrefix(tpointsCImage, tpathPrefix_img),
// XP-style
isXPStyle : tXPStyle,
xpBtnW : tXPBtnWidth,
xpBtnH : tXPBtnHeight,
xpIconW : tXPIconWidth,
xpIconH : tXPIconHeight,
xpIterations : tXPIterations,
xpFilter : tXPFilter,
xpBrdWidth : tXPBorderWidth,
xpBrdColor : tXPBorderColor,
isBusy : 0,
// Toggle mode
toggleMode : ttoggleMode,
pressedItemID: '',
pressedFontColor : tpressedFontColor,
// Standard styles
standardItStyle : dt_setStandardItStyle(),
standardXPStyle : dt_setStandardXPStyle(),
// Items states
saveState : tsaveState,
savePrefix : tsavePrefix,
stateLoaded : 0,
states : []
}
tcurMenu.mVar = dt_menu[curInd];
}
function dt_getItemLink(linkVal) { // Returns item link
return dt_setPathPrefix(dt_getParam(linkVal, ''), tpathPrefix_link);
}
function dt_getItemTarget(targetVal) { // Returns item target
if (!targetVal && titemTarget) targetVal = titemTarget; // if individual target is empty and a common target has a value -> assign a common target
return targetVal;
}
function dt_delFlag(s) {
return s.sb(1, s.ln());
}
function dt_getItemIcons(iParams)
// Returns icons names for item
{
var ic0 = dt_getParam(iParams[2], '');
var ic1 = dt_getParam(iParams[3], ic0);
var ic2 = dt_getParam(iParams[4], ic1);
return [ic0, ic1, ic2];
}
function dt_createItemParams(parentM, parentItem, iParams, lvl, itInd)
// Creates item parameters
{
var iText = iParams[0];
var itID = parentM.id+'i'+parentM.idCount;
// Detect is item is hidden
var hid = 0;
if (iText.charAt(0)=='#') // item is hidden
{
hid = 1;
iText = dt_delFlag(iText); // delete '#' (hidden-flag)
}
// Detect expand-state of item
var expnd = (texpanded || !tdynamicTree); // item is expanded
if (iText.charAt(0)=='+')
{
iText=dt_delFlag(iText); // delete '+' (expand-flag)
expnd = 1;
}
expnd = (expnd && !hid);
// Detect pressed item
if (iText.charAt(0)=='>')
{
iText=dt_delFlag(iText); // delete '>' (item is pressed)
parentM.pressedItemID = itID;
}
// Link and target
var iLink = dt_getItemLink(iParams[1]);
var iTarget = dt_getItemTarget(dt_getParam(iParams[6], ''));
if (!parentItem) parentItem = parentM; // if no parent item => make menu object as parent item
else
parentItem.hasChild = 1;
var indx = (itInd>-1) ? itInd : parentItem.i.ln();
// Set the item state according to loaded item state from cookies
with (parentM)
if (stateLoaded && tdynamicTree) // the menu isn't dynamic => don't get a loaded items state from cookies
{
var stt = (typeof(states[itCount])==tuf) ? '' : states[itCount]
switch (stt)
{
case 'h': expnd = 0; hid = 1; break; // item is hidden (user defined the item as unvisible)
case 'u': expnd = 0; hid = 0; break; // item is unvisible (parent item is collapsed)
case '+': expnd = 1; hid = 0; break; // item is expanded
case '-': expnd = 0; hid = 0; break; // item is collapsed
}
}
parentItem.i[indx] =
{
i : [], // child items
mInd : parentM.ind,
ind : indx,
id : itID,
parentIt: parentItem,
level : lvl, // item's level
dx : parentM.dx, // x offset for every next level
ptMask : '', // draw points flag, for example, '00111'
hasChild: 0,
expanded: expnd ? 1 : 0,
// Common
text : iText,
link : iLink,
target : iTarget,
tip : dt_getParam(iParams[5], ''),
align : titemAlign,
valign : 'middle',
cursor : titemCursor,
// Appearance
itStyle : dt_getItemStyle(parentM, iParams[7]),
xpStyle : dt_getXPStyle(parentM, iParams[8]),
// Icons & arrows
icon : dt_setPathPrefix(dt_getItemIcons(iParams), tpathPrefix_img),
iconW : ticonWidth,
iconH : ticonHeight,
// Additional
isVisible : 1,
isHidden : hid,
isDisabled : (iTarget=='_')?1:0, // target='_' - item is disabled
isDeleted : 0,
timer : null
}
with (parentM)
{
if (lvl>maxLevel) maxLevel = lvl;
itCount++;
idCount++;
}
with (tcurMenu)
{
mVar = parentM;
itInd = indx;
itVar = parentItem.i[indx];
pitVar = parentItem;
}
}
function dt_getItemLevel(itText)
// Returns level of item and removes '|' symbols from item text
{
var lvl=0;
while (itText.charAt(lvl)=='|') lvl++; // nesting of item
return lvl;
}
function dt_detectItemVisibility_Expand(menu, itVar)
// Detects item's visibility and expand-state according to its attributes and attributes of its parent
{
with (itVar)
{
var lowLevel = (menu.isXPStyle) ? 1 : 0;
if (level>lowLevel) isVisible = (parentIt.expanded && !parentIt.isHidden);
else
isVisible = 1;
expanded = (hasChild && expanded && isVisible && !isHidden) ? 1 : 0;
}
}
function dt_parseItemsData()
// Parses menu items: creates item objects
{
var pl=-1; // previous item level
var cl=0; // current item level
var textL;
var iParams = tmenuItems;
for (var i=0; (i<iParams.length && typeof(iParams[i])!=tuf); i++)
{
cl = dt_getItemLevel(iParams[i][0]);
iParams[i][0] = iParams[i][0].sb(cl, iParams[i][0].ln());
with (tcurMenu)
{
if (pl<cl) pitVar = itVar; // set new parent
if (pl>cl) for (var j=0; j<pl-cl; j++) pitVar = pitVar.parentIt; // get previous level
dt_createItemParams(mVar, pitVar, iParams[i], cl, -1);
}
pl = cl;
}
// Detect items visibility and expand-state
var itVar = tcurMenu.mVar.i[0];
do
{
dt_detectItemVisibility_Expand(tcurMenu.mVar, itVar);
}
while ((itVar=dt_getNextItem(itVar)))
}
//##############################################################################
// HTML FUNCTIONS
//##############################################################################
var pmStyle = 'padding:0px;margin:0px;';
function dt_openDIV(id, styleText, add) {
return '<DIV id="'+id+'" style="'+pmStyle+styleText+'" '+add+'>';
}
function dt_closeDIV() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -