logo       

mantisbt/javascript addLoadEvent.js,NONE,1.1 dynamic_filters.js,NONE,1.1 xm: msg#00037

Subject: mantisbt/javascript addLoadEvent.js,NONE,1.1 dynamic_filters.js,NONE,1.1 xmlhttprequest.js,NONE,1.1
Update of /cvsroot/mantisbt/mantisbt/javascript
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18902/javascript

Added Files:
        addLoadEvent.js dynamic_filters.js xmlhttprequest.js 
Log Message:
added contribution for 0004315: Show filter without reloading whole page
added config $g_dhtml_filters defaulting to OFF


--- NEW FILE: dynamic_filters.js ---
/* 
 * Mantis - a php based bugtracking system
 * Copyright (C) 2000 - 2002  Kenzaburo Ito - 
kenito-J7RQz27tXwtAfugRpC6u6w@xxxxxxxxxxxxxxxx
 * Copyright (C) 2002 - 2004  Mantis Team   - 
mantisbt-dev-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@xxxxxxxxxxxxxxxx
 * This program is distributed under the terms and conditions of the GPL
 * See the README and LICENSE files for details
 *
 * --------------------------------------------------------
 * $Id: dynamic_filters.js,v 1.1 2004/12/12 14:10:38 thraxisp Exp $
 * --------------------------------------------------------
 */
/*
// +----------------------------------------------------------------------+
// | Orginial Code Care Of:                                               |
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 Bitflux GmbH                                      |
// +----------------------------------------------------------------------+
// | Licensed under the Apache License, Version 2.0 (the "License");      |
// | you may not use this file except in compliance with the License.     |
// | You may obtain a copy of the License at                              |
// | http://www.apache.org/licenses/LICENSE-2.0                           |
// | Unless required by applicable law or agreed to in writing, software  |
// | distributed under the License is distributed on an "AS IS" BASIS,    |
// | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or      |
// | implied. See the License for the specific language governing         |
// | permissions and limitations under the License.                       |
// +----------------------------------------------------------------------+
// | Author: Bitflux GmbH <devel-zfZwwz/hh/hyDzI6CaY1VQ@xxxxxxxxxxxxxxxx>       
                       |
// |         http://blog.bitflux.ch/p1735.html                            |
// +----------------------------------------------------------------------+
//
//
// +----------------------------------------------------------------------+
// | Heavily Modified by Jeff Minard (07/09/04)                           |
// +----------------------------------------------------------------------+
// | Same stuff as above, yo!                                             |
// +----------------------------------------------------------------------+
// | Author: Jeff Minard <jeff-js-1MmlY/ymX0P9RPGrWp62eA@xxxxxxxxxxxxxxxx>      
                 |
// |         http://www.creatimation.net                                  |
// |         http://www.creatimation.net/journal/live-request             |
// +----------------------------------------------------------------------+
//
// +----------------------------------------------------------------------+
// | What is this nonsense?? (07/09/04)                                   |
// +----------------------------------------------------------------------+
// | This is a script that, by using XMLHttpRequest javascript objects    |
// | you can quickly add some very click live interactive feed back to    |
// | your pages that reuire server side interaction.                      |
// |                                                                      |
// | For instance, you use this to emulate a "live searching" feature     |
// | wherein users type in key phrases, and once they have stopped typing |
// | the script will automatically search and retrive *without* a page    |
// | reload.
// |                                                                      |
// | In another instance, I use this to product live comments by passing  |
// | the text to a Textile class that parses it to valid HTML. After      |
// | parsing, the html is returned and displayed on the page as the       |
// | user types.                                                          | 
// +----------------------------------------------------------------------+
//
//
// +----------------------------------------------------------------------+
// | Modified by Lee O'Mara <lomara-O8glSrxzjJo@xxxxxxxxxxxxxxxx>               
   12/08/2004 |
// +----------------------------------------------------------------------+
// | Hacked apart Jeff's script for use in Mantis.                        |
// |                                                                      |
// | This script gets filters from the server and displays them without   |
// | reloading the page.                                                  |
// |                                                                      |
// | The script tries to follow the notion of "unobtrusive javascript".   |
// | There are no event handlers in the HTML code. The events are added   |
// | on pageload(based on specific id names).                             |
// +----------------------------------------------------------------------+
//
//
*/

        
var processURI    = './return_dynamic_filters.php';
var liveReq = false;

// on !IE we only have to initialize it once
if (window.XMLHttpRequest) {
        liveReq = new XMLHttpRequest();
}

/**
 * Build the XMLHttpRequest and send it
 */
function liveReqDoReq() {

        if (liveReq && liveReq.readyState < 4) {
                liveReq.abort();
        }

        if (window.XMLHttpRequest) {
                // branch for IE/Windows ActiveX version
        } else if (window.ActiveXObject) {
                liveReq = new ActiveXObject("Microsoft.XMLHTTP");
        }
        
        name = this.id;
        liveReq.onreadystatechange = function(){liveReqProcessReqChange(name);};
        liveReq.open("GET", processURI + "?filter_target=" + this.id);

        // show "Loading..." while waiting
        document.getElementById(this.id+'_target').innerHTML = string_loading;

        liveReq.send(null);

        return false;
}

/**
 * Processes the results of the XMLHttpRequest
 */
function liveReqProcessReqChange(name) {
        if (liveReq.readyState == 4) {
                document.getElementById(name+'_target').innerHTML = 
liveReq.responseText;
                replaceWithContent(name);
        }
}

/**
 * Strip the tag, leave the content.
 */
function replaceWithContent(id){
        tag = document.getElementById(id);      
        if (!tag) return false;
        t_parent = tag.parentNode;
        if (!t_parent) return false;
        for(var i=0; i <tag.childNodes.length; i++){
                child = tag.childNodes[i].cloneNode(true);
                t_parent.insertBefore(child, tag);
        }
        t_parent.removeChild(tag);
}

/**
 * Initialise the filter links
 */
function labelInit(){
        // keep browsers that don't support DOM or 
        // XMLHttpRequest from getting in trouble
        if (document.getElementById &&  (window.XMLHttpRequest || 
window.ActiveXObject)) {
                
                t_form = document.getElementById("filters_form");
                if (!t_form) return false;
                t_links = t_form.getElementsByTagName("a");
                if (!t_links) return false;
                
                for(var i=0; i < t_links.length; i++){
                        var t_link = t_links[i];
                        if (t_link.id.substring((t_link.id.length - 7), 
t_link.id.length) == "_filter"){
                                // only attach event handler if a target is 
found
                                if 
(document.getElementById(t_link.id+'_target')){
                                        // setup the event handler
                                        t_link.onclick = liveReqDoReq;
                                } else {
                                        alert("missing target for:" +t_link.id);
                                }
                        }
                }
        }
}

addLoadEvent(labelInit);
--- NEW FILE: addLoadEvent.js ---
/* 
 * Mantis - a php based bugtracking system
 * Copyright (C) 2000 - 2002  Kenzaburo Ito - 
kenito-J7RQz27tXwtAfugRpC6u6w@xxxxxxxxxxxxxxxx
 * Copyright (C) 2002 - 2004  Mantis Team   - 
mantisbt-dev-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@xxxxxxxxxxxxxxxx
 * This program is distributed under the terms and conditions of the GPL
 * See the README and LICENSE files for details
 *
 * --------------------------------------------------------
 * $Id: addLoadEvent.js,v 1.1 2004/12/12 14:10:38 thraxisp Exp $
 * --------------------------------------------------------
 */
/*
Care Of: 
                Simon Willison
                http://simon.incutio.com/archive/2004/05/26/addLoadEvent
                Thnx Dude!

******** USEAGE ********************************
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
  // more code to run on page load 
});
*/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}
--- NEW FILE: xmlhttprequest.js ---
/* 
 * Mantis - a php based bugtracking system
 * Copyright (C) 2000 - 2002  Kenzaburo Ito - 
kenito-J7RQz27tXwtAfugRpC6u6w@xxxxxxxxxxxxxxxx
 * Copyright (C) 2002 - 2004  Mantis Team   - 
mantisbt-dev-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@xxxxxxxxxxxxxxxx
 * This program is distributed under the terms and conditions of the GPL
 * See the README and LICENSE files for details
 *
 * --------------------------------------------------------
 * $Id: xmlhttprequest.js,v 1.1 2004/12/12 14:10:38 thraxisp Exp $
 * --------------------------------------------------------
 */
/*

Cross-Browser XMLHttpRequest v1.1
=================================

Emulate Gecko 'XMLHttpRequest()' functionality in IE and Opera. Opera requires
the Sun Java Runtime Environment <http://www.java.com/>.

by Andrew Gregory
http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/

This work is licensed under the Creative Commons Attribution License. To view a
copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or send
a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA.

Not Supported in Opera
----------------------
* user/password authentication
* responseXML data member

Not Fully Supported in Opera
----------------------------
* async requests
* abort()
* getAllResponseHeaders(), getAllResponseHeader(header)
*/

/* 
 * commented out (30/07/2004) because it was causing subsequent request to 
freeze
// IE support
if (window.ActiveXObject && !window.XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    return new ActiveXObject((navigator.userAgent.toLowerCase().indexOf('msie 
5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP');
  };
}
*/

// Gecko support
/* ;-) */
// Opera support
if (window.opera && !window.XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    this.readyState = 0; // 
0=uninitialized,1=loading,2=loaded,3=interactive,4=complete
    this.status = 0; // HTTP status codes
    this.statusText = '';
    this._headers = [];
    this._aborted = false;
    this._async = true;
    this.abort = function() {
      this._aborted = true;
    };
    this.getAllResponseHeaders = function() {
      return this.getAllResponseHeader('*');
    };
    this.getAllResponseHeader = function(header) {
      var ret = '';
      for (var i = 0; i < this._headers.length; i++) {
        if (header == '*' || this._headers[i].h == header) {
          ret += this._headers[i].h + ': ' + this._headers[i].v + '\n';
        }
      }
      return ret;
    };
    this.setRequestHeader = function(header, value) {
      this._headers[this._headers.length] = {h:header, v:value};
    };
    this.open = function(method, url, async, user, password) {
      this.method = method;
      this.url = url;
      this._async = true;
      this._aborted = false;
      if (arguments.length >= 3) {
        this._async = async;
      }
      if (arguments.length > 3) {
        // user/password support requires a custom Authenticator class
        opera.postError('XMLHttpRequest.open() - user/password not supported');
      }
      this._headers = [];
      this.readyState = 1;
      if (this.onreadystatechange) {
        this.onreadystatechange();
      }
    };
    this.send = function(data) {
      if (!navigator.javaEnabled()) {
        alert("XMLHttpRequest.send() - Java must be installed and enabled.");
        return;
      }
      if (this._async) {
        setTimeout(this._sendasync, 0, this, data);
        // this is not really asynchronous and won't execute until the current
        // execution context ends
      } else {
        this._sendsync(data);
      }
    }
    this._sendasync = function(req, data) {
      if (!req._aborted) {
        req._sendsync(data);
      }
    };
    this._sendsync = function(data) {
      this.readyState = 2;
      if (this.onreadystatechange) {
        this.onreadystatechange();
      }
      // open connection
      var url = new java.net.URL(new java.net.URL(window.location.href), 
this.url);
      var conn = url.openConnection();
      for (var i = 0; i < this._headers.length; i++) {
        conn.setRequestProperty(this._headers[i].h, this._headers[i].v);
      }
      this._headers = [];
      if (this.method == 'POST') {
        // POST data
        conn.setDoOutput(true);
        var wr = new java.io.OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        wr.close();
      }
      // read response headers
      // NOTE: the getHeaderField() methods always return nulls for me :(
      var gotContentEncoding = false;
      var gotContentLength = false;
      var gotContentType = false;
      var gotDate = false;
      var gotExpiration = false;
      var gotLastModified = false;
      for (var i = 0; ; i++) {
        var hdrName = conn.getHeaderFieldKey(i);
        var hdrValue = conn.getHeaderField(i);
        if (hdrName == null && hdrValue == null) {
          break;
        }
        if (hdrName != null) {
          this._headers[this._headers.length] = {h:hdrName, v:hdrValue};
          switch (hdrName.toLowerCase()) {
            case 'content-encoding': gotContentEncoding = true; break;
            case 'content-length'  : gotContentLength   = true; break;
            case 'content-type'    : gotContentType     = true; break;
            case 'date'            : gotDate            = true; break;
            case 'expires'         : gotExpiration      = true; break;
            case 'last-modified'   : gotLastModified    = true; break;
          }
        }
      }
      // try to fill in any missing header information
      var val;
      val = conn.getContentEncoding();
      if (val != null && !gotContentEncoding) 
this._headers[this._headers.length] = {h:'Content-encoding', v:val};
      val = conn.getContentLength();
      if (val != -1 && !gotContentLength) this._headers[this._headers.length] = 
{h:'Content-length', v:val};
      val = conn.getContentType();
      if (val != null && !gotContentType) this._headers[this._headers.length] = 
{h:'Content-type', v:val};
      val = conn.getDate();
      if (val != 0 && !gotDate) this._headers[this._headers.length] = 
{h:'Date', v:(new Date(val)).toUTCString()};
      val = conn.getExpiration();
      if (val != 0 && !gotExpiration) this._headers[this._headers.length] = 
{h:'Expires', v:(new Date(val)).toUTCString()};
      val = conn.getLastModified();
      if (val != 0 && !gotLastModified) this._headers[this._headers.length] = 
{h:'Last-modified', v:(new Date(val)).toUTCString()};
      // read response data
      var reqdata = '';
      var stream = conn.getInputStream();
      if (stream) {
        var reader = new java.io.BufferedReader(new 
java.io.InputStreamReader(stream));
        var line;
        while ((line = reader.readLine()) != null) {
          if (this.readyState == 2) {
            this.readyState = 3;
            if (this.onreadystatechange) {
              this.onreadystatechange();
            }
          }
          reqdata += line + '\n';
        }
        reader.close();
        this.status = 200;
        this.statusText = 'OK';
        this.responseText = reqdata;
        this.readyState = 4;
        if (this.onreadystatechange) {
          this.onreadystatechange();
        }
        if (this.onload) {
          this.onload();
        }
      } else {
        // error
        this.status = 404;
        this.statusText = 'Not Found';
        this.responseText = '';
        this.readyState = 4;
        if (this.onreadystatechange) {
          this.onreadystatechange();
        }
        if (this.onerror) {
          this.onerror();
        }
      }
    };
  };
}
// ActiveXObject emulation
if (!window.ActiveXObject && window.XMLHttpRequest) {
  window.ActiveXObject = function(type) {
    switch (type.toLowerCase()) {
      case 'microsoft.xmlhttp':
      case 'msxml2.xmlhttp':
        return new XMLHttpRequest();
    }
    return null;
  };
}


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
audio.irate.dev...    yellowdog.gener...    ietf.ips/2002-0...    xfree86.fonts/2...    busybox/2003-07...    emacs.jdee/2004...    linux.mandrake....    hardware.microc...    user-groups.lin...    science.analysi...    version-control...    db.filemaker.de...    cluster.openmos...    mail.eyebrowse....    text.xml.xerces...    kde.devel.kwrit...    finance.moneyda...    gcc.regression/...    network.routing...    os.freebsd.deve...    recreation.radi...    qnx.openqnx.dev...    python.xml/2002...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe