From 1f54a35efc676bbb30fea4b9875da3de75eabf43 Mon Sep 17 00:00:00 2001 From: yomguy Date: Thu, 17 Jun 2010 16:54:43 +0000 Subject: [PATCH] make it a real module with a setup --- exceptions.py | 41 - metadata.py | 25 - setup.py | 37 + tests/__init__.py | 140 -- timeside/analyzer/__init__.py | 6 + ui/README | 20 - ui/css/timeside.css | 29 - ui/demo/index.html | 141 -- ui/demo/waveform.png | Bin 21089 -> 0 bytes ui/lib/firebug-lite-compressed.js | 2 - ui/lib/jquery.js | 3549 ----------------------------- ui/lib/soundmanager2.js | 1247 ---------- ui/lib/soundmanager2.swf | Bin 2435 -> 0 bytes ui/lib/soundmanager2_flash9.swf | Bin 8079 -> 0 bytes ui/lib/wz_jsgraphics.js | 1107 --------- ui/skins/lab/img/controlbg.png | Bin 234 -> 0 bytes ui/skins/lab/img/forward.png | Bin 922 -> 0 bytes ui/skins/lab/img/pause.png | Bin 635 -> 0 bytes ui/skins/lab/img/play.png | Bin 794 -> 0 bytes ui/skins/lab/img/rewind.png | Bin 945 -> 0 bytes ui/skins/lab/img/setmarker.png | Bin 932 -> 0 bytes ui/skins/lab/style.css | 116 - ui/src/controller.js | 57 - ui/src/core.js | 271 --- ui/src/marker.js | 219 -- ui/src/markerlist.js | 32 - ui/src/markermap.js | 122 - ui/src/player.js | 222 -- ui/src/ruler.js | 398 ---- ui/src/soundprovider.js | 149 -- ui/src/timeside.js | 124 - ui/src/util.js | 83 - 32 files changed, 43 insertions(+), 8094 deletions(-) delete mode 100644 exceptions.py delete mode 100644 metadata.py create mode 100644 setup.py delete mode 100644 tests/__init__.py create mode 100644 timeside/analyzer/__init__.py delete mode 100644 ui/README delete mode 100755 ui/css/timeside.css delete mode 100755 ui/demo/index.html delete mode 100755 ui/demo/waveform.png delete mode 100644 ui/lib/firebug-lite-compressed.js delete mode 100755 ui/lib/jquery.js delete mode 100755 ui/lib/soundmanager2.js delete mode 100755 ui/lib/soundmanager2.swf delete mode 100755 ui/lib/soundmanager2_flash9.swf delete mode 100755 ui/lib/wz_jsgraphics.js delete mode 100755 ui/skins/lab/img/controlbg.png delete mode 100755 ui/skins/lab/img/forward.png delete mode 100755 ui/skins/lab/img/pause.png delete mode 100755 ui/skins/lab/img/play.png delete mode 100755 ui/skins/lab/img/rewind.png delete mode 100644 ui/skins/lab/img/setmarker.png delete mode 100755 ui/skins/lab/style.css delete mode 100644 ui/src/controller.js delete mode 100644 ui/src/core.js delete mode 100644 ui/src/marker.js delete mode 100755 ui/src/markerlist.js delete mode 100644 ui/src/markermap.js delete mode 100644 ui/src/player.js delete mode 100644 ui/src/ruler.js delete mode 100644 ui/src/soundprovider.js delete mode 100644 ui/src/timeside.js delete mode 100755 ui/src/util.js diff --git a/exceptions.py b/exceptions.py deleted file mode 100644 index 40b4dcd..0000000 --- a/exceptions.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (c) 2009 Olivier Guilyardi -# -# This file is part of TimeSide. - -# TimeSide is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. - -# TimeSide is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with TimeSide. If not, see . - -class Error(Exception): - """Exception base class for errors in TimeSide.""" - -class ApiError(Exception): - """Exception base class for errors in TimeSide.""" - -class SubProcessError(Error): - """Exception for reporting errors from a subprocess""" - - def __init__(self, message, command, subprocess): - self.message = message - self.command = str(command) - self.subprocess = subprocess - - def __str__(self): - if self.subprocess.stderr != None: - error = self.subprocess.stderr.read() - else: - error = '' - return "%s ; command: %s; error: %s" % (self.message, - self.command, - error) diff --git a/metadata.py b/metadata.py deleted file mode 100644 index 86abf87..0000000 --- a/metadata.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright (C) 2007-2009 Parisson -# Copyright (c) 2007 Olivier Guilyardi -# Copyright (c) 2007-2009 Guillaume Pellerin -# -# This file is part of TimeSide. - -# TimeSide is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. - -# TimeSide is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with TimeSide. If not, see . - -class Metadata(object): - pass - - diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..a4936d5 --- /dev/null +++ b/setup.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python + +'''The setup and build script for the python-twitter library.''' + +__author__ = 'yomguy@parisson.com' +__version__ = '0.1-beta' + + +# The base package metadata to be used by both distutils and setuptools +METADATA = dict( + name = "timeside", + version = __version__, + py_modules = ['timeside'], + description='Web Audio Components', + author='Olivier Guilyardi, Paul Brossier, Guillaume Pellerin', + author_email='yomguy@parisson.com', + license='Gnu Public License V2', + url='http://code.google.com/p/timeside', + packages=['timeside'], + keywords='audio analyze transcode graph', + install_requires = ['setuptools',] + include_package_data = True, +) + + +def Main(): + # Use setuptools if available, otherwise fallback and use distutils + try: + import setuptools + setuptools.setup(**METADATA) + except ImportError: + import distutils.core + distutils.core.setup(**METADATA) + + +if __name__ == '__main__': + Main() diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index 2a6b9db..0000000 --- a/tests/__init__.py +++ /dev/null @@ -1,140 +0,0 @@ - -import unittest -import sys -import time - -class TestCase(unittest.TestCase): - - def assertSameList(self, list1, list2): - "Test that two lists contain the same elements, in any order" - if len(list1) != len(list2): - self.fail("Lists length differ : %d != %d" % (len(list1), len(list2))) - - for item in list1: - if not item in list2: - self.fail("%s is not in list2" % str(item)) - - for item in list2: - if not item in list1: - self.fail("%s is not in list1" % str(item)) - -class _TextTestResult(unittest.TestResult): - """A test result class that can print formatted text results to a stream. - - Used by TextTestRunner. - """ - separator1 = '=' * 70 - separator2 = '-' * 70 - - def __init__(self, stream, descriptions, verbosity): - unittest.TestResult.__init__(self) - self.stream = stream - self.showAll = verbosity > 1 - self.dots = verbosity == 1 - self.descriptions = descriptions - self.currentTestCase = None - - def getDescription(self, test): - if self.descriptions: - return test.shortDescription() or str(test) - else: - return str(test) - - def startTest(self, test): - unittest.TestResult.startTest(self, test) - if self.showAll: - if self.currentTestCase != test.__class__: - self.currentTestCase = test.__class__ - self.stream.writeln() - self.stream.writeln("[%s]" % self.currentTestCase.__name__) - self.stream.write(" " + self.getDescription(test)) - self.stream.write(" ... ") - - def addSuccess(self, test): - unittest.TestResult.addSuccess(self, test) - if self.showAll: - self.stream.writeln("ok") - elif self.dots: - self.stream.write('.') - - def addError(self, test, err): - unittest.TestResult.addError(self, test, err) - if self.showAll: - self.stream.writeln("ERROR") - elif self.dots: - self.stream.write('E') - - def addFailure(self, test, err): - unittest.TestResult.addFailure(self, test, err) - if self.showAll: - self.stream.writeln("FAIL") - elif self.dots: - self.stream.write('F') - - def printErrors(self): - if self.dots or self.showAll: - self.stream.writeln() - self.printErrorList('ERROR', self.errors) - self.printErrorList('FAIL', self.failures) - - def printErrorList(self, flavour, errors): - for test, err in errors: - self.stream.writeln(self.separator1) - self.stream.writeln("%s: %s" % (flavour,self.getDescription(test))) - self.stream.writeln(self.separator2) - self.stream.writeln("%s" % err) - - -class _WritelnDecorator: - """Used to decorate file-like objects with a handy 'writeln' method""" - def __init__(self,stream): - self.stream = stream - - def __getattr__(self, attr): - return getattr(self.stream,attr) - - def writeln(self, arg=None): - if arg: self.write(arg) - self.write('\n') # text-mode streams translate to \r\n if needed - -class TestRunner: - """A test runner class that displays results in textual form. - - It prints out the names of tests as they are run, errors as they - occur, and a summary of the results at the end of the test run. - """ - def __init__(self, stream=sys.stderr, descriptions=1, verbosity=2): - self.stream = _WritelnDecorator(stream) - self.descriptions = descriptions - self.verbosity = verbosity - - def _makeResult(self): - return _TextTestResult(self.stream, self.descriptions, self.verbosity) - - def run(self, test): - "Run the given test case or test suite." - result = self._makeResult() - startTime = time.time() - test(result) - stopTime = time.time() - timeTaken = stopTime - startTime - result.printErrors() - self.stream.writeln(result.separator2) - run = result.testsRun - self.stream.writeln("Ran %d test%s in %.3fs" % - (run, run != 1 and "s" or "", timeTaken)) - self.stream.writeln() - if not result.wasSuccessful(): - self.stream.write("FAILED (") - failed, errored = map(len, (result.failures, result.errors)) - if failed: - self.stream.write("failures=%d" % failed) - if errored: - if failed: self.stream.write(", ") - self.stream.write("errors=%d" % errored) - self.stream.writeln(")") - else: - self.stream.writeln("OK") - return result - - diff --git a/timeside/analyzer/__init__.py b/timeside/analyzer/__init__.py new file mode 100644 index 0000000..0bd2039 --- /dev/null +++ b/timeside/analyzer/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from timeside.analyzer.core import * +from timeside.analyzer.duration import * +from timeside.analyzer.max_level import * +#from timeside.analyzer.mean_level import * +#from timeside.analyzer.dc import * diff --git a/ui/README b/ui/README deleted file mode 100644 index 0f9d21d..0000000 --- a/ui/README +++ /dev/null @@ -1,20 +0,0 @@ -=============================== -TimeSide - Web Audio Components -=============================== - -TimeSide UI Dependencies -======================== - -* SoundManager 2 >= 2.91 : http://www.schillmania.com/projects/soundmanager2 -* jQuery => 1.2.6 : http://www.jquery.com -* jsGraphics => 3.03 http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm - -Licensing -========= - -Copyright (c) 2008-2009 Samalyse -Author: Olivier Guilyardi - -TimeSide is released under the terms of the GNU General Public License -version 2. Please see the LICENSE file for details. - diff --git a/ui/css/timeside.css b/ui/css/timeside.css deleted file mode 100755 index cadc79a..0000000 --- a/ui/css/timeside.css +++ /dev/null @@ -1,29 +0,0 @@ -/* FIXME: These CSS styles are essential and non intrusive. They should be - * dynamically assigned in javascript, and this file removed. */ - -.ts-player .ts-ruler .ts-section .ts-canvas { - position: relative; -} - -.ts-player .ts-wave { - position: relative; - clear: both; - overflow: hidden; -} - -.ts-player .ts-wave .ts-image-container { - position: relative; -} - -.ts-player .ts-wave .ts-image { - position: absolute; - left: 0; - clear: both; -} - -.ts-player .ts-wave .ts-image-canvas { - position: absolute; - z-index: 100; - overflow: hidden; -} - diff --git a/ui/demo/index.html b/ui/demo/index.html deleted file mode 100755 index f3977e2..0000000 --- a/ui/demo/index.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -

TimeSide Player

- -
-
-
-
- -

- - - - -
- Skin: - -

- - diff --git a/ui/demo/waveform.png b/ui/demo/waveform.png deleted file mode 100755 index 75e3f9d721423269564fd74af8ca70c353cd5154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21089 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 diff --git a/ui/lib/firebug-lite-compressed.js b/ui/lib/firebug-lite-compressed.js deleted file mode 100644 index df2601c..0000000 --- a/ui/lib/firebug-lite-compressed.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(_scope){_scope.pi=Object(3.14159265358979323846);var pi=_scope.pi;pi.version=1.0;pi.env={ie:/MSIE/i.test(navigator.userAgent),ie6:/MSIE 6/i.test(navigator.userAgent),ie7:/MSIE 7/i.test(navigator.userAgent),ie8:/MSIE 8/i.test(navigator.userAgent),firefox:/Firefox/i.test(navigator.userAgent),opera:/Opera/i.test(navigator.userAgent),webkit:/Webkit/i.test(navigator.userAgent)};pi.util={IsArray:function(_object){return _object&&_object!=window&&(_object instanceof Array||(typeof _object.length=="number"&&typeof _object.item=="function"))},IsHash:function(_object){return _object&&typeof _object=="object"&&(_object==window||_object instanceof Object)&&!_object.nodeName&&!pi.util.IsArray(_object)},DOMContentLoaded:[],AddEvent:function(_element,_eventName,_fn,_useCapture){_element[pi.env.ie.toggle("attachEvent","addEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false);return pi.util.AddEvent.curry(this,_element)},RemoveEvent:function(_element,_eventName,_fn,_useCapture){return _element[pi.env.ie.toggle("detachEvent","removeEventListener")](pi.env.ie.toggle("on","")+_eventName,_fn,_useCapture||false)},GetWindowSize:function(){return{height:pi.env.ie?Math.max(document.documentElement.clientHeight,document.body.clientHeight):window.innerHeight,width:pi.env.ie?Math.max(document.documentElement.clientWidth,document.body.clientWidth):window.innerWidth}},Include:function(_url,_callback){var script=new pi.element("script").attribute.set("src",_url),callback=_callback||new Function,done=false,head=pi.get.byTag("head")[0];script.environment.getElement().onload=script.environment.getElement().onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){callback.call(this);done=true;head.removeChild(script.environment.getElement())}};script.insert(head)},Element:{addClass:function(_element,_class){if(!pi.util.Element.hasClass(_element,_class))pi.util.Element.setClass(_element,pi.util.Element.getClass(_element)+" "+_class)},getClass:function(_element){return _element.getAttribute(pi.env.ie.toggle("className","class"))||""},hasClass:function(_element,_class){return pi.util.Element.getClass(_element).split(" ").indexOf(_class)>-1},removeClass:function(_element,_class){if(pi.util.Element.hasClass(_element,_class))pi.util.Element.setClass(_element,pi.util.Element.getClass(_element,_class).split(" ").removeValue(_class).join(" "))},setClass:function(_element,_value){_element.setAttribute(pi.env.ie.toggle("className","class"),_value)},toggleClass:function(){if(pi.util.Element.hasClass.apply(this,arguments))pi.util.Element.removeClass.apply(this,arguments);else pi.util.Element.addClass.apply(this,arguments)},getOpacity:function(_styleObject){var styleObject=_styleObject;if(!pi.env.ie)return styleObject["opacity"];var alpha=styleObject["filter"].match(/opacity\=(\d+)/i);return alpha?alpha[1]/100:1},setOpacity:function(_element,_value){if(!pi.env.ie)return pi.util.Element.addStyle(_element,{"opacity":_value});_value*=100;pi.util.Element.addStyle(_element,{"filter":"alpha(opacity="+_value+")"});return this._parent_},getPosition:function(_element){var parent=_element,offsetLeft=0,offsetTop=0,view=pi.util.Element.getView(_element);while(parent&&parent!=document.body&&parent!=document.firstChild){offsetLeft+=parseInt(parent.offsetLeft);offsetTop+=parseInt(parent.offsetTop);parent=parent.offsetParent};return{"bottom":view["bottom"],"left":view["left"],"marginTop":view["marginTop"],"marginLeft":view["marginLeft"],"offsetLeft":offsetLeft,"offsetTop":offsetTop,"position":view["position"],"right":view["right"],"top":view["top"],"z-index":view["zIndex"]}},getSize:function(_element){var view=pi.util.Element.getView(_element);return{"height":view["height"],"offsetHeight":_element.offsetHeight,"offsetWidth":_element.offsetWidth,"width":view["width"]}},addStyle:function(_element,_style){for(var key in _style){key=key=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):key;if(key=="opacity"&&pi.env.ie){pi.util.Element.setOpacity(_element,_style[key]);continue}_element.style[key]=_style[key]}},getStyle:function(_element,_property){_property=_property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;if(_property=="opacity"&&pi.env.ie)return pi.util.Element.getOpacity(_element.style);return typeof _property=="string"?_element.style[_property]:_element.style},getView:function(_element,_property){var view=document.defaultView?document.defaultView.getComputedStyle(_element,null):_element.currentStyle;_property=_property=="float"?pi.env.ie.toggle("styleFloat","cssFloat"):_property;if(_property=="opacity"&&pi.env.ie)return pi.util.Element.getOpacity(_element,view);return typeof _property=="string"?view[_property]:view}},CloneObject:function(_object,_fn){var tmp={};for(var key in _object){if(pi.util.IsArray(_object[key])){tmp[key]=Array.prototype.clone.apply(_object[key])}else if(pi.util.IsHash(_object[key])){tmp[key]=pi.util.CloneObject(_object[key]);if(_fn)_fn.call(tmp,key,_object)}else tmp[key]=_object[key]}return tmp},MergeObjects:function(_object,_source){for(var key in _source){var value=_source[key];if(pi.util.IsArray(_source[key])){if(pi.util.IsArray(_object[key])){Array.prototype.push.apply(_source[key],_object[key])}else value=_source[key].clone()}else if(pi.util.IsHash(_source[key])){if(pi.util.IsHash(_object[key])){value=pi.util.MergeObjects(_object[key],_source[key])}else{value=pi.util.CloneObject(_source[key])}}_object[key]=value};return _object}};pi.get=function(){return document.getElementById(arguments[0])};pi.get.byTag=function(){return document.getElementsByTagName(arguments[0])};pi.get.byClass=function(){return document.getElementsByClassName.apply(document,arguments)};pi.base=function(){this.body={};this.constructor=null;this.build=function(_skipClonning){var base=this,skipClonning=_skipClonning||false,_private={},fn=function(){var _p=pi.util.CloneObject(_private);if(!skipClonning){for(var key in this){if(pi.util.IsArray(this[key])){this[key]=Array.prototype.clone.apply(this[key])}else if(pi.util.IsHash(this[key])){this[key]=pi.util.CloneObject(this[key],function(_key,_object){this[_key]._parent_=this});this[key]._parent_=this}}};base.createAccessors(_p,this);if(base.constructor)return base.constructor.apply(this,arguments);return this};this.movePrivateMembers(this.body,_private);if(this.constructor){fn["$Constructor"]=this.constructor}fn.prototype=this.body;return fn};this.createAccessors=function(_p,_branch){var getter=function(_property){return this[_property]},setter=function(_property,_value){this[_property]=_value;return _branch._parent_||_branch};for(var name in _p){var isPrivate=name.substring(0,1)=="_",title=name.substring(1,2).toUpperCase()+name.substring(2);if(isPrivate){_branch["get"+title]=getter.curry(_p,name);_branch["set"+title]=setter.curry(_p,name)}else if(pi.util.IsHash(_p[name])){if(!_branch[name])_branch[name]={};this.createAccessors(_p[name],_branch[name])}}};this.movePrivateMembers=function(_object,_branch){for(var name in _object){var isPrivate=name.substring(0,1)=="_";if(isPrivate){_branch[name]=_object[name];delete _object[name]}else if(pi.util.IsHash(_object[name])){_branch[name]={};this.movePrivateMembers(_object[name],_branch[name])}}}};Function.prototype.extend=function(_prototype,_skipClonning){var object=new pi.base,superClass=this;if(_prototype["$Constructor"]){object.constructor=_prototype["$Constructor"];delete _prototype["$Constructor"]};object.body=superClass==pi.base?_prototype:pi.util.MergeObjects(_prototype,superClass.prototype,2);object.constructor=object.constructor||function(){if(superClass!=pi.base)superClass.apply(this,arguments)};return object.build(_skipClonning)};Function.prototype.curry=function(_scope){var fn=this,scope=_scope||window,args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(scope,args.concat(Array.prototype.slice.call(arguments,0)))}};pi.element=pi.base.extend({"$Constructor":function(_tag){this.environment.setElement(document.createElement(_tag||"DIV"));this.environment.getElement().pi=this;return this},"clean":function(){var childs=this.child.get();while(childs.length){childs[0].parentNode.removeChild(childs[0])}},"clone":function(_deep){return this.environment.getElement().cloneNode(_deep)},"insert":function(_element){_element=_element.environment?_element.environment.getElement():_element;_element.appendChild(this.environment.getElement());return this},"insertAfter":function(_referenceElement){_referenceElement=_referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;_referenceElement.nextSibling?this.insertBefore(_referenceElement.nextSibling):this.insert(_referenceElement.parentNode);return this},"insertBefore":function(_referenceElement){_referenceElement=_referenceElement.environment?_referenceElement.environment.getElement():_referenceElement;_referenceElement.parentNode.insertBefore(this.environment.getElement(),_referenceElement);return this},"query":function(_expression,_resultType,namespaceResolver,_result){return pi.xpath(_expression,_resultType||"ORDERED_NODE_SNAPSHOT_TYPE",this.environment.getElement(),_namespaceResolver,_result)},"remove":function(){this.environment.getParent().removeChild(this.environment.getElement())},"update":function(_value){["TEXTAREA","INPUT"].indexOf(this.environment.getName())>-1?(this.environment.getElement().value=_value):(this.environment.getElement().innerHTML=_value);return this},"attribute":{"getAll":function(_name){return this._parent_.environment.getElement().attributes},"clear":function(_name){this.set(_name,"");return this._parent_},"get":function(_name){return this._parent_.environment.getElement().getAttribute(_name)},"has":function(_name){return pi.env.ie?(this.get(_name)!=null):this._parent_.environment.getElement().hasAttribute(_name)},"remove":function(_name){this._parent_.environment.getElement().removeAttribute(_name);return this._parent_},"set":function(_name,_value){this._parent_.environment.getElement().setAttribute(_name,_value);return this._parent_},"addClass":function(_classes){for(var i=0;i-1)callback[i].fn.apply(this)}}};pi.xhr=pi.xhr.build();pi.xhr.get=function(_url,_returnPiObject){var request=new pi.xhr();request.environment.setAsync(false);request.environment.setUrl(_url);request.send();return _returnPiObject?request:request.environment.getApi()};pi.xpath=function(_expression,_resultType,_contextNode,_namespaceResolver,_result){var contextNode=_contextNode||document,expression=_expression||"",namespaceResolver=_namespaceResolver||null,result=_result||null,resultType=_resultType||"ANY_TYPE";return document.evaluate(expression,contextNode,namespaceResolver,XPathResult[resultType],result)};Array.prototype.clone=function(){var tmp=[];Array.prototype.push.apply(tmp,this);tmp.forEach(function(item,index,object){if(item instanceof Array)object[index]=object[index].clone()});return tmp};Array.prototype.count=function(_value){var count=0;this.forEach(function(){count+=Number(arguments[0]==_value)});return count};Array.prototype.forEach=Array.prototype.forEach||function(_function){for(var i=0;i9?87:48));return((this-remain)/_system).base(_system)+String.fromCharCode(remain+(remain>9?87:48))};Number.prototype.decimal=function(_system){var result=0,digit=String(this).split("");for(var i=0;i58)?digit[i].charCodeAt(0)-87:digit[i]);result+=digit[i]*(Math.pow(_system,digit.length-1-i))}return result};Number.prototype.range=function(_pattern){for(var value=String(this),isFloat=/\./i.test(value),i=isFloat.toggle(parseInt(value.split(".")[0]),0),end=parseInt(value.split(".")[isFloat.toggle(1,0)]),array=[];i=0;i--)str="\\u{0}{1}".format(String(obj[i].charCodeAt(0).base(16)).leftpad(4,"0"),str);return str};pi.util.AddEvent(pi.env.ie?window:document,pi.env.ie?"load":"DOMContentLoaded",function(){for(var i=0;i>>"));el.left.console.input=new pi.element("INPUT").attribute.set("type","text").attribute.addClass("Input").event.addListener("keydown",listen.consoleTextbox).insert(new pi.element("DIV").attribute.addClass("InputContainer").insert(el.left.console.container));el.right.console={};el.right.console.container=new pi.element("DIV").attribute.addClass("Console Container").insert(el.right.container);el.right.console.mlButton=new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.console.container);el.right.console.input=new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.console.container);el.right.console.run=new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runMultiline).update("Run").insert(el.right.console.container);el.right.console.clear=new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.console.input)).update("Clear").insert(el.right.console.container);el.button.console={};el.button.console.container=new pi.element("DIV").attribute.addClass("ButtonSet").insert(el.button.container);el.button.console.clear=new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.left.console.monitor)).update("Clear").insert(el.button.console.container);el.left.html={};el.left.html.container=new pi.element("DIV").attribute.addClass("HTML").insert(el.left.container);el.right.html={};el.right.html.container=new pi.element("DIV").attribute.addClass("HTML Container").insert(el.right.container);el.right.html.nav={};el.right.html.nav.container=new pi.element("DIV").attribute.addClass("Nav").insert(el.right.html.container);el.right.html.nav.computedStyle=new pi.element("A").attribute.addClass("Tab Selected").event.addListener("click",d.html.navigate.curry(firebug,"computedStyle")).update("Computed Style").insert(el.right.html.nav.container);if(!pi.env.ie6)el.right.html.nav.dom=new pi.element("A").attribute.addClass("Tab").event.addListener("click",d.html.navigate.curry(firebug,"dom")).update("DOM").insert(el.right.html.nav.container);el.right.html.content=new pi.element("DIV").attribute.addClass("Content").insert(el.right.html.container);el.button.html={};el.button.html.container=new pi.element("DIV").attribute.addClass("ButtonSet HTML").insert(el.button.container);el.left.css={};el.left.css.container=new pi.element("DIV").attribute.addClass("CSS").insert(el.left.container);el.right.css={};el.right.css.container=new pi.element("DIV").attribute.addClass("CSS Container").insert(el.right.container);el.right.css.nav={};el.right.css.nav.container=new pi.element("DIV").attribute.addClass("Nav").insert(el.right.css.container);el.right.css.nav.runCSS=new pi.element("A").attribute.addClass("Tab Selected").update("Run CSS").insert(el.right.css.nav.container);el.right.css.mlButton=new pi.element("A").attribute.addClass("MLButton CloseML").event.addListener("click",d.console.toggleML).insert(el.right.css.container);el.right.css.input=new pi.element("TEXTAREA").attribute.addClass("Input").insert(el.right.css.container);el.right.css.run=new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.runCSS).update("Run").insert(el.right.css.container);el.right.css.clear=new pi.element("A").attribute.addClass("Button").event.addListener("click",d.clean.curry(window,el.right.css.input)).update("Clear").insert(el.right.css.container);el.button.css={};el.button.css.container=new pi.element("DIV").attribute.addClass("ButtonSet CSS").insert(el.button.container);el.button.css.selectbox=new pi.element("SELECT").event.addListener("change",listen.cssSelectbox).insert(el.button.css.container);el.left.scripts={};el.left.scripts.container=new pi.element("DIV").attribute.addClass("Scripts").insert(el.left.container);el.right.scripts={};el.right.scripts.container=new pi.element("DIV").attribute.addClass("Scripts Container").insert(el.right.container);el.button.scripts={};el.button.scripts.container=new pi.element("DIV").attribute.addClass("ButtonSet Scripts").insert(el.button.container);el.button.scripts.selectbox=new pi.element("SELECT").event.addListener("change",listen.scriptsSelectbox).insert(el.button.scripts.container);el.button.scripts.lineNumbers=new pi.element("A").attribute.addClass("Button").event.addListener("click",d.scripts.toggleLineNumbers).update("Show Line Numbers").insert(el.button.scripts.container);el.left.dom={};el.left.dom.container=new pi.element("DIV").attribute.addClass("DOM").insert(el.left.container);el.right.dom={};el.right.dom.container=new pi.element("DIV").attribute.addClass("DOM Container").insert(el.right.container);el.button.dom={};el.button.dom.container=new pi.element("DIV").attribute.addClass("ButtonSet DOM").insert(el.button.container);el.button.dom.label=new pi.element("LABEL").update("Object Path:").insert(el.button.dom.container);el.button.dom.textbox=new pi.element("INPUT").event.addListener("keydown",listen.domTextbox).update("window").insert(el.button.dom.container);el.left.str={};el.left.str.container=new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);el.right.str={};el.right.str.container=new pi.element("DIV").attribute.addClass("STR").insert(el.left.container);el.button.str={};el.button.str.container=new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);el.button.str.watch=new pi.element("A").attribute.addClass("Button").event.addListener("click",d.navigate.curry(window,"xhr")).update("Back").insert(el.button.str.container);el.left.xhr={};el.left.xhr.container=new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);el.right.xhr={};el.right.xhr.container=new pi.element("DIV").attribute.addClass("XHR").insert(el.left.container);el.button.xhr={};el.button.xhr.container=new pi.element("DIV").attribute.addClass("ButtonSet XHR").insert(el.button.container);el.button.xhr.label=new pi.element("LABEL").update("XHR Path:").insert(el.button.xhr.container);el.button.xhr.textbox=new pi.element("INPUT").event.addListener("keydown",listen.xhrTextbox).insert(el.button.xhr.container);el.button.xhr.watch=new pi.element("A").attribute.addClass("Button").event.addListener("click",listen.addXhrObject).update("Watch").insert(el.button.xhr.container);if(pi.env.ie6){var buttons=[el.button.inspect,el.button.close,el.button.inspect,el.button.console.clear,el.right.console.run,el.right.console.clear,el.right.css.run,el.right.css.clear];for(var i=0;i>> console.dir("+_value+")");d.dom.open(_value,d.console.addLine())}},addLine:function(){with(firebug){return new pi.element("DIV").attribute.addClass("Row").insert(el.left.console.monitor)}},openObject:function(_index){with(firebug){d.dom.open(env.objCn[_index],el.left.dom.container,pi.env.ie);d.navigate("dom")}},historyIndex:0,history:[],log:function(_values){with(firebug){if(env.init==false){env.ctmp.push(arguments);return}var value="";for(var i=0;i0?" ":"")+d.highlight(arguments[i],false,false,true)}d.console.addLine().update(value);d.console.scroll()}},print:function(_cmd,_text){with(firebug){d.console.addLine().attribute.addClass("Arrow").update(">>> "+_cmd);d.console.addLine().update(d.highlight(_text,false,false,true));d.console.scroll();d.console.historyIndex=d.console.history.push(_cmd)}},run:function(cmd){with(firebug){if(cmd.length==0)return;el.left.console.input.environment.getElement().value="";try{var result=eval.call(window,cmd);d.console.print(cmd,result)}catch(e){d.console.addLine().attribute.addClass("Arrow").update(">>> "+cmd);if(!pi.env.ff){d.console.scroll();return d.console.addLine().attribute.addClass("Error").update("Error: "+(e.description||e),true)}if(e.fileName==null){d.console.addLine().attribute.addClass("Error").update("Error: "+e.message,true)}var fileName=e.fileName.split("\/").getLastItem();d.console.addLine().attribute.addClass("Error").update("Error: "+e.message+" ("+fileName+","+e.lineNumber+")",true);d.console.scroll()}d.console.scroll()}},scroll:function(){with(firebug){el.left.console.monitor.environment.getElement().parentNode.scrollTop=Math.abs(el.left.console.monitor.environment.getSize().offsetHeight-200)}},toggleML:function(){with(firebug){var open=!env.ml;env.ml=!env.ml;d.navigateRightColumn("console",open);el[open?"left":"right"].console.mlButton.environment.addStyle({display:"none"});el[!open?"left":"right"].console.mlButton.environment.addStyle({display:"block"});el.left.console.monitor.environment.addStyle({"height":(open?233:210)+"px"});el.left.console.mlButton.attribute[(open?"add":"remove")+"Class"]("CloseML")}}},css:{index:-1,open:function(_index){with(firebug){var item=document.styleSheets[_index];var uri=item.href;if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){el.left.css.container.update("Access to restricted URI denied");return}var rules=item[pi.env.ie?"rules":"cssRules"];var str="";for(var i=0;i";for(var i=0;i<_css.length;i++){var item=_css[i];str+="
"+item.replace(/(.+\:)(.+)/,"$1$2;")+"
"}str+="
}
";return str}},refresh:function(){with(firebug){el.button.css.selectbox.update("");var collection=document.styleSheets;for(var i=0;i-1){if(_value==null){return"null"}if(["boolean","number"].indexOf(typeof _value)>-1){return""+_value+""}if(typeof _value=="function"){return"function()"}return"\""+(!_inObject&&!_inArray?_value:_value.substring(0,35)).replace(/\n/g,"\\n").replace(/\s/g," ").replace(/>/g,">").replace(/"}else if(isElement){if(_value.nodeType==3)return d.highlight(_value.nodeValue);if(_inArray||_inObject){var result=""+_value.nodeName.toLowerCase();if(_value.getAttribute&&_value.getAttribute("id"))result+="#"+_value.getAttribute("id")+"";var elClass=_value.getAttribute?_value.getAttribute(pi.env.ie?"className":"class"):"";if(elClass)result+="."+elClass.split(" ")[0]+"";return result+""}var result="<"+_value.nodeName.toLowerCase()+"";if(_value.attributes)for(var i=0;i<_value.attributes.length;i++){var item=_value.attributes[i];if(pi.env.ie&&Boolean(item.nodeValue)==false)continue;result+=" "+item.nodeName+"=\""+item.nodeValue+"\""}result+=">";return result}else if(isArray||["object","array"].indexOf(typeof _value)>-1){var result="";if(isArray||_value instanceof Array){if(_inObject)return"["+_value.length+"]";result+="[ ";for(var i=0;i<_value.length;i++){if((_inObject||_inArray)&&pi.env.ie&&i>3)break;result+=(i>0?", ":"")+d.highlight(_value[i],false,true,true)}result+=" ]";return result}if(_inObject)return"Object";result+="Object";var i=0;for(var key in _value){var value=_value[key];if((_inObject||_inArray)&&pi.env.ie&&i>3)break;result+=" "+key+"="+d.highlight(value,true);i++};result+="";return result}else{if(_inObject)return""+_value+"";return _value}}},html:{nIndex:"computedStyle",current:null,highlight:function(_element,_clear,_event){with(firebug){if(_clear){el.bgInspector.environment.addStyle({"display":"none"});return}d.inspector.inspect(_element,true)}},inspect:function(_element){var el=_element,map=[],parent=_element;while(parent){map.push(parent);if(parent==document.body)break;parent=parent.parentNode}map=map.reverse();with(firebug){d.inspector.toggle();var parentLayer=el.left.html.container.child.get()[1].childNodes[1].pi;for(var t=0;map[t];){if(t==map.length-1){var link=parentLayer.environment.getElement().previousSibling.pi;link.attribute.addClass("Selected");if(d.html.current)d.html.current[1].attribute.removeClass("Selected");d.html.current=[_element,link];return;t}parentLayer=d.html.openHtmlTree(map[t],parentLayer,map[t+1]);t++}}},navigate:function(_index,_element){with(firebug){el.right.html.nav[d.html.nIndex].attribute.removeClass("Selected");el.right.html.nav[_index].attribute.addClass("Selected");d.html.nIndex=_index;d.html.openProperties()}},openHtmlTree:function(_element,_parent,_returnParentElementByElement,_event){with(firebug){var element=_element||document.documentElement,parent=_parent||el.left.html.container,returnParentEl=_returnParentElementByElement||null,returnParentVal=null;if(parent!=el.left.html.container){var nodeLink=parent.environment.getParent().pi.child.get()[0].pi;if(d.html.current)d.html.current[1].attribute.removeClass("Selected");nodeLink.attribute.addClass("Selected");d.html.current=[_element,nodeLink];d.html.openProperties()}if(element.childNodes&&(element.childNodes.length==0||(element.childNodes.length==1&&element.childNodes[0].nodeType==3)))return;parent.clean();if(parent.opened&&Boolean(_returnParentElementByElement)==false){parent.opened=false;parent.environment.getParent().pi.child.get()[0].pi.attribute.removeClass("Open");return}if(parent!=el.left.html.container){parent.environment.getParent().pi.child.get()[0].pi.attribute.addClass("Open");parent.opened=true}for(var i=0;i"));continue}else if(item.childNodes&&item.childNodes.length==0)continue;link.attribute.addClass("ParentLink")}return returnParentVal}},openProperties:function(){with(firebug){var index=d.html.nIndex;var node=d.html.current[0];d.clean(el.right.html.content);var str="";switch(index){case"computedStyle":var property=["opacity","filter","azimuth","background","backgroundAttachment","backgroundColor","backgroundImage","backgroundPosition","backgroundRepeat","border","borderCollapse","borderColor","borderSpacing","borderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderWidth","bottom","captionSide","clear","clip","color","content","counterIncrement","counterReset","cue","cueAfter","cueBefore","cursor","direction","display","elevation","emptyCells","cssFloat","font","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","height","left","letterSpacing","lineHeight","listStyle","listStyleImage","listStylePosition","listStyleType","margin","marginTop","marginRight","marginBottom","marginLeft","markerOffset","marks","maxHeight","maxWidth","minHeight","minWidth","orphans","outline","outlineColor","outlineStyle","outlineWidth","overflow","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","page","pageBreakAfter","pageBreakBefore","pageBreakInside","pause","pauseAfter","pauseBefore","pitch","pitchRange","playDuring","position","quotes","richness","right","size","speak","speakHeader","speakNumeral","speakPunctuation","speechRate","stress","tableLayout","textAlign","textDecoration","textIndent","textShadow","textTransform","top","unicodeBidi","verticalAlign","visibility","voiceFamily","volume","whiteSpace","widows","width","wordSpacing","zIndex"].sort();var view=document.defaultView?document.defaultView.getComputedStyle(node,null):node.currentStyle;for(var i=0;i
"+item+"
"+d.highlight(view[item])+"
"}el.right.html.content.update(str);break;case"dom":d.dom.open(node,el.right.html.content,pi.env.ie);break}}}},inspector:{enabled:false,el:null,inspect:function(_element,_bgInspector){var el=_element,top=el.offsetTop,left=el.offsetLeft,parent=_element.offsetParent;while(Boolean(parent)&&parent!=document.firstChild){top+=parent.offsetTop;left+=parent.offsetLeft;parent=parent.offsetParent;if(parent==document.body)break};with(firebug){el[_bgInspector?"bgInspector":"borderInspector"].environment.addStyle({"width":_element.offsetWidth+"px","height":_element.offsetHeight+"px","top":top-(_bgInspector?0:2)+"px","left":left-(_bgInspector?0:2)+"px","display":"block"});if(!_bgInspector){d.inspector.el=_element}}},toggle:function(){with(firebug){d.inspector.enabled=!d.inspector.enabled;el.button.inspect.attribute[(d.inspector.enabled?"add":"remove")+"Class"]("Enabled");if(d.inspector.enabled==false){el.borderInspector.environment.addStyle({"display":"none"});d.inspector.el=null}else if(pi.env.dIndex!="html"){d.navigate("html")}}}},scripts:{index:-1,lineNumbers:false,open:function(_index){with(firebug){d.scripts.index=_index;el.left.scripts.container.update("");var script=document.getElementsByTagName("script")[_index],uri=script.src||document.location.href,source;if(uri.indexOf("http:\/\/")>-1&&getDomain(uri)!=document.domain){el.left.scripts.container.update("Access to restricted URI denied");return}if(uri!=document.location.href){source=env.cache[uri]||pi.xhr.get(uri).responseText;env.cache[uri]=source}else source=script.innerHTML;source=source.replace(/\n|\t|<|>/g,function(_ch){return({"<":"<",">":">","\t":"        ","\n":"
"})[_ch]});if(!d.scripts.lineNumbers)el.left.scripts.container.child.add(new pi.element("DIV").attribute.addClass("CodeContainer").update(source));else{source=source.split("
");for(var i=0;i"))}}},xhr:{objects:[],addObject:function(){with(firebug){for(var i=0;id.console.historyIndex?d.console.history[d.console.historyIndex]:"")}},cssSelectbox:function(){with(firebug){d.css.open(el.button.css.selectbox.environment.getElement().selectedIndex)}},domTextbox:function(_event){with(firebug){if(_event.keyCode==13){d.dom.open(eval(el.button.dom.textbox.environment.getElement().value),el.left.dom.container)}}},inspector:function(){with(firebug){d.html.inspect(d.inspector.el)}},keyboard:function(_event){with(firebug){if(_event.keyCode==27&&d.inspector.enabled)d.inspector.toggle()}},mouse:function(_event){with(firebug){var target=_event[pi.env.ie?"srcElement":"target"];if(d.inspector.enabled&&target!=document.body&&target!=document.firstChild&&target!=document.childNodes[1]&&target!=el.borderInspector.environment.getElement()&&target!=el.main.environment.getElement()&&target.offsetParent!=el.main.environment.getElement())d.inspector.inspect(target)}},runMultiline:function(){with(firebug){d.console.run.call(window,el.right.console.input.environment.getElement().value)}},runCSS:function(){with(firebug){var source=el.right.css.input.environment.getElement().value.replace(/\n|\t/g,"").split("}");for(var i=0;i0?collection[0]:document.body.appendChild(document.createElement("style"));if(!item.match(/.+\{.+\}/))continue;if(pi.env.ie)style.styleSheet.addRule(rule[0],rule[1]);else style.sheet.insertRule(rule,style.sheet.cssRules.length)}}},scriptsSelectbox:function(){with(firebug){d.scripts.open(parseInt(el.button.scripts.selectbox.environment.getElement().value))}},xhrTextbox:function(_event){with(firebug){if(_event.keyCode==13){d.xhr.addObject.apply(window,el.button.xhr.textbox.environment.getElement().value.split(","))}}}}};window.console=firebug.d.console;pi.util.AddEvent(window,"resize",firebug.d.refreshSize);pi.util.AddEvent(document,"mousemove",firebug.listen.mouse);pi.util.AddEvent(document,"keydown",firebug.listen.keyboard);pi.util.DOMContentLoaded.push(firebug.init); \ No newline at end of file diff --git a/ui/lib/jquery.js b/ui/lib/jquery.js deleted file mode 100755 index 88e661e..0000000 --- a/ui/lib/jquery.js +++ /dev/null @@ -1,3549 +0,0 @@ -(function(){ -/* - * jQuery 1.2.6 - New Wave Javascript - * - * Copyright (c) 2008 John Resig (jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ - * $Rev: 5685 $ - */ - -// Map over jQuery in case of overwrite -var _jQuery = window.jQuery, -// Map over the $ in case of overwrite - _$ = window.$; - -var jQuery = window.jQuery = window.$ = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); -}; - -// A simple way to check for HTML strings or ID strings -// (both of which we optimize for) -var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, - -// Is it a simple selector - isSimple = /^.[^:#\[\.]*$/, - -// Will speed up references to undefined, and allows munging its name. - undefined; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - return this; - } - // Handle HTML strings - if ( typeof selector == "string" ) { - // Are we dealing with HTML string or an ID? - var match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) - selector = jQuery.clean( [ match[1] ], context ); - - // HANDLE: $("#id") - else { - var elem = document.getElementById( match[3] ); - - // Make sure an element was located - if ( elem ){ - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id != match[3] ) - return jQuery().find( selector ); - - // Otherwise, we inject the element directly into the jQuery object - return jQuery( elem ); - } - selector = []; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery( context ).find( selector ); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); - - return this.setArray(jQuery.makeArray(selector)); - }, - - // The current version of jQuery being used - jquery: "1.2.6", - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - // The number of elements contained in the matched element set - length: 0, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == undefined ? - - // Return a 'clean' array - jQuery.makeArray( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - // Build a new jQuery matched element set - var ret = jQuery( elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - var ret = -1; - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - var options = name; - - // Look for the case where we're accessing a style value - if ( name.constructor == String ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - if ( typeof text != "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - if ( this[0] ) - // The elements to wrap the target around - jQuery( html, this[0].ownerDocument ) - .clone() - .insertBefore( this[0] ) - .map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }) - .append(this); - - return this; - }, - - wrapInner: function( html ) { - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - return this.domManip(arguments, true, false, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - return this.domManip(arguments, true, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - return this.domManip(arguments, false, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - return this.domManip(arguments, false, true, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - return this.prevObject || jQuery( [] ); - }, - - find: function( selector ) { - var elems = jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - }); - - return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? - jQuery.unique( elems ) : - elems ); - }, - - clone: function( events ) { - // Do the clone - var ret = this.map(function(){ - if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var clone = this.cloneNode(true), - container = document.createElement("div"); - container.appendChild(clone); - return jQuery.clean([container.innerHTML])[0]; - } else - return this.cloneNode(true); - }); - - // Need to set the expando to null on the cloned set if it exists - // removeData doesn't work here, IE removes it from the original as well - // this is primarily for IE but the data expando shouldn't be copied over in any browser - var clone = ret.find("*").andSelf().each(function(){ - if ( this[ expando ] != undefined ) - this[ expando ] = null; - }); - - // Copy the events from the original to the clone - if ( events === true ) - this.find("*").andSelf().each(function(i){ - if (this.nodeType == 3) - return; - var events = jQuery.data( this, "events" ); - - for ( var type in events ) - for ( var handler in events[ type ] ) - jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); - }); - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, this ) ); - }, - - not: function( selector ) { - if ( selector.constructor == String ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ) ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector == 'string' ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - return this.is( "." + selector ); - }, - - val: function( value ) { - if ( value == undefined ) { - - if ( this.length ) { - var elem = this[0]; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type == "select-one"; - - // Nothing was selected - if ( index < 0 ) - return null; - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc value for the option - value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; - - // We don't need an array for one selects - if ( one ) - return value; - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - - // Everything else, we just grab the value - } else - return (this[0].value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if( value.constructor == Number ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - return value == undefined ? - (this[0] ? - this[0].innerHTML : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - return this.after( value ).remove(); - }, - - eq: function( i ) { - return this.slice( i, i + 1 ); - }, - - slice: function() { - return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - return this.add( this.prevObject ); - }, - - data: function( key, value ){ - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - if ( data === undefined && this.length ) - data = jQuery.data( this[0], key ); - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } else - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ - jQuery.data( this, key, value ); - }); - }, - - removeData: function( key ){ - return this.each(function(){ - jQuery.removeData( this, key ); - }); - }, - - domManip: function( args, table, reverse, callback ) { - var clone = this.length > 1, elems; - - return this.each(function(){ - if ( !elems ) { - elems = jQuery.clean( args, this.ownerDocument ); - - if ( reverse ) - elems.reverse(); - } - - var obj = this; - - if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) - obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); - - var scripts = jQuery( [] ); - - jQuery.each(elems, function(){ - var elem = clone ? - jQuery( this ).clone( true )[0] : - this; - - // execute all scripts after the elements have been injected - if ( jQuery.nodeName( elem, "script" ) ) - scripts = scripts.add( elem ); - else { - // Remove any inner scripts for later evaluation - if ( elem.nodeType == 1 ) - scripts = scripts.add( jQuery( "script", elem ).remove() ); - - // Inject the elements into the document - callback.call( obj, elem ); - } - }); - - scripts.each( evalScript ); - }); - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // Handle a deep copy situation - if ( target.constructor == Boolean ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target != "object" && typeof target != "function" ) - target = {}; - - // extend jQuery itself if only one argument is passed - if ( length == i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) - // Extend the base object - for ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy == "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -var expando = "jQuery" + now(), uuid = 0, windowData = {}, - // exclude the following css properties to add px - exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // See test/unit/core.js for details concerning this function. - isFunction: function( fn ) { - return !!fn && typeof fn != "string" && !fn.nodeName && - fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - return elem.documentElement && !elem.body || - elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - data = jQuery.trim( data ); - - if ( data ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.browser.msie ) - script.text = data; - else - script.appendChild( document.createTextNode( data ) ); - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - cache: {}, - - data: function( elem, name, data ) { - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ]; - - // Compute a unique ID for the element - if ( !id ) - id = elem[ expando ] = ++uuid; - - // Only generate the data cache if we're - // trying to access or manipulate it - if ( name && !jQuery.cache[ id ] ) - jQuery.cache[ id ] = {}; - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) - jQuery.cache[ id ][ name ] = data; - - // Return the named cache data, or the ID for the element - return name ? - jQuery.cache[ id ][ name ] : - id; - }, - - removeData: function( elem, name ) { - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ]; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( jQuery.cache[ id ] ) { - // Remove the section of cache data - delete jQuery.cache[ id ][ name ]; - - // If we've removed all the data, remove the element's cache - name = ""; - - for ( name in jQuery.cache[ id ] ) - break; - - if ( !name ) - jQuery.removeData( elem ); - } - - // Otherwise, we want to remove all of the element's data - } else { - // Clean up the element expando - try { - delete elem[ expando ]; - } catch(e){ - // IE has trouble directly removing the expando - // but it's ok with using removeAttribute - if ( elem.removeAttribute ) - elem.removeAttribute( expando ); - } - - // Completely remove the data cache - delete jQuery.cache[ id ]; - } - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, length = object.length; - - if ( args ) { - if ( length == undefined ) { - for ( name in object ) - if ( callback.apply( object[ name ], args ) === false ) - break; - } else - for ( ; i < length; ) - if ( callback.apply( object[ i++ ], args ) === false ) - break; - - // A special, fast, case for the most common use of each - } else { - if ( length == undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - if (elem.nodeType == 1) - elem.className = classNames != undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force ) { - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - var padding = 0, border = 0; - jQuery.each( which, function() { - padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - val -= Math.round(padding + border); - } - - if ( jQuery(elem).is(":visible") ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, val); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - var ret, style = elem.style; - - // A helper method for determining if an element's values are broken - function color( elem ) { - if ( !jQuery.browser.safari ) - return false; - - // defaultView is cached - var ret = defaultView.getComputedStyle( elem, null ); - return !ret || ret.getPropertyValue("color") == ""; - } - - // We need to handle opacity special in IE - if ( name == "opacity" && jQuery.browser.msie ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - // Opera sometimes will give the wrong display answer, this fixes it, see #2037 - if ( jQuery.browser.opera && name == "display" ) { - var save = style.outline; - style.outline = "0 solid black"; - style.outline = save; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle && !color( elem ) ) - ret = computedStyle.getPropertyValue( name ); - - // If the element isn't reporting its values properly in Safari - // then some display: none elements are involved - else { - var swap = [], stack = [], a = elem, i = 0; - - // Locate all of the parent display: none elements - for ( ; a && color(a); a = a.parentNode ) - stack.unshift(a); - - // Go through and make them visible, but in reverse - // (It would be better if we knew the exact display type that they had) - for ( ; i < stack.length; i++ ) - if ( color( stack[ i ] ) ) { - swap[ i ] = stack[ i ].style.display; - stack[ i ].style.display = "block"; - } - - // Since we flip the display style, we have to handle that - // one special, otherwise get the value - ret = name == "display" && swap[ stack.length - 1 ] != null ? - "none" : - ( computedStyle && computedStyle.getPropertyValue( name ) ) || ""; - - // Finally, revert the display styles back - for ( i = 0; i < swap.length; i++ ) - if ( swap[ i ] != null ) - stack[ i ].style.display = swap[ i ]; - } - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context ) { - var ret = []; - context = context || document; - // !context.createElement fails in IE with an error but returns typeof 'object' - if (typeof context.createElement == 'undefined') - context = context.ownerDocument || context[0] && context[0].ownerDocument || document; - - jQuery.each(elems, function(i, elem){ - if ( !elem ) - return; - - if ( elem.constructor == Number ) - elem += ''; - - // Convert html string into DOM nodes - if ( typeof elem == "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
" ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and