Improve output: distinguish between failed assertions (failures) and unexpected exceptions (errors), and print a filtered stack trace for any exception.
This commit is contained in:
commit
4f2e303079
1839 changed files with 235630 additions and 0 deletions
158
webapp/web/src/widget/SimpleDropdownButtons.js
Normal file
158
webapp/web/src/widget/SimpleDropdownButtons.js
Normal file
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
Copyright (c) 2004-2006, The Dojo Foundation
|
||||
All Rights Reserved.
|
||||
|
||||
Licensed under the Academic Free License version 2.1 or above OR the
|
||||
modified BSD license. For more information on Dojo licensing, see:
|
||||
|
||||
http://dojotoolkit.org/community/licensing.shtml
|
||||
*/
|
||||
|
||||
/* TODO:
|
||||
* - make the dropdowns "smart" so they can't get cutoff on bottom of page, sides of page, etc.
|
||||
* - unify menus with the MenuItem and Menu classes so we can add stuff to all menus at once
|
||||
* - allow buttons to be enabled/disabled at runtime
|
||||
* - this probably means creating all menus upfront and then triggering a disable action
|
||||
* for disabled buttons in the constructor loop. we'll need a disable and enable action anyway
|
||||
* - should each button with menu be a widget object of it's own?
|
||||
*/
|
||||
dojo.provide("dojo.widget.SimpleDropdownButtons");
|
||||
dojo.provide("dojo.widget.HtmlSimpleDropdownButtons");
|
||||
|
||||
dojo.deprecated("dojo.widget.SimpleDropdownButtons", "use dojo.widget.DropDownButton", "0.4");
|
||||
|
||||
dojo.require("dojo.event.*");
|
||||
dojo.require("dojo.widget.*");
|
||||
dojo.require("dojo.uri.Uri");
|
||||
dojo.require("dojo.dom");
|
||||
dojo.require("dojo.style");
|
||||
dojo.require("dojo.html");
|
||||
|
||||
dojo.widget.tags.addParseTreeHandler("dojo:simpledropdownbuttons");
|
||||
|
||||
dojo.widget.HtmlSimpleDropdownButtons = function() {
|
||||
dojo.widget.HtmlWidget.call(this);
|
||||
|
||||
this.widgetType = "SimpleDropdownButtons";
|
||||
this.templateCssPath = dojo.uri.dojoUri("src/widget/templates/HtmlSimpleDropdownButtons.css");
|
||||
|
||||
this.menuTriggerClass = "dojoSimpleDropdownButtons";
|
||||
this.menuClass = "dojoSimpleDropdownButtonsMenu";
|
||||
|
||||
// overwrite buildRendering so we don't clobber our list
|
||||
this.buildRendering = function(args, frag) {
|
||||
if(this.templateCssPath) {
|
||||
dojo.style.insertCssFile(this.templateCssPath, null, true);
|
||||
}
|
||||
this.domNode = frag["dojo:"+this.widgetType.toLowerCase()]["nodeRef"];
|
||||
|
||||
var menu = this.domNode;
|
||||
if( !dojo.html.hasClass(menu, this.menuTriggerClass) ) {
|
||||
dojo.html.addClass(menu, this.menuTriggerClass);
|
||||
}
|
||||
var li = dojo.dom.getFirstChildElement(menu);
|
||||
var menuIDs = [];
|
||||
var arrowIDs = [];
|
||||
|
||||
while(li) {
|
||||
if(li.getElementsByTagName("ul").length > 0) {
|
||||
var a = dojo.dom.getFirstChildElement(li);
|
||||
var arrow = document.createElement("a");
|
||||
arrow.href = "javascript:;";
|
||||
arrow.innerHTML = " ";
|
||||
dojo.html.setClass(arrow, "downArrow");
|
||||
if(!arrow.id) {
|
||||
arrow.id = dojo.dom.getUniqueId();
|
||||
}
|
||||
arrowIDs.push(arrow.id);
|
||||
var submenu = dojo.dom.getNextSiblingElement(a);
|
||||
if(!submenu.id) {
|
||||
submenu.id = dojo.dom.getUniqueId();
|
||||
}
|
||||
menuIDs.push(submenu.id);
|
||||
|
||||
if( dojo.html.hasClass(a, "disabled") ) {
|
||||
dojo.html.addClass(arrow, "disabled");
|
||||
dojo.html.disableSelection(li);
|
||||
arrow.onfocus = function(){ this.blur(); }
|
||||
} else {
|
||||
dojo.html.addClass(submenu, this.menuClass);
|
||||
document.body.appendChild(submenu);
|
||||
dojo.event.connect(arrow, "onmousedown", (function() {
|
||||
var ar = arrow;
|
||||
return function(e) {
|
||||
dojo.html.addClass(ar, "pressed");
|
||||
}
|
||||
})());
|
||||
dojo.event.connect(arrow, "onclick", (function() {
|
||||
var aa = a;
|
||||
var ar = arrow;
|
||||
var sm = submenu;
|
||||
var setWidth = false;
|
||||
|
||||
return function(e) {
|
||||
hideAll(sm, ar);
|
||||
sm.style.left = (dojo.html.getScrollLeft()
|
||||
+ e.clientX - e.layerX + aa.offsetLeft) + "px";
|
||||
sm.style.top = (dojo.html.getScrollTop() + e.clientY
|
||||
- e.layerY + aa.offsetTop + aa.offsetHeight) + "px";
|
||||
sm.style.display = sm.style.display == "block" ? "none" : "block";
|
||||
if(sm.style.display == "none") {
|
||||
dojo.html.removeClass(ar, "pressed");
|
||||
e.target.blur()
|
||||
}
|
||||
if(!setWidth && sm.style.display == "block"
|
||||
&& sm.offsetWidth < aa.offsetWidth + ar.offsetWidth) {
|
||||
sm.style.width = aa.offsetWidth + ar.offsetWidth + "px";
|
||||
setWidth = true;
|
||||
}
|
||||
e.preventDefault();
|
||||
}
|
||||
})());
|
||||
}
|
||||
|
||||
dojo.event.connect(a, "onclick", function(e) {
|
||||
if(e && e.target && e.target.blur) {
|
||||
e.target.blur();
|
||||
}
|
||||
});
|
||||
|
||||
if(a.nextSibling) {
|
||||
li.insertBefore(arrow, a.nextSibling);
|
||||
} else {
|
||||
li.appendChild(arrow);
|
||||
}
|
||||
|
||||
}
|
||||
li = dojo.dom.getNextSiblingElement(li);
|
||||
}
|
||||
|
||||
function hideAll(excludeMenu, excludeArrow) {
|
||||
// hide menus
|
||||
for(var i = 0; i < menuIDs.length; i++) {
|
||||
var m = document.getElementById(menuIDs[i]);
|
||||
if(!excludeMenu || m != excludeMenu) {
|
||||
document.getElementById(menuIDs[i]).style.display = "none";
|
||||
}
|
||||
}
|
||||
// restore arrows to non-pressed state
|
||||
for(var i = 0; i < arrowIDs.length; i++) {
|
||||
var m = document.getElementById(arrowIDs[i]);
|
||||
if(!excludeArrow || m != excludeArrow) {
|
||||
dojo.html.removeClass(m, "pressed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dojo.event.connect(document.documentElement, "onmousedown", function(e) {
|
||||
if( dojo.html.hasClass(e.target, "downArrow") ) { return };
|
||||
for(var i = 0; i < menuIDs.length; i++) {
|
||||
if( dojo.dom.isDescendantOf(e.target, document.getElementById(menuIDs[i])) ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
hideAll();
|
||||
});
|
||||
}
|
||||
}
|
||||
dojo.inherits(dojo.widget.HtmlSimpleDropdownButtons, dojo.widget.HtmlWidget);
|
Loading…
Add table
Add a link
Reference in a new issue