[Rt-commit] r3402 - in rt/branches/3.5-TESTING: . html/Elements html/NoAuth html/NoAuth/js html/Widgets

trs at bestpractical.com trs at bestpractical.com
Wed Jul 6 12:25:00 EDT 2005


Author: trs
Date: Wed Jul  6 12:24:59 2005
New Revision: 3402

Added:
   rt/branches/3.5-TESTING/html/NoAuth/js/cascaded.js
   rt/branches/3.5-TESTING/html/NoAuth/js/class.js
   rt/branches/3.5-TESTING/html/NoAuth/js/combobox.js
   rt/branches/3.5-TESTING/html/NoAuth/js/list.js
Removed:
   rt/branches/3.5-TESTING/html/NoAuth/cascaded.js
   rt/branches/3.5-TESTING/html/NoAuth/class.js
   rt/branches/3.5-TESTING/html/NoAuth/combobox.js
   rt/branches/3.5-TESTING/html/NoAuth/list.js
Modified:
   rt/branches/3.5-TESTING/   (props changed)
   rt/branches/3.5-TESTING/html/Elements/EditCustomFieldSelect
   rt/branches/3.5-TESTING/html/Elements/Header
   rt/branches/3.5-TESTING/html/Widgets/ComboBox
Log:
 r4824 at wintermute:  tom | 2005-07-06 12:20:57 -0400
 Moved JS to a central location.


Modified: rt/branches/3.5-TESTING/html/Elements/EditCustomFieldSelect
==============================================================================
--- rt/branches/3.5-TESTING/html/Elements/EditCustomFieldSelect	(original)
+++ rt/branches/3.5-TESTING/html/Elements/EditCustomFieldSelect	Wed Jul  6 12:24:59 2005
@@ -52,7 +52,7 @@
 %       my $id = $NamePrefix . $CustomField->Id;
 %       my $out = $m->scomp('SELF:options', %ARGS, SelectedRef => \$selected, CategoryRef => \@category);
 %       if (@category) {
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/cascaded.js"></script>
+<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/cascaded.js"></script>
 %#      XXX - Hide this select from w3m?
       <select onchange="filter_cascade('<% $id %>-Values', this.value)" name="<%$id%>-Category"
         <option value="" <% !$selected && 'SELECTED' %>><&|/l&>-</&></option>

Modified: rt/branches/3.5-TESTING/html/Elements/Header
==============================================================================
--- rt/branches/3.5-TESTING/html/Elements/Header	(original)
+++ rt/branches/3.5-TESTING/html/Elements/Header	Wed Jul  6 12:24:59 2005
@@ -53,12 +53,12 @@
 % if ($Refresh > 0) {
     <meta http-equiv="refresh" content="<%$Refresh%>" />
 % }
-<link rel="shortcut icon" href="<%$RT::WebImagesURL%>/favicon.png" type="image/png" />
-<link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/main.css" type="text/css" />
+    <link rel="shortcut icon" href="<%$RT::WebImagesURL%>/favicon.png" type="image/png" />
+    <link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/css/main.css" type="text/css" />
 % if ($RSSAutoDiscovery) {
     <link rel="alternate" href="<%$RSSAutoDiscovery%>" type="application/rss+xml" title="RSS RT Search" />
 % }
-<script type="text/javascript" src="<%$RT::WebPath%>/rt.js"></script>
+    <script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/util.js"></script>
 <& /Elements/Callback, _CallbackName => 'Head', %ARGS &>
   </head>
   <body

Added: rt/branches/3.5-TESTING/html/NoAuth/js/cascaded.js
==============================================================================
--- (empty file)
+++ rt/branches/3.5-TESTING/html/NoAuth/js/cascaded.js	Wed Jul  6 12:24:59 2005
@@ -0,0 +1,19 @@
+function filter_cascade (id, val) {
+    var select = document.getElementById(id);
+    if (!select) { return };
+    var i;
+    var children = select.childNodes;
+    for (i in children) {
+        var style = children[i].style;
+        if (!style) { continue };
+        if (val == '') {
+            style.display = 'block';
+            continue;
+        }
+        if (children[i].label.substr(0, val.length) == val) {
+            style.display = 'block';
+            continue;
+        }
+        style.display = 'none';
+    }
+}

Added: rt/branches/3.5-TESTING/html/NoAuth/js/class.js
==============================================================================
--- (empty file)
+++ rt/branches/3.5-TESTING/html/NoAuth/js/class.js	Wed Jul  6 12:24:59 2005
@@ -0,0 +1,15 @@
+/* by TKirby, released under GPL */
+
+ function _ClassSetup(Object) {
+  this.prototype	= Object;
+  return this;
+ }
+ 
+ function Class(name) {
+  var _newclass_;
+  eval("window."+name+"	= new Function('this."+name+".apply(this,arguments);');");
+  eval("window."+name+".define = _ClassSetup;");
+  eval("_newclass_ = window."+name+";");
+  return _newclass_;
+ }
+

Added: rt/branches/3.5-TESTING/html/NoAuth/js/combobox.js
==============================================================================
--- (empty file)
+++ rt/branches/3.5-TESTING/html/NoAuth/js/combobox.js	Wed Jul  6 12:24:59 2005
@@ -0,0 +1,246 @@
+function ComboBox_InitWith(n) {
+    if ( typeof( window.addEventListener ) != "undefined" ) {
+        window.addEventListener("load", ComboBox_Init(n), false);
+    } else if ( typeof( window.attachEvent ) != "undefined" ) {
+        window.attachEvent("onload", ComboBox_Init(n));
+    } else {
+        ComboBox_Init(n)();
+    }
+}
+function ComboBox_Init(n) {
+    return function () {
+        if ( ComboBox_UplevelBrowser( n ) ) {
+            ComboBox_Load( n );
+        }
+    }
+}
+function ComboBox_UplevelBrowser( n ) {
+    if( typeof( document.getElementById ) == "undefined" ) return false;
+    var combo = document.getElementById( n + "_Container" );
+    if( combo == null || typeof( combo ) == "undefined" ) return false;
+    if( typeof( combo.style ) == "undefined" ) return false;
+    if( typeof( combo.innerHTML ) == "undefined" ) return false;
+    return true;
+}
+function ComboBox_Load( comboId ) {
+    var combo  = document.getElementById( comboId + "_Container" );
+    var button = document.getElementById( comboId + "_Button" );
+    var list   = document.getElementById( comboId + "_List" );
+    var text   = document.getElementById( comboId );
+    
+    
+    combo.List = list;
+    combo.Button = button;
+    combo.Text = text;
+    combo.style.border = "2px inset ButtonFace";
+    combo.style.padding = "0px";
+    combo.style.margin = "0px";
+    
+    button.Container = combo;
+    button.Toggle = ComboBox_ToggleList;
+    button.onclick = button.Toggle;
+    button.onmouseover = function(e) { this.Container.List.DisableBlur(e); };
+    button.onmouseout = function(e) { this.Container.List.EnableBlur(e); };
+    button.style.padding = "0px";
+    button.style.margin = "0px";
+    button.style.background = "ButtonFace";
+    button.style.color = "ButtonText";
+    button.style.borderLeft = "1px outset ButtonFace";
+    button.style.cursor = "default";
+    button.style.fontSize = "8pt";
+    button.innerHTML = "\u25BC";
+    button.onselectstart = function(e){ return false; };
+    
+    text.Container = combo;
+    text.TypeDown = ComboBox_TextTypeDown;
+    text.KeyAccess = ComboBox_TextKeyAccess;
+    text.onkeyup = function(e) { this.KeyAccess(e); this.TypeDown(e); };
+    text.style.border = "none";
+    text.style.margin = "0px";
+    text.style.padding = "0px";
+    text.style.width = ( list.offsetWidth ) + "px";
+    
+    list.Container = combo;
+    list.Show = ComboBox_ShowList;
+    list.Hide = ComboBox_HideList;
+    list.EnableBlur = ComboBox_ListEnableBlur;
+    list.DisableBlur = ComboBox_ListDisableBlur;
+    list.Select = ComboBox_ListItemSelect;
+    list.ClearSelection = ComboBox_ListClearSelection;
+    list.KeyAccess = ComboBox_ListKeyAccess;
+    list.FireTextChange = ComboBox_ListFireTextChange;
+    list.onchange = null;
+    list.onclick = function(e){ this.Select(e); this.ClearSelection(); this.FireTextChange(); };
+    list.onkeyup = function(e) { this.KeyAccess(e); };
+    list.EnableBlur(null);
+    list.style.position = "absolute";
+    list.style.zIndex = 200;
+    list.size = ComboBox_GetListSize( list );
+    list.IsShowing = true;
+    list.Hide();
+    
+}
+function ComboBox_InitEvent( e ) {
+    if( typeof( e ) == "undefined" && typeof( window.event ) != "undefined" ) e = window.event;
+    if( e == null ) e = new Object();
+    return e;
+}
+function ComboBox_ListClearSelection() {
+            if ( typeof( this.Container.Text.createTextRange ) == "undefined" ) return;
+    var rNew = this.Container.Text.createTextRange();
+    rNew.moveStart('character', this.Container.Text.value.length) ;
+    rNew.select();
+}
+function ComboBox_GetListSize( theList ) {
+    ComboBox_EnsureListSize( theList );
+    return theList.listSize;
+}
+function ComboBox_EnsureListSize( theList ) {
+    if ( typeof( theList.listSize ) == "undefined" ) {
+        if( typeof( theList.getAttribute ) != "undefined" ) {
+            if( theList.getAttribute( "listSize" ) != null && theList.getAttribute( "listSize" ) != "" ) {
+                theList.listSize = theList.getAttribute( "listSize" );
+                return;
+            }
+        }
+        if( theList.options.length > 0 ) {
+            theList.listSize = theList.options.length;
+            return;
+        }
+        theList.listSize = 4;
+    }
+}
+function ComboBox_ListKeyAccess(e) { //Make enter/space and escape do the right thing :)
+    e = ComboBox_InitEvent( e );
+    if( e.keyCode == 13 || e.keyCode == 32 ) {
+        this.Select();
+        return;
+    }
+    if( e.keyCode == 27 ) {
+        this.Hide();
+        this.Container.Text.focus();
+        return;
+    }
+}
+function ComboBox_TextKeyAccess(e) { //Make alt+arrow expand the list
+    e = ComboBox_InitEvent( e );
+    if( e.altKey && (e.keyCode == 38 || e.keyCode == 40) ) {
+            this.Container.List.Show();
+    }
+}
+function ComboBox_TextTypeDown(e) { //Make the textbox do a type-down on the list
+    e = ComboBox_InitEvent( e );
+    var items = this.Container.List.options;
+    if( this.value == "" ) return;
+    var ctrlKeys = Array( 8, 46, 37, 38, 39, 40, 33, 34, 35, 36, 45, 16, 20 );
+    for( var i = 0; i < ctrlKeys.length; i++ ) {
+        if( e.keyCode == ctrlKeys[i] ) return;
+    }
+    for( var i = 0; i < items.length; i++ ) {
+        var item = items[i];
+        if( item.text.toLowerCase().indexOf( this.value.toLowerCase() ) == 0 ) {
+            this.Container.List.selectedIndex = i;
+            if ( typeof( this.Container.Text.createTextRange ) != "undefined" ) {
+                                    this.Container.List.Select();
+                            }
+            break;
+        }
+    }
+}
+function ComboBox_ListFireTextChange() {
+    var textOnChange = this.Container.Text.onchange;
+            if ( textOnChange != null && typeof(textOnChange) == "function" ) {
+                    textOnChange();
+            }
+}
+function ComboBox_ListEnableBlur(e) {
+    this.onblur = this.Hide;
+}
+function ComboBox_ListDisableBlur(e) {
+    this.onblur = null;
+}
+function ComboBox_ListItemSelect(e) {
+    if( this.options.length > 0 ) {
+        var text = this.Container.Text;
+        var oldValue = text.value;
+        var newValue = this.options[ this.selectedIndex ].text;
+        text.value = newValue;
+        if ( typeof( text.createTextRange ) != "undefined" ) {
+            if (newValue != oldValue) {
+                var rNew = text.createTextRange();
+                rNew.moveStart('character', oldValue.length) ;
+                rNew.select();
+            }
+        }
+    }
+    this.Hide();
+    this.Container.Text.focus();
+}
+function ComboBox_ToggleList(e) {
+    if( this.Container.List.IsShowing == true ) {
+        this.Container.List.Hide();
+    } else {
+        this.Container.List.Show();
+    }
+}
+function ComboBox_ShowList(e) {
+    if ( !this.IsShowing && !this.disabled ) {
+        this.style.width = ( this.Container.offsetWidth ) + "px";
+        this.style.top = ( this.Container.offsetHeight + ComboBox_RecursiveOffsetTop(this.Container,true) ) + "px";
+        this.style.left = ( ComboBox_RecursiveOffsetLeft(this.Container,true) ) + "px";
+        ComboBox_SetVisibility(this,true);
+        this.focus();
+        this.IsShowing = true;
+    }
+}
+function ComboBox_HideList(e) {
+    if( this.IsShowing ) {
+                    ComboBox_SetVisibility(this,false);
+        this.IsShowing = false;
+    }
+}
+function ComboBox_SetVisibility(theList,isVisible) {
+    var isIE = ( typeof( theList.dataSrc ) != "undefined" ); // dataSrc is an IE-only property which is unlikely to be supported elsewhere
+    var ua = navigator.userAgent.toLowerCase(); 
+    var isSafari = (ua.indexOf('safari') != - 1);
+    if ( isIE || isSafari) {
+        if ( isVisible ) {
+            theList.style.visibility = "visible";
+        } else {
+            theList.style.visibility = "hidden";
+        }
+    } else { 
+        if ( isVisible ) {
+            theList.style.display = "block";
+        } else {
+            theList.style.display = "none";
+        }
+    }
+}
+function ComboBox_RecursiveOffsetTop(thisObject,isFirst) {
+    if(thisObject.offsetParent) {
+        if ( thisObject.style.position == "absolute" && !isFirst && typeof(document.designMode) != "undefined" ) {
+            return 0;
+        }
+        return (thisObject.offsetTop + ComboBox_RecursiveOffsetTop(thisObject.offsetParent,false));
+    } else {
+        return thisObject.offsetTop;
+    }
+}
+function ComboBox_RecursiveOffsetLeft(thisObject,isFirst) {
+    if(thisObject.offsetParent) {
+        if ( thisObject.style.position == "absolute" && !isFirst && typeof(document.designMode) != "undefined" ) {
+            return 0;
+        }
+        return (thisObject.offsetLeft + ComboBox_RecursiveOffsetLeft(thisObject.offsetParent,false));
+    } else {
+        return thisObject.offsetLeft;
+    }
+}
+function ComboBox_SimpleAttach(selectElement,textElement) {
+    textElement.value = selectElement.options[ selectElement.options.selectedIndex ].text;
+    var textOnChange = textElement.onchange;
+    if ( textOnChange != null && typeof( textOnChange ) == "function" ) {
+        textOnChange();
+    }
+}

Added: rt/branches/3.5-TESTING/html/NoAuth/js/list.js
==============================================================================
--- (empty file)
+++ rt/branches/3.5-TESTING/html/NoAuth/js/list.js	Wed Jul  6 12:24:59 2005
@@ -0,0 +1,112 @@
+/* by TKirby, released under GPL */
+/* Define the "list" Class */
+Class("list").define({
+ name : null,
+ xml  : null,
+ sels : null,
+ list : function (src, esrc, name) { this.init(src, esrc, name); },
+ read : function () {
+     var i		= 0;
+     if(this.xml.readyState!=4) { setTimeout(this.name+".read()", 100); }
+     else if(this.xml.status!=200) alert("Document not available.");
+     else {
+	 var doc	= this.xml.responseXML;
+	 var nNode	= null;
+	 if(doc.childNodes[0].nodeName=="parseerror") alert("Parse Error.");
+	 doc		= doc.getElementsByTagName("list")[0];
+	 for(i=0;i<doc.childNodes.length;i++) {
+	     if(doc.childNodes[i].childNodes.length>0) {
+		 nNode	= document.createElement("option");
+		 nNode.appendChild(document.createTextNode(doc.childNodes[i].childNodes[0].nodeValue));
+		 this.sels[0].appendChild(nNode);
+	     }
+	 }
+     }
+ },
+     
+ init : function (src,esrc,name) {
+     if(!src) return;
+     this.name		= name;
+     this.sels		= new Array();
+     var i			= 0;
+     for(i=0;i<src.childNodes.length;i++) {
+	 if(src.childNodes[i].nodeName=="select" || src.childNodes[i].nodeName=="SELECT") {
+	     this.sels.push(src.childNodes[i]);
+	 } 
+
+	 if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
+	    && (src.childNodes[i].name=="fromjs")) {
+	     src.childNodes[i].value = 1;
+	 }
+
+	 if((src.childNodes[i].nodeName=="input" || src.childNodes[i].nodeName=="INPUT")
+	    && (src.childNodes[i].type=="submit" || src.childNodes[i].type=="SUBMIT")) {
+
+	     if (src.childNodes[i].name.indexOf("Save") < 0) {
+		 var tmp	= document.createElement("input");
+		 tmp.type	= "button";
+		 tmp.name	= src.childNodes[i].name;
+		 tmp.value	= src.childNodes[i].value;
+		 src.replaceChild(tmp,src.childNodes[i]);
+	     }
+
+	     if(src.childNodes[i].name=="add")
+		 src.childNodes[i].onclick = new Function(this.name+".add();");
+	     if(src.childNodes[i].name=="remove") 
+		 src.childNodes[i].onclick = new Function(this.name+".remove();");
+	     if(src.childNodes[i].name=="moveup") 
+		 src.childNodes[i].onclick = new Function(this.name+".moveup();");
+	     if(src.childNodes[i].name=="movedown") 
+		 src.childNodes[i].onclick = new Function(this.name+".movedown();");
+	 } 
+     }
+     if (esrc) {
+	 this.xml	= (window.navigator.appName!="Microsoft Internet Explorer"
+			   ?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
+	 this.xml.open("GET", esrc);
+	 this.xml.send("");
+	 setTimeout(this.name+".read()", 100);
+     }
+ },
+     
+ add : function() {
+     var i, j 	= 0;
+     var dNode	= null;
+     for(i=0;i<this.sels[0].length;i++) if(this.sels[0][i].selected) {
+	 for(j=0;j<this.sels[1].length;j++) if(this.sels[1][j].value==this.sels[0][i].value) break;
+	 if(j==this.sels[1].length) dNode	= this.sels[0][i].cloneNode(true), 
+					this.sels[1].appendChild(dNode);
+     }
+ },
+
+ moveup : function() { this.move(-1); },
+ movedown : function() { this.move(1); },
+ move : function(v) {
+  var i		= 0;
+  if(v<0) for(i=0;i<this.sels[1].length;i++) this.moveOne(v, i);
+  else if(v>0) for(i=this.sels[1].length-1;i>=0;i--)this.moveOne(v, i);
+ },
+
+ moveOne : function(v, i) {
+  var ins	= v + i;
+  if(ins<0 || ins>=this.sels[1].length) return;
+  if(this.sels[1][ins].selected) return;
+  if(this.sels[1][i].selected) {
+   Node		= this.sels[1][i];
+   this.sels[1].removeChild(Node);
+   this.sels[1].insertBefore(Node, this.sels[1][ins]);
+  }
+ },
+
+ remove : function() {
+  var i		= 0;
+  for(i=this.sels[1].length-1;i>=0;i--) if(this.sels[1][i].selected) 
+   this.sels[1].removeChild(this.sels[1][i]);
+ },
+
+ selectAll: function() {
+  var i		= 0;
+  for(i=0;i<this.sels[0].length;i++) this.sels[0][i].selected = false;
+  for(i=0;i<this.sels[1].length;i++) this.sels[1][i].selected = true;
+ }
+});

Modified: rt/branches/3.5-TESTING/html/Widgets/ComboBox
==============================================================================
--- rt/branches/3.5-TESTING/html/Widgets/ComboBox	(original)
+++ rt/branches/3.5-TESTING/html/Widgets/ComboBox	Wed Jul  6 12:24:59 2005
@@ -44,7 +44,7 @@
 %# 
 %# END BPS TAGGED BLOCK }}}
 <nobr>
-<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/combobox.js"></script>
+<script type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/combobox.js"></script>
 
 <span id="<% $Name %>_Container">
 <input name="<% $Name %>" id="<% $Name %>" value="<% $Default %>" type="text" <% $Size ? "size='$Size'" : '' |n %> autocomplete="off" />


More information about the Rt-commit mailing list