📄 accordioncontainer.js
字号:
if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dijit.layout.AccordionContainer"] = true;dojo.provide("dijit.layout.AccordionContainer");dojo.require("dojo.fx");dojo.require("dijit._Container");dojo.require("dijit._Templated");dojo.require("dijit.layout.StackContainer");dojo.require("dijit.layout.ContentPane");dojo.declare( "dijit.layout.AccordionContainer", dijit.layout.StackContainer, { // summary: // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, // and switching between panes is visualized by sliding the other panes up/down. // example: // | <div dojoType="dijit.layout.AccordionContainer"> // | <div dojoType="dijit.layout.AccordionPane" title="pane 1"> // | <div dojoType="dijit.layout.ContentPane">...</div> // | </div> // | <div dojoType="dijit.layout.AccordionPane" title="pane 2"> // | <p>This is some text</p> // || ... // | </div> // // duration: Integer // Amount of time (in ms) it takes to slide panes duration: 250, _verticalSpace: 0, postCreate: function(){ this.domNode.style.overflow="hidden"; this.inherited("postCreate",arguments); dijit.setWaiRole(this.domNode, "tablist"); dojo.addClass(this.domNode,"dijitAccordionContainer"); }, startup: function(){ if(this._started){ return; } this.inherited("startup",arguments); if(this.selectedChildWidget){ var style = this.selectedChildWidget.containerNode.style; style.display = ""; style.overflow = "auto"; this.selectedChildWidget._setSelectedState(true); } }, layout: function(){ // summary: // Set the height of the open pane based on what room remains // get cumulative height of all the title bars, and figure out which pane is open var totalCollapsedHeight = 0; var openPane = this.selectedChildWidget; dojo.forEach(this.getChildren(), function(child){ totalCollapsedHeight += child.getTitleHeight(); }); var mySize = this._contentBox; this._verticalSpace = (mySize.h - totalCollapsedHeight); if(openPane){ openPane.containerNode.style.height = this._verticalSpace + "px";/***TODO: this is wrong. probably you wanted to call resize on the SplitContainerinside the AccordionPane?? if(openPane.resize){ openPane.resize({h: this._verticalSpace}); }***/ } }, _setupChild: function(/*Widget*/ page){ // Summary: prepare the given child return page; }, _transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){//TODO: should be able to replace this with calls to slideIn/slideOut if(this._inTransition){ return; } this._inTransition = true; var animations = []; var paneHeight = this._verticalSpace; if(newWidget){ newWidget.setSelected(true); var newContents = newWidget.containerNode; newContents.style.display = ""; animations.push(dojo.animateProperty({ node: newContents, duration: this.duration, properties: { height: { start: "1", end: paneHeight } }, onEnd: function(){ newContents.style.overflow = "auto"; } })); } if(oldWidget){ oldWidget.setSelected(false); var oldContents = oldWidget.containerNode; oldContents.style.overflow = "hidden"; animations.push(dojo.animateProperty({ node: oldContents, duration: this.duration, properties: { height: { start: paneHeight, end: "1" } }, onEnd: function(){ oldContents.style.display = "none"; } })); } this._inTransition = false; dojo.fx.combine(animations).play(); }, // note: we are treating the container as controller here _onKeyPress: function(/*Event*/ e){ if(this.disabled || e.altKey || !(e._dijitWidget || e.ctrlKey)){ return; } var k = dojo.keys; var fromTitle = e._dijitWidget; switch(e.keyCode){ case k.LEFT_ARROW: case k.UP_ARROW: if (fromTitle){ this._adjacent(false)._onTitleClick(); dojo.stopEvent(e); } break; case k.PAGE_UP: if (e.ctrlKey){ this._adjacent(false)._onTitleClick(); dojo.stopEvent(e); } break; case k.RIGHT_ARROW: case k.DOWN_ARROW: if (fromTitle){ this._adjacent(true)._onTitleClick(); dojo.stopEvent(e); } break; case k.PAGE_DOWN: if (e.ctrlKey){ this._adjacent(true)._onTitleClick(); dojo.stopEvent(e); } break; default: if(e.ctrlKey && e.keyCode == k.TAB){ this._adjacent(e._dijitWidget, !e.shiftKey)._onTitleClick(); dojo.stopEvent(e); } } } });dojo.declare("dijit.layout.AccordionPane", [dijit.layout.ContentPane, dijit._Templated, dijit._Contained], { // summary: // AccordionPane is a ContentPane with a title that may contain another widget. // Nested layout widgets, such as SplitContainer, are not supported at this time. // example: // | see dijit.layout.AccordionContainer templateString:"<div class='dijitAccordionPane'\n\t><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\"\n\t\t><div class='dijitAccordionArrow' waiRole=\"presentation\"></div\n\t\t><div class='arrowTextUp' waiRole=\"presentation\">▲</div\n\t\t><div class='arrowTextDown' waiRole=\"presentation\">▼</div\n\t\t><div waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div\n\t><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'\n\t\tclass='dijitAccordionBody' wairole=\"tabpanel\"\n\t></div></div>\n</div>\n", postCreate: function(){ this.inherited("postCreate",arguments) dojo.setSelectable(this.titleNode, false); this.setSelected(this.selected); }, getTitleHeight: function(){ // summary: returns the height of the title dom node return dojo.marginBox(this.titleNode).h; // Integer }, _onTitleClick: function(){ // summary: callback when someone clicks my title var parent = this.getParent(); if(!parent._inTransition){ parent.selectChild(this); dijit.focus(this.focusNode); } }, _onTitleKeyPress: function(/*Event*/ evt){ evt._dijitWidget = this; return this.getParent()._onKeyPress(evt); }, _setSelectedState: function(/*Boolean*/ isSelected){ this.selected = isSelected; dojo[(isSelected ? "addClass" : "removeClass")](this.titleNode,"dijitAccordionTitle-selected"); this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1"); }, _handleFocus: function(/*Event*/e){ // summary: handle the blur and focus state of this widget dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,"dijitAccordionFocused"); }, setSelected: function(/*Boolean*/ isSelected){ // summary: change the selected state on this pane this._setSelectedState(isSelected); if(isSelected){ this.onSelected(); this._loadCheck(true); // if href specified, trigger load } }, onSelected: function(){ // summary: called when this pane is selected }});}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -