mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged DEV\EXTENSIONS to HEAD
svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/DEV/EXTENSIONS@4865 svn://svn.alfresco.com:3691/alfresco/BRANCHES/DEV/EXTENSIONS@4866 . svn merge svn://svn.alfresco.com:3691/alfresco/BRANCHES/DEV/EXTENSIONS@4872 svn://svn.alfresco.com:3691/alfresco/BRANCHES/DEV/EXTENSIONS@4884 . Dave and Gavin's search work git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4899 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// Alfresco AJAX support library
|
||||
// Alfresco JavaScript support library
|
||||
// Gavin Cornwell 14-07-2006
|
||||
//
|
||||
|
||||
@@ -53,3 +53,146 @@ function getContextPath()
|
||||
|
||||
return _alfContextPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single child element with the given tag
|
||||
* name from the given parent. If more than one tag
|
||||
* exists the first one is returned, if none exist null
|
||||
* is returned.
|
||||
*/
|
||||
function getElementByTagName(elParent, tagName)
|
||||
{
|
||||
var el = null;
|
||||
|
||||
if (elParent != null && tagName != null)
|
||||
{
|
||||
var elems = elParent.getElementsByTagName(tagName);
|
||||
if (elems != null && elems.length > 0)
|
||||
{
|
||||
el = elems[0];
|
||||
}
|
||||
}
|
||||
|
||||
return el;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single child element with the given tag
|
||||
* name and namespace from the given parent.
|
||||
* If more than one tag exists the first one is returned,
|
||||
* if none exist null is returned.
|
||||
*/
|
||||
function getElementByTagNameNS(elParent, nsUri, nsPrefix, tagName)
|
||||
{
|
||||
var el = null;
|
||||
|
||||
if (elParent != null && tagName != null)
|
||||
{
|
||||
var elems = null;
|
||||
|
||||
if (elParent.getElementsByTagNameNS)
|
||||
{
|
||||
elems = elParent.getElementsByTagNameNS(nsUri, tagName);
|
||||
}
|
||||
else
|
||||
{
|
||||
elems = elParent.getElementsByTagName(nsPrefix + ":" + tagName);
|
||||
}
|
||||
|
||||
if (elems != null && elems.length > 0)
|
||||
{
|
||||
el = elems[0];
|
||||
}
|
||||
}
|
||||
|
||||
return el;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text of the given DOM element object
|
||||
*/
|
||||
function getElementText(el)
|
||||
{
|
||||
var txt = null;
|
||||
|
||||
if (el.text != undefined)
|
||||
{
|
||||
// get text using IE specific property
|
||||
txt = el.text;
|
||||
}
|
||||
else
|
||||
{
|
||||
// use the W3C textContent property
|
||||
txt = el.textContent;
|
||||
}
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text content of a single child element
|
||||
* with the given tag name from the given parent.
|
||||
* If more than one tag exists the text of the first one
|
||||
* is returned, if none exist null is returned.
|
||||
*/
|
||||
function getElementTextByTagName(elParent, tagName)
|
||||
{
|
||||
var txt = null;
|
||||
|
||||
var el = getElementByTagName(elParent, tagName);
|
||||
if (el != null)
|
||||
{
|
||||
txt = getElementText(el);
|
||||
}
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the text a single child element with the given tag
|
||||
* name and namespace from the given parent.
|
||||
* If more than one tag exists the text of the first one is returned,
|
||||
* if none exist null is returned.
|
||||
*/
|
||||
function getElementTextByTagNameNS(elParent, nsUri, nsPrefix, tagName)
|
||||
{
|
||||
var txt = null;
|
||||
|
||||
var el = getElementByTagNameNS(elParent, nsUri, nsPrefix, tagName);
|
||||
if (el != null)
|
||||
{
|
||||
txt = getElementText(el);
|
||||
}
|
||||
|
||||
return txt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs a message to a debug log window.
|
||||
*
|
||||
* Example taken from http://ajaxcookbook.org/javascript-debug-log
|
||||
*/
|
||||
function log(message)
|
||||
{
|
||||
if (!log.window_ || log.window_.closed)
|
||||
{
|
||||
var win = window.open("", null, "width=400,height=200," +
|
||||
"scrollbars=yes,resizable=yes,status=no," +
|
||||
"location=no,menubar=no,toolbar=no");
|
||||
if (!win) return;
|
||||
var doc = win.document;
|
||||
doc.write("<html><head><title>Debug Log</title></head>" +
|
||||
"<body></body></html>");
|
||||
doc.close();
|
||||
log.window_ = win;
|
||||
}
|
||||
|
||||
var logLine = log.window_.document.createElement("div");
|
||||
logLine.appendChild(log.window_.document.createTextNode(message));
|
||||
log.window_.document.body.appendChild(logLine);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
686
source/web/scripts/ajax/opensearch.js
Normal file
686
source/web/scripts/ajax/opensearch.js
Normal file
@@ -0,0 +1,686 @@
|
||||
//
|
||||
// Alfresco OpenSearch library
|
||||
// Gavin Cornwell 09-01-2007
|
||||
//
|
||||
// NOTE: This script relies on common.js so therefore needs to be loaded
|
||||
// prior to this one on the containing HTML page.
|
||||
|
||||
var _OS_NS_PREFIX = "opensearch";
|
||||
var _OS_NS_URI = "http://a9.com/-/spec/opensearch/1.1/";
|
||||
|
||||
var _searchTermFieldId = null;
|
||||
var _pageSizeFieldId = null;
|
||||
|
||||
var _resultsDivId = "os-results";
|
||||
var _optionsDivId = "os-options";
|
||||
var _resultSetPanelId = "-osresults-panel";
|
||||
var _resultSetListId = "-osresults-list";
|
||||
var _resultSetPositionId = "-osresults-position";
|
||||
var _resultSetPagingId = "-osresults-paging";
|
||||
|
||||
var _engineEnabledId = "-engine-enabled";
|
||||
var _engines = [];
|
||||
var _enginesById = [];
|
||||
|
||||
/**
|
||||
* Define an object to hold the definition of an OpenSearch engine
|
||||
*/
|
||||
function OpenSearchEngine(id, label, url)
|
||||
{
|
||||
this.id = id;
|
||||
this.label = label;
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the field id of the search term input control
|
||||
*/
|
||||
function setSearchTermFieldId(id)
|
||||
{
|
||||
_searchTermFieldId = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the field id of the page size input control
|
||||
*/
|
||||
function setPageSizeFieldId(id)
|
||||
{
|
||||
_pageSizeFieldId = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers an OpenSearch engine to be called when performing queries
|
||||
*/
|
||||
function registerOpenSearchEngine(id, label, url)
|
||||
{
|
||||
var se = new OpenSearchEngine(id, label, url);
|
||||
_engines[_engines.length] = se;
|
||||
_enginesById[id] = se;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles the key press event, if ENTER is pressed execute the query
|
||||
*/
|
||||
function handleKeyPress(e)
|
||||
{
|
||||
var keycode;
|
||||
|
||||
// get the keycode
|
||||
if (window.event)
|
||||
{
|
||||
keycode = window.event.keyCode;
|
||||
}
|
||||
else if (e)
|
||||
{
|
||||
keycode = e.which;
|
||||
}
|
||||
|
||||
// if ENTER was pressed execute the query
|
||||
if (keycode == 13)
|
||||
{
|
||||
executeQuery();
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggles the visibility of the options panel
|
||||
*/
|
||||
function toggleOptions(icon)
|
||||
{
|
||||
var currentState = icon.className;
|
||||
var optionsDiv = document.getElementById(_optionsDivId);
|
||||
|
||||
if (currentState == "collapsed")
|
||||
{
|
||||
icon.src = getContextPath() + "/images/icons/expanded.gif";
|
||||
icon.className = "expanded";
|
||||
|
||||
// show the div holding the options
|
||||
if (optionsDiv != null)
|
||||
{
|
||||
optionsDiv.style.display = "block";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
icon.src = getContextPath() + "/images/icons/collapsed.gif";
|
||||
icon.className = "collapsed";
|
||||
|
||||
// hide the div holding the options
|
||||
if (optionsDiv != null)
|
||||
{
|
||||
optionsDiv.style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes the query against all the registered and selected opensearch engines
|
||||
*/
|
||||
function executeQuery()
|
||||
{
|
||||
// gather the required parameters
|
||||
var term = document.getElementById(_searchTermFieldId).value;
|
||||
var count = document.getElementById(_pageSizeFieldId).value;
|
||||
|
||||
// default the count if its invalid
|
||||
if (count.length == 0 || isNaN(count))
|
||||
{
|
||||
count = 5;
|
||||
}
|
||||
|
||||
// issue the queries if there is enough search criteria
|
||||
if (term != null && term.length > 1)
|
||||
{
|
||||
// issue the search request for each enabled engine
|
||||
for (var e = 0; e < _engines.length; e++)
|
||||
{
|
||||
// get the checkbox for the current engine
|
||||
var ose = _engines[e];
|
||||
var engCheckbox = document.getElementById(ose.id + _engineEnabledId);
|
||||
if (engCheckbox != null && engCheckbox.checked)
|
||||
{
|
||||
issueSearchRequest(ose, term, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Issues an Ajax request for the given OpenSearchEngine
|
||||
* using the given search term and page size.
|
||||
*/
|
||||
function issueSearchRequest(ose, term, pageSize)
|
||||
{
|
||||
// generate the search url
|
||||
var searchUrl = generateSearchUrl(ose.url, term, pageSize);
|
||||
|
||||
// issue the request
|
||||
if (searchUrl != null)
|
||||
{
|
||||
YAHOO.util.Connect.asyncRequest("GET", searchUrl,
|
||||
{
|
||||
success: processSearchResults,
|
||||
failure: handleSearchError,
|
||||
argument: [ose.id]
|
||||
},
|
||||
null);
|
||||
}
|
||||
else
|
||||
{
|
||||
handleErrorYahoo("Failed to generate url for search engine '" + ose.label +
|
||||
"'.\n\nThis is probably caused by missing required parameters, check the template url for the search engine.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a concrete url for the given template url and parameters.
|
||||
*
|
||||
* All parameters (inside { and }) have to be replaced. We only need to populate
|
||||
* the 'searchTerms' and 'count' parameters, all optional ones will use the
|
||||
* empty string. If there is a mandatory parameter present (other than searchTerms
|
||||
* and count) null will be returned.
|
||||
*/
|
||||
function generateSearchUrl(templateUrl, term, count)
|
||||
{
|
||||
var searchUrl = null;
|
||||
|
||||
// define regex pattern to look for params
|
||||
var pattern = /\{+\w*\}+|\{+\w*\?\}+|\{+\w*:\w*\}+|\{+\w*:\w*\?\}+/g;
|
||||
|
||||
var params = templateUrl.match(pattern);
|
||||
if (params != null && params.length > 0)
|
||||
{
|
||||
searchUrl = templateUrl;
|
||||
|
||||
// go through the parameters and replace the searchTerms and count
|
||||
// parameters with the given values and then replace all optional
|
||||
// parameters with an empty string.
|
||||
for (var p = 0; p < params.length; p++)
|
||||
{
|
||||
var param = params[p];
|
||||
|
||||
if (param == "{searchTerms}")
|
||||
{
|
||||
searchUrl = searchUrl.replace(param, term);
|
||||
}
|
||||
else if (param == "{count}" || param == "{count?}")
|
||||
{
|
||||
searchUrl = searchUrl.replace(param, count);
|
||||
}
|
||||
else if (param.indexOf("?") != -1)
|
||||
{
|
||||
// replace the optional parameter with ""
|
||||
searchUrl = searchUrl.replace(param, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
// an unknown manadatory parameter return
|
||||
searchUrl = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return searchUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the XML search results
|
||||
*/
|
||||
function processSearchResults(ajaxResponse)
|
||||
{
|
||||
try
|
||||
{
|
||||
// render the results from the Ajax response
|
||||
var engineId = ajaxResponse.argument[0];
|
||||
var feed = ajaxResponse.responseXML.documentElement;
|
||||
|
||||
// if the name of the feed element is "rss", get the channel child element
|
||||
if (feed.tagName == "rss")
|
||||
{
|
||||
feed = getElementByTagName(feed, "channel");
|
||||
}
|
||||
|
||||
var resultsDiv = renderSearchResults(engineId, feed);
|
||||
|
||||
// create the div to hold the results and add the results
|
||||
var resultsPanel = document.getElementById(_resultsDivId);
|
||||
if (resultsPanel != null)
|
||||
{
|
||||
// first remove any existing results
|
||||
while (resultsPanel.firstChild)
|
||||
{
|
||||
resultsPanel.removeChild(resultsPanel.firstChild);
|
||||
};
|
||||
|
||||
// add the new results
|
||||
resultsPanel.appendChild(resultsDiv);
|
||||
}
|
||||
else
|
||||
{
|
||||
alert("Failed to final results panel, unable to render search results!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
handleError(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the results for the given feed element.
|
||||
*/
|
||||
function renderSearchResults(engineId, feed)
|
||||
{
|
||||
// look up the label from the osengine registry
|
||||
var engineLabel = _enginesById[engineId].label;
|
||||
|
||||
// create the div to hold the results and the header bar
|
||||
var sb = [];
|
||||
sb[sb.length] = "<div id='";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = _resultSetPanelId;
|
||||
sb[sb.length] = "' class='osResults'>";
|
||||
sb[sb.length] = "<div class='osEngineTitle'><table cellpadding='0' cellspacing='0' width='100%'>";
|
||||
sb[sb.length] = "<tr><td class='osEngineTitleText'>";
|
||||
sb[sb.length] = engineLabel;
|
||||
sb[sb.length] = "</td><td id='";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = _resultSetPositionId;
|
||||
sb[sb.length] = "' class='osResultsPosition'>";
|
||||
sb[sb.length] = generatePostionHTML(feed);
|
||||
sb[sb.length] = "</td></tr></table></div>";
|
||||
|
||||
// create the actual results to display, start with the containing div
|
||||
sb[sb.length] = "<div id='";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = _resultSetListId;
|
||||
sb[sb.length] = "'>";
|
||||
sb[sb.length] = generateResultsListHTML(feed);
|
||||
sb[sb.length] = "</div>";
|
||||
|
||||
// create the paging controls
|
||||
sb[sb.length] = "<div id='";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = _resultSetPagingId;
|
||||
sb[sb.length] = "' class='osResultsPaging'>";
|
||||
sb[sb.length] = generatePagingHTML(engineId, feed);
|
||||
sb[sb.length] = "</div>";
|
||||
|
||||
// close the containing div
|
||||
sb[sb.length] = "</div>";
|
||||
|
||||
// create a div element to hold the results
|
||||
var d = document.createElement("div");
|
||||
d.innerHTML = sb.join("");
|
||||
|
||||
// return the div
|
||||
return d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows another page of the current search results for the
|
||||
* given engineId
|
||||
*/
|
||||
function showPage(engineId, url)
|
||||
{
|
||||
// execute the query and process the results
|
||||
YAHOO.util.Connect.asyncRequest("GET", url,
|
||||
{
|
||||
success: processShowPageResults,
|
||||
failure: handleSearchError,
|
||||
argument: [engineId]
|
||||
},
|
||||
null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes the search results and updates the postion, result list
|
||||
* and paging controls.
|
||||
*/
|
||||
function processShowPageResults(ajaxResponse)
|
||||
{
|
||||
try
|
||||
{
|
||||
// render the results from the Ajax response
|
||||
var engineId = ajaxResponse.argument[0];
|
||||
var feed = ajaxResponse.responseXML.documentElement;
|
||||
|
||||
// if the name of the feed element is "rss", get the channel child element
|
||||
if (feed.tagName == "rss")
|
||||
{
|
||||
feed = getElementByTagName(feed, "channel");
|
||||
}
|
||||
|
||||
// find the position div and update the count
|
||||
var positionDiv = document.getElementById(engineId + _resultSetPositionId);
|
||||
if (positionDiv != null)
|
||||
{
|
||||
positionDiv.innerHTML = generatePostionHTML(feed);
|
||||
}
|
||||
|
||||
// append the results list to the results list div
|
||||
var resultsListDiv = document.getElementById(engineId + _resultSetListId);
|
||||
if (resultsListDiv != null)
|
||||
{
|
||||
resultsListDiv.innerHTML = generateResultsListHTML(feed);
|
||||
}
|
||||
|
||||
// update the paging div with new urls
|
||||
var pagingDiv = document.getElementById(engineId + _resultSetPagingId);
|
||||
if (pagingDiv != null)
|
||||
{
|
||||
pagingDiv.innerHTML = generatePagingHTML(engineId, feed);
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
handleError(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the HTML required to display the current position i.e. "x - y of z".
|
||||
*/
|
||||
function generatePostionHTML(feed)
|
||||
{
|
||||
var totalResults = 0;
|
||||
var pageSize = 5;
|
||||
var startIndex = 0;
|
||||
|
||||
// extract position information from results
|
||||
var elTotalResults = getElementByTagNameNS(feed, _OS_NS_URI, _OS_NS_PREFIX, "totalResults");
|
||||
if (elTotalResults != null)
|
||||
{
|
||||
totalResults = getElementText(elTotalResults);
|
||||
}
|
||||
|
||||
// if there are no results just return an empty string
|
||||
if (totalResults == 0)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
var elStartIndex = getElementByTagNameNS(feed, _OS_NS_URI, _OS_NS_PREFIX, "startIndex");
|
||||
if (elStartIndex != null)
|
||||
{
|
||||
startIndex = getElementText(elStartIndex);
|
||||
}
|
||||
|
||||
var elItemsPerPage = getElementByTagNameNS(feed, _OS_NS_URI, _OS_NS_PREFIX, "itemsPerPage");
|
||||
if (elItemsPerPage != null)
|
||||
{
|
||||
pageSize = getElementText(elItemsPerPage);
|
||||
}
|
||||
|
||||
// calculate the number of pages the results span
|
||||
/*var noPages = Math.floor(totalResults / pageSize);
|
||||
var remainder = totalResults % pageSize;
|
||||
if (remainder != 0)
|
||||
{
|
||||
noPages++;
|
||||
}*/
|
||||
|
||||
// calculate the endIndex for this set of results
|
||||
var endIndex = (Number(startIndex) + Number(pageSize)) - 1;
|
||||
if (endIndex > totalResults)
|
||||
{
|
||||
endIndex = totalResults;
|
||||
}
|
||||
|
||||
// make sure the startIndex is correct
|
||||
if (totalResults == 0)
|
||||
{
|
||||
startIndex = 0;
|
||||
}
|
||||
|
||||
var sb = [];
|
||||
sb[sb.length] = startIndex;
|
||||
sb[sb.length] = " - ";
|
||||
sb[sb.length] = endIndex;
|
||||
sb[sb.length] = " of ";
|
||||
sb[sb.length] = totalResults;
|
||||
|
||||
return sb.join("");
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the HTML to display the search results from the
|
||||
* given feed.
|
||||
*/
|
||||
function generateResultsListHTML(feed)
|
||||
{
|
||||
var isAtom = true;
|
||||
|
||||
// if the name of the feed element is "channel" this is an RSS feed
|
||||
if (feed.tagName == "channel")
|
||||
{
|
||||
isAtom = false;
|
||||
}
|
||||
|
||||
var results = null;
|
||||
if (isAtom)
|
||||
{
|
||||
results = feed.getElementsByTagName("entry");
|
||||
}
|
||||
else
|
||||
{
|
||||
results = feed.getElementsByTagName("item");
|
||||
}
|
||||
|
||||
if (results == null || results.length == 0)
|
||||
{
|
||||
return "<div class='osResultNoMatch'>No results</div>";
|
||||
}
|
||||
else
|
||||
{
|
||||
var sb = [];
|
||||
sb[sb.length] = "<table cellpadding='0' cellspacing='0'>";
|
||||
|
||||
for (var x = 0; x < results.length; x++)
|
||||
{
|
||||
// get the current entry
|
||||
var elResult = results[x];
|
||||
|
||||
// get the title, icon and summary
|
||||
var title = getElementTextByTagName(elResult, "title");
|
||||
var icon = getElementTextByTagName(elResult, "icon");
|
||||
var summary = null;
|
||||
if (isAtom)
|
||||
{
|
||||
summary = getElementTextByTagName(elResult, "summary");
|
||||
}
|
||||
else
|
||||
{
|
||||
summary = getElementTextByTagName(elResult, "description");
|
||||
}
|
||||
|
||||
// get the link href
|
||||
var link = null;
|
||||
var elLink = getElementByTagName(elResult, "link");
|
||||
if (elLink != null)
|
||||
{
|
||||
if (isAtom)
|
||||
{
|
||||
link = elLink.getAttribute("href");
|
||||
}
|
||||
else
|
||||
{
|
||||
link = getElementText(elLink);
|
||||
}
|
||||
}
|
||||
|
||||
// generate the row to represent the result
|
||||
sb[sb.length] = "<tr><td valign='top'><div class='osResultIcon'>";
|
||||
if (icon != null)
|
||||
{
|
||||
sb[sb.length] = "<img src='";
|
||||
sb[sb.length] = icon;
|
||||
sb[sb.length] = "' />";
|
||||
}
|
||||
sb[sb.length] = "</div></td><td><div class='osResultTitle'>";
|
||||
if (title != null)
|
||||
{
|
||||
if (link != null)
|
||||
{
|
||||
sb[sb.length] = "<a target='_new' href='";
|
||||
sb[sb.length] = link;
|
||||
sb[sb.length] = "'>";
|
||||
}
|
||||
sb[sb.length] = title;
|
||||
if (link != null)
|
||||
{
|
||||
sb[sb.length] = "</a>";
|
||||
}
|
||||
}
|
||||
sb[sb.length] = "</div><div class='osResultSummary'>";
|
||||
if (summary != null)
|
||||
{
|
||||
sb[sb.length] = summary;
|
||||
}
|
||||
sb[sb.length] = "</div></td></tr>";
|
||||
}
|
||||
|
||||
// close the table
|
||||
sb[sb.length] = "</table>";
|
||||
|
||||
return sb.join("");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the HTML to display the paging links i.e. first, next, previous and last.
|
||||
*/
|
||||
function generatePagingHTML(engineId, feed)
|
||||
{
|
||||
// check there are results
|
||||
var totalResults = 0;
|
||||
var elTotalResults = getElementByTagNameNS(feed, _OS_NS_URI, _OS_NS_PREFIX, "totalResults");
|
||||
if (elTotalResults != null)
|
||||
{
|
||||
totalResults = getElementText(elTotalResults);
|
||||
}
|
||||
|
||||
// if there are no results return an empty string
|
||||
if (totalResults == 0)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
// extract the navigation urls
|
||||
var firstUrl = null;
|
||||
var nextUrl = null;
|
||||
var previousUrl = null;
|
||||
var lastUrl = null;
|
||||
|
||||
var links = feed.getElementsByTagName("link");
|
||||
if (links != null && links.length > 0)
|
||||
{
|
||||
for (var x = 0; x < links.length; x++)
|
||||
{
|
||||
var elNavLink = links[x];
|
||||
var linkType = elNavLink.getAttribute("rel");
|
||||
if (linkType == "first")
|
||||
{
|
||||
firstUrl = elNavLink.getAttribute("href");
|
||||
}
|
||||
else if (linkType == "next")
|
||||
{
|
||||
nextUrl = elNavLink.getAttribute("href");
|
||||
}
|
||||
else if (linkType == "previous")
|
||||
{
|
||||
previousUrl = elNavLink.getAttribute("href");
|
||||
}
|
||||
else if (linkType == "last")
|
||||
{
|
||||
lastUrl = elNavLink.getAttribute("href");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var sb = [];
|
||||
|
||||
if (firstUrl != null)
|
||||
{
|
||||
sb[sb.length] = "<a href='#' onclick='showPage("";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = "", "";
|
||||
sb[sb.length] = firstUrl;
|
||||
sb[sb.length] = "");'>first</a> | ";
|
||||
}
|
||||
if (previousUrl != null)
|
||||
{
|
||||
sb[sb.length] = "<a href='#' onclick='showPage("";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = "", "";
|
||||
sb[sb.length] = previousUrl;
|
||||
sb[sb.length] = "");'>previous</a>";
|
||||
if (nextUrl != null)
|
||||
{
|
||||
sb[sb.length] = " | ";
|
||||
}
|
||||
}
|
||||
if (nextUrl != null)
|
||||
{
|
||||
sb[sb.length] = "<a href='#' onclick='showPage("";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = "", "";
|
||||
sb[sb.length] = nextUrl;
|
||||
sb[sb.length] = "");'>next</a> | ";
|
||||
}
|
||||
if (lastUrl != null)
|
||||
{
|
||||
sb[sb.length] = "<a href='#' onclick='showPage("";
|
||||
sb[sb.length] = engineId;
|
||||
sb[sb.length] = "", "";
|
||||
sb[sb.length] = lastUrl;
|
||||
sb[sb.length] = "");'>last</a>";
|
||||
}
|
||||
|
||||
return sb.join("");
|
||||
}
|
||||
|
||||
/**
|
||||
* Error handler for errors caught in a catch block
|
||||
*/
|
||||
function handleError(o)
|
||||
{
|
||||
var msg = null;
|
||||
|
||||
if (e.message)
|
||||
{
|
||||
msg = e.message;
|
||||
}
|
||||
else
|
||||
{
|
||||
msg = e;
|
||||
}
|
||||
|
||||
alert("Error occurred processing search results: " + msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Error handler for Ajax call to search engine
|
||||
*/
|
||||
function handleSearchError(o)
|
||||
{
|
||||
// TODO: find out which search engine results could not be found!
|
||||
|
||||
handleErrorYahoo("Error: Failed to retrieve search results");
|
||||
}
|
||||
|
||||
/**
|
||||
* Error handler for Ajax call to initialise component
|
||||
*/
|
||||
function handleInitError(o)
|
||||
{
|
||||
handleErrorYahoo("Failed to initialise OpenSearch component: " +
|
||||
o.status + " " + o.statusText);
|
||||
}
|
@@ -1,99 +1,104 @@
|
||||
/* Copyright (c) 2006, Yahoo! Inc. All rights reserved.Code licensed under the BSD License:http://developer.yahoo.net/yui/license.txt version: 0.12.0 */
|
||||
YAHOO.util.Connect={_msxml_progid:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'],_http_header:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:'application/x-www-form-urlencoded',_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,setProgId:function(id)
|
||||
{this._msxml_progid.unshift(id);},setDefaultPostHeader:function(b)
|
||||
{this._use_default_post_header=b;},setPollingInterval:function(i)
|
||||
{if(typeof i=='number'&&isFinite(i)){this._polling_interval=i;}},createXhrObject:function(transactionId)
|
||||
{var obj,http;try
|
||||
{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
|
||||
catch(e)
|
||||
{for(var i=0;i<this._msxml_progid.length;++i){try
|
||||
{http=new ActiveXObject(this._msxml_progid[i]);obj={conn:http,tId:transactionId};break;}
|
||||
catch(e){}}}
|
||||
finally
|
||||
{return obj;}},getConnectionObject:function()
|
||||
{var o;var tId=this._transaction_id;try
|
||||
{o=this.createXhrObject(tId);if(o){this._transaction_id++;}}
|
||||
catch(e){}
|
||||
finally
|
||||
{return o;}},asyncRequest:function(method,uri,callback,postData)
|
||||
{var o=this.getConnectionObject();if(!o){return null;}
|
||||
else{if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(o.tId,callback,uri,postData);this.releaseObject(o);return;}
|
||||
if(method=='GET'){if(this._sFormData.length!=0){uri+=((uri.indexOf('?')==-1)?'?':'&')+this._sFormData;}
|
||||
else{uri+="?"+this._sFormData;}}
|
||||
else if(method=='POST'){postData=postData?this._sFormData+"&"+postData:this._sFormData;}}
|
||||
o.conn.open(method,uri,true);if(this._isFormSubmit||(postData&&this._use_default_post_header)){this.initHeader('Content-Type',this._default_post_header);if(this._isFormSubmit){this.resetFormState();}}
|
||||
if(this._has_http_headers){this.setHeader(o);}
|
||||
this.handleReadyState(o,callback);o.conn.send(postData||null);return o;}},handleReadyState:function(o,callback)
|
||||
{var oConn=this;if(callback&&callback.timeout){this._timeOut[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
|
||||
this._poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(oConn._poll[o.tId]);delete oConn._poll[o.tId];if(callback&&callback.timeout){delete oConn._timeOut[o.tId];}
|
||||
oConn.handleTransactionResponse(o,callback);}},this._polling_interval);},handleTransactionResponse:function(o,callback,isAbort)
|
||||
{if(!callback){this.releaseObject(o);return;}
|
||||
var httpStatus,responseObject;try
|
||||
{if(o.conn.status!==undefined&&o.conn.status!=0){httpStatus=o.conn.status;}
|
||||
else{httpStatus=13030;}}
|
||||
catch(e){httpStatus=13030;}
|
||||
if(httpStatus>=200&&httpStatus<300){try
|
||||
{responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
|
||||
else{callback.success.apply(callback.scope,[responseObject]);}}}
|
||||
catch(e){}}
|
||||
else{try
|
||||
{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
|
||||
else{callback.failure.apply(callback.scope,[responseObject]);}}
|
||||
break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
|
||||
else{callback.failure.apply(callback.scope,[responseObject]);}}}}
|
||||
catch(e){}}
|
||||
this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
|
||||
{var obj={};var headerObj={};try
|
||||
{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
|
||||
catch(e){}
|
||||
obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
|
||||
return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
|
||||
{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
|
||||
else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
|
||||
if(callbackArg){obj.argument=callbackArg;}
|
||||
return obj;},initHeader:function(label,value)
|
||||
{if(this._http_header[label]===undefined){this._http_header[label]=value;}
|
||||
else{this._http_header[label]=value+","+this._http_header[label];}
|
||||
this._has_http_headers=true;},setHeader:function(o)
|
||||
{for(var prop in this._http_header){if(this._http_header.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this._http_header[prop]);}}
|
||||
delete this._http_header;this._http_header={};this._has_http_headers=false;},setForm:function(formId,isUpload,secureUri)
|
||||
{this.resetFormState();var oForm;if(typeof formId=='string'){oForm=(document.getElementById(formId)||document.forms[formId]);}
|
||||
else if(typeof formId=='object'){oForm=formId;}
|
||||
else{return;}
|
||||
if(isUpload){this.createFrame(secureUri?secureUri:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=oForm;return;}
|
||||
var oElement,oName,oValue,oDisabled;var hasSubmit=false;for(var i=0;i<oForm.elements.length;i++){oElement=oForm.elements[i];oDisabled=oForm.elements[i].disabled;oName=oForm.elements[i].name;oValue=oForm.elements[i].value;if(!oDisabled&&oName)
|
||||
{switch(oElement.type)
|
||||
{case'select-one':case'select-multiple':for(var j=0;j<oElement.options.length;j++){if(oElement.options[j].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text)+'&';}
|
||||
else{this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].hasAttribute('value')?oElement.options[j].value:oElement.options[j].text)+'&';}}}
|
||||
break;case'radio':case'checkbox':if(oElement.checked){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}
|
||||
break;case'file':case undefined:case'reset':case'button':break;case'submit':if(hasSubmit==false){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';hasSubmit=true;}
|
||||
break;default:this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';break;}}}
|
||||
this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(secureUri){var frameId='yuiIO'+this._transaction_id;if(window.ActiveXObject){var io=document.createElement('<iframe id="'+frameId+'" name="'+frameId+'" />');if(typeof secureUri=='boolean'){io.src='javascript:false';}
|
||||
else if(typeof secureURI=='string'){io.src=secureUri;}}
|
||||
else{var io=document.createElement('iframe');io.id=frameId;io.name=frameId;}
|
||||
io.style.position='absolute';io.style.top='-1000px';io.style.left='-1000px';document.body.appendChild(io);},appendPostData:function(postData)
|
||||
{var formElements=new Array();var postMessage=postData.split('&');for(var i=0;i<postMessage.length;i++){var delimitPos=postMessage[i].indexOf('=');if(delimitPos!=-1){formElements[i]=document.createElement('input');formElements[i].type='hidden';formElements[i].name=postMessage[i].substring(0,delimitPos);formElements[i].value=postMessage[i].substring(delimitPos+1);this._formNode.appendChild(formElements[i]);}}
|
||||
return formElements;},uploadFile:function(id,callback,uri,postData){var frameId='yuiIO'+id;var io=document.getElementById(frameId);this._formNode.action=uri;this._formNode.method='POST';this._formNode.target=frameId;if(this._formNode.encoding){this._formNode.encoding='multipart/form-data';}
|
||||
else{this._formNode.enctype='multipart/form-data';}
|
||||
if(postData){var oElements=this.appendPostData(postData);}
|
||||
this._formNode.submit();if(oElements&&oElements.length>0){try
|
||||
{for(var i=0;i<oElements.length;i++){this._formNode.removeChild(oElements[i]);}}
|
||||
catch(e){}}
|
||||
this.resetFormState();var uploadCallback=function()
|
||||
{var obj={};obj.tId=id;obj.argument=callback.argument;try
|
||||
{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}
|
||||
catch(e){}
|
||||
if(callback.upload){if(!callback.scope){callback.upload(obj);}
|
||||
else{callback.upload.apply(callback.scope,[obj]);}}
|
||||
if(YAHOO.util.Event){YAHOO.util.Event.removeListener(io,"load",uploadCallback);}
|
||||
else if(window.detachEvent){io.detachEvent('onload',uploadCallback);}
|
||||
else{io.removeEventListener('load',uploadCallback,false);}
|
||||
setTimeout(function(){document.body.removeChild(io);},100);};if(YAHOO.util.Event){YAHOO.util.Event.addListener(io,"load",uploadCallback);}
|
||||
else if(window.attachEvent){io.attachEvent('onload',uploadCallback);}
|
||||
else{io.addEventListener('load',uploadCallback,false);}},abort:function(o,callback,isTimeout)
|
||||
{if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this._poll[o.tId]);delete this._poll[o.tId];if(isTimeout){delete this._timeOut[o.tId];}
|
||||
this.handleTransactionResponse(o,callback,true);return true;}
|
||||
else{return false;}},isCallInProgress:function(o)
|
||||
{if(o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}
|
||||
else{return false;}},releaseObject:function(o)
|
||||
/*
|
||||
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 0.12.2
|
||||
*/
|
||||
YAHOO.util.Connect={_msxml_progid:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'],_http_header:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:'application/x-www-form-urlencoded',_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,setProgId:function(id)
|
||||
{this._msxml_progid.unshift(id);},setDefaultPostHeader:function(b)
|
||||
{this._use_default_post_header=b;},setPollingInterval:function(i)
|
||||
{if(typeof i=='number'&&isFinite(i)){this._polling_interval=i;}},createXhrObject:function(transactionId)
|
||||
{var obj,http;try
|
||||
{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
|
||||
catch(e)
|
||||
{for(var i=0;i<this._msxml_progid.length;++i){try
|
||||
{http=new ActiveXObject(this._msxml_progid[i]);obj={conn:http,tId:transactionId};break;}
|
||||
catch(e){}}}
|
||||
finally
|
||||
{return obj;}},getConnectionObject:function()
|
||||
{var o;var tId=this._transaction_id;try
|
||||
{o=this.createXhrObject(tId);if(o){this._transaction_id++;}}
|
||||
catch(e){}
|
||||
finally
|
||||
{return o;}},asyncRequest:function(method,uri,callback,postData)
|
||||
{var o=this.getConnectionObject();if(!o){return null;}
|
||||
else{if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(o.tId,callback,uri,postData);this.releaseObject(o);return;}
|
||||
if(method=='GET'){if(this._sFormData.length!=0){uri+=((uri.indexOf('?')==-1)?'?':'&')+this._sFormData;}
|
||||
else{uri+="?"+this._sFormData;}}
|
||||
else if(method=='POST'){postData=postData?this._sFormData+"&"+postData:this._sFormData;}}
|
||||
o.conn.open(method,uri,true);if(this._isFormSubmit||(postData&&this._use_default_post_header)){this.initHeader('Content-Type',this._default_post_header);if(this._isFormSubmit){this.resetFormState();}}
|
||||
if(this._has_http_headers){this.setHeader(o);}
|
||||
this.handleReadyState(o,callback);o.conn.send(postData||null);return o;}},handleReadyState:function(o,callback)
|
||||
{var oConn=this;if(callback&&callback.timeout){this._timeOut[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
|
||||
this._poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(oConn._poll[o.tId]);delete oConn._poll[o.tId];if(callback&&callback.timeout){delete oConn._timeOut[o.tId];}
|
||||
oConn.handleTransactionResponse(o,callback);}},this._polling_interval);},handleTransactionResponse:function(o,callback,isAbort)
|
||||
{if(!callback){this.releaseObject(o);return;}
|
||||
var httpStatus,responseObject;try
|
||||
{if(o.conn.status!==undefined&&o.conn.status!=0){httpStatus=o.conn.status;}
|
||||
else{httpStatus=13030;}}
|
||||
catch(e){httpStatus=13030;}
|
||||
if(httpStatus>=200&&httpStatus<300){try
|
||||
{responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
|
||||
else{callback.success.apply(callback.scope,[responseObject]);}}}
|
||||
catch(e){}}
|
||||
else{try
|
||||
{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
|
||||
else{callback.failure.apply(callback.scope,[responseObject]);}}
|
||||
break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
|
||||
else{callback.failure.apply(callback.scope,[responseObject]);}}}}
|
||||
catch(e){}}
|
||||
this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
|
||||
{var obj={};var headerObj={};try
|
||||
{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
|
||||
catch(e){}
|
||||
obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
|
||||
return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
|
||||
{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
|
||||
else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
|
||||
if(callbackArg){obj.argument=callbackArg;}
|
||||
return obj;},initHeader:function(label,value)
|
||||
{if(this._http_header[label]===undefined){this._http_header[label]=value;}
|
||||
else{this._http_header[label]=value+","+this._http_header[label];}
|
||||
this._has_http_headers=true;},setHeader:function(o)
|
||||
{for(var prop in this._http_header){if(this._http_header.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this._http_header[prop]);}}
|
||||
delete this._http_header;this._http_header={};this._has_http_headers=false;},setForm:function(formId,isUpload,secureUri)
|
||||
{this.resetFormState();var oForm;if(typeof formId=='string'){oForm=(document.getElementById(formId)||document.forms[formId]);}
|
||||
else if(typeof formId=='object'){oForm=formId;}
|
||||
else{return;}
|
||||
if(isUpload){this.createFrame(secureUri?secureUri:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=oForm;return;}
|
||||
var oElement,oName,oValue,oDisabled;var hasSubmit=false;for(var i=0;i<oForm.elements.length;i++){oElement=oForm.elements[i];oDisabled=oForm.elements[i].disabled;oName=oForm.elements[i].name;oValue=oForm.elements[i].value;if(!oDisabled&&oName)
|
||||
{switch(oElement.type)
|
||||
{case'select-one':case'select-multiple':for(var j=0;j<oElement.options.length;j++){if(oElement.options[j].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text)+'&';}
|
||||
else{this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].hasAttribute('value')?oElement.options[j].value:oElement.options[j].text)+'&';}}}
|
||||
break;case'radio':case'checkbox':if(oElement.checked){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}
|
||||
break;case'file':case undefined:case'reset':case'button':break;case'submit':if(hasSubmit==false){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';hasSubmit=true;}
|
||||
break;default:this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';break;}}}
|
||||
this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(secureUri){var frameId='yuiIO'+this._transaction_id;if(window.ActiveXObject){var io=document.createElement('<iframe id="'+frameId+'" name="'+frameId+'" />');if(typeof secureUri=='boolean'){io.src='javascript:false';}
|
||||
else if(typeof secureURI=='string'){io.src=secureUri;}}
|
||||
else{var io=document.createElement('iframe');io.id=frameId;io.name=frameId;}
|
||||
io.style.position='absolute';io.style.top='-1000px';io.style.left='-1000px';document.body.appendChild(io);},appendPostData:function(postData)
|
||||
{var formElements=[];var postMessage=postData.split('&');for(var i=0;i<postMessage.length;i++){var delimitPos=postMessage[i].indexOf('=');if(delimitPos!=-1){formElements[i]=document.createElement('input');formElements[i].type='hidden';formElements[i].name=postMessage[i].substring(0,delimitPos);formElements[i].value=postMessage[i].substring(delimitPos+1);this._formNode.appendChild(formElements[i]);}}
|
||||
return formElements;},uploadFile:function(id,callback,uri,postData){var frameId='yuiIO'+id;var io=document.getElementById(frameId);this._formNode.action=uri;this._formNode.method='POST';this._formNode.target=frameId;if(this._formNode.encoding){this._formNode.encoding='multipart/form-data';}
|
||||
else{this._formNode.enctype='multipart/form-data';}
|
||||
if(postData){var oElements=this.appendPostData(postData);}
|
||||
this._formNode.submit();if(oElements&&oElements.length>0){try
|
||||
{for(var i=0;i<oElements.length;i++){this._formNode.removeChild(oElements[i]);}}
|
||||
catch(e){}}
|
||||
this.resetFormState();var uploadCallback=function()
|
||||
{var obj={};obj.tId=id;obj.argument=callback.argument;try
|
||||
{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}
|
||||
catch(e){}
|
||||
if(callback.upload){if(!callback.scope){callback.upload(obj);}
|
||||
else{callback.upload.apply(callback.scope,[obj]);}}
|
||||
if(YAHOO.util.Event){YAHOO.util.Event.removeListener(io,"load",uploadCallback);}
|
||||
else if(window.detachEvent){io.detachEvent('onload',uploadCallback);}
|
||||
else{io.removeEventListener('load',uploadCallback,false);}
|
||||
setTimeout(function(){document.body.removeChild(io);},100);};if(YAHOO.util.Event){YAHOO.util.Event.addListener(io,"load",uploadCallback);}
|
||||
else if(window.attachEvent){io.attachEvent('onload',uploadCallback);}
|
||||
else{io.addEventListener('load',uploadCallback,false);}},abort:function(o,callback,isTimeout)
|
||||
{if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this._poll[o.tId]);delete this._poll[o.tId];if(isTimeout){delete this._timeOut[o.tId];}
|
||||
this.handleTransactionResponse(o,callback,true);return true;}
|
||||
else{return false;}},isCallInProgress:function(o)
|
||||
{if(o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}
|
||||
else{return false;}},releaseObject:function(o)
|
||||
{o.conn=null;o=null;}};
|
File diff suppressed because it is too large
Load Diff
60
source/web/scripts/ajax/yahoo/dom/dom-min.js
vendored
60
source/web/scripts/ajax/yahoo/dom/dom-min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
70
source/web/scripts/ajax/yahoo/event/event-min.js
vendored
70
source/web/scripts/ajax/yahoo/event/event-min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@@ -1,98 +1,98 @@
|
||||
/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
|
||||
|
||||
/* first or middle sibling, no children */
|
||||
.ygtvtn {
|
||||
width:16px; height:22px;
|
||||
background: url(tn.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, collapsable */
|
||||
.ygtvtm {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tm.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, collapsable, hover */
|
||||
.ygtvtmh {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tmh.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, expandable */
|
||||
.ygtvtp {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tp.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, expandable, hover */
|
||||
.ygtvtph {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tph.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* last sibling, no children */
|
||||
.ygtvln {
|
||||
width:16px; height:22px;
|
||||
background: url(ln.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, collapsable */
|
||||
.ygtvlm {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lm.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, collapsable, hover */
|
||||
.ygtvlmh {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lmh.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, expandable */
|
||||
.ygtvlp {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lp.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, expandable, hover */
|
||||
.ygtvlph {
|
||||
width:16px; height:22px; cursor:pointer ;
|
||||
background: url(lph.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Loading icon */
|
||||
.ygtvloading {
|
||||
width:16px; height:22px;
|
||||
background: url(loading.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* the style for the empty cells that are used for rendering the depth
|
||||
* of the node */
|
||||
.ygtvdepthcell {
|
||||
width:16px; height:22px;
|
||||
background: url(vline.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
.ygtvblankdepthcell { width:16px; height:22px; }
|
||||
|
||||
/* the style of the div around each node */
|
||||
.ygtvitem { }
|
||||
|
||||
/* the style of the div around each node's collection of children */
|
||||
.ygtvchildren { }
|
||||
* html .ygtvchildren { height:2%; }
|
||||
|
||||
/* the style of the text label in ygTextNode */
|
||||
.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover {
|
||||
margin-left:2px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ygtvspacer { height: 10px; width: 10px; margin: 2px; }
|
||||
/* Copyright (c) 2006 Yahoo! Inc. All rights reserved. */
|
||||
|
||||
/* first or middle sibling, no children */
|
||||
.ygtvtn {
|
||||
width:16px; height:22px;
|
||||
background: url(tn.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, collapsable */
|
||||
.ygtvtm {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tm.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, collapsable, hover */
|
||||
.ygtvtmh {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tmh.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, expandable */
|
||||
.ygtvtp {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tp.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* first or middle sibling, expandable, hover */
|
||||
.ygtvtph {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(tph.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* last sibling, no children */
|
||||
.ygtvln {
|
||||
width:16px; height:22px;
|
||||
background: url(ln.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, collapsable */
|
||||
.ygtvlm {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lm.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, collapsable, hover */
|
||||
.ygtvlmh {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lmh.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, expandable */
|
||||
.ygtvlp {
|
||||
width:16px; height:22px;
|
||||
cursor:pointer ;
|
||||
background: url(lp.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Last sibling, expandable, hover */
|
||||
.ygtvlph {
|
||||
width:16px; height:22px; cursor:pointer ;
|
||||
background: url(lph.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* Loading icon */
|
||||
.ygtvloading {
|
||||
width:16px; height:22px;
|
||||
background: url(loading.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
/* the style for the empty cells that are used for rendering the depth
|
||||
* of the node */
|
||||
.ygtvdepthcell {
|
||||
width:16px; height:22px;
|
||||
background: url(vline.gif) 0 0 no-repeat;
|
||||
}
|
||||
|
||||
.ygtvblankdepthcell { width:16px; height:22px; }
|
||||
|
||||
/* the style of the div around each node */
|
||||
.ygtvitem { }
|
||||
|
||||
/* the style of the div around each node's collection of children */
|
||||
.ygtvchildren { }
|
||||
* html .ygtvchildren { height:2%; }
|
||||
|
||||
/* the style of the text label in ygTextNode */
|
||||
.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover {
|
||||
margin-left:2px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.ygtvspacer { height: 10px; width: 10px; margin: 2px; }
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
13
source/web/scripts/ajax/yahoo/yahoo/yahoo-min.js
vendored
13
source/web/scripts/ajax/yahoo/yahoo/yahoo-min.js
vendored
@@ -1 +1,12 @@
|
||||
/* Copyright (c) 2006, Yahoo! Inc. All rights reserved.Code licensed under the BSD License:http://developer.yahoo.net/yui/license.txt version: 0.12.0 */ if(typeof YAHOO=="undefined"){var YAHOO={};}YAHOO.namespace=function(){var a=arguments,o=null,i,j,d;for(i=0;i<a.length;++i){d=a[i].split(".");o=YAHOO;for(j=(d[0]=="YAHOO")?1:0;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}return o;};YAHOO.log=function(_2,_3,_4){var l=YAHOO.widget.Logger;if(l&&l.log){return l.log(_2,_3,_4);}else{return false;}};YAHOO.extend=function(_6,_7,_8){var F=function(){};F.prototype=_7.prototype;_6.prototype=new F();_6.prototype.constructor=_6;_6.superclass=_7.prototype;if(_7.prototype.constructor==Object.prototype.constructor){_7.prototype.constructor=_7;}if(_8){for(var i in _8){_6.prototype[i]=_8[i];}}};YAHOO.augment=function(r,s){var rp=r.prototype,sp=s.prototype,a=arguments,i,p;if(a[2]){for(i=2;i<a.length;++i){rp[a[i]]=sp[a[i]];}}else{for(p in sp){if(!rp[p]){rp[p]=sp[p];}}}};YAHOO.namespace("util","widget","example");
|
||||
/*
|
||||
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 0.12.2
|
||||
*/
|
||||
|
||||
|
||||
if(typeof YAHOO=="undefined"){var YAHOO={};}
|
||||
YAHOO.namespace=function(){var a=arguments,o=null,i,j,d;for(i=0;i<a.length;++i){d=a[i].split(".");o=YAHOO;for(j=(d[0]=="YAHOO")?1:0;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}
|
||||
return o;};YAHOO.log=function(msg,cat,src){var l=YAHOO.widget.Logger;if(l&&l.log){return l.log(msg,cat,src);}else{return false;}};YAHOO.extend=function(subc,superc,overrides){var F=function(){};F.prototype=superc.prototype;subc.prototype=new F();subc.prototype.constructor=subc;subc.superclass=superc.prototype;if(superc.prototype.constructor==Object.prototype.constructor){superc.prototype.constructor=superc;}
|
||||
if(overrides){for(var i in overrides){subc.prototype[i]=overrides[i];}}};YAHOO.augment=function(r,s){var rp=r.prototype,sp=s.prototype,a=arguments,i,p;if(a[2]){for(i=2;i<a.length;++i){rp[a[i]]=sp[a[i]];}}else{for(p in sp){if(!rp[p]){rp[p]=sp[p];}}}};YAHOO.namespace("util","widget","example");
|
@@ -1,145 +1,143 @@
|
||||
/*
|
||||
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 0.12.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* The YAHOO object is the single global object used by YUI Library. It
|
||||
* contains utility function for setting up namespaces, inheritance, and
|
||||
* logging. YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
|
||||
* created automatically for and used by the library.
|
||||
* @module yahoo
|
||||
* @title YAHOO Global
|
||||
*/
|
||||
|
||||
/**
|
||||
* The YAHOO global namespace object
|
||||
* @class YAHOO
|
||||
* @static
|
||||
*/
|
||||
if (typeof YAHOO == "undefined") {
|
||||
var YAHOO = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the namespace specified and creates it if it doesn't exist
|
||||
* <pre>
|
||||
* YAHOO.namespace("property.package");
|
||||
* YAHOO.namespace("YAHOO.property.package");
|
||||
* </pre>
|
||||
* Either of the above would create YAHOO.property, then
|
||||
* YAHOO.property.package
|
||||
*
|
||||
* Be careful when naming packages. Reserved words may work in some browsers
|
||||
* and not others. For instance, the following will fail in Safari:
|
||||
* <pre>
|
||||
* YAHOO.namespace("really.long.nested.namespace");
|
||||
* </pre>
|
||||
* This fails because "long" is a future reserved word in ECMAScript
|
||||
*
|
||||
* @method namespace
|
||||
* @static
|
||||
* @param {String*} arguments 1-n namespaces to create
|
||||
* @return {Object} A reference to the last namespace object created
|
||||
*/
|
||||
YAHOO.namespace = function() {
|
||||
var a=arguments, o=null, i, j, d;
|
||||
for (i=0; i<a.length; ++i) {
|
||||
d=a[i].split(".");
|
||||
o=YAHOO;
|
||||
|
||||
// YAHOO is implied, so it is ignored if it is included
|
||||
for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; ++j) {
|
||||
o[d[j]]=o[d[j]] || {};
|
||||
o=o[d[j]];
|
||||
}
|
||||
}
|
||||
|
||||
return o;
|
||||
};
|
||||
|
||||
/**
|
||||
* Uses YAHOO.widget.Logger to output a log message, if the widget is available.
|
||||
*
|
||||
* @method log
|
||||
* @static
|
||||
* @param {String} msg The message to log.
|
||||
* @param {String} cat The log category for the message. Default
|
||||
* categories are "info", "warn", "error", time".
|
||||
* Custom categories can be used as well. (opt)
|
||||
* @param {String} src The source of the the message (opt)
|
||||
* @return {Boolean} True if the log operation was successful.
|
||||
*/
|
||||
YAHOO.log = function(msg, cat, src) {
|
||||
var l=YAHOO.widget.Logger;
|
||||
if(l && l.log) {
|
||||
return l.log(msg, cat, src);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Utility to set up the prototype, constructor and superclass properties to
|
||||
* support an inheritance strategy that can chain constructors and methods.
|
||||
*
|
||||
* @method extend
|
||||
* @static
|
||||
* @param {Function} subc the object to modify
|
||||
* @param {Function} superc the object to inherit
|
||||
* @param {String[]} overrides additional properties/methods to add to the
|
||||
* subclass prototype. These will override the
|
||||
* matching items obtained from the superclass
|
||||
* if present.
|
||||
*/
|
||||
YAHOO.extend = function(subc, superc, overrides) {
|
||||
var F = function() {};
|
||||
F.prototype=superc.prototype;
|
||||
subc.prototype=new F();
|
||||
subc.prototype.constructor=subc;
|
||||
subc.superclass=superc.prototype;
|
||||
if (superc.prototype.constructor == Object.prototype.constructor) {
|
||||
superc.prototype.constructor=superc;
|
||||
}
|
||||
|
||||
if (overrides) {
|
||||
for (var i in overrides) {
|
||||
subc.prototype[i]=overrides[i];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Applies all prototype properties in the supplier to the receiver if the
|
||||
* receiver does not have these properties yet. Optionally, one or more
|
||||
* methods/properties can be specified (as additional parameters). This
|
||||
* option will overwrite the property if receiver has it already.
|
||||
*
|
||||
* @method augment
|
||||
* @static
|
||||
* @param {Function} r the object to receive the augmentation
|
||||
* @param {Function} s the object that supplies the properties to augment
|
||||
* @param {String*} arguments zero or more properties methods to augment the
|
||||
* receiver with. If none specified, everything
|
||||
* in the supplier will be used unless it would
|
||||
* overwrite an existing property in the receiver
|
||||
*/
|
||||
YAHOO.augment = function(r, s) {
|
||||
var rp=r.prototype, sp=s.prototype, a=arguments, i, p;
|
||||
if (a[2]) {
|
||||
for (i=2; i<a.length; ++i) {
|
||||
rp[a[i]] = sp[a[i]];
|
||||
}
|
||||
} else {
|
||||
for (p in sp) {
|
||||
if (!rp[p]) {
|
||||
rp[p] = sp[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
YAHOO.namespace("util", "widget", "example");
|
||||
|
||||
/*
|
||||
Copyright (c) 2006, Yahoo! Inc. All rights reserved.
|
||||
Code licensed under the BSD License:
|
||||
http://developer.yahoo.net/yui/license.txt
|
||||
version: 0.12.2
|
||||
*/
|
||||
/**
|
||||
* The YAHOO object is the single global object used by YUI Library. It
|
||||
* contains utility function for setting up namespaces, inheritance, and
|
||||
* logging. YAHOO.util, YAHOO.widget, and YAHOO.example are namespaces
|
||||
* created automatically for and used by the library.
|
||||
* @module yahoo
|
||||
* @title YAHOO Global
|
||||
*/
|
||||
|
||||
if (typeof YAHOO == "undefined") {
|
||||
/**
|
||||
* The YAHOO global namespace object
|
||||
* @class YAHOO
|
||||
* @static
|
||||
*/
|
||||
var YAHOO = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the namespace specified and creates it if it doesn't exist
|
||||
* <pre>
|
||||
* YAHOO.namespace("property.package");
|
||||
* YAHOO.namespace("YAHOO.property.package");
|
||||
* </pre>
|
||||
* Either of the above would create YAHOO.property, then
|
||||
* YAHOO.property.package
|
||||
*
|
||||
* Be careful when naming packages. Reserved words may work in some browsers
|
||||
* and not others. For instance, the following will fail in Safari:
|
||||
* <pre>
|
||||
* YAHOO.namespace("really.long.nested.namespace");
|
||||
* </pre>
|
||||
* This fails because "long" is a future reserved word in ECMAScript
|
||||
*
|
||||
* @method namespace
|
||||
* @static
|
||||
* @param {String*} arguments 1-n namespaces to create
|
||||
* @return {Object} A reference to the last namespace object created
|
||||
*/
|
||||
YAHOO.namespace = function() {
|
||||
var a=arguments, o=null, i, j, d;
|
||||
for (i=0; i<a.length; ++i) {
|
||||
d=a[i].split(".");
|
||||
o=YAHOO;
|
||||
|
||||
// YAHOO is implied, so it is ignored if it is included
|
||||
for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; ++j) {
|
||||
o[d[j]]=o[d[j]] || {};
|
||||
o=o[d[j]];
|
||||
}
|
||||
}
|
||||
|
||||
return o;
|
||||
};
|
||||
|
||||
/**
|
||||
* Uses YAHOO.widget.Logger to output a log message, if the widget is available.
|
||||
*
|
||||
* @method log
|
||||
* @static
|
||||
* @param {String} msg The message to log.
|
||||
* @param {String} cat The log category for the message. Default
|
||||
* categories are "info", "warn", "error", time".
|
||||
* Custom categories can be used as well. (opt)
|
||||
* @param {String} src The source of the the message (opt)
|
||||
* @return {Boolean} True if the log operation was successful.
|
||||
*/
|
||||
YAHOO.log = function(msg, cat, src) {
|
||||
var l=YAHOO.widget.Logger;
|
||||
if(l && l.log) {
|
||||
return l.log(msg, cat, src);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Utility to set up the prototype, constructor and superclass properties to
|
||||
* support an inheritance strategy that can chain constructors and methods.
|
||||
*
|
||||
* @method extend
|
||||
* @static
|
||||
* @param {Function} subc the object to modify
|
||||
* @param {Function} superc the object to inherit
|
||||
* @param {Object} overrides additional properties/methods to add to the
|
||||
* subclass prototype. These will override the
|
||||
* matching items obtained from the superclass
|
||||
* if present.
|
||||
*/
|
||||
YAHOO.extend = function(subc, superc, overrides) {
|
||||
var F = function() {};
|
||||
F.prototype=superc.prototype;
|
||||
subc.prototype=new F();
|
||||
subc.prototype.constructor=subc;
|
||||
subc.superclass=superc.prototype;
|
||||
if (superc.prototype.constructor == Object.prototype.constructor) {
|
||||
superc.prototype.constructor=superc;
|
||||
}
|
||||
|
||||
if (overrides) {
|
||||
for (var i in overrides) {
|
||||
subc.prototype[i]=overrides[i];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Applies all prototype properties in the supplier to the receiver if the
|
||||
* receiver does not have these properties yet. Optionally, one or more
|
||||
* methods/properties can be specified (as additional parameters). This
|
||||
* option will overwrite the property if receiver has it already.
|
||||
*
|
||||
* @method augment
|
||||
* @static
|
||||
* @param {Function} r the object to receive the augmentation
|
||||
* @param {Function} s the object that supplies the properties to augment
|
||||
* @param {String*} arguments zero or more properties methods to augment the
|
||||
* receiver with. If none specified, everything
|
||||
* in the supplier will be used unless it would
|
||||
* overwrite an existing property in the receiver
|
||||
*/
|
||||
YAHOO.augment = function(r, s) {
|
||||
var rp=r.prototype, sp=s.prototype, a=arguments, i, p;
|
||||
if (a[2]) {
|
||||
for (i=2; i<a.length; ++i) {
|
||||
rp[a[i]] = sp[a[i]];
|
||||
}
|
||||
} else {
|
||||
for (p in sp) {
|
||||
if (!rp[p]) {
|
||||
rp[p] = sp[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
YAHOO.namespace("util", "widget", "example");
|
||||
|
Reference in New Issue
Block a user