📄 tabs.js
字号:
* HTML <code>class</code> attribute value that includes <code> * className</code> using a breadth-first algorithm. * * @param Element target * @param string className * @returns Element */org.ditchnet.dom.DomUtils.getFirstDescendantByClassNameBreadthFirst = function ( target, className) { var result; with (org.ditchnet.dom.DomUtils) { if (result = getFirstChildByClassName(target,className)) { return result; } for (var i = 0; i < target.childNodes.length; i++) { result = getFirstDescendantByClassNameBreadthFirst( target.childNodes.item(i), className ); if (result) { return result; } } return null; }};/** * Retreives <code>target</code>'s first descendant element with an * HTML <code>class</code> attribute value that includes <code> * className</code> using a depth-first algorithm. * * @param Element target * @param string className * @returns Element */org.ditchnet.dom.DomUtils.getFirstDescendantByClassNameDepthFirst = function ( target, className) { var child; var result; with (org.ditchnet.dom.DomUtils) { for (var i = 0; i < target.childNodes.length; i++) { child = target.childNodes.item(i); if (isElementNode(child) && hasClassName(child,className)) { return child; } result = getFirstDescendantByClassNameDepthFirst( target.childNodes.item(i), className ); if (result) { return result; } } return null; }};/** * Returns all descendant elements of <code>target</code> with HTML <code> * class</code> attribute values that contain <code>className</code> * as an Array. NOTE that unlike the * algorithms specified in the DOM spec, a <code>NodeList</code> is NOT * returned. This method searched for all descendants of <code>target * </code> meeting the criteria using a breadth-first algorithm. * * @param Element target * @param string className * @returns Element */org.ditchnet.dom.DomUtils.getDescendantsByClassName = function (target,className) { var result = []; with (org.ditchnet.dom.DomUtils) { result.addAll(getChildrenByClassName(target,className)); for (var i = 0; i < target.childNodes.length; i++) { result.addAll(getDescendantsByClassName( target.childNodes.item(i), className)); } return result; }};/** * @param MouseEvent evt * @returns void */org.ditchnet.jsp.TabUtils.tabClicked = function (evt) { var eventSource; with (org.ditchnet) { evt = new event.Event(evt); eventSource = evt.getSource(); eventSource = dom.DomUtils.getFirstAncestorOrSelfByClassName( eventSource, jsp.TabUtils.TAB_CLASS_NAME ); jsp.TabUtils.switchTab(eventSource); evt.consume(); }};/** * @param HTMLElement eventSource * @returns void */org.ditchnet.jsp.TabUtils.switchTab = function (eventSource) { with (org.ditchnet.jsp.TabUtils) { findTabElements(eventSource); selectedIndex = determineSelectedIndex(eventSource); toggleTabVisibility(selectedIndex); setTabCookie(selectedIndex); }};/** * @param number selectedIndex * @returns void */org.ditchnet.jsp.TabUtils.setTabCookie = function (selectedIndex) { with (org.ditchnet) { var name = "org.ditchnet.jsp.tabs:"+jsp.TabUtils.tabContainer.id; var value = selectedIndex; var c = new util.Cookie(name,value); util.Cookie.addPageCookie(c); }};/** * @param HTMLElement eventSource * @returns void */org.ditchnet.jsp.TabUtils.findTabElements = function (eventSource) { with (org.ditchnet) { jsp.TabUtils.tab = eventSource; jsp.TabUtils.tabContainer = dom.DomUtils.getFirstAncestorByClassName( eventSource, jsp.TabUtils.TAB_CONTAINER_CLASS_NAME ); jsp.TabUtils.tabWrap = dom.DomUtils.getFirstChildByClassName( jsp.TabUtils.tabContainer, jsp.TabUtils.TAB_WRAP_CLASS_NAME ); jsp.TabUtils.tabs = dom.DomUtils.getChildrenByClassName( jsp.TabUtils.tabWrap, jsp.TabUtils.TAB_CLASS_NAME ); jsp.TabUtils.tabPaneWrap = dom.DomUtils.getFirstChildByClassName( jsp.TabUtils.tabContainer, jsp.TabUtils.TAB_PANE_WRAP_CLASS_NAME ); jsp.TabUtils.tabPanes = dom.DomUtils.getChildrenByClassName( jsp.TabUtils.tabPaneWrap, jsp.TabUtils.TAB_PANE_CLASS_NAME ); }};/** * @param HTMLElement eventSource * @returns number */org.ditchnet.jsp.TabUtils.determineSelectedIndex = function (eventSource) { with (org.ditchnet.jsp.TabUtils) { for (var i = 0; i < tabs.length; i++) { if (tabs[i] == eventSource) { return i; } } } //throw new Error("Should not reach here: Did not find tab selectedIndex");};/** * @param number selectedIndex * @returns void */org.ditchnet.jsp.TabUtils.toggleTabVisibility = function (selectedIndex) { with (org.ditchnet) { for (var i = 0; i < jsp.TabUtils.tabPanes.length; i++) { var tabPane = jsp.TabUtils.tabPanes[i]; if (i == selectedIndex) { dom.DomUtils.show(tabPane); dom.DomUtils.setClassNameAsFocused(jsp.TabUtils.tabs[i]); } else { dom.DomUtils.hide(tabPane); dom.DomUtils.setClassNameAsUnFocused(jsp.TabUtils.tabs[i]); } } }};/** * @param Event evt * @param string tabContainerId * @param number selectedIndex * @returns void */org.ditchnet.jsp.TabUtils.tabLinkClicked = function (evt,selectedTabPaneId) { var tabContainer,selectedTabPane,tabWrap,tabs,tabPaneWrap,tabPanes, selectedIndex; with (org.ditchnet) { evt = new event.Event(evt); selectedTabPane = document.getElementById(selectedTabPaneId); tabContainer = dom.DomUtils.getFirstAncestorByClassName( selectedTabPane, jsp.TabUtils.TAB_CONTAINER_CLASS_NAME ); tabWrap = dom.DomUtils.getFirstChildByClassName( tabContainer, jsp.TabUtils.TAB_WRAP_CLASS_NAME ); tabs = dom.DomUtils.getChildrenByClassName( tabWrap, jsp.TabUtils.TAB_CLASS_NAME ); tabPaneWrap = dom.DomUtils.getFirstAncestorByClassName( selectedTabPane, jsp.TabUtils.TAB_PANE_WRAP_CLASS_NAME ); tabPanes = dom.DomUtils.getChildrenByClassName( tabPaneWrap, jsp.TabUtils.TAB_PANE_CLASS_NAME ); for (var i = 0; i < tabPanes.length; i++) { if (tabPanes[i] == selectedTabPane) { selectedIndex = i; break; } } jsp.TabUtils.switchTab(tabs[selectedIndex]); window.scrollTo(0,0); evt.consume(); }};/** * @param Event evt * @param string tabContainerId * @returns void */org.ditchnet.jsp.TabUtils.prevTabButtonClicked = function (evt,tabContainerId) { org.ditchnet.jsp.TabUtils.tabButtonClicked(evt,tabContainerId,true);};/** * @param Event evt * @param string tabContainerId * @returns void */org.ditchnet.jsp.TabUtils.nextTabButtonClicked = function (evt,tabContainerId) { org.ditchnet.jsp.TabUtils.tabButtonClicked(evt,tabContainerId,false);};/** * @param Event evt * @param string tabContainerId * @returns void */org.ditchnet.jsp.TabUtils.tabButtonClicked = function (evt,tabContainerId,isPrev) { var tabContainer,tabWrap,tabs,selectedIndex; with (org.ditchnet) { evt = new event.Event(evt); tabContainer = document.getElementById(tabContainerId); tabWrap = dom.DomUtils.getFirstChildByClassName( tabContainer, jsp.TabUtils.TAB_WRAP_CLASS_NAME ); tabs = dom.DomUtils.getChildrenByClassName( tabWrap, jsp.TabUtils.TAB_CLASS_NAME ); for (var i = 0; i < tabs.length; i++) { if (dom.DomUtils.hasClassName(tabs[i],dom.DomUtils.FOCUSED_CLASS_NAME)) { selectedIndex = (isPrev) ? i-1 : i+1; selectedIndex = (selectedIndex >= tabs.length) ? 0 : (0 > selectedIndex) ? tabs.length - 1 : selectedIndex; break; } } jsp.TabUtils.switchTab(tabs[selectedIndex]); evt.consume(); }};/** * @constructor * @param HTMLElement */org.ditchnet.jsp.TabEvent = function (source) { this._source = source; with (org.ditchnet.jsp.TabUtils) { this._tabContainer = tabContainer; this._selectedIndex = selectedIndex; this._tabPane = tabPanes[selectedIndex]; }};/** @return HTMLElement */org.ditchnet.jsp.TabEvent.prototype.getSource = function () { return this._source;};/** @return number */org.ditchnet.jsp.TabEvent.prototype.getSelectedIndex = function () { return this._selectedIndex;};/** @return HTMLElement */org.ditchnet.jsp.TabEvent.prototype.getTab = function () { return this._source;};/** @return HTMLElement */org.ditchnet.jsp.TabEvent.prototype.getTabContainer = function () { return this._tabContainer;};/** @return HTMLElement */org.ditchnet.jsp.TabEvent.prototype.getTabPane = function () { return this._tabPane;};/** @return string */org.ditchnet.jsp.TabEvent.prototype.toString = function () { return "[ org.ditchnet.jsp.TabEvent object ]";};/** * @constructor * @param MouseEvent evt */org.ditchnet.event.Event = function (evt) { this._evt = evt ? evt : window.event; this._source = this._evt.currentTarget ? this._evt.currentTarget : this._evt.srcElement;};/** * @returns Element */org.ditchnet.event.Event.prototype.getSource = function () { return this._source;};/** * @returns void */org.ditchnet.event.Event.prototype.consume = function () { if (this._evt.stopPropagation) { this._evt.stopPropagation(); this._evt.preventDefault(); } else if (this._evt.cancelBubble) { this._evt.cancelBubble = true; this._evt.returnValue = false; }};/** * <p>Bean that represents individual Cookie objects, packaging their * attributes into a convenient API that can more easily be manipulated and * set.</p><p>Also contains 2 static convenience methods for setting and * the cookies for the current page. * @author Todd Ditchendorf * @constructor Accepts initial values for the <code>name</code> and * <code>value</code> attribute values. * @param String name Initial <code>name</code> attribute value. * @param String value Initial <code>value</code> attribute value. */ org.ditchnet.util.Cookie = function (name,value) { this._name; this._value; this._path; this._secure; this._domain; this._expires; if (name) { this.setName(name); } if (value) { this.setValue(value); }};// Static attributesorg.ditchnet.util.Cookie.EQUALS = "=";org.ditchnet.util.Cookie.DELIM = "; ";org.ditchnet.util.Cookie.PATH = "path";org.ditchnet.util.Cookie.SECURE = "secure";org.ditchnet.util.Cookie.DOMAIN = "domain";org.ditchnet.util.Cookie.EXPIRES = "expires";org.ditchnet.util.Cookie.SUB_VALUE_DELIM = ":"/** * Static convenience method that sets the given cookie for the current page. * @param Cookie c <code>Cookie</code> object to be set. * @returns void */org.ditchnet.util.Cookie.addPageCookie = function (c) {/* if (!(c instanceof org.ditchnet.util.Cookie)) { throw new Error("IllegalArgumentException: Cookie.set() accepts only" + " one parameter of type Cookie"); }*/ document.cookie = c.toCookieString();};/** * Static convenience method that returns all the <code>document.cookie</code> * String for the current page. * @returns String */org.ditchnet.util.Cookie.getPageCookieString = function () { return document.cookie;};/** * Static convenience method that checks the <code>document.cookie</code> * String for the current page to see if the give <code>Cookie</code> exists. * @param Cookie c * @returns boolean */org.ditchnet.util.Cookie.pageHasCookieWithNameAndValue = function (c) { var s = c.toNameValueString(); return (Cookie.get().indexOf(s) > -1);};org.ditchnet.util.Cookie.pageHasCookieWithName = function (c) { var s = c.getName(); return (Cookie.get().indexOf(s) > -1);};/** * Returns a String representation of this <code>Cookie</cookie> in the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -