Subversion Repositories eFlore/Archives.eflore-xul

Rev

Rev 12 | Blame | Compare with Previous | Last modification | View Log | RSS feed

var projects = new Array( );
var projectID = "";
var selectID = "";

function project_view( ) {
  return openTopWin( "http://freshmeat.net/projects/" + selectID + "/" );
}

function project_home( ) {
  if( projects[selectID]["url_homepage"] ) {
    return openTopWin( projects[selectID]["url_homepage"] );
  }
}

function project_info( ) {
  alert( projects[selectID]["name_full"] + "\n" +  projects[selectID]["desc_full"] + "\n Added : " +  projects[selectID]["date_added"] + "\n" + "Update : " +  projects[selectID]["date_updated" ] );
}

function search( ) {
  projects = new Array( );
  projectID = "";
  selectID = ""; 
  document.getElementById( "loadprogress" ).setAttribute("mode","undetermined");

  var rootNode = document.getElementById( "root" );
  removeNode( rootNode, rootNode, 0 );

  var search = document.getElementById( "prjfind" ).value;
  var url = "http://freshmeat.net/search-xml/?q=" + search;
  
  connectionType = "direct";
  timeOut = 120;
  connection( url );
}

function parseCallback( xml ) {
  var DOM = new DOMParser().parseFromString( xml, 'text/xml' );
  try {
    var rootNodes = DOM.getElementsByTagName( 'search-results' );
    var rootNode = rootNodes.item( 0 );
  
    parseNode( rootNode );
  } catch(e) {
    alert( "Parse error : " + e );
  }

}

function parseNode( node ) {
  var nodes = node.childNodes;
  var i;
  
  for( i=0; i<nodes.length; i++ ) {
    child = nodes.item(i);
    if( child.nodeName == "match" ) {
      var childs = child.childNodes;
      var project = new Array( );

      var j;
      for( j = 0; j < childs.length; j++ ) {
        childchild = childs.item(j);
        if( childchild.firstChild ) {
          switch( childchild.nodeName ) {
            case "projectname_short":
                project["name_short"] = childchild.firstChild.nodeValue;
              break;
            case "projectname_full":
                project["name_full"] = childchild.firstChild.nodeValue;
              break;
            case "desc_short":
                project["desc_short"] = childchild.firstChild.nodeValue;
              break;
            case "desc_full":
                project["desc_full"] = childchild.firstChild.nodeValue;
              break;
            case "url_homepage":
                project["url_homepage"] = childchild.firstChild.nodeValue;
              break;
            case "date_added":
                project["date_added"] = childchild.firstChild.nodeValue;
              break;
            case "date_updated":
                project["date_updated"] = childchild.firstChild.nodeValue;
              break;
            case "project_id":
                project["project_id"] = childchild.firstChild.nodeValue;
              break;
            default:
              break;
          }
        }
      }
      
      projects[project["name_short"]] = new Array( );
      projects[project["name_short"]] = project;

      var children = document.getElementById( "root" );
      
      var item = document.createElement ("treeitem");
      item.setAttribute ("id", project["name_short"]);
      
      var row  = document.createElement ("treerow");
      
      var cellname = document.createElement ("treecell");
      cellname.setAttribute ("label", project["name_full"]);
      var celldesc = document.createElement ("treecell");
      celldesc.setAttribute ("label", project["desc_short"]);
      
      row.appendChild (cellname);
      row.appendChild (celldesc);
      item.appendChild (row);
      children.appendChild( item );

    }
  }
  document.getElementById( "loadprogress" ).setAttribute("mode","determined");
}

function removeNode( node, parent, bdel ) {
  var nodes = node.childNodes;

  var i;
  for( i=0; i<nodes.length; i++ ) {
    child = nodes.item(i);
    removeNode( child, node, 1 );
    node.removeChild( child );
  }

  if( bdel == 1 ) {
    parent.removeChild( node );
  }
}

function treeSelect( mbut ) {
  var tree = document.getElementById( "projectTree" );
  var numRanges = tree.view.selection.getRangeCount();
  var start = new Object();
  var end = new Object();
  tree.view.selection.getRangeAt(0,start,end);
      
  var dom = tree.view.getItemAtIndex( start.value );
  selectID = dom.getAttributeNode( "id" ).value;
      
  if( mbut == 0 ) { 
    if( projectID != selectID ) {
      projectID = selectID;
      var url = "http://freshmeat.net/projects/" + projectID + "/";
      openTopWin( url );
    }   
  }   
}   

// ----------------------------------------------------------------------------

function openTopWin( url )
{
    if ((url == null) || (url == "")) return null;

    if (url == "") {
        url = "about:blank";
    }

    var topWindowOfType = getTopWin();
    if ( topWindowOfType )
    {
        topWindowOfType.focus();
        topWindowOfType.loadURI(url);
        return topWindowOfType;
    }
    return window.openDialog( getBrowserURL(), "_blank", "chrome,all,dialog=no", url );
}

function getTopWin()
{
    var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
    var windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
    var topWindowOfType = windowManagerInterface.getMostRecentWindow( "navigator:browser" );

    if (topWindowOfType) {
        return topWindowOfType;
    }
    return null;
}

function getBrowserURL() {

  try {
    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
                         .getService(Components.interfaces.nsIPrefBranch);
    var url = prefs.getCharPref("browser.chromeURL");
    if (url)
      return url;
  } catch(e) {
  }
  return "chrome://navigator/content/navigator.xul";
}