From 69f0135c8d6291297fa5796bb5beee41e4d120ad Mon Sep 17 00:00:00 2001 From: charles-sharman Date: Wed, 11 Mar 2015 10:49:17 -0600 Subject: [PATCH] Fixed linux display, triedron, lighting. --- MANIFEST.in | 2 + PKG-INFO | 2 +- README | 3 + display.py | 101 +- doc/conf.py | 4 +- doc/display_hlr.png | Bin 0 -> 7692 bytes doc/display_shaded.png | Bin 0 -> 13072 bytes doc/display_spherebox1.png | Bin 0 -> 9353 bytes doc/display_wireframe.png | Bin 0 -> 8511 bytes doc/example1_all_bricks.png | Bin 0 -> 19564 bytes doc/html/.buildinfo | 2 +- doc/html/_images/boolean_common.png | Bin 11513 -> 12205 bytes doc/html/_images/boolean_cut.png | Bin 15139 -> 15529 bytes doc/html/_images/boolean_fuse.png | Bin 9728 -> 10150 bytes doc/html/_images/boolean_glue.png | Bin 4223 -> 4586 bytes doc/html/_images/brick_bottom.png | Bin 4559 -> 4945 bytes doc/html/_images/brick_iso.png | Bin 5169 -> 5338 bytes doc/html/_images/brick_side.png | Bin 1779 -> 2104 bytes doc/html/_images/brick_top.png | Bin 4147 -> 4498 bytes doc/html/_images/cube_edge.png | Bin 4283 -> 4646 bytes doc/html/_images/cube_face.png | Bin 4243 -> 4621 bytes doc/html/_images/cube_solid.png | Bin 4268 -> 4609 bytes doc/html/_images/cube_vertex.png | Bin 4280 -> 4648 bytes doc/html/_images/cube_wire.png | Bin 4385 -> 4766 bytes doc/html/_images/derived_helical_solid.png | Bin 9017 -> 9445 bytes doc/html/_images/derived_loft.png | Bin 12905 -> 14072 bytes doc/html/_images/derived_offset_face.png | Bin 3780 -> 3861 bytes doc/html/_images/derived_offset_solid.png | Bin 20757 -> 12998 bytes doc/html/_images/derived_pipe.png | Bin 8339 -> 8654 bytes doc/html/_images/derived_prism.png | Bin 3685 -> 4014 bytes doc/html/_images/derived_revol.png | Bin 13924 -> 14389 bytes doc/html/_images/derived_slice.png | Bin 2221 -> 2939 bytes doc/html/_images/display_display.png | Bin 22721 -> 16766 bytes doc/html/_images/edge_arc.png | Bin 2883 -> 3181 bytes doc/html/_images/edge_arc_ellipse.png | Bin 2645 -> 2847 bytes doc/html/_images/edge_bezier.png | Bin 2884 -> 3181 bytes doc/html/_images/edge_circle.png | Bin 3711 -> 3904 bytes doc/html/_images/edge_ellipse.png | Bin 3196 -> 3364 bytes doc/html/_images/edge_segment.png | Bin 2076 -> 2273 bytes doc/html/_images/edge_spline.png | Bin 2563 -> 2763 bytes doc/html/_images/example1_box.png | Bin 4327 -> 4698 bytes doc/html/_images/example1_boxwknob.png | Bin 5245 -> 5665 bytes doc/html/_images/example1_boxwknobs.png | Bin 11608 -> 12453 bytes doc/html/_images/example1_brick.png | Bin 11786 -> 11989 bytes doc/html/_images/example1_brickpost.png | Bin 13597 -> 13901 bytes doc/html/_images/example1_innerbrick.png | Bin 5827 -> 6045 bytes .../_images/example1_innerbrickfillet.png | Bin 11042 -> 11080 bytes doc/html/_images/example1_outerbrick.png | Bin 20923 -> 21465 bytes doc/html/_images/example1_post.png | Bin 6426 -> 7041 bytes doc/html/_images/face_face_from.png | Bin 4442 -> 4423 bytes doc/html/_images/face_filling.png | Bin 15172 -> 15516 bytes doc/html/_images/face_plane.png | Bin 3486 -> 3622 bytes doc/html/_images/from_svg.png | Bin 4333 -> 4708 bytes doc/html/_images/logging_face_fillet.png | Bin 2107 -> 2445 bytes doc/html/_images/logging_solid_chamfer.png | Bin 4276 -> 4628 bytes doc/html/_images/logging_solid_draft.png | Bin 4261 -> 4634 bytes doc/html/_images/logging_solid_fillet.png | Bin 7973 -> 8290 bytes doc/html/_images/logging_solid_simplify1.png | Bin 4430 -> 4795 bytes doc/html/_images/logging_solid_simplify2.png | Bin 4249 -> 4620 bytes doc/html/_images/solid_box.png | Bin 3581 -> 3934 bytes doc/html/_images/solid_cone.png | Bin 10560 -> 10841 bytes doc/html/_images/solid_cylinder.png | Bin 5240 -> 4925 bytes doc/html/_images/solid_sphere.png | Bin 17476 -> 18023 bytes doc/html/_images/solid_torus.png | Bin 14001 -> 14521 bytes doc/html/_images/solid_wedge.png | Bin 3576 -> 3948 bytes doc/html/_images/trms_mirror.png | Bin 3538 -> 3835 bytes doc/html/_images/trms_rotate.png | Bin 3526 -> 3885 bytes doc/html/_images/trms_scale.png | Bin 3219 -> 3752 bytes doc/html/_images/trms_translate.png | Bin 2808 -> 3178 bytes doc/html/_images/wire.png | Bin 2974 -> 3109 bytes doc/html/_images/wire_helix.png | Bin 3359 -> 3768 bytes doc/html/_images/wire_ngon.png | Bin 3471 -> 3686 bytes doc/html/_images/wire_polygon.png | Bin 3459 -> 3639 bytes doc/html/_images/wire_rectangle.png | Bin 2086 -> 2268 bytes doc/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes doc/html/_static/basic.css | 137 +- doc/html/_static/comment-bright.png | Bin 0 -> 3500 bytes doc/html/_static/comment-close.png | Bin 0 -> 3578 bytes doc/html/_static/comment.png | Bin 0 -> 3445 bytes doc/html/_static/doctools.js | 59 +- doc/html/_static/down-pressed.png | Bin 0 -> 368 bytes doc/html/_static/down.png | Bin 0 -> 363 bytes doc/html/_static/jquery.js | 9056 +++++++++++------ doc/html/_static/pygments.css | 123 +- doc/html/_static/searchtools.js | 191 +- doc/html/_static/sphinxdoc.css | 24 +- doc/html/_static/underscore.js | 807 ++ doc/html/_static/up-pressed.png | Bin 0 -> 372 bytes doc/html/_static/up.png | Bin 0 -> 363 bytes doc/html/_static/websupport.js | 808 ++ doc/html/boolean.html | 90 +- doc/html/configuring_display.html | 80 +- doc/html/contents.html | 126 +- doc/html/controlling_display.html | 108 +- doc/html/creating_derived.html | 90 +- doc/html/creating_edges.html | 90 +- doc/html/creating_faces.html | 82 +- doc/html/creating_solids.html | 90 +- doc/html/creating_wires.html | 86 +- doc/html/details.html | 94 +- doc/html/displaying.html | 138 +- doc/html/example1.html | 86 +- doc/html/example1_brickpy.html | 70 +- doc/html/example1_drawings.html | 80 +- doc/html/example1_multibrick.html | 70 +- doc/html/example1_nuances.html | 64 +- doc/html/example1_singlebrick.html | 70 +- doc/html/file_transfer.html | 88 +- doc/html/genindex.html | 60 +- doc/html/interactive.html | 78 +- doc/html/intro.html | 78 +- doc/html/logging.html | 146 +- doc/html/modelling.html | 196 +- doc/html/objects.inv | Bin 61 -> 201 bytes doc/html/search.html | 30 +- doc/html/searchindex.js | 2 +- doc/html/stand_alone.html | 70 +- doc/html/trms.html | 84 +- doc/html/using_display.html | 110 +- doc/logo.png | Bin 0 -> 13216 bytes doc/select_edge.png | Bin 0 -> 7627 bytes doc/select_face.png | Bin 0 -> 8060 bytes doc/select_vertex.png | Bin 0 -> 7695 bytes doc/sphere_example.png | Bin 0 -> 13704 bytes model.py | 7 +- setup.py | 2 +- unittest/model_unittest.py | 21 +- 127 files changed, 9488 insertions(+), 4317 deletions(-) create mode 100644 doc/display_hlr.png create mode 100644 doc/display_shaded.png create mode 100644 doc/display_spherebox1.png create mode 100644 doc/display_wireframe.png create mode 100644 doc/example1_all_bricks.png create mode 100644 doc/html/_static/ajax-loader.gif create mode 100644 doc/html/_static/comment-bright.png create mode 100644 doc/html/_static/comment-close.png create mode 100644 doc/html/_static/comment.png create mode 100644 doc/html/_static/down-pressed.png create mode 100644 doc/html/_static/down.png create mode 100644 doc/html/_static/underscore.js create mode 100644 doc/html/_static/up-pressed.png create mode 100644 doc/html/_static/up.png create mode 100644 doc/html/_static/websupport.js create mode 100644 doc/logo.png create mode 100644 doc/select_edge.png create mode 100644 doc/select_face.png create mode 100644 doc/select_vertex.png create mode 100644 doc/sphere_example.png diff --git a/MANIFEST.in b/MANIFEST.in index 1de969c..ced4904 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -3,6 +3,8 @@ global-exclude * include README LICENSE AUTHORS TODO setup.py MANIFEST.in include __init__.py model.py display.py include doc/*.rst doc/*.py doc/*.svg +# These includes are captured with xwd +include doc/example1_all_bricks.png doc/logo.png doc/sphere_example.png doc/display_spherebox1.png doc/display_wireframe.png doc/display_shaded.png doc/display_hlr.png doc/select_face.png doc/select_edge.png doc/select_vertex.png include unittest/*.py recursive-include doc/html * prune doc/html/.* diff --git a/PKG-INFO b/PKG-INFO index c59123a..591c9a7 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: ccad -Version: 0.12 +Version: 0.13 Summary: UNKNOWN Home-page: UNKNOWN Author: UNKNOWN diff --git a/README b/README index 01152d4..e0e6a4c 100644 --- a/README +++ b/README @@ -78,6 +78,9 @@ committing.** To Build the Documentation (only for developers) ================================================ +Some files are captured with xwd (window dump). They're commented in +MANIFEST.in. The remaining are generated with generate_images.py. + cd ccad-ver/doc python generate_images.py sphinx-build . html diff --git a/display.py b/display.py index 1826e49..cf9c424 100644 --- a/display.py +++ b/display.py @@ -27,7 +27,7 @@ from __future__ import print_function # Globals -version = '0.12' # Change also in setup.py, doc/conf.py +version = '0.13' # Change also in setup.py, doc/conf.py interactive = True manager = 'qt' app = None @@ -40,13 +40,15 @@ try: from PyQt4 import QtCore as _QtCore, QtGui as _QtGui except ImportError: - from PySide import QtCore as _QtCore, QtGui as _QtGui - manager = 'none' - print(""" -Warning: Cannot find python-qt4. You will not be able to use ccad's -display. Instead, you may use pythonocc's viewers. ccad shapes may -be displayed in pythonocc's viewers by using the .shape attribute. -For example: + try: + from PySide import QtCore as _QtCore, QtGui as _QtGui + except: + manager = 'none' + print(""" +Warning: Cannot find python-qt4 or pyside. You will not be able to +use ccad's display. Instead, you may use pythonocc's viewers. ccad +shapes may be displayed in pythonocc's viewers by using the .shape +attribute. For example: import ccad.model as cm import OCC.Display.SimpleGui as SimpleGui @@ -69,13 +71,7 @@ _TCollection_ExtendedString) from OCC.TopExp import TopExp_Explorer as _TopExp_Explorer from OCC.Visual3d import Visual3d_ViewOrientation as _Visual3d_ViewOrientation -# Use lower level window routines for linux to allow multiple viewing -# windows. Doesn't work on other platforms. -if _sys.platform.startswith('linux'): - from OCC.Xw import (Xw_Window as _Xw_Window, - Xw_WQ_3DQUALITY as _Xw_WQ_3DQUALITY) -else: - from OCC.Visualization import Display3d as _Display3d +from OCC.Visualization import Display3d as _Display3d import ccad.model as _cm @@ -286,8 +282,7 @@ def __init__(self, perspective=False): # Some Initial Values self.mode_shaded() - self.glarea.occ_view.SetBackgroundColor( - _Quantity.Quantity_TOC_RGB, 0.0, 0.0, 0.0) + self.set_background((0.0, 0.0, 0.0)) self.set_triedron(1) # Set up some initial states @@ -346,7 +341,6 @@ def keyPressEvent(self, event): self.status_bar.setText('Key ' + hex(key)) if key in self.key_table.values(): try: - print('Got to 2') cmd = self.key_table.keys()[self.key_table.values().index(key)] eval('self.' + cmd) except: @@ -370,7 +364,6 @@ def mouseReleaseEvent(self, event): if self.glarea.occ_context.MoreSelected(): if self.glarea.occ_context.HasSelectedShape(): self.selected = self.glarea.occ_context.SelectedShape() - #print "Current selection (single):",self.selected_shape else: self.selected = None self.make_selection() @@ -594,7 +587,7 @@ def set_foreground(self, color): """ self.foreground = color - def set_triedron(self, state, position='down_right', + def set_triedron(self, state, position='bottom_right', color=(1.0, 1.0, 1.0), size=0.08): """ Controls the triedron, the little x, y, z coordinate display. @@ -607,14 +600,14 @@ def set_triedron(self, state, position='down_right', if not state: self.glarea.occ_view.TriedronErase() else: - local_positions = {'down_right': _Aspect.Aspect_TOTP_RIGHT_LOWER, - 'down_left': _Aspect.Aspect_TOTP_LEFT_LOWER, - 'up_right': _Aspect.Aspect_TOTP_RIGHT_UPPER, - 'up_left': _Aspect.Aspect_TOTP_LEFT_UPPER} + local_positions = {'bottom_right': _Aspect.Aspect_TOTP_RIGHT_LOWER, + 'bottom_left': _Aspect.Aspect_TOTP_LEFT_LOWER, + 'top_right': _Aspect.Aspect_TOTP_RIGHT_UPPER, + 'top_left': _Aspect.Aspect_TOTP_LEFT_UPPER} local_position = local_positions[position] # Can't set Triedron color RGB-wise! - #qcolor = Quantity_Color( - # color[0], color[1], color[2], Quantity_TOC_RGB) + #qcolor = _Quantity.Quantity_Color( + # color[0], color[1], color[2], _Quantity.Quantity_TOC_RGB) if color == (1.0, 1.0, 1.0): qcolor = _Quantity.Quantity_NOC_WHITE else: @@ -622,7 +615,8 @@ def set_triedron(self, state, position='down_right', self.glarea.occ_view.TriedronDisplay(local_position, qcolor, size, - _V3d.V3d_WIREFRAME) + _V3d.V3d_ZBUFFER) + #_V3d.V3d_WIREFRAME) # Things to Show Functions def display(self, shape, color=None, material='default', transparency=0.0, @@ -685,7 +679,7 @@ def display(self, shape, color=None, material='default', transparency=0.0, # Set Color if not color: color = self.foreground - #print 'color', color + #print('color', color) #drawer = AIS_Drawer() #handle_drawer = drawer.GetHandle() @@ -719,7 +713,7 @@ def display(self, shape, color=None, material='default', transparency=0.0, # Set Shading Type aspect_shading = _Prs3d.Prs3d_ShadingAspect() handle_aspect_shading = aspect_shading.GetHandle() - #print 'shading color', color + #print('shading color', color) aspect_shading.SetColor(qcolor, _Aspect.Aspect_TOFM_BOTH_SIDE) local_materials = {'brass': _Graphic3d.Graphic3d_NOM_BRASS, 'bronze': _Graphic3d.Graphic3d_NOM_BRONZE, @@ -1013,7 +1007,7 @@ def about(self): _QtGui.QMessageBox.about( self, 'ccad viewer ' + str(version), - '\251 Copyright 2014 by Charles Sharman and Others') + '\251 Copyright 2015 by Charles Sharman and Others') def save(self, name=''): """ @@ -1090,42 +1084,17 @@ def start(self, perspective=False): # Set up the OCC hooks to the OpenGL space window_handle = int(self.winId()) - if _sys.platform.startswith('linux'): - # This lower level routine allows multiple viewing - # windows. Only works on linux. - gd = _Graphic3d.Graphic3d_GraphicDevice(_os.environ['DISPLAY']) - window = _Xw_Window( - gd.GetHandle(), - window_handle >> 16, - window_handle & 0xffff, - _Xw_WQ_3DQUALITY) - self.occ_viewer = _V3d.V3d_Viewer( - gd.GetHandle(), - _TCollection_ExtendedString('Viewer').ToExtString()) - handle_occ_viewer = self.occ_viewer.GetHandle() - self.occ_viewer.Init() - if perspective: - self.handle_view = self.occ_viewer.DefaultPerspectiveView() - else: - self.handle_view = self.occ_viewer.DefaultOrthographicView() - self.occ_view = self.handle_view.GetObject() - self.occ_view.SetWindow(window.GetHandle()) - if not window.IsMapped(): - window.Map() - self.occ_context = _AIS.AIS_InteractiveContext(handle_occ_viewer) - handle_occ_context = self.occ_context.GetHandle() - - else: - - self.d3d = _Display3d() - self.d3d.Init(window_handle) - - handle_occ_context = self.d3d.GetContext() - handle_occ_viewer = self.d3d.GetViewer() - self.handle_view = self.d3d.GetView() - self.occ_context = handle_occ_context.GetObject() - self.occ_viewer = handle_occ_viewer.GetObject() - self.occ_view = self.handle_view.GetObject() + self.d3d = _Display3d() + self.d3d.Init(window_handle) + + handle_occ_context = self.d3d.GetContext() + handle_occ_viewer = self.d3d.GetViewer() + self.handle_view = self.d3d.GetView() + self.occ_context = handle_occ_context.GetObject() + self.occ_viewer = handle_occ_viewer.GetObject() + self.occ_viewer.SetDefaultLights() + self.occ_viewer.SetLightOn() + self.occ_view = self.handle_view.GetObject() def sizeHint(self): return _QtCore.QSize(self.SCR[0], self.SCR[1]) diff --git a/doc/conf.py b/doc/conf.py index c028182..540a732 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -45,9 +45,9 @@ # built documents. # # The short X.Y version. -version = '0.12' # Change also in ../setup.py, ../display.py +version = '0.13' # Change also in ../setup.py, ../display.py # The full version, including alpha/beta/rc tags. -release = '0.12' +release = '0.13' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/doc/display_hlr.png b/doc/display_hlr.png new file mode 100644 index 0000000000000000000000000000000000000000..032ee223cd5fe02bf5440a02d2cdede256ec426f GIT binary patch literal 7692 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 DPOP{; literal 0 HcmV?d00001 diff --git a/doc/display_spherebox1.png b/doc/display_spherebox1.png new file mode 100644 index 0000000000000000000000000000000000000000..647b66daac881f0d17ef6a12b334d0d379d305dd GIT binary patch literal 9353 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 literal 0 HcmV?d00001 diff --git a/doc/example1_all_bricks.png b/doc/example1_all_bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..b2baee82bb3542e7925185d7805b19ac34e4c157 GIT binary patch literal 19564 zcmZU*by!?Y@Ffg{;OUy}jm6B?Ye>l3>`@zSwtn;t|_HhaYRCo=5eE!b*? zpuU<9q2l=v`ab42b*E927JsfC93cE>trn}n)91b>=fkcf#w+OQlO{Wlwy#0xyZ+>vzj z_wX|b*nqug&=^citY_ERX1sR(Ix|fOp{Qoob^lW(nm=!K*EyBMLa*{XZQY>lb(-1l z`L_<_ef!xyNe5)Nlwhm2ZD^ntL-MpdpX1RT3gMJ)myh{;-u~3mOv)y3r&=vG{SE~i_x(%yw{~>pM1su`gO3Hh+1=6Tki#)}xPD}p5s@+;>?1LcS0MAM_*So3W0eN}SDbY*Zty4bcCU?|sng1r1LtXi z)SG)Y3xeR-`t_>Iyn4O)K}SNq^SR5yV%Zk?(K;*knmS|L%bsWogK^>E(u$6d0QmJh?8F(7VrB_uEWzv+KGm zWiKN3>4{MY6*Gxp_O;oSAZ)TZ#{*fVj$84U_@K6pf2-Z-ez|kMTE*TLZ?ailtG&#R zvdpe(d@II%b(r|zcli|XB>;Y)d?8~hLhq8I($S8CAWF<+)1HS2B}6z^k%p4H^Ht;E z_^Gc}QlA^0{+k2s6pZLNz2*y)+q!D7suFAjo)zV~hp1WHC-%*tC9 z1uDcvi1{l4Qc%vnu%PTWp9f-yb&xB9KLzTt#%lil&f7hVe@OOy*H@P7A;A~y?wPmy z;L!7o^9p;uGVv&jmqDSYiie#m&Kz&>c)%TggHA;L=<6PcUNlREUk{uS^d_@Qj#a$^ zagiR)krBU6r|)&zup@V9r4QERA&MR_4%?6!!^KQ1_?WDzJZ>%NMC?CqU_0Ty-{}>@ zdw#M#6obF#%FBp@=$~#C^IVpj3)3AP%>)5*b{xdQDO8KWVml=Ep8|jvVA^1-Th4Bc0jW2267%l@gv@>Vp|x=8lzXEYXe zT`d{Bl$7S)YRogbKXs_NW}GG!+hM|gsPXYKcT&;wvANLz@f{zRjT?Mrxb>^slAQdb3$yG`pYm8WT7=M9zGCp|JAK_G8kssojXQ9FhgS zX7G3XxJ&j)1Rn;Xsn97@0MZiNGx{8Z}d2+9ip~lkK+wBPAVI!>}w%_Z+evY5Oto%)! z#up+KiF_rII01(SR+Nl!0)_B)9R8;}Ll*B*_z=ODf1DsttKZ!LV(D4C>uqn&M5gP+ zxS$GTig6Fc#QdClahCl({&cj|Rh7-N_gI&D<+}NV(wK(N<>9{0c>i&AkD~h$c-{MK zlJIBl#br{?7w~oYQInsS*8^)vlV7u=9t##sjrZ*5(}cnDOxEpbc(RersoxU<8D{#6 z>k^}OH%&L15MQqTutTgp8?N@hP!E}aH5tCuY9rH{FyQ>wuEdEj8>qYMniRn4X0G;% z%pnKBn^+@@^|9$_4ty2OJXq#!;!soLm6)N26t znP-`$=nVPXfxJPIhp(g=Gdd!4Y5NB5=u-vKz#oL*c$l>hOTtkwD=V{Hk^}e;L?DK# z!DO;Zoz4~AALrVKT^Gur-f(`kVMB3!MiK2BK}Q86RO3O9eX4bjvq*eYW?jt-pR_v5 z>7txWue1Br&q(Vw{dWpqz;F7#Es_Qs!u$?~YdC%IEZ+CFLpc{ON%R^xx3lQV{lmv& z;~6uj?q6Pa_vEAk&aSpjo7NYb9ky-TPK(YSuBR2&J@!|<_Wtr8|6zySFz)qWH<#zN zAC7jyk3TA}3AJOgc_)~l{_6i&XS)9j%9k*-dJ0+9*<6pYk+S&{VpC=d1-@f%gz3|@w z-(vm>EFU_T`J|m~ZHS=g{dQ&am&@R4LLqMSxcUY`TCL@DK^Ag*46)|tcSx0@yRx!! zV$XxZzY{A#>O(m;pL7JdX@6fPki&DgozyFVFC zcLJCaQ6yJaId9}x2)pgfP0K!Ok@z{@mtjknFTgt9UY2!2P^NRRN2>KE>QDt&?A~5* z88jg_k~9qXpF=4^&bf>)Az=j`5AvV6;`1Uj*xc6n%@;#RUw4_AtMBI>o5oyTkh!mq z5BD>#wg)0|4o^-J{al@$ne^N5Go5@h9dL(;e69u8o?-n{^gTy5?c1L(4ItVd1~Z08 zoMgLD45tdDxc{^|^aUfo_~@0A*e{3ZJX9na|eC&=*7K(Fun zuuJ;95t(7vYB?B*55d%WVE*QGSa>{F^>CGwt#!Hf1nkT=ml5@Gu9mjz^zyCD_^OCm zI|L=+N^O;Aqnp;xeG6P`G6c2I>T*0eMAY`&XZFGuJ;v1L-5s>yVDhm9(u7B|QK$iE}=3$!@ilm}k5(|9J z3p#K2LkE-j5EVLiBlRlsT92<@yyvUOHv+%!55q7&kG_yH=q)Yr^i0Ud{_V_(w3cUo>xbf}AaaE$Yk4!q?UE++TxmF~CQ26#cLIjonI-K5bb$a@0&Fg&CZM_4Q z*tur?+@RI@aD~_H?)+(yZzp=$4z|YU>DKEk&28;Z+64d8cdlys*$<817ug*9L!o@N zgJZtJOLLt+hoZNY66!SBj(eQ{__~q1{`LwOxYqME`AsL4AkVCIj^CSIkwQ*YB4YQ4 zuBTICw>6LDlSNKW&Upj3)uyf&Mqfs$TT`_f1r^3*LPkc$x2Kigm6es2+40#*`Qq}K zJYWUCN0l!mIUJT#B}x>(7lWn`iTFLQfekgU`##O8YMg^Cr|kUh+Q8dGAfo7%(Y~9T zn-pC~a3KHf@O|r);IG0$Gr&?!9>qy%gnI>M-<6{3LA@Viv?%DL*4=hwJvzA_=UvpW_I4!13WO+*^p=; z$@Y)48bJNyco}BBE?*H!46TNv_5GZj2+M(wxS4+I&rjzWes93roEN5Ofya^-r+pHS zesqXvo~_XL_deH3FRM3N<~c8OI(8oedQO*{0AKwJJeh>uW9b|J!)b+%tx*HJrTWs} zzpsF!jRRR*S>w0eoC#0*6 z$2M&W3)}DD*y6bBbGMf9-zFmbJiuq$L!>@`YE@A9+}(9DRvxAineP9(#SrpURQl%_ z0EUzpP(c`Z<5z>J~Jjdm%xeSC52JLI-!Nis825ZZ`STY4>&!f^} zoK=r~J&4Y$)$`|lg}=n?t}DpDzm2z#pEx0Ltm zy#iFf3gx5MaXJLBFHQ}Y#2I^Z*Dk6$-$jp1cM`^ zuHewN>6%}Qo-bkY_EKwxC~yzq_e>$k1FYjiZ<@JPotj?OHco~5%xrEIib#m@r745X zU}QW%Vd7ej=#U75Tlp3cYnzU&nsrM`dlqV&Up;+)2CCACbuIB&VvKT>X}M zk*3~bF%ycaw&)xRGOTJShXL%8>X2o<;qR>YZF+4u9uK?EG{EI{#}AA1b0Gyt0jR}x zE#0XtLm)vVAbe255C)HCu$pY#lpF#riX5*1uo3X+hYaM^Rk#rJD66;nMZ?d1}*)IQ_;K?i)AcMB<+yx&-O5op?4} z`*x>#xl4<}9L4fO2hb35n{aUu|0ArvTU2Q#3Nh+w@n5B|=T~j}jYGv7nx!}-Z7EU4 zvYR7Id<*DMDeDF#MVFOWBms-xN@{Y~VyMwXL&|F-bOjNin7~o@Z)>;k&^&>!NE)}NBor!6kh5S?E>7R+Sh4T?f$L{bCgQ37O%CfVXNa;q71XqrC|_FdZ0-e zzVN6{F50uNvrBH1hV_`@sM+t$M3tKT?93Wz;8q}}PCN>Uyj)1@d1^|j7l=^Nf71by zqU!j#6Qby+)$s>E9n-;GogMt`~!*m_t5bQg58K)%xYHh|;UG#L#be7QywGz09+r)3kSzA>+g$swl99KT;IS5=mvM|EJdCQv7-sX(~e zE?;9=N}cKDzpXx#X2Y*S=m;(Ev3E^=>UI$R+G+FMrFg78BTU0XSMG z@Z-Y-t5qUbrU3p+p}2^BVub)Nk`^cO?sc5T<;S5iy88NGtpsjsVG060nY=vbUm{7O z2E}J)3Nn>#YP$~ur{Qx@<>c@<5n=?R|H^+~k9Ik(F@&5T5+0Rk|I72?>8u=Hh)y=C zTrt%unao3W_Gs7Dq-nJVIMU`1a&j$5Z)Ih|CKLpOtl#l&S1^y~P5u&P3kD{(yX*P! z2O|mj_`tAEN$3ZEqJQu-h7^-qXN(JPu&!PA{fO6mbOS(#9I>;RWLO~7Q29`d>9lYB;<@4rQlJ!uNk`&8 z93qWDr>L0_z+;1MXh`$5`|0UmorX|4 zrE=0+f*-Yl{1@wfIJuT^D{p%1cyED7f`R{Ua<0gxy#>VwGqVPFE1s+i_xjhHbOMv2 zZ`#GopGq$k`$!D@h#MO0TVRIo=MF_}7@1l_&9TTn1oHdHPEP)?$FptvMqVDgT!PMx z0-Gs+eVbSO8NJ$O(O5r0nB*h#^k;%9%V_+Bdo`H|*FRi3!KI*&=*&{(85thp=*m!A zRIUG(BMi|QPM=%bHt#6#W^iO=o_C$Cf@)g%X6CJ#ehV1v zb%tkdGY3#Foi52D4kRd0JFD~JVZ(FoXm9;fk>8XOle84o54Xnyx%KY;97-4_ze)I* zq}0gpEqMfOgxACf7wK?_h_2s9JuF4G_}|1Z^TM*ZLd9;fe_{_VSpc(s(dy9;2q;MR zjxga=Z_7foqB_Zt4;>v#sQyJoP$7Caho2 zI7j@6AjpVgQ&EmIzfa^NEX{GLESi6CBKqlF5Qy7as&X%T6DT{R|Cr zmVt=a_?Y%|K6^E+Gy2N}N|b$UL~=1uSRBvT|G(bDV(d`3o*5{kIM zvs8k0X_YFtomrn$1s(vts9x!lQES5dGWfZ{-!kaq=Ij^e-!M;8lWZ^2GJ? zRI;+{+ZqB{NfbCrH;?I)Mp2X(*9ou`9|8`7q@d}E=AMOsDB$`nHCPgkwz7WmE9K8< z6q}dWQF1l1KmX*(zFCN2FgNtqmCG!bmJ}y;Uo(+Odm~3xjGRe~iYnjeOY&Bim&Xin zlNDr=GxPWSnoF##^bJ<7%lh;k(HIsb*M(Y{m-hsAX2vbu9Tf!j&Q2<;&o6>8J&$~!MZ`sOE_+U5rGRs z@Y-5nT%}~Z^mjGG)Dz;;H-H5fE->@fsZRfMBQRFO-kTUIl54)z&Nd88lv=X*gd?Jn zGAB<)Y*ZA)GK-FbfW1N0vPx@y85$TQoX%ZI6r=swQ1Vf=go-I4Pj@PxUe5H9Tl#Gq z{HqjRfOPLqPcSkOhMXjRcnTUye*T9Z!yH!xA2L}iQS9D2I|CN6*?Bp=wq1o50Xzgt z#(Qb0gebe429FjScR!@Kl(OSCT>#8DIaB!w%QdDMqhfzxRI4a3UJ${BX#tztfdrMI z6~UbB_#blgb5x5lvT+AmDql!5?R=mv=R`JR4w`_?L2YONf`x{D+9lrKFPIb(R>$Ic zRRVVD94X&dLM2Ex52Yn>w$utB3-Do2Btbz~y^hBL3fLaGU+Mc)TJQ^7HfV}g?p8y9 z9B;ebXPnc*^2bDq2d|qKsPn}JV9Ceox=zRwI>O2kDXP)oKadvC;Z}o)NY6S63Av5?L!H$jirl|kxU-nT;V|{zo-Q=U z&2k8Xe?FvCmgKLSJwzY+6Th^QCy5;)?%+=kayVU2hbX0~(5t zW8dqRYknniR8;emZG}M$=zPagmJZ$e@xE{Y8fu~TLsph{JdKNkH@~JQ zIr~qb<#u;?$}gCc;VDTGkXRWc$TE7R{zR?hVw59VCW%Ynj)+=8+$7&Y-6c1+wpOL6 zd$+d_^(v7Xn_2%u0vExsZ+A3SudEH{wGpnO``Fn|dDKWxN;dzUsE^N^)zu3>Nebf4 z&4M*^_5^S%e+hlhXJ5vMM32f~VNLPvvylWjgxjE_G|7gK9gc@lc7o4nv$NVNlHi)f z4M!jec{_gt|97td3=dk5*3?&pNzr<-|%m4E<7Uy z7WB1uR%|&qHY$F*t0#=g6T-4yDx0z!O1K2NxP6|(j=~RM)RCPjP#iHy|D$B*4FWii z+;>CWw(_zKu;H~u_H04jfVDjZGe2N>z@hZ{6SH>8VTNMU?M#N~jSMz1rMT7?jYT3b z>9g&p$A-%j%8*@7O)qCy6vvj12Ln7ZkduqLvqK=q!^B4j;dW#(Z_{|oB&G*|JvO{# zZ(Na<#OStFo7uuR1pj;CBtT!*REy+OX(w~^qk`JwWZ+r=JD01DujtY|a*SKer(5&+*wJhP-p&8yBb{fip zQdLvY2iIg~<_oegRTnqw!6rICtiB~p*^C+jl)m%%s+=OB2BAlnUgb>swOTNujzLu_sewTnx z_WhgwXJ#HGDNYXDAB$N=tCIx3CZAePCNqApy2O2O)v7|1C$fr(5iik2cqGf9EUs74 zcAhznW8u@tfe&jO*4UY3zqc6=8L;+XN$9LBA8I+&8izZI7{j|&%;Ua7md}uJ;gGv5 zb?2`dQ`B`-!QUO9v$8_PpOCQHE`cuUu7E>@JIk*8n*|O<;oAy1o zZpnhfs0W#{pTh$tO{j*FBcT}Bui0W$0q=}XB1KzR)4LqOdUh-Gj-J>LK5! zNt;l`_R(Zbq}A2IXciGN*>(B2E{7((p+bBr>Q+ny%O~t@ofimeD*du>W)0OoBe`K^ zv7tJN6hy8JuFjimFM!y8o7h{FPvuJfyoj_wo9NKA2EvfCZn-(HH2qm-oJ4J-y4U=O zI_w->{`xb2I&4l|Rb%^h84Mmu6%;Jr?%Md-fBJN`Jr9&s=pgHWXP|56#C0~Ou_dRW zg41`;HBMtyt-;RP0v6YG2y(DaF^HaTDN6dEUVva2RSoO7(#@73q5w?>CFAAJEMKv} zxcLpT@*q>o0!uPkxurO4$rma)OGjee>tCA44V)f8t1+u6vgvE=2=8thMfE>6(ntF;Qd>i%u`hgf3YN&K3GLWic@AM`I7 zTCq*q)dr5wMb9_Yc-$x^LpX+e8fw_-=^NmUsSIkG$V~5 zQGHL~X;j2|SWq`9$kS5(u)1u7M-1UEM&Rr2$+=|>vD zy3G4%3~HagStPk{BO~D}J3mRX>Jzd-3%>DoshfVPDW)@3t#gNu|5E0PFbyybia#ud z#T~@Qb7{`8I0gLVY9WEI#U1?M)H!t^-O(PZ*WPsQJ!b5#un~5QX*YF2R2p0zbsVop zQ`dIJ~LM7HhzRUKUY zh|3)Dk)MAFnu+#^{x>RwZ4(ZCP+vN2+=BOk&g_gX`z|(lwU}CiX=mqm(ZPwSh717f zFiJy@U&42!GbO_;hPv_G%Kudt!`e1+ZEDY@MZ_a0TWCxsto+MC@{HhmX~{k56zlTz z#PG3USV-tWXKs|<2?M4S#u+;l?d^nW{DZ)AJN|rieQT9h>ZoZpn=4?g*2~@ON@z=? zK=HtiHAT&Nd;2X_L=KLk`tmExNr`Z(sXiUSlzE&o9DRku9j1ce$$~(FM?r@OlfdXc zJz1`iGr6HN3)G|gy0kyFWzn!YAefaZ2`Zi>s{C6D_d44Q`->OEM!y3Bljy8>(LRSaGu`x3YKt5otprzlMtv|Vp7aXP%BEm)F>;x0 z+Ypg4^7jzX=9=LtLG3r1Cta%BHXZvN-u58bo(Ev+-U2HQumZ0@F@Pr6X2d3j9HTW3aYTR0&vh?X&X@VD2h7CK!l_n>YLw z+4h^XCP8P%ES(nztuK12$&=9_db6+g>CB@cK&#Ti;;RiK5RPySHd>F}xs=-91J2Zs zLV%3mqlUBblfbA^#%)7&(X*HYWtg3oqw0Sv}z34#}QSD)hJ|74ikH@JT@QjQf zRhWY2Ba(4sGedJ;BKMWdB54WP`!Qlz)N#uL7 z5E-ZR%A0?PiQIZm5=NWb3aN%* zUVJUn$jIclI$eOu#<)j=%B_TPlQl1AX@7lOoW=+Sg3%C)vomF#WZVbNEVTxed+()v z8g7KOT&vav$>+f9FR#r-x>GIcC+R5_%CUdrEvMZ(fwm8-VBMdpzG9^SVz`L8wte%~ znJM{9z*%bL@kN`XfT6+cm*(ahX(Kg~5ann-*ycZLosx)bV@Fw-tfr^S2HTjMk4lW% z!!^i%MX7FT>V7o)-LpGYpn^O|W2FN_D+W&IirP}++F>!2h_nkqW&Q*CeJzvsQ@j+2 z&M9%Zqr>NU{Zh!&&8)zM1EE}v@YnEk^Hx87M&ajzf?*y*3Be+@qq|XiujhN++h$iA zL1XeRgNWaW4h6p7z6+40?gTTXaKWg{NktB9+)YClT=vT#|Df0v8w6s-7$>LU{&tKU zSHpQ{*fObas-5s>efv$8m9zf#IZY%cTyKH<7i~mal*!~jn`lw$Fo~NiKZT&7u&PHf znOp4=nXS5`dzy8ydlRiI#>_a*=6-+I>OqmhSf~ONRY2CvoZS2eRcnDIV9+}$;;Y<3 z6Lu+WL7Tjap&?z5jbNEA-t(!o)uKy1Zj0(oFX57Eu^BY(pLKS&Mc_8(Yv$WEl%M9a zVNGExWDATj!r#28TLrmX~ZO!UK{#|7>$ESK(KMOx#m^tKw;a- z+ZPA4q8%MSMHXE=)tbQWP3+^V_HGTNYfu4hooJv`<{}mh2?`2tk1zbpt!%@X^uGOM z9QTgqEBOko0FNt-u5@0^d~r+PRZE;SBCiUZgtLVo$b=cK&u#vX9%=*#Il#GSl&|OzddODGt)$iO+lA9YqsevU9 zL>1`9RJiz_=N|V%4DfvhwhTznOH?}>j8+hFT6qGr?kDu(y2kU zau!bx0z$-mU11>c$Y6D({5HPj!QsB;GD_>MLzix-ctx)aq`*`4ks8TAmAD31i+rvg z#*$0TOfQ*arw3yM2WyP>zBxRMS=cZJBlXB}gDD9p!B9NU8NZsijaC>x*Z`RaWsE*E zAX6=*{%r=e7#f_EN0n+*1!B|xn}Log)*K_LRCn*N_}=d_4@P>Q3`nRv52l@h*im?H z=PPL}XUUz4aV!o8U{58DkVj9aZQE&}M)3AWs72Z4pJInz9duNbeOrVzsby2&skjLR zQ&*<>zfWPfRFQCO0IId!Xcb`fnnE>90F!5C@F=owT}^rfCKewojhXsxcO~qyRu|x^ zn+`-&`lY6~g-j^q`ICw#Ho{WkS(G>5^DaI1GZdI7fVh*%GRzYYLsfKTJ8E<77{CB)v8wKna$_koJt7l&~Coo^33lhwsJdm!~mfE*hG3Ql*luU;Hm zC!=ygie4whHk%><8~qQQ1dI z1mzlqvt$;$btvsp89hISY~K-Wd31+XS5)7nR0bniO8QJiIFOswDVFk>Mi7hH3S&^s zk(HcQxHk3q6{+J?G!CP*WZ4Q0iPb^lv&SI*7cFV2_G=})Qd84^KkHSXp|n9kqZz6a znj!(;^ogT-&zWUQ$2iQdpQ6}5LvyOj4v30f<|qA8B@LgFtWlj3{}$Kp&trY?5-tmS z0u-bnLBzxm|CZ9L0}nA39H!*nBoAN|#)S3+YyNzSa}@fzM?LC`$Tl5^rQc3tBsx6R ztn+{^mJeTkT5IC8ejbdh#sBBqG~bsQKBtj$qG(YyrU_Lg+LU&}d(Xe*a$lvj|C?p8 zQVA$#^Q4pW-d^V&?B`~)Wv{pr6$eMcPEN*I2^Qgfkj0oihGz*+X8kwjW&8D`-Z^MykBLIJb2Uk77Y4tfx!DGzG{56XF9q(s{lp zmF_B|zm7DKa$}Pdl-oze+wp#)UlZ3*tX}}B-lNpC7RthiN;?#!Tvy^&iLF=dEt&*5 zHs458zs3MiE~kNIM$h~%B)hO9kw}lnA;0yxkV!w0g?!kbIBmvC8*ZA=?e03&fQBK_ zeMG+SMpjuvtAIAFQnx}iI(DlzdGucWJS4DsT*!3RoTKcN98HotAtbThoi&0INFOtB zdat!im7>~iOa^`mjW_GGP#sdq)(Q65=l)}HlsF%xHqu~$>oRbHkz@y^g}AdqQ~WGY ziWj3MbSrlaH^y@l1Vax-pR%WY25Jf#IbRiAe&Dx9BcX_Y%{h?0lmmC3o{G6~dwMna z%iHvP>nklb?uC}uWE27C1)>YVoD_iRF~ppB>KW=32Uk7kZGE8d!Yq6+Mng4FzFKNs zvdIGBC9&zJQ01R$x|d)}<0%y`BPgH%vD5%a;@NP!)bA$|>d+*c%L3#~pk7s+v^R3m zrsadB%8A!JC1|L0Bq=h3rG{&=RAr{5&*9+8b{r*E6$J_pG4g0zZh-T<5+*Yb0h+WZ z4L4XBL;R)89ttwwAdaK696=Q_sx6^oURHuq+AlztURBNGr9oJUsdRU&aKyCh%=8J> zXHh1y&DxsP2&$?*-dqSj99M+pXEkt|00nF%Putf3s4B-=+##xh^JpwP^>nq;jPZ(| zUewbW(7U!bxSC>6rIlH-t8RshaXi8qk_Dpo(d_g=yOV>b01%!bilf3xp3|_nYpZZn zVFX2d*bd4?9G<;ngGOCMpZTm6(Rywp+sl5*5}@2sQ6;5P`<6S7meG*o;}91MCI=_| z8U{uWm(ul-^{9{NioK!GSY`H14bM9+Vpf)>UFsn7ZNtRa!dmZxIKn(r(sGWrsbU-;M?WSxRsqD?+*be{y{x+gVkWxDUUTHG5MHVLFK{q2iS+ z9x_I<_xNOYJk^4a+jvN24Nn%Jmo+qoH7yeUN^6$&mp|U5EQ`a4P_9U!R?(wS~xu8s-m~Do8Kd* z*2up+Nn`2wnWp*sHXWyqB&{N4C>1SJ8^)s}jufpNX4bpKU!WjVgp)z* zUkYF1{%P$Rs#e7IXWu*UvHI{)FpC=%^s`jZvjHfUmQGMZ0b?PC?4gXmUiJfjw6g>c zoI;a78!jo@R#96{u%6t(4hBRK7D90P(OX?gT?C|r4ie4<5hZQTN z{_9%xd3JcKYgyB`3C|rRHDP6h9-Dp}Ka`Dhsn>4k82;D4rXLOj{X}@glJ22*`1&iz38dHtH?h&vlk(w;}Za*Fho8PppJlsX?g z%OODx4Hn;LyqOS!Uh|3(vUZez5qL2+c$d!6GbZ%vI(o<`i0(k0j^6hw0jZAll0 zn6fw9uKA_#`pkQO2U=YKTK?a2{0y)+yA>Onz|vTW=kQA)!^53V06pzaNQy>uQ7S5z zhwjiix+n`XKE#!W=NU_ClUC)7cFOpV)Z2H+bN2uw%?Jq+Ubd_<3af>eM z>;@84pelVlXEZ~@!DVGV|9ho+9}NQ4FvrJAf!$-G*xw zsyWDLYU$l(3J)Y6kgz+PjfyK>8R_=(dO#>}TjfN{Nl7aHUKbcAEsp=LTjW27*P$w3 zb24}L7f|@gnzUZW;rh>(vsx)dGRL} z*)h|WU{<|I8YLX5SA**Ae6r%|5K9kbw5bJ(%;uy;QB7mb4Dz(?mGD~X)QG9SMK%>Se zLNIc~R!*O{wpKDg4e8TWoI+H8?a?UPQL1&X{bps!qD&`#LG|J0_}JlgQI;@GEWU@D zNL&I|mx(b#763T}BS6AVWnHKnXjkA=h?2yN9yuF~lzIj}fnbxq;E%uV`2~*?aE;%R z$^-z{#z|XiZtLufIn|VjkfIlX4Em$m5+7wZP>{c{MWxI{k6Cw4oBK}qJ_rFlBn(r4 zJYyCIgbD!zC7{8JF_}YGR<{|AM1fqDq0G0m9N!hRVk?_5SRbcFNlVq=4D#rX7Kq?L zTByZ+1AQJ%YNs&srWa&GXLxdfdf|frm#T^wN1%JZTO_4H9l)tiu_kGreaC%11aWmX zXetw|dv=7mERoyb$SD1h(5>qK2+3Pu917@x!qPy-p!(kC19U^s2I5Dyf%rJKm!axx z2>JM?_`ePw(%_QEzzP_Uod#8?-+TMWQkoTepop6644_3~;j*43Gbl&4%>p%cz68Ic zsJ5ip+lAVebGN?W3X*TX$l4taGzJ&Kw9i3hWA) zV{6wYV<)cTXFB7nDO8zTpJ>UM1ip_PCjga;PewD<2ok}{k~nFD%{mxO#)NJW?qcKz zXTd`WaEYo8(pVD6xzVB+O*e!}{Aib=FVjf@1)8-ZALqy$%oKriB5n&%$*)hb;>8Fe z+o;^=%N&{rY|+DhmD3v)Qwt>!MGCL*$4l%L6R78MKSqmg+~t=eZrY>kwb26nnGMa< za^=+CLd%pDDAuop`ntGM@2Sv(rL)&ehRx-Wg%ZC9^}%CGImD_i=kQ@i;No8IUQ`fB z!kb8l1z{o;>1q_HPXPtfGrXW(R6mw}2XUT{`bVeMK+2M`7 zn}Oe4-12{8`ugP+j>Q_Ps~PPK3lq4p+n54$3KGaoPqB)CqFi;!ry!P;vHlyJR<*57 zmMsV90DB&cAYQYSazV!qvnHA>)w`srp6~Kq^{d>RJ^Ow9cZREcfaX6CfgwJM2`~(x zFt+QTMf8t5z3|c_k#K737lYk2-nw+DOxy`UX-s<}RI9Fq4IpcS&brIgG;91VDF6@5 ze$VPV)<3v9qE(xoO9ssCh=@N)_Pux90<}w|)tJEY@zu*j z_52!XCC^c4b2l%e7?IQWmx34M9+!5BV@=|3em!(tn4JwH$QcJdLI5-lA5PQiw<%(Y z)8Tg+9K&J4AE!9Dd9`_zmVYWWPDhg!(+8SYC0bX33W!`3jw`JQm(~XVH(AmlsiG)= zSbHSw`V&vPh?xv+jWM$ysQ&H2ow_Y0Fdg3f7j3W`cBz|IE+5(D0{Qr}tYgOclF+$mKZR^YJRe2!-Z7yC z1L@YXI5wJvGeM?7WjJ*%n*_qbQpnBCD7{^FyL#uAsl&Qye!19V{F9CqRKwA;q~DMD zEw$VKI7Y#1VVAbKrbdBXF&uQglu=N}OscZMNxD$M%=Y!~=SuZ)3^{6L=zyg<$mygt zEaqTC(|J+k1y($_&$zuax*nW+^@<+k@q-(ZRoZGFb0##i1FG7oJn{~$K8ph`uZ(WW zamEF-L%Gh)nC1z1Af(}~Ygb-)V$wrjd*taVBz|EX=W`N&&qF?6#;c_qd1j3b!45L4a55oCC!Jb*%HCBecNcnEuP09v|RVPF1a zePgwqWt9~3N>DPK?Ca>v^&1=C12`Zm^1)RU37~Z_sjc)7t1P*inYU6qX^iC5wX(f1 zMaG3+$yDaDpP^Wr{W32QoK>Q$jPG_#CCk_Q?CZ3B#vsCyQyo)VWqFqje1^+J?|oZG z8igh-XMg>=qe*-`WK3n&VaU`xMlhesBO}}4L|Ed1^90;#Fo+1|1a4%vaz{;I3MS5K z?jr@WFg%48833XGRYxQ%5~ZEvLlz3Ob`#ivnN*S2LQv#QIteWB%>{tI{w|JZ2<4n< zF@y<3GH5*PAW<+IGreQ@(76IbROA50JS;M?kuqF@aN87U1XE7qA@sW$uU5{M7y#9} zp#%R`SBI);fVdR{>yHy%sJ)8`_p7PNFI)WKE8zS}y>!H^XY%ZZLsir8v)|%YVB!KY zOb3UpADy4UF?(IRlxp#@EXpI$0SmQ#E6qATnblTP{AD;t-CT@@qI>C6LQ|$kh9g*@ zDYRmNK9NNpkp>~j>{N#&1%Rx6nMenUyt`}l(k)e?u|S0A0>hWf!+UCDQExB^xnsDr_PnR=(y=zOu}O#X)ZVA zaD?n+Msu=Rj-+Glpk~N))#Az$B6lTc6vs_yO2+Uoz4m zhvb#JveyF^e58+PuO98P59;)p)Uk*^gWPp6Y60^_r?G9HYdD6+{sL@R| zXCf1YG_l`mznYaIpAf$P$Ol6hPRd^zHh*S8F=P@9KhG1q8wF2+YfArzLY&-48p^}? z1#8Av!+D>fq_{Zmf5ud9(g$WY9Sqz{EHbn4B#)XI@l^9D@R zDXuf|wcKAe^A34ZNc-y(9`7VJ_*rClbJCPZI|Mf3`~&6j+e;4AjvNSqxig*8+4L-$ z8@ND5G(#>iN&%DdRKNujRi)kTI!a`Ox5X?tgdl4k2c}2E8Q#)3%#%EKoDZZ}r4gzD zLp!OY^PE%n;wrja4ksxI@ESpIv$ks~QcJn92mLf>>MNA6goHip$DMYUPveat`$&%( zfn%USs0=wr9IN2;lHgZq6&w{E6M3@R_X`3$S;>9`K5eW?E)0fv;lB*o_GL)Cd`LoS zgUJXi=jgeIoIq>aCWEwFLgBx}}kGRyF>OTUMqd!j5C?SG`5J$~&gu?1L){ZVe+* zA0Gj3N{STTiCv%1U1MzAvkhNWr^2Iz`dfdwsZq%LmszCCVkc-da~(siTlAK;87NDc z$^3xFryi)KpX7gP*jVo;#SVYC*gPSIopI|w{VM#i2$MYKhsstj;pOsv9eMYHbK&9P zQk@_Owl+fPSc30cfG5TDx zdLEa%G7ywI+d?B$7&BFntC+Ve^ZIIvpsJ*-#&vx~Hs2i)5z(Ff9r~v>co;F;?hjN3 zMbKzwzE50+!}&_arG(0}^Y1&2b1rIt8BR%~w-PkcIR+&ICHepGlWn@4t1~5(pH_%! znD(pCLLpS^25;xx?3GXrPi}BNaf^33F{YIrzcx#a?ZCPA(%_yj=y~hOLXX^f+U%ee zmKt(iugC7)xN4n zZlkfWqcKZ4p(8J?u(I=lHz!D!*V{=%$K~IyVeNvaIe{I^w(6Mu|L%t{(Z{Z9IdVi} zQmOQuRn*#|wR>j84+7C}SB_|R4Gs?41vGOrNYWC)*-^8IJ^D#wgaXy%3b!parq7NcOb&>Bt3@d# zb)9xGlsG{^gREwBSxwe?0Bs|s9AR46H3fMTXOYAPsenaM^% zM=2rat4^5$oj%j3sBhRHpl(PD@5?5jV}wG;aLwY~czy949^FrU`|J1(<9|YL0z4iM zX!r+qyl#}FwZm-EA zm})BIJKqYSj&5{!J4S=O*w~3goeR~Dk+0)s&sq9-3?rfI0N#)CXy~AWo`bgjtMYht zjBA$T_$4VJ$hNrH!#;Rge?#>A!SU2M6>Uim%Ung*u2*zV-U&d0E*k=Qim=<%A#@%2 zoqT9z*C>$a(XSd6J7&FF@>`d$FdS~GdA1{!rG>eS)kN#AY+8HKT>YQj;SAXXNj9F5 zTT0Tu@x6E1=}XYILz3B+YV3m_pjMB?y)M9FpF$Oc*_56#l?pRR>(XZpb;36SGw$RW z?twn>UQdVLs;X$6+23jFJ0nc`Tit9Tr@el__o;T-OgvL&1U&Yi?oG9(j@Vxqs%FKm zxW$MT4>#1zR5X3#RvG*>N0G54VCdokaFv~BfoHdyOum*&;L+#mo=&gFZY;%iW*ul* zp!Xbpm#1uQznU2k9TjDGsk2%a99;B|7(0>Yj^0_@7Ts49icgx O!f_{$@5?a$SN{uZATvb( literal 0 HcmV?d00001 diff --git a/doc/html/.buildinfo b/doc/html/.buildinfo index 613381a..83f089e 100644 --- a/doc/html/.buildinfo +++ b/doc/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 3dbff60cf84c006c5d067e84d92cde31 +config: 8529eff79444ba87057f610b67d0aca3 tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/doc/html/_images/boolean_common.png b/doc/html/_images/boolean_common.png index cae22fd0708614bf8ff1c275097a4b4c9f72b447..d55d237a69a3fb4b8888908058b3bbba60fe5863 100644 GIT binary patch literal 12205 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 literal 11513 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 diff --git a/doc/html/_images/boolean_cut.png b/doc/html/_images/boolean_cut.png index 6dea3b654eba7bc7fbb23908474963772b457195..279fb8427613b1513e48ca12d65f6578f62b194d 100644 GIT binary patch literal 15529 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

7$CK=Z5 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 J?|~H!G4n*@x+>#8WC%%+gE!< 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 B1Bn0t literal 15139 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 D8|rM@ diff --git a/doc/html/_images/boolean_fuse.png b/doc/html/_images/boolean_fuse.png index 61e17b52b9f136aebc10fbfb6db003ad9d5e9ac1..b41ca49699ecd551670231d0bc8efb01755bb68b 100644 GIT binary patch literal 10150 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 M?wRRT=r|((543GZ!~g&Q literal 9728 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 diff --git a/doc/html/_images/boolean_glue.png b/doc/html/_images/boolean_glue.png index 5315a4fe63df26546dc7005170fafa05f2c811ee..4036754a0240441cc5b296908794a7200840a138 100644 GIT binary patch literal 4586 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 diff --git a/doc/html/_images/brick_bottom.png b/doc/html/_images/brick_bottom.png index 1fc8a2d2fedac585c182784f2f1385f7a3e9be97..2c3a8da778450e1315a13da89503832a657a2f3f 100644 GIT binary patch literal 4945 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 YRda9|){W|hij^=kBP+v~csKGt0H?-;JOBUy literal 5169 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 E7f8D$xc~qF diff --git a/doc/html/_images/brick_side.png b/doc/html/_images/brick_side.png index e0ef6a61822e283e5b207605879a218471e24c72..6cd348ed14676684bac31e112ad1172ed9a00b43 100644 GIT binary patch literal 2104 zcmeAS@N?(olHy`uVBq!ia0y~yV2WU1V4TRo1Qapjj>-a3oCO|{#S9GG!XV7ZFl&wk z0|WajPZ!6KiaBrZ7TfQv_YMCIss7dym%^bezZkCpQ6YuB$yYui0 zOsN3K?Jzrlz8%cmwT~^z&NCPTqiN>HR-F%##X)P(!(zy%_gvZI8>`u7Y`u2ohgsQ= zBbKsZLnU@las#0h1&&IGyHVL`HKN%y@8)o5JNX?wnko3;zYj1*vy%nj9Gi4#pd4wOgM(dnO4iq-*77?KFJdSo$aX_M!lw%=5;X(#GrG$v6Vp$#@Pv{-^Yr`s4Z*h7Ilb za`OSR_x4}@*;stOcTVz7BwIr+kYF%_))r^u{$G799Ulv{_s!Gkarb__a^g7P_ulT; zySe`F_WU^1y_;=Awn#&6+|S$E`E`HKT|RGD))~8af6VLc;S&vjG50Ov^|SQ(d;dO^ zx0_%8|B;aY|F37JXaB8zw)4MkJ1|MV`FKoPe($$i=jTR0@~-yhzc zc|2VUSPX4AzBYRM{Q7?Vro4P~aPR!jYY)$?OnLV1jD7mM zb2TQPf1iE^OgA@@*UtVfCx86?yYDaa*OsO~yFAl=rwJFs^t8=9NF_C)v`JDz#-jK> ZLvrlh=gUg_%7IM*22WQ%mvv4FO#qrmo)iE8 delta 391 zcmdlX@R@glI9ERh69WSS|8>j8iHhQ;Y)d^|978JRyuIs~b;m)#;o`anzvFjqzMwSQ z!Jy~Tr2p0I5?)(AmP;-(t$xqS5W3%wpMgPr@QZm~&=g8t66Q3OaY~8+mqaf3SZ>3cXKe)XQ`^twBdM#^ff1`9q-2O9*IVNvpnF_SpQRqbQnKMz@?`x|B-j&LJEWPuAW%5Io zRG`oDgia{Kr2e(PUa;P|{qe+y^|EhYe_{A={LCCV#uGsM(%==@?oggYGXcSt3 zWN2KFC1FQoR}^GPL}d$P0Yn875{ZUD2$`bAewvp#^D<}7JXF;=wS0B&t$Tm}d+VB~ zyR(||24xTkq~>zO@dOC8#uo&V%Yv){&PaW((Sd_f^bx;U5J*L9Ws?Kl&(i~e);YR3 z9{MFIkH_3yk}~4g@ug-9B*@bS@#_u6$e%Zq?@pCZ56)82k!#D{bCPw?v%GRW!5{o` z`_+864Jt58oy~)p3{&;9i*gru&*}G~FO_SGN*Cj#_ZgAOFAn-y0U+ z&Pvll4Y|)_(bgIE^2=n+HD7B@({%=51gH8VoQ0%mFQR64to6q1vlrW1y)MmXSUE>e_9M=kT~Sb0p&yK8~G(oKYQG>WKu#}YT^S-$l0M9clC*c72~ zx!dq*#eCBOxa%3_?P)NI-oWtdMIAKzkTix&QV43|uqFDtDAg)Ltx|cBi_omX^8{(&DPYZ?2nHTP5L8)tVlN6 zeoj`F?b0afjvio%+=v>L5I?wY=hng3Q-ibB;epJAG_waK_&PU@(m769w+mGycaGA( zi*Qyc1eS>~hKf?(Sw)<^{RS!M9yGK;)9vqWXmoq}-H;ErX3lhOjjz{I^K+MK6w-Ko zm8N!NU!C(~4@v?d-Rqyj4KzYzyz@yaV1w47VKhs=WnlnjENz?DeqKo^&*~q1J*?Y2 zbHPwI_m2v2v}oWm-s6Xl%=kUFiiI}|o^z0IX1zmPZ`e(hWEMR4o7mnGij2}0rHU46 zq%nw?MLLGn)LHu$DX31)EKNw*Oz;R5e;i77*0bjy|AeeKq8gM((~lQ@jMIn0)P+5{$SW z9(aCz&;&4iwiXXFPOA2#mZ20NpU#p{-9!SZ_I>;!i*`b$?_Nf_Jq z)BaM?uo5itd?q5xj(KBUj}zqH6@y8c)58}HUrp(&1uU9jWSLlcX{K2H=@(c1xz}NBCOSuAPpt6LiO33E9JD3#qVd$ zmv%EJ<-YE}GKSAQaHR?rbBk#IGD7#yJOxvUG?$`s7|GxmUB|nKlVw!jsKAy$`TKAC zc{gZgZy}`GV)Nrhphr&%Y9@v!vWnGMm-4@M`xw|u;#MocvfiD74MRvHs7=e0{;G&0 z=sJP;x3UuohyXYE2=Bq*#>Tq{-jDK~JGI^*xwnM+PRRc-Tirpk{>DM3r^bD|o8DvJ zw`!Fdm8hTdWf&);NDrdm2;x*E}9YTvwmpnc*j|*8>fv+nrVM0UvW+7ey_S4CHe4z_TrAmr`KPgx$hKAweD{~wij%(LK z8+)tvlhl&-cOrAxC4P#iwvv2jQ}<|S2QRDy^C`y5_X|PrYR8>GTOjmdLpoGaet#7L zlX@+TTFbC%X&t@}aCt!s+>12B&OkHIq81#1j2+gU3%9w5N#*sFuE=^dh>8nON@Jv(?o!f{dAf z64YJTce~uwm7bQJ!=Ap3pSQhTk{EnAjC^rbRg4B-7nLO^tv`UeYQ?IPJ>2_2Z+i;p ze%$Ki>6tU!N45f{8Ojr`=z*P227gb?_(2zLnahsyDpkWqp+w!`$`i0*b3pP9wyDro zF(}Y%P}HhldE6b$7r7N_;>X^4+cd=NQt|t8x#E3z4+-qGT~U!AYhFbao#>!%OC)IR zK=0>CZ`J>z%AnImctHgW4!XrBHJKWN7t0d_KmBdkXps+bQgo=9u__QZO3A7k4{&rx zfcV1Q-C5{D{#|ceLfujeZ)7kah1D zmKJeJ&P(h0!nuQfl5d+tS_c`8sxZKe2Ir>^!Li;pl6CM$>(D-X73_k8;1GXCA=qB7 zl|sl0+-PCGcrZB8Tf!wo?|H}EnB@5?!rKM|ff4VW^^gyP5n3&6VP{UjA(1^=aDeDP z`q%Q^4sY562wD5{q(9p!>~}tP6mk#G<|uF-0jXem6rqoPUuUfJI$JOK=&LJ$Fm54~ zKeU@wvemf~s04fW`^+IfhF9ej*34w15^Q7y?Gbm{5o#}ID+kNV1fM+{Kcw}}{aL>| z7~Xm3ZSBi(;j9%qWE()h`=&V1W~GPr@)?&beZvJXKJ6nRI?Ac`C2hC0MT&n)-w)N_v%Gen zbBO~YvuO{wSt8i^gvPDF&!^0Q*-VYWJ1cyS$OR?WC_@swb@U??AQvOepIPgy*Y$`I@x&bHRJA9WfwUVA;P~ zIc^l9x{FB-%pefjh`bbRXT_GpTNif^mZrSzrX>7Tua|NJohqaz+GM(}pA&UU0nZ#Q z=47_ad2cGEl5WLy!C*PwF>wH=tzqMChR6q@w4*P^QIhtx!(^GC&| zxG8QEW%+f<`6u;QR?k?U9Ug(nAII0#xnJUPkfW>i*-?li>JnSkL$qPiqEd=ln%KQH`pr)dB%x*Jyyz>O^yk@jLPKC^TyUeb zPfYT7L!@L|@s(H-`FI@w`?puIj~{Iolc_jolsznEU>InE0r+VX%=`LXo5UW6Bex_Z z;K@hz@+3+yhr5kN?X;-qmD$Ytua0GPHhcbzB`GNY`5yYSpPv+ea}|`*uyUqOkdWgP zonP&NmT>|#q3{oV8D9(J80-AMKi-+YolEQ<%T!;haS$S>7q*c8Q2L5weVtK zxnXBZ^+tPWf|m&alp#zn!@OY_X4uNZE~=qyf?h{n5)(a^dEE%?>$h_Y)J;uGX@%qqys82F3p~S9lAsG@ zWf(}yFFW(5EX8{1+jSrDK;@G21=;656Oiy!cILpz=&H3q&bQh-%r| ZBHIUGXx7%(z)u#Ci<7$}1s?p{KLIzV_a*=U literal 4147 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 Jxy+G5|1a@Mo-_ae literal 4283 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 literal 4243 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 Szk&YCAm(6uz~;d|koiBZjIF8w diff --git a/doc/html/_images/cube_solid.png b/doc/html/_images/cube_solid.png index 3786ad086c2c27dcb7ec8f00f0f7ccea3ee26e8a..b019ebb1adf909aaf7efcc8e597df62364ce659f 100644 GIT binary patch literal 4609 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 literal 4268 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 diff --git a/doc/html/_images/cube_vertex.png b/doc/html/_images/cube_vertex.png index 1ab02f198660f1cded2a5c4a197a0e021902a6fd..909d3d3365a9599a01c1873d5728e2c5f6f486f9 100644 GIT binary patch literal 4648 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 I)QL#@UzT9MPXGV_ diff --git a/doc/html/_images/cube_wire.png b/doc/html/_images/cube_wire.png index f4a411db617c201679b076ae7a6467e6f639b86c..1d3eb7b1d3d7f6f698a81fa507353221d0abde1a 100644 GIT binary patch literal 4766 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

  • !N?C9LrvfTCQtM;|iuViDAzf`pw zt*kH9+kXMe+jQM9KF}8b{b%u1VsPP>`nk8(DYG|A6UW?reO8;_C61U?CeO3Zz8HIm z^u@xGr@Q@~#lipmFfOXkj@$D(c`~ZhI(B++xU$G5ZnmSq%sE%%UCh-S*_jJt8&g$ld^dx)nnapG@q63(of4;y+$9qU^k2&#<9W%v8Q`@BW~fyS+$vKGVA!;2k?ex81-4P2~9_IG%^?GxJeP8 zZ^tjZ99U!G>&BNxOYP4MH@(oDkfz9_SD^Fl@P>>(ySb{=^dVPiA_<88$vEo0)y^fdK+Um`$k7C@$N3RYuv;kaebcn zN}};_prU5xVx^()*M`fR3X|@VI~&sOJZXz)*a}+hs)qlm%#`+5O-40?)K0sj@Q5za z`*9>^d!J?fQs=J=!QF1S<|x4kqdpXkPTp}&YnVrKzMm8ZPZg3Myn^$$MhS4IRAw|4 zgVBe#c(WAPM|(kWXoY^#T3o&D!q$;5lY?R8$sQSOT19E&Q#AG z8H>l78Wm%lSL{D0FCZ|{Molw!SlsuYJ~mNwe#6?JW}d%aKdly%z3wW3*-~Y06(wk4 z81I`Ip$%j%zN1b3zG4}^+Jgo6#(Dql?N@lAn>;^YFQhzNNqOC;le~3i%lm#o%jTVH zdl4A>^onZ*EN;}-2OF!!H23>S@##|~=U=oa)Y-_}?R?ThXl!o`EdPbdY3RJWYVFaVsL#n67U-r*) zu4=@G%-|zy!^5;uox@I_ z>PDY0+fK#3>+Ao??TdK%y(vR^U|IM)N7Me#$wzZnAVwQ70fMHN&T0bfaV-_VYDx244HbbE_O_f-Z;<>;kW6MrV^7`$O9P3G|$iapT;(_0-SzGvoVG5t{^|5bCGpIa8E5PtUCFvh>+$-kC*q-fU(qKuIeP`>}evEzCVz)Rr zY@EFOq0}zn=QrDhPtTSoq;TI`RJoGic`q~PCVVlY{xq<6Xg>NMzjpaIO8j9x*SdMW zyo=}!#WP?b9e!#N3<@V4f6yg<>JfevS^-;#(60eI3jE9+CJbN3Af2lZ}=Hw zqmYG)20{}Tkq7jE34JXhgZb+n3Z;85-c*Y3AH^ckM)W0h31O66Fi~Xavin6^Fd|Dk zx>0zzr~{H~*BpFp#n|asp?YVRL5nt&J-8wMXjQocdhwVGUO0)lIvvJx9Ld!G0`D8u A1ONa4 literal 4385 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 al6tU`rft{8f-T@b4;dGdy93{z&ix;t);ELz diff --git a/doc/html/_images/derived_helical_solid.png b/doc/html/_images/derived_helical_solid.png index 17a2e7c14050f21318308b5ba15dd18e8312f480..bdcf52390f9da0916b5e35eb286a22b7c19151fc 100644 GIT binary patch literal 9445 zcmeI2XEa<onyY5+HRs{p|AW^ZfqjMCxd%(onHc5fKs5fYhGr z5)l!{1J@@C65!6yAXi1;htgTi=p7LeHN)jaOqB7Nm57L&2=x4kzSrlCDgSu=y@sXj zeot<@a!-5DO-F%f3cHWB_vVt5$L~thhPCtEe~My^jAVPP_nenG~qRBm;B z&N-r;Yk99ehNy9Z4H#|*!;$pyTMGu|AlxGC1*PkLocX)s-Ic+@e$D>RgqhtFu-?#$ z_?d)4c6HO=wLu#p3KHV?v_2yzlthmWNU7gTQ!o=b(FqYvb3=&gpOg}Lg;)@8U2P`$ zLlaE)gZ=+k_ zSO{1SILlb>*tBG|+#`(yA{ar{vZ++2vohZSG@llTp1Qtvh2DmSPP93 zrDaRDO`%T_@z;47t7tOz<`!K z>GeP*n8$LwehOmCJOh8ngOc6sRiOb|U|}V5X8k9J$4>hC=*xO^dY_!=`7WFFiKlia z4$;EINIG5}N9lDzhq}rX{-;nWIX(Q^r~KjJr-iSAzr^3Drh{tMPKfx1%Xu+ZSE<)O{JUDvh;ljv3=Mb3WjJ@4ehVZY9{O1gc!D{Pz(ZLn)v%E&P#tMgz= zwc73yCMVFFp%WUrhkUgkm$H4BSde=AyFI3Mjtb=Shj?!ltO?$KQS29w^RJBZKHF<) zsadM+=*=^Q?N9q=fo_BdHPNBM|5U9?+E>^ns(g&kKOqdNDkiK{m7O)WzbrCc#d_7$ z`ENE9*D6U!1cPlHeND=qW=gN|DGeaN$IY}ub=CS(*{hRM(-f4^$@UlLA}2{7*&*&* z_uA4M^|ZmM@-z$K7Py#+H(b7&N*6U%Z(nLer-+VZc^cG!>5}|j2cX8Y?O9y(%+8LP zM25?&AtyhgTG{-bm#((vTsAY-%U)!1>`$SM3Fm-m?0<`?0nb-*M~|i&9?4VJ8cHbMe<*)co35E^|U_S z^;Gl0nYAVP|M*yv?fb|M&mWvDDDL}*cw@3?V*-aXFoR7Da-=>w|wRqwlwtxi-sZ~tjtc*@E@^_YLO^X{ zT8I19)YMaDWcQ|RDqa&`_Kwex=Nl*xHFrg(_onAnPpcnV=g5jF zOWNsM@?1EG9)B3fcpk@wo|g+Ms6vZ@~(l+DOsM_;jYl3PS>YQP~dfI%7+8O z-NNR9{$6D~Rkg)2hVYystmT@KBRk;XOQ^(9tOdTgr#%Mg6`RWVh+{9-Q>ez8+htn)6H<(m{V+S9)&@*IA&#VFSY6JkN_KMr`K-odG&PRhOl2% z*8NmD{})|G%(vro@l^SU!Z|(tslFb^Mj1;BrYVKb51-9wgpNm|bGVz=d-b>mL z7BW1Ves%b_MjZEC53HEor8qWHs7>p=q7!T3E+?M(=;2Y1_kin*oZ<<`!O0q3Z4g+~ zy9Njm#5}oWTk*_n#PVRrlmo5b-XA)YqYW&Pk8enT8I{8PB5RzH-NY^7{72BMG&@S> zBD)(smiT6lI~k3Jqu8%9?|jaSv`o?ao10yE+9$gMv#qOxg-cC7+z{^%WXRJ$;m#!I z5lZXj;x{Fdob~bNk1Uvt6d6~p8YIB_heIiA&-SyAR(XD2e5%b#f03DzA|QBjLN6@L zCatv-*h(!|>13X(h?jex>_N#e5^9QodgVF~M~Ma+RZrdqJ^9j^=)TiA-Q=eBymZF` zb}*UvU=uoB1Zipi_({IUV6@0{#+_yUqCoUHfp50Y3<32i@`}x}>R=>glYb;n_dM~Q zi}kbqe{IEW3SLwfN_1=HscO(PZ73IF57t2+^f#Jai^i+ahaBAPB%pjhrAm{Cs3`IKk;tW{`2$z7@18NO_V@(oo6$xdj-_ov076FSknYu2v z>{!&`qeVqN8}*o>$+`Hkp%exIJ?rNui8Hq~C!e8`N|%qUcP{pn@9YhmP==}3q`B}g z29O>n8|Gs%XaRo6YzuGd^2v-S)TV`0@#W|x>H*2#p%E%p)uu;mH7&y0%Wy_VE__1Z1m=kBf*ABr|Y9zq;>-VSfgW=Nr} zRdvriE({B{zh;d#q(@;@}2H#sAq&vJ~rw32=b}pE9#eJ zYHgu`Nu~R`p(WFzfh!^fW;N&+<`+Jv-qY@>Y1kd=W<=AQs$q0AInvJyp3kGHUfNZ1 zbM582Y}sDdZ`7_DXmzG(A!6ex!T%aa>BK16-f>jt(QWJYYh*zMF9cCb^AVgpkeJ&U z=&GuP+2nMQCR3BDd>WKKn@}>o2gGHmT*7Sfi%>B*r(`BgXQ2mHz9{tdRE82 zJ4Il`v{K#B3~q#p(ld@zDsJ$#O(CZ+xFet>e!SQlW(=oAEOc6#0|eUI+U zb}otbH27Xr+z?kd|6W|9g0ZPH;issuW9r=@YPNe*=4$3wR^`}Rq4bTaQZ~Q|TmVND ztfDXpIW~8kpP~2n1q@9ZP4B4M_1*GhAPX8sxo}Ms7{x?e9Oe4;@OC!HrIhKd%$NN9 zrp(eO!*_Hfac>0mEMm8AhRN_Ap>=;1?22kV-jhJ)(hK$LA5$0Prb1n31Wq%>eyN+X zKKODx@5A#MJ6-`w=(!Q=`^EvcJdh#XZ`QO`X?dmB&XlyY?Mey`KzBC8cjZH6ADkLv&n^GYYf2 zw)t<12Zv?%OWMz?6t!p$x6<0LLlh3b)Va=fpFN>FC;zQO!JP5*5u8at)X0&wgNa57Eg_5Kr&PKKFC7qB2hqy^idA<>0ZTaPk zv@fb$F>x4?I!&8w5QdGUF7%D8S+Y8#$0cLgojWF>KMrQps@XUu8t7*-Ea4_hp}+pN-7c>P86oUz{tH_gePNMnT0oJ zif8iS(Ds<;!IS$#EPy#lao+>8%IegQrLmm2p&~nnm?kq;Qa17MCk6@+Tb}B@W7vw5 z*DV+O?4LT9Xrz(iY;B-GFC-y1f(oOiW-&v-nw>OEg^klEUz$IK+B3l=BqCONP)JisY4#;sXR;sbA2o&S~=vl zKX9z9Oh(0VsIG<^cc+T~LeK`2F@A^jW|@?W$sbs{eFjg+bo}-{H7B_*hVh&pINl30 zYq_H;VV^RL)_By&L*dpdxz4&6L(iQKwvfjp)hLERLOvY)Kk zvKoXu`GP~HcXqLhO4HfEoSM+df_u&6vaZh$W=g864xzawjXUc5RPWj-s6V_5L9Gl% z+ut~#`lJ+0cDHU-pt6cN#cGo&TyUhsrsRPkDYe?4t44YSYS_c=poaj%o z@e1;kUg*n}HwOOnLfnD};oQB5JAg+vu!(9G?GLD-BOx~~pmBm?=_{-P7b*3xsI2B% zVBzj*T1b)r1vfYsMedcZMpzJo)5h#el0*4Z(A>Y56gy^kd#*H-Am;T#X@V_?)9(^) z6r8$Hxse0&@(^QImyea=g;C1@UN8+DkXwlxeMGyel)hip&EU2D%?+D;_q6nVRL^>h zG$U!4T9|LJrrD+Mhz~TV8xh98$eT$L(#JBL)YVxb%9&yEz!1Lvocb|Jm_1q&4@w3+ zzWV?J#3EEsJy{&+kv}jn-WW&UOfuKAzEQ2Q>H^L8# zHU=g?3}y`rJbX56rsQ#hoxJ(!pi3oU3%wwf<<8uS41Zku+f>(%sYVM_)hC~5EJ+m{ zcJCGJs4xfD!8gz`kQfbR9&|z08y*KdOTFf3YBD@KNye~ za=l)-c+^mrbNqvN<&daLQqYh1E3h+@Z9We?FG&!+gw^3~Oy}zw5bdaG@A{wSzV+po z$o8KU-5UHg-itRYD}JH2n9O1Wlt(nS@lQe$HYZCij7`y>M;{;p1H)8fQsPP#k3jta z*u^KM^)LB#*`=9R2eG=Q--Zf)N(xXL90lk9?br6&4L{rL=(*03kl?d$PLs)W!dz)* zy?#Tg_NNxw82oEcx@jy@Zhb*~tSryVL_EtAdb%R{%Y%@efCPsL-lwQ=%F$8)muWBQ zAc4WMrA}-G9P6dq{-OifIS9K66rA=iff2ea=PRLEa?uA;7LT_nxdPSq#@2h+w=54x zZ#0>hIvKn%@Tv+Q)GjoLiM5dY?2MVI0JTQgFYADeE7Tf%Z~^_5)6aMTkYzTlVLak@ z)p+mw+z^?+X^`$yXaMDg(EN08WtVz0uY!i6XIuAvTv^2-(-7JUo0XM_D!)M>lEE0E>}wz zP)aA5T3d0Q;5g%3QXrRW(8vvOU#zNT60GpX1ne-Njp1CUj~je7Ue6bO%y}IZZAr!A&|;tqc2xRou#w(nyN1o$bI5zV>h5s`RzsIm5*c z#B8JohcpgXVm|vy*f+Y87Il2U2R`S4>{-I1nOE9a_M*)huY1}#;2f&mn-!$TV=Ze& zubl;5;Se$8yK3<8?D(aiC_PH{0fy^LZK8^a_K#_;KEu8Isr=P;CJ(#OQW3B4iE7X0 zte;626mp*GSpGt_1i8BntHrOneh63vPPV=j)TT$7)@*Flu2uN^&Ne8C3qw)tj`yL3 z44K%GCe8+L0BrI9!1l~>BTi?b99Qi$JJ%f2Ikx&+(E>j5CrM8&dFGM`-cHLm92J

    G9bfU$X5T6}K}LNI*ncXib+}?g&)yG_BY);(8lbS-bz^mq^Ya3;fTX#hw8Z zCtknul4mM00zwP*8@#cepPjW38uiDByIFp&F1@p@U??0>5*p22xk?Q5wNDTp7Vsz! zOA_ovF_Th5)lPZ!Z@zIfcZHVl&_p6J7zE9H(vK_&nsnTB}q~{D;=|U#gV5K?Z(aRkNU+NqO zzAn6$d7^7d*snbO8j_;bqDNep6rAa#1)P@$RGSTk{|neoZwqZ|J@P-^jZeLf|3}b~ z3=9Ruukaa)X4O*#HSgfr35c{ESF$HO;11fBD6^(k+JVBjx(Uw1)n*uI>sblZwuov8v)J>=i1xz#0}^+BX6C(Xo1-Y} z2Lbv$HKaWauFFcF^0s-3?h3&(JJu+#x`c%NL)$M&4@wadPRYQ|b!@D8Q0;!Qp;>+4 zOp2UHAFHsnEh;Z>;u^qyb(z0=Azfdpce2m4nusmBPSy=y4P#*>J;tWq4a*%_=#)LO z-ZYoJ3&<@GFunv(nrDeV(ixxjFd<@$N)E4;%J~9($)!Fk@HrWeSPnh9H(M4jK0{dT zUS#~#LE8Llmo7e7Fd=xh#;g*T!WJ+Qtp(p4OQb6r55enJI+$#mh7VYf1&P$_B;0!; z;O9B_Jlt4;=ATHC&A|nQYs1^`>o6%*Z$m93PIVS+Fe~xh8Wzd_ktRSEtR`-K~eWs6pZ5 z(-uYWe&Th*TUS0P?}0-tmT0q7$b{;^BRD4)E(+ zmSHxx(8pZ)={409@K8$Ba`_3H6l$wbVe+`lN+!3igTi1cZ7hKo7Xr5R0(3?xCy#@~ zl;ocTeHuNSJlMftt|^i_>rrQ|;CZyD!L<|EP9! z0uSSN`9HHPViww9eunTVjpZ0*GF&FqX%zfu|2Qk^e-t5u@`=*w1vCRcMeI%#%}ret z7!Gy&rYi6PV@>!Z+M=inpNR^l9m; zXa?GSZLV2>3knKb*-x_6!WoBkl`xo;TA?6uFichUHX3xB0L zmtUA}xFMLq<9KD8i;wGnplsj~i>Dx25TU`)(7act`wA(NJ~`*6|KG)@Xe_ybZUHa~ ztEAUn-~gm}pPJXs5%s&xX(jYeO@MywiwD-n2nJLnzyk{)VS~Io5E@~F;%L#~VRZUF zIXKs#V-wv~p^wwgayQud`rdgG0)(;C0+B+_slh7-62icFiDAEe7bsIv&1e|gJ2RC zsCU&UlKRS3{XkREP(9;JDNuq@iwi9p&8A@dcd=%TrBUkbmrH8)7IKMJKhn1-+#J-K zO&U(rZf|00RMSXZt((D}9`WWBIob~rrX-N`^r-A`2cdSF%51N%b4-8`e9%}(My;-8 z{&z@EMp4;XrS$jT8koc6eeff;`Pm3b4-}{0Z?l@My;d%hW>) z;fN5_vX1?cD=;1an@C1bHSaVG!j}|3#$xQ`mRM!uE;NXgVf%e@#!Zc-8eR(@V7=H{ zcSckhD^9iIHOoc$@lwqQXZ~ z+{k+#fAt@7RJy_y4E}x&^hEqxn@2_+TjtTZK-4WvMqbV=Y7A>|cDSZNf=NQ{n7kjEs_zcR#>6WZfOMj8uVWUA}7Q6NPqm~{pK%&)B|HMNbu zL?G^Tc56U1{m$BG$O?7C+u2){JWv9N?XLX9wGfmnU?;=A1eX`54p+63>9NMg-RHg*s1B?oMHjkr0rFr(#0901Dts)H7Ok0h!AjT>8 zPZ%oJQ;{f~2&r1(g8(l4ZYz|`At!Ke>fJwhO(a}0uQgL<>npEh0N$;cXqcTChXFE2 zyc>ihU$=kkcuBo*OUAP4P8~#btq4T3y-?1i+8_mavirgBt~qs^G^tC$|DqAJ78WUW_fIXiG2M0jz6| z^1dYnR0bdH1Y&RFl~X`59om+ASgfvJm#kt|uXBF8!2%_8^9l zp4OrJsS44o9{ItV^_gy5ZsY##y;P=@Ca3~=T)s1}+>2(!X8VLQopi#<&jXPfgKaV7KbfHPACwjZHnJ+)`WH*mC95_s0m?&PwbGU!`5i~ zkzxlYr@-~Hj`Eo+fZ%xh@`Z7|PI8GRx@$_mJ4UqWbY~z>wYsXRHv00vkxdpZ*B9_w zg?x@_Cx2y0A-RsoWMUuh-6VC-2ZjwrpX{bFtyj1zJ+;o>5)qu6Uk*SPky9KPaYcEy* zu=DZCkN_XwXXmGvr9_d&__avB?Bz)sO6H95a2nYS3D6Ltd-T~o(1ofj=onc6ZmtsX zbpT4cKhRSO7J*shOnfwC?`|x20b4k?h^~MD)6P^BJu~Nz*GgG*+dg9uA~O5IoN->a z8;89}$o_P0ln|U}b{a?#O!noTN1g45U8Q^_0PUOuzaZ<@$|#uM_hEVqoHPQHs?^>w zox*)RYbk+yrF#W~`HA@s*m)}GHHpdzt|SZMW!AcxUGEh}+qm8O;I^Rl#l7G4P9$Fh z#1qHiP%Q6p%&zK+Ar%a7253xQWW@z*CJmc|Wb;GJo)U3vDZ!gG`ngd3dEzZ3I%bbr zj)Qh(R_3ue`5LYzfMgb*oKE)S!S8ih+xNSh@DS|QTbddm;mPqO)GTLYI@YdGn;*7R zH}0X=wci8wjB2)fkx#f+>@c}lTdW3b0-lL@y%tO@a@a22SQc>R!YmdQW*ay7xT|u-0(JW`*-0 z)vAoY^)SN2%si*usaZtiXG0l0)<<2M$ynUxW?3zXmr2aU>Qs)MupRjrc$2!Qnqdka zUtC8pu6CSaX*z6!YovP2z5G|P={gB$Mm+PLKlfRlTdqXcTO(V{@xf-`)}Q7$|8=V@ zUq%%OQ7v{5cJU-k`)0uNV{Ld?&0LhA&jEphv>7;RDu!d8cheD~LZfa>i@7e63O)me8Y#7@fq6Poz9PtFNA1s%N?etiOhxE`NkBI`!m zV@dq0^~;lx;)eb4t+{xfXTxZdkpT-JZ}`38*mSnfA?NXSx?ZN%b!VYdHI6e&+6lUU n!UKG((=5XCf9u1Y!wcJVT=g`kJq_^P5)nvQ>v{20i{SqN3gCHE literal 9017 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 CE!?XB literal 12905 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 TA0&WpM^Mz2bzXi}vX1&cq4o<# diff --git a/doc/html/_images/derived_offset_face.png b/doc/html/_images/derived_offset_face.png index a3540e2d5e98464a2262c99208d2ffb4462d4e76..c9d969526a0e9ff665ac675d921af17dbb32cdf0 100644 GIT binary patch literal 3861 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 az}6J5(7e4O{{_#vFei+Q!y`M=wf_MfLm-j> literal 3780 zcmb_f`#;nBA2-L4xy!IhS5iPJNJ&X4 z{d~yHTS^Lc6FfKMrNPc>h}r;HHpLzaI4>oI(2zVZsoZ>RDJkU(Kf5{mUdo>wc1+F3 zzI*z<=B#vEn2)?i8kzP|_K&nE18tvFy)P9Eq~Fi_u;)<`8m$&Bh?=uX# zrOmrI^A8P~^atv9uBQF7&FWE&-Fo-csad=6`uffvx^IoY?YYuZFf^1|P*5PFDp=24 zg-fA5xMXt~guLs2wq#|k!jms9FSNZpAsu@9%+ll5n4zzEh5q+_Sgv(`1~|{##&L9Z z#HK;@2Wk4k!4GfZPuvOIqnb1L0nMWQ^}w*PKi88xcGKA78LQbwT^GYP?A&?LS|Ht| z%KCxC4&Q9Xca$D%%g*4mD-9W@`HK3!8NYi9?AC&GXE zhlH~^@hEHi#iY1v{G8;YqPQPrn#A_FF->Yc(PTVC`eJpxa(3Wxa%4n5kxRxcDP@xm z?!ow(t;!%kGL5O?*cq_of=Fql|hKzzDsO6g|7^*aLEZR$^hML25UG>&P0n> z9O>XnGLGdIH~2Lgx+H#dQ_61E3pr<=pNc{kx#|NrefkC_aDc7!638pgrfZ^c(FezE z&-!s8n0-3XMZx=>fr&Sl+)dk*O@jLjXR*u$(y40T#e(=e0WO~%DDc|0-^7V4wJRDZ z1HUHzg)pFtCYM)$=z`#oOjZSzksjFhXM%%k-CGEYzZ`|_dUu&2D+*Q3e%3DFK7(Li z{KEk=oU@8SWg7(R^bL{x3YayhtcOO6{pQLiA6oZovJ}#l?JFmPs*8c9E=Z;AiY5xk z#`n<@SUNo0>gY|##$c?Bh)?;FyEWjWoF^O7o3xBsfneyU5g?IySsNys22b7-38EVo zG3gPZu+R)7Ad+?}l8~u^=24nnMP(c4tG3AlEuhUx8E6DT{(d|#*FHW+*Cd9PYqECD zoix-^8Wc}Y$jun991bzVDN~PK|4Xj9%-yBPl}3rcJ7XzX8;)+kvFun2UGo%h9MPOI zRi?^`f^>>B;7^9GNeba>HYhNEMpqTTA%lc^$xa5MCg~<^W6JbDbbpR>W#X>|^ zl{ZKP!Q?B}Hb4_Vjp6sO4%KM1UPeA}ErMCzV4W6tn?zxFU6P|B)BvF)X;h4!ZWBT>pZE}RHf5Ii4RyB+~6RV5>h|K-l zsrT}xoV4X+MSN+b?`c8+m?JfyrC^>$`>Iny0Fzb2ugGgUf*C(qD1M)7tre(5V@HaE zcKs*i+ds^55T0>g-)*k^R3ii9zNvR~lR*Rvml<8;o3pF+-| z&$2I+wu9n+%#ysyP090bZ<3ZC+JZJf;D(B3jk|(zZ`~9!&P1lB*sG%gdT&T?-)Cuu zQ%-60PH|8?@|T1s#LYlM&Jkl+P-!P19Ub0@J&kA9Aw)r2$zfx%rEloHLdwGCwakE7 z>L?`N={sX?{a#WsP>^b}eMe6vArzK`MuDWip(5~1CNet`c8VXk)7?ey<|rkC;5?4W z-vAb1i^Cw}W8RP$enGf|MpfMNXdRu!Ls10h&9ubRu_c<4_#ry0|BwF}#4pldbZ*3F zX@dB<{ylt;iQVY4=cFX9XKV{d9m_+#?cfHbKsMSgw<~NFkNDPdrId4i0;w!Ynn(=L z;x|uABIyvjEALzkJ%zL=di5{3POz<4n>)TieMU|sq!bw!ZXnh95x6J&tn)pZP0?Kx zCzpO>8+GXT+U6q~*-bn#$ zG}DOM`Kh&F`e`ZvX|dO>H+;R#Kz!dFV!j7WEBm3fQ@BE+kGrHq+}zl+5ii;C+^veC zZs$~}8ppMez4z3BiUPypf0fSA03Z}%AUsn|D?8G8&oBRC%g~W*M@8ayf|)}Y0S#eZ zmOX|=+2f?rw>W}yiVyxEF{0)Do}sm!e&u;EWDt-VPX>_A$j$dJzYE4D_Bdc9EFK^+ zDir)GzHnsAz_6@>A_#=O(%wSy0e_+(&ODi6c||+F%nT7a{m(|J zPCwYSv?w!D7bYhX+#It}oI={+ocxGL3{q*~zWtT8iwtn>H6gr!qUPdN>1OD|3&4&UY`)goCB0+Kb0{fwBU zcQ1c_vOM+cY?swfiTum+pFMX!w&*=S*#~jS_d=drS$w)Z(aY%S(x=kI)%h1RgjUCa z>At;3eO``@bx*$D60qiTn?BlXuN`=YWJ#PEY4^vIMjuT-$s?&G=xwpHo8-HPKMWRl zIAo^o0P->CUWVV;W_RIB-q|NcUxPKebTz3&O|VY(wo3x z@rXyE^@F+3Z8^NXaklX4!qAkv!;<*^PTb+&~7-ceFx8_ z3HHMhl|bA+?STHGKS>PlS1(^)`YMo1TpZ2Wd-Pl54=O9G-`+I<-#N8)4{KMNmcrxm zg&kLB+J6!q=wo{394W9RPCx#Je{|uOC2)8Vi-4eyhh*pX(&dHMXC0AOJ~^KU@o{nMgh#ALJCH79!ffEnw0iq}alFuRapd+VgBu5CgbND`t?62(Xz0oE zbi;aE<`yF+Ld)z8pENtxmG@|xwmT*~XLWtz+q=Z|FEu?=q!B>uC~`0ugWNe_!`Y>< zvSXmmMx8|yBH{hPmDl?mRXn*!W`JVpnlHA=o^`P9fp)5A%sJ%XGcVIPdIh)~r4iDJ zhX$f$VnRAvKg35LrofXWAI%iW{Y7%S`LC80m94X`t51KRRDo-$)XxWxxK+78l>Y&~ C7tyl- diff --git a/doc/html/_images/derived_offset_solid.png b/doc/html/_images/derived_offset_solid.png index 738cd10eca3c05a75403acddd51e80ed47042ae8..c005541899786d7a0839efb0b471a128542fe594 100644 GIT binary patch literal 12998 zcmeHucQ{*b9IriMR%4GErHHNCqDJj4Mj~n+HG@)GRBegfsv@@9BMFU_mMR*fYPDw3 zfhuZrXwg#R9>4qVz4y8I|NF;z^5mTNyx;fzuJ=1WClzjG%mxvFP*G8_nVJ~bQc+Pq z1g|V68t_hEe26yq!yIhl7)nLOa`yD1rYbDvqoNX}GBvnnA5r|RB#?OCpmwf!i=H z!sTk{E7iTfkqq5&mob)|NnTB}o|gqViQ+AHfg3FM*1Ez=qOMHWTEDBuH*PfMh2oEO z+P+V{2n}+$v+#W(y0muecg{oG1Wvsu_qRLLoO&j%(sFt!m*FT3XHXf5N$is@a7M2) zo+6Hkpv4+8Z8Jd9IX|;OdBpkz|4##lzPx0ll{u57r1SmT(qLBEy1qo9Zmo zUTpvN<3HnzDEasbhU0i&Ct9R_H2Uz1bZ8UAp#$V4PC%2ct^U;_BA6_SC1H zlD>blI2X!DCdy+aEJ?lfJ+j^e6w+7IJo))y+hw>DRM*pFQ!Qi=fTAbDF5K^gQ9zZ%YfgQBu>dIufxq}`dP4BXlxpVgr}rjp1;l|V^@Pd!6MPu{4MRO>gC z2s?+nz<)`I1%jMq{tz2W>b#muD^<$qjOhzasXVi{N9uk<;W163h}(U*7es32T8Z<^ z-91!yztqG!P7IU@47~YyG>Cm@j^B?S%9HwbMfODpIx7Sb!^Prs-Rb%B*$;iAml;=n z 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 I=brFC02jAC6#xJL literal 20757 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 Rzyl2~qg!S-^YqZz{|6SU8wUUY literal 8339 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 Ub@$sjKndMFo%`Bln)c8C2N*>brT_o{ diff --git a/doc/html/_images/derived_prism.png b/doc/html/_images/derived_prism.png index c74b08638409fe6afffb183a233c419c3fcedef8..d1f3e912889ecb03400f184a2414cb12ef00a23b 100644 GIT binary patch literal 4014 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 literal 3685 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 PZQiF diff --git a/doc/html/_images/derived_revol.png b/doc/html/_images/derived_revol.png index 10eb6030695fb8a2497d2dda94e1b40afea900c5..2eb895c57d293a57716777b05456904ef7ccb43a 100644 GIT binary patch literal 14389 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 BM_vE` diff --git a/doc/html/_images/derived_slice.png b/doc/html/_images/derived_slice.png index 7ae07a8cf9c077d0a9f5f1eeeca27038b06ffe54..60ec4f8bf9991cb6429a2ff84723f8e749fa0b81 100644 GIT binary patch literal 2939 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 literal 2221 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 diff --git a/doc/html/_images/edge_arc.png b/doc/html/_images/edge_arc.png index 3ef1a661234f8a5a64813bd59584bb10717838b5..dc12e1447b88295ee65bbf50b6f0995327406837 100644 GIT binary patch literal 3181 zcmai1dpOhkAD_z@n_IG0!f+zTCYQ;PyG9{I%tqL1)?7m9=31jv#6)Bgk;6}9=29+U zbIGMei6l{OQ3vIcOX2t3PMxRU`RDh?_xU`}-tYJ8{d&LNm*?5l!wv@|#CM2;Kp+X5 zgIH$}NPrG}DG)*6mzIkmrobZ>e2@?d0zqYYp8$w)8vz2rlx(mTF6VB~3^`u$>{Dp^ z656FbU|y#&s*p?i zbW`k@ltHiZ+d1f-s*>2MYztT$3eTiC>maUfq3Neyvp9cEqW@5@oO~ZNUN=z_-`fJ^ zY!71od39SH67O+!8`+L|M%9Zh$1b+3CkE5>rM}QCApLnQ&~R1!$t`=P(uk*h^t^D0 zK^1)V5iM#0ap^z}(SoKAnxL&h`ssT+C*bDxG<{>CZ7+YrZ+Frf$RPZZF!m1U>pT!mUyEf$rRiI z41v$k(cwsZWrt*n!}*Bky7}<8GN^sZ9$^;DDY}Bn%zSj7hc(*$H~gYSHT4qlxsnkU zJ}!YROLRwBG7%R7bd=b~w9j0@Oei$d6WuW?c$i~#kqxu`l7dRaJX~4T8hu6`Pd-pR zaFv*%VT7$-xP$a&w8Dp_$=t7WUz!!j8ol?Nl5{L3ML5AcKuQKh)A75W8R2Nm(030s zR(`FRluDGj<>VhQ6m(3_@A@^OlVE=T!AIP!mKAMHCV%d%j&GGk*&cuS`z;T<1HL$9pd1y4n3cUZJ|<}afq!o*x@q`OG#XnGGCACY zW86d=h){Y;jB7NtvnW38=!*)zxWFN)f$J2XR_+B8D$aCBYyhxuPF`@2+-fRH14|&P zF8eIq-Ok-XFNkl$`0wsln7m7fWlm|Ub3f+D#jpC}x={uwY{eS6l;p(dlZQ&6drG45 zKGgVR&N9(=N*#3R)*&@{Zk~}EikkYEREW~5JXBG8+~;l-qfe$wJiDhv3x8zl8l~zP z%`zTy-xDWWTR=dw(s~TJehH`JOsP0cl*%Hu0{)?K5=1&^y7+`%h3pc2{G!APZ#0!f z;c_`_5XRpWCvo{MA(TnhMsWQ)!`XDqeVGKXP;bdv$yS(Sh2Ol*StQIe9))0iWLndq z+`&{ZEs@$kTOv7bRdI&oi!@?X$$kq(jARK|!z;w@Ct|M3VvOuJ-s6r^a(vs86{&<}~9US-(M@ zz?&mfXE0cUXUhJGW!pQoIh55Z{-G?K{*{xh_ zt^kG+-g|=%doNO6ZxJN5JVW=mOeuH8f#YNzRW(J9N)nuM447APxvX8n90-9xJS7v4 zl7&lK*S83s6f+=$BWlg-j_G#+(x^Hgy{IL;gLMcfo75>Drrt@H8zTsMLZ72NERl&I zd+=JyCO>hzNs)Put`dtC9bćFM(paH&oW9DyjWquQLekUs=(!pF(H-K+G0|w8h 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 diff --git a/doc/html/_images/edge_arc_ellipse.png b/doc/html/_images/edge_arc_ellipse.png index 5cfcb2a470e7448c199b2d2f8f4216f8a54b1414..5f514c44accbf45ba46f3817378c3520be4eb8c0 100644 GIT binary patch literal 2847 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 diff --git a/doc/html/_images/edge_bezier.png b/doc/html/_images/edge_bezier.png index 5ea89a1c7d023f9ef584b8c7a5107022899840ca..64cbec613dfb6fa561c2e9dad433ce9db86da91a 100644 GIT binary patch literal 3181 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 literal 2884 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 D76Qpx diff --git a/doc/html/_images/edge_circle.png b/doc/html/_images/edge_circle.png index b6b25381524bfbf9a81c1a0dd3ef13faacb1e036..85748fbfe22ae449a38bcece5ad8927627b28274 100644 GIT binary patch literal 3904 zcmZu!c|4Ts-)3+a!!*K(UxZGCA|4n$OEDO0mM|2u z7BR9PvhRD@-^bB;&v`%Z?~ms*&)m=VdtKLk-Pd!^+@X3pYRrsWj8s%q%o^%9&{R~^ z(ZChM00Krn65JGl53q|m)}4w9!g_L1Q@u(#M@0qQ(72&;_fg97h;~Shz7PG{=CfQ0 zW+~dhD%hpYCbLOi42AmI9YZSzp<_(=q6jSqYCP?zJ!5V&kZ7U8cP@}A8SB=uZ zFmA>n5ZuuAvfi6gc$)hQ_=(l zMKLl3Fw6stJ5k+YED~!R`6f$*f`)(`ZYOg1eX$p9w&d2i+am&TbOkNKcmkL{Xc|A2 zLq*T>(3DLk*Vw^$DTT~CX!aHgV+1+b+T3mkzVh$x>vj~ zJWPG!*I&1>_`b4cm9x`ueXn?}Nx0salwnkmQCX0`t=L$aPYlWzd)qEgTiE}@E6+#x zo>61Hy>NtPQFg8|D77G0*}f{=-s!ikyhuq6JhSJ>Z|9Whnq&7t!d2Ab*-Nc!p%4=z z6?t!m*-zhSY=u_CX$q%B_Lr`T-iY3cNq79BVZ#Y($7m)?jqc_RnKFmb_0bNjGs(AV}F>7Lz^39Ng;3-jE#+{r9>zJARX8(Y;2zVx0Td#mjxatgu7|TL4(Ml&x!B9NAcKh*J_{<~aVA5l3$Wn2ZHx#7y#`^gLZ{wc2ZS8>vf=xj}$;49?duH z5Ui9Km~I8rG1)W=6j+^bP0W)5R0?}7!3f?6895sz2I8Ch;U@rzP`PFHFQIU=tPh}G zj2NlhkR0NHA;rVBbD{A`OC!RJG%il1~43JU?uII#yw3y1ZMxqF?;1HMJK=n|%{GAp|PqKod& zu7LiH@v9@cC5OBrfZ$d9m$K8k%r5^FJ%IAO(AZb1-!lORPgMU`jK8P!&%>J3W3!t$ z>Ym+WQov(C$^WnT<>HCVzaOf#cM4{<@-UGVPF;Q~Q+v$%e>fww2-B&|%8&n9g@5;h zAR!I|!-f8g2~5V*$>nVY{nL-ak9YXR+*J!(1$?#bF^rM|q+_a!)|R285u zvBi1Q3yGt+;o`5XhBGdKwBqQ(wN5p;mVYY|<-j})ItjNj*Mp%;+Hg|VLy42n+YXA@ zl?G6Z=tEAWJ~6VwQzS|68>r8vK_Tb5!y*Ys&zL<|Gf0STeC&DzgLHkq04|44wtm z&As-Umn9*w%6LH74r8V>mBu6Gf zKR~z4JQBjR-+{#H#Y~780oo-zld1q1^cFTZl?lA{lx`;DM2;epdMconSHggbP zAZ2xP+`ZzqO~-@%6Z^!7+sG?VCv|To+1bQ@cX|;2_-J>wxOSzcmB*Jj+XF`6TKGM^ z4t}odD(+g&4tI5Rd5!!1s2DI=^tR2pq3H2rT#ihJ6RRpJDz>+`%WOV7;rDygE{wW- zU_OjoDxC}EEyJDD>K|HuH|{^t6ohV{nVH$$oE?AkJwh>fC$5T{BI5^V!VL-oKT^Iw zCxT7!hudeA4%S-!7>GQrX&c_S;9RWnqSp?kCa#Z`R5a8tNWYtf3bMjZrj%^ALJceSvZ6U>i2P-LijT5=a@N|d zK`J>{9!VM%_QNnh+8R+J5$OqT#CTu%M>!N>Fi?q$f<}Ey#@n?kC2kDl9Jp8Z9jQy?cm z0QP~%KxG0Re0}goxzX>^l-^Xoy#2ksy?#SezrC$_cGJzG+7+MU!yh)s)9bAl8n!9M z7kuV2{qX*7+!Sabe4Z9tlAN48jz2zJu+!I+bDjK1b4FopXV}>p@4L|VHrEcSSs*!0 z7S@^6xYT{kZ#LD-sd_q5$7G?I!}R@+F<;$u#lx+yy3US{k9P)bX1i09H#g&;#0NT) zU@>(I&$jfAlORpS=|0@{iBjB~OOmpQvAud3tF)(e$`_lS2`IbTBkDG+>JNo6~Jcj;G>R9DEu6vZL6J zqUD_z-ykw=Xl!g_{Jsf~>@wA?w)pIM6^M8`{%E(Qr3G^3{o2VS0fx^;?V=W8Xc;B#TNYi1H9N>bpCTUg(h(Y6jxi?xx=MjeZ<0#Rak0{)mlP7dRUU7YEpU z#?Vr15qsey6|P`nj9nGlB{>j=xqUe_U?kp_)<9N<`*qwMGcYluuXC-_`!PrarQi35 zR7wb0(;}}Ztk)>1?Up7kCwpwD=a!Wqsh8CxIQ9WPC6c4SvVNDO-*QagKH$wVSN!N j|JcrR`chFn-@_~B@SLg3(+UNS#8eupIyZ{0;R62$J98;g literal 3711 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 diff --git a/doc/html/_images/edge_ellipse.png b/doc/html/_images/edge_ellipse.png index 04cc00486d35604e7a18b064be6d8bc9d562fd47..3fa0f9b14cfcaebf692c2b178af6b299552afab3 100644 GIT binary patch delta 2786 zcmXYzdpy(oAIICW%xEc$91Zwvd8`mIZ|=LP@OH zD4BOR^EU{JPjaNCy{@&|sBKg~iIjy{H_NkajMPBNU$pclf7A8PCs@gk7A(97>rn1| z+Ew(v_Wd*;onT&icxqm&WSYNL&y1}6FDnpol#vO^kJ&>$MN|cK6YD`n|6d1y7B#0X zsfxkA>qc$Sub*O_+;bK7%ROw_IuS(Vn5^@~R;K9(>nd9OoDWHVRQnQ#Zu$Og7o?Rx~tjF|xEUzLTafNw==# zIlXSA&Sm`>i}|)+|0K7_NmIx#CFp9Qz9mC8uL7ElhS zbA~By4X_@&Pnp}s5>yiU{Y$q7Q@7BzKV=XN%)objAuP{LRI4^wM!VUcZd@$K&JQ3~ zG?#J!*yMogl|?DZ)UVYyTD7s({SyV8nQqv(;zya`4$x+k4-DMn)rP&E!h$(BjSJe*Z?ZT zi&G^2!K4`AtN&E(>_^3jYmEWRkn@L-NALezcd=A_?s@HAbf1j62(_jr+I!#bTrb7) zPhBGi?&>pN&Q_IF7^qVfbt4i|++nqTYfG&CWegc`-i_ZS?#7!58_1HZKoIKkQ)ODR zu^eYd` ziAS)sAW@s+_fLq}-N8g9o{^kvhUt40n3Eus;Hn3)_aQ4c#`A+Xw8IsNKn~?%hT+g_ zkA|$C+19wQ9wfPHHSO)%mZ9Xee4<;_;z1Gw*^O2=-IQg4;p{6a@A+@{)hq8`A-6NH zA*i-Ak4Y1K5@dGT3_7@O^DeP4*j{sRB0wg*k6i~oXk=V<{ifpS5Qf-|sFAR0O%kN* zYttJ}YtrbNbRju!>Qxa`qOBNmtcMFGe&44AQY8xaDFVLKruD{R$ZDzoGq?(cZVwly z+M;pq9${H%{59;TmRANIf(!k*<^QAxcG1v1Sg{1QqiD675u~NCktJYB=BKth! zu7Fz-(oQoxpS3?M*eJQ2hs8Hlwbk7 ?jQRyqTJ)ciazKM_Y1E7gcE zn;NZfF1%oUkiw{$OfvDvk*0VmFiKur5E*@(9VSd^T9%O0+`GN06M8Y+@^~cFjhfIq zRQCC~M@m4m7_Jgg&h`F7KJmEIBdn8mZW%s4vl2N4*6IIz2nna%xvDdkPbB_uH&pNSf@>S~``<2ig^3*kzacKL^jJf~c0V!`0; zWtIvc2-ge{L4z^F33FAwn|);>s9yvv)GpMy`vM88L>F`V=5%R1cQ?|a95WE!7w}lP z!OP%sxgT$ICqpQsJ(t5!kv|*{>;(S&^#l@YLmP-_w^d2#ow`bW<{0sCM3!Q2=9@KT-BMCLP8 zeDw!3Gt;$Br^xx)Ca^hEo}pr~Eqavm-_i!7xhX1lVn-})P3EVB){NYbU-%d^+`DBL zL(Y)|{!YN*X8v~2O<3y->J@y^$h*BH;4g>O@qY-)cc-|$wU7sF^Y^Y>Q4@`#ld6O+ z+^~A#T1SVohD!XzvzVc%E~gCC+PAf}wQ~y}BG+d7Ab@VP0~9&&aeb&(q@i}RQv68l z_b>l7u+2DvikTm%>h-DJXdyt5JnqtRr-j8*+cEEiA<-;_eL;C2H%8NphhljzGtA%r zo3z73tq*j~+4_XH$PJ68|JLslJfT3;`tF-DyU476+(%Qk<(1XWn?{VaT{nuK0p8Hy zec}vo|F!KZ&7Gg}1c#N1!!h%vlNN-$+ zw8wQF=pjb&0ry-s$_x4V*_U--9frML%PsQ0Uv_R!cfXd=a5fYCY!XjM7483vZ}w6x zAJC)+SKrYp*V)?U6)5SB)0_+d?QshS{#G9)J7N&uI|%FuYs=}vHSTaMFCD@V9R(>k z60bn8Fz=i3Xjq8W+*#YH_xPqHNbv?-nJxu_OH3fU;v)0FyFM8gv+(%=`T_He?~RX9 z+Z()kk^aa|6m3WJ{oE`r?CTdUhtQIDzMa{*$ow<|v85(flLDo1Ri60jy#&aspKN6! e2;_y}try~MH?C%Z6hwE~J$5$E=gWS@68;B}0eeIM literal 3196 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 s8KOQVErGi88r1o}+$w)=Bo`q!M#19GpT1ONa4 diff --git a/doc/html/_images/edge_segment.png b/doc/html/_images/edge_segment.png index d067eca38c1633b0040aebb36ee6bf7def56ef45..e13d72fe3df19d60f85d336bbd1b9e303f4628af 100644 GIT binary patch literal 2273 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKN6FHcGB1amF?0^(!fk$L90|U1(2s1Lwnj^u$ zz%kj=#WAE}&f7b-8Pi_N9{>11)@egyndTz}ua^me{7wM{0Wu=FEUdaBZ-o|nzkRUa zM^n@Z6%iKpT$!kY+Z8((C9M3xWK|-lnXw_*vE(ANY{-Te3Ucp^J(@2he^Pm-@;uyb zzUukE1y6UadwII_e&r{V+}mOfP3v~vV{ll`!rh@5;lOi{DTzZ&z5Qg>2M>m?kDF^( z`|GlKzpVAPjEjqGtH0IUUu~XyyY7BA!+-y(>S}r0Dw8@(E32y4*VYz4KX>-fCBKLR zSH67x%FDwu$G-mGb^h%rS#qF`Mer*Mm zxOV;ecA$Q4alJeH>+5fBO5MC|ov@gJ>}>P=xD5#hZ*R|ccXLb24OG`jurkZJVPIln z!d)-hS@)ua)#vh_%Fk()uHe$q!1wOmyPNkcN(UB~>fjP`Zq_=J zxB1UL&GXsN&}UMg^J=x_z2*eQxi_P}mYUk<-ZC#PJ0YaAz}SA}tChEmrbi3tBov*U zKkHZN)&A9WmeX$w=qzCNUcGA7@~lkLy}rLQ^4@XP@^QcL_`GE0yjAg`zx~f|Xy7QW zIwYu*pfzh}Ow5Lcl?8{Gk}MJ#OPs(-z^4`D7@#Wo9Sk8>aGUhUef-$5ur(2e9}^BT zEqj!@xBh?K|9^jtP492Zy)9=~Q}OJ~Ow;UZG8P31j}A7m`W&s#`u**#vGvnON4w+q zR9w7#+4!Xg(2sp4{FM@$e||iE{qNtud-v|u{{B{*Cj_+B&t~1PXOGQQ&Ced#z02V0{rHHj8(zI$ zmbv<0+}GRN)~=eW9scgt*6f-y%Y0|+#qYCm+%RWD!%5S#hgQ}1$Cq6<-@oG5>H7bh zH~jq5U1-0mD*WrZSNWlfL-TKa`|$8^a&q$a{QLh(ZY*?ex2yS4@af6P_xFHR@8qmm zjUTUH-mUtl_VS5;!;5?5w3SlldPWz9f`~HKXrEF{!cdE7VjnR<^TF< zf8X+ zJ$v?HgPv{w82A{i0AvQrV!l5mJQL>43lrunK@aBwoe9gz>4^K{3SKkn|p<(XL z&FSYaUAlC8^5^I0>;HT_E*zm7ap2q>yV_qbFE78X4-$&6`}uTk%Uhv?Ol8mR>@1eA z`|xT)(r(6_4i@F1n`?1r

    {>AV6`D}JOzr0<=hlFY) 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 diff --git a/doc/html/_images/example1_boxwknob.png b/doc/html/_images/example1_boxwknob.png index 7b82f34aeb3ab66b5efef738ff8139f8fe4d6938..d5d709d0dd9373e170cb0827213e008f66bc0e9d 100644 GIT binary patch literal 5665 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 M)aa6737SayAAeb$3IG5A diff --git a/doc/html/_images/example1_boxwknobs.png b/doc/html/_images/example1_boxwknobs.png index 71c03477033bd30f2f23c8170c81c9278c3c26a5..ba46c379b0ba7e005eb22088754ecbd4a64b076e 100644 GIT binary patch literal 12453 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 B2igDt diff --git a/doc/html/_images/example1_brick.png b/doc/html/_images/example1_brick.png index 4243ffdcbae681d48fb32d20bc2ec0d0bb6c8ba1..6e8edd2260e14b0ddc05d9fdd2840641d6f0a6fe 100644 GIT binary patch literal 11989 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 Vc+fH{(5H^0270AjrT9Ade*xcA96|s9 literal 11786 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 diff --git a/doc/html/_images/example1_brickpost.png b/doc/html/_images/example1_brickpost.png index e238e82d433f970de82cbcfa24aa03ff5b207e82..f1434d0efb1c3c6d7a7c353d8e20a2b6945d7d49 100644 GIT binary patch literal 13901 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 EZ!^IzEC2ui literal 13597 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 s{qwdU=#4O7ELpZNSKkx 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 literal 11042 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

    @hzCSta8HvL3z!GUp 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 diff --git a/doc/html/_images/example1_outerbrick.png b/doc/html/_images/example1_outerbrick.png index 8f740483609e5b93ed48f7f2f6aede6fefbb6a65..259eb1bd91d62d326b85d50d4c2fe6734c5439bb 100644 GIT binary patch literal 21465 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 literal 6426 zcmb_>XHb(}w|0z?t`I5Gqy&`~KtM#AC{>D-2q8pDkRB8S9;AaHRhlA%B1M`gH6lf% zgsr^f*4l|Q(9=9i$4Li)K+bC2 zQA0r>r(S?}91Rp)IW&h4f)CoqcTC+O5PIg5_bEtf8ao8S-mRr}+sG?zdBQTnY=)zK zZB93S!bUZfy?B6fOIuxCn1#Mh$SZ3y;)6V( z)YWJIn;Y6FWwH>0-=-lG41v&$dwXbXVkw3|6?RrNd_hb^h~n;g{>`r|wn zfB8=RWL=bik~IVO?>|298sU1`!)ns8)6lCkqyQsm9<3*R|J7M0i*QP^6qg+*ISpTc z5%!M`=Dw39$deHV#pa^2lO0hbt}p`GB0x^ams$JqTzYM8x;n19v-cfd;kR_WDXdCKBC}8gcvmwrV?&^h^W-HuApkZQwS4EbzHJaQ5(u@FCnNe zS&gV-ZG)w-Ej)zFn;4$qL8%ZWr1YJ_Gy{w(4U)^Dz|7D>lm>a)As=dB!%Tx*cF1iq zz#q~e2OYA44Ij_YAnP15PzF!F{3rU_Yd0+s&r8{Y^5AFh$!9>*|8x2G>SPH_KSbp} zFqwOqn1tr5a{UV&0a2SN+VU!!?!QAR#x80Ym9N40KZC0iWnv-hOW$`!KZfW3rvY{V zzuv}W>jE3CT?-q)gD*#M|1TeOk{XUGmc(u`XPkRPgA~J8{H5OfuGJq#Ld~rNO8Cva17_+My9Px(2f_~KZt*G%CVnal=gVPUvtJecIaqJ0&eOj&)!UVMxrdv_m@?X zbTs4Q4Se7jpF#ZkLcXm_h`rD!HyGi`@t*$3{qHfv0kImBrAO~oaKe;g*_+3;!^^8E zwU?bpC16BqP4?m4qu~$1vh5P>u^y8j5C!G@#Bz3?5-pqX=or>2Ns9&3;nnv+R4~Hj ze7(fFGd)?kl}woDEpiYJ-rhik+J1}f?fj=XD#idD`6uKSwdt|x>HeaXhtMJXBFglbV&*?spE(?EmMW6_9{i?u*&y!64dD8_xe|0cFQ!b5P}c7E!Iq5m zR2B%M5t#j>LTmB;bNP;LL%Q@;zQpHg%9%50({jIRqe3mJq5B!ocpX-#&dVEh@Q;D$ zq8HlgZ}aatztj>n(XJTP>|@djW5U>}Z5kJU^G>!K6rqKtq;Ky~2c{`Zc6uVrIyDK(|wSv_DmQWWYJK+orCN zaVe^o2ASl+6}@6N@i}UJ@ni4$NRh?2(v@@rfAi)9$cJ~#L3vRHH}_^`FKm>obv7KQ z&t&d?tNNXJjmK+Y-=Mph5=}zoRy*e1^Kx{^5G^eVq-5B-mMfMA^BVTX*qNdA;P;hL`dnIuxws?Uz3{tlg!N z&1eM=I#Va5Wn2>cgf=KN%E1}?Wi0Fg6XtX7f|mZ@>g4dw79YSv^@r)}?o{_aFz^$v ziP(8F%QMe{2>(iuXki1F{^7s5&TKvw%d80!8W15jVe;_`8|IMeURmaCVH%{zJOKzm z4h=HzhvkCC%4Nb5>TW^=X+3>TDP`xfLB~ndySF2xR~kF@M8Ds5C36EsP=9V|(X(9n zOGIUd3B&nem%9%hly_kyA+aUVhKFz+MnJ%qZ;!D&jiTEUAeyPZ&eJ?Qh#(GR-QWCP z-3N?#j_y07Q5=jdqh{LO{MDKc&n87B^&HgQMg@$?4t}+c)n_IbjE--@p$djV5BmJDxW&LAZ z%2Ek;P#(5>>{|{OVcwkq_>vRokc%*U1f=hzs1S$UZCz>g?LL0F*wx z)(CgjYrUZ=FoMQ%yTCPlo_7UuFgCvnt``|2-<}Q1(@UL6aUe1n>W0!F%^l(sgx-t+ z4NWdIXXtW(2IaAAJVj}vKeuI<4p<68b<%eWyZZFN;&fo~ci6nR*wE`RHg3(O&mkmA z1P@uOo1?nB85KoBg*yvt91I8ZzzC-z71|348^0TUqDYjy@sgamEbbs%+Msw@wuc6> zAciUER;Lsx?KReu$m*jWz$UCfcv8j{2b*VgH(n?qlgxqjhm(%!GWP2v!z|#-lL?=h))610@PNfz;CZdq)3YLGpaNDgbyBW5r%46;6^0s~3T^|HPl*b*W(W9|u+3 zLMyZ$o*X|5LY_1|jny-s^OkP++Z9v3uDIkmxXDlKUR88;qb$2|&sr_0;T#7jV*ltx zbg*Zoa|Qe`!aawN31n{R*J^T5dd@_4wqFT$FapZEJZ1uo#F6FHPcj2u z3r7QKwqpAuG;97JrhQ|RnD*@WH(kQqL~Ki>(F7gcKr>&=Umi=#?Oqh zn}B?6wsnpMLI9n?`4m8OQ2RaRGbye{B`2kPB3@4WHx-n8{&UG4qx&E&-V;1DnM+lY zmZ%k3*lGtMQJ`rhBS3uGb4MJkd)kMmwGW$;lPeF$ z{AQ8vP*H6{Ky`9{NF=!<8-A>WKT)Jz#K@Sb;2Pr*IU&QqS=4id{-j`UOc!|IpGA&8 z3Cv=L3pDz4ww%DES6n)3jbQbqtQ@JvGrB+`f9EbS+m99zshb9_1M}_WDyd&~ek-%6 z@i-yp&p(^&e1MsKE3Lo8biUkT1Z<0y-FkRr*+I8;4P;652;<0uQf*~mQrTuv&iMM(%wsE!b8<8ZGz1NL`!TIKg>fPPX0}uvu;E~{akxU`1Fan2M zObeHGq0Q^mrJIgnT|YpD6P^{H4T(=ZNs<YwfH}zaR?F(+ zs`~YUsahXmh5+$emtP|U%jwKVOh7!KELMfZc+#{n0nVN@!;O_N*&G*MC;Pyz6Kg4R z7W?BQZbrZ!;lbtZHzxNcb!y*I_C`6?|LvP8qHC`eeW}HSB0y6e^GVfTS8g!8tWX^% z+?t5+UfeAq-46wQ%_-N^a4Mb1SI>YNaM~ssSfryu7(ssBz%tCpKAm}_1ynuZ`IPkS z7jsW`pLbIt0VU?FE*7(DZZatp@e!|Sf4y@pt3?QEEcKj3iE2#P{A87C4N6S5Z&+*> z7wfl3lGHP{F4c`;wtvILDe0PpV;QG|lCNXwE%k$)2hQ*M9b8;mAVgtG5b7}~yu z5MxPYL5rDDYL|iYn?GueulP(l5$L!;*OmC)?rO?`NQh9X9>Br>EMt!4z!z~S*)(ia zs`0H|Km~5&)Tb=UUKmO0jcs}86YXey)Nt16>uSF9CX^`dX1ttm^URwoF(5Z2rW!#x(|C9Ry z)qZh!_TpHE{weL-z^HYlOqOS_KrMS=AZaM{6;R~{L|39Ys?!hwrLVVcnP38hYhx!W z>$I~dx-{oe_MVY~m5>cT#Q-DaiR=TW;ESu=mt^XHm%D}>h+sxxMWx!kUgXJ%C)&s zlH%37Eg%$Uqu+$Df2zWfiwqqAN$-s>_XA;)nB0@@UkQo3q5QNA=x5#%2lkvEg4pfQ z`Gz5B=VMO_b#Mkq^}oxY!{Q<&Ndlo3IqG9|zsOm}nU)<7s?EQHs9s0vZ5)TH=1dG7 z@JD#?AY*Dpp~1wuQ&{5DS^@eTAMtxpfIA(~0`0Sm?Ra5M2}a4NxF2AIVCB}Zv5b%h zCYk>5matu4RVvK_N~T3CKEI_FEN>tWG_JirX2O62M7WM_UMMiNa*i&d`=U$`2_^RV zWwI)4iV3rQwNB_J-4AvsJrzref=wDIG#2At2tj0r^#vd&E=k^QD{%hNlOfm;)l*e4 zc!`GMe5-5f4fO(nGCx1>-mA3JdcpEq{YST%uBxeknvO?&#Leu+=k4WTG+eUItG^d!!@2R6VNd{)0KewH8C)tZh1xF`ma0r zrd9az1Ws??gSB?Xi}C~OU!GAj{+ViM7*hu0pMtx_?5w32clljTvFt5^Fr%J5Kf^weR=bvfa$U(1LF+i!>A zFMH_erIf_%d)?M>W+NGhhfnsGtMv8tr`*V5N`djDvR@_*1@`FnL!^}!d-8-@@L#+u8YQy@@_IQ42;e-rpJ0 zOM4L+>BHO8L#Vs`JX8SG!3$UNX;Nb(sJ-7 z{cP7Nq=Xn67Y?F&VsO}J-qhy?{?y4PzkY?UsLx$*3T8OhMS5!Vu%0)MVFYh1ZuVki zq?Lbr&2{ewz4w|rr2rOVUZDHd6^;?7xxdy({Vep1Ddt5Me@bT3o;L?~LSy4OWfxcT z?Hf&X1#Ru!(YktF!|V#^yw2;zYL_}(wnd)ryvl@G9)B*vURG5td!VjFY>La%xlF^R zERq;izqHFw`Ro1eXOinR3#VzpWy|YRwAp*)?YP-7_YhI>Ynp@A?o!eMAPGNMyM2e0 zu6Bondq@VN+>*KVadPt)8fd`T0ITTl4;6mZ3=AFL-yrW_Arq?EFz)VBvVtE!x=jbC zDO<)BxX;-DY6h#RgL<@XlqZgOU#KNbtx454h$u^P4))znE5#RyND`Y z=VpH=Xd+PAr1L%r+0TxdP6=7ProxWe*l?RxITX+>jHH$GPxaV!8xkX~D^NW=1mlh% zj~CykB`MSDvYYI@c4&9E(4fJCe!p&^GgRmbEaUsxxU0pSa;zFBfm0I8*XykJuZ@oC z8slU%`o>fXbs^@12G@*88#D_CZ%hsG#(S^`E@dNfub;SL|)*-6@R#;O{zI!+5v< zUb6NV+QIeyG=mG`$bb`P^*{O<@6jL~Hos<4sj6;G@3rxn{G|DSGF4Q07+ahnuVK6) ziL;In;nvPfc{z0ub|GJb`@BjiH4jbGD*k2)*kEI>zZo-~>_fg~yleZ(gf)ysaGyc= zp-8hja9_ppPrU-B-V9w*)H{v$+hizuOlNG}Gq+iurYsS7ARwXKe0~LAx7tK+8L&5_ z%BVDO@a551|apHPXASHdBY!F0Q=xE<-ZeJwLSXT!)Z7DqQaBzHq7;**re}Pc%ERPLsSb|nVsxP8AS-HV~f7`eat+e;+6~b-4 zFDr&iwr$S@#`d&(v!c+W{i0{>&ZMvG_~T|!W~&~JvCUV4#1ohFM|J()y?ce|V)=jruWm~+58Kn)ax>wH2SX+1pw!kJgJUuv zpF&0JT%Ae@-SU3BtNSYr4M1QudAxt6I+bu-ycn|q&ORX3PQ1fD%N0W< zHGe+eeSJN$qbFTK@XD3#rID{2;FJhLM;RU)t@GX4+nCGr`VrZ748pMp93R<`1xI8M h>EY)8lVks5h%@E;v(h9FGWfFtqNT2W%(NtEB(|NQ=#*SvbxXT6`#^Q_fttu_0X$AsEh zJ6oHXnc0PhEsHlZGd~PIg_fg0hZ9vnBr{X%B_M9NYz*LBF}`Ri8R>RBV^Yi>u_ z+FqFZe1`nTsQFd@JFX9^$X~x~l>Z5#$1IlPxy%_0;}-A9%D?xf>|5=|bXr~4|Egb{ zzDAK|Prba=-P7})Hsm|~r-F6d>$2I-W|qyYT%_>t^PTl>&lKF%sjg>>WTI-CuB#GP zdy1+XE<;l(x9NJflTXQ>6t>!uEq%KZKPV~OgA`sFg46l=y{!DRLq;G!;2}D2uLa1H zZ1qVOqGj}5-k1rzG0qT>&pm+5y>^0;o3ru@3eE^abq|jrXHTwRppzYVK8G8@#L6Ij z<(b(in3z4DmwmFH360f1LlPbU{FE^5f-4Id{TnOxo7-YQJ)4W1J@b`GG~h0Jo2q8` zi>%n&L<}s+SD#cng@I*^s;5n1p$X3OMHh8a;}Ts!xn)v79dTXGA7TXcbz=h}=YW z>NAWe4EzYyAe8AGt^F4TSC3Yx*&>E zh7?6>e3asl34~ltdt<_%^_(KO;Iw$}c*0FhXJSG(J?9XttP~p@h(A?A7!$Jfoc(b0 zVx6^{$gmvmPJw2#a9dO$pg3~GF<8@eTKsha@kC9R^0{g9A_0k=lDv%4_9>yryTp1c zsK$tjv7(v!)%vid>?raTRr|9j8(eG1~D7+{XJv1B>fPCizkkVcH{c z+<_{w+7fa`4cS=H9>lW(`gB_S+{z?ELvk>|5u~6JS|6diK92a;s94LFdF!3SG?SL< zavg~2Mnx}QW~T2r0T(JHsS#SADyUj1p6o!_sT>p9i4hh)hfMOv=%dKzN+>E?H#Cme zt#<5hC;nq)GB+yxq^4{+c@Ul(M8Qk714@V&q67PVTLQOODc&}oSfq0FYbTzvWHU)O z7mVDEtXZPDSs+QBDQb!5f{w3Zy;+Bb+~MQyA_p|YiqBMX`xAk784zn+Y z<0^|w=nYyB7d$5ZyITnztEVL7Bpz95Z|8$IA!whokS}@G}OG8&{F^++R+#900=Lf6sM1g)Ks)ega9p%`JJls z5}~6X3r$3wTnTAcMN{BE10DTMT_Y}HMQV`C{+Mv7)@VJXst_A2z|59=CBh64@DXm& zSp(mC@0UKf5wH)$rRWs4AduiE?@bcMum0!Z6^>>e=> zr1K`-Fkvu&brt65Hjf2!OXqEbOrWF_iFc@0UtlEiuSW4n;205S`EYLl$P3r2l4K_U z+5W;rTmq28B?ML!2OxdNVs)FXK)yTkq!1fGZYJ7Oa3FvvMVG`jjCtNIAK703ax6tJ z@nQqWW-ppZ29V_!LokwY(&L?@>jGshj+SgN5dflUE2XeG077CK@qEz!iVgjI*+Bql zKyoF~(*PtR>M0=w?QX}yO9X2Hq=UakS7Qwzw`QOw4*)?F5+x|lyzB)P0oG$wW8`Dv z7!yCghl&6`MhzUT6H9@QE7{>#kt@jdX>POlSHKL;aW4^YKwv!@rOO31>|8s>SB8Kj zlYSNHa={Yq>>b0GJqLacx7JV{JRq$m<8(e?KbR-H?j)L-H2#Z9Xf7Cu(!}cQL3QT+ z3$$VjX0o4Vqv;};?A;=uI+%v@l3OJ2rUFaFK5x0odpl|NQe!>yM4*;UCK0 zPo+i`pL?{9iQnFM^SodS-{!>qj~|$M-iOY1F6g++Lr`h+{mWJ2D_i16(3nu&&e_#J z*8F);VlIvTe5(xr;vcD?xvrwq;$Z6%6DM~xmv1v^U9cu;lXi)2=jmLUbDaf351;%4 z8*U6N7lh19gO~Xga{9t z2K4_pNo9@+4D3V&G&c_5D^e4ToEjS_h24Nw!iH+Vk`F|!#83DGR{N1~nd5v$-r=3D zNh$}d#qT64;cYfxsU9pO6@I%NvC#rd1I#8{8OJAC-uU7-P%N zg`kc$jIq{+6`G_+3{1)9Yc`7o4MT2*kj? zzevDudI8wsqXg>s69elzyh`KN24MPo^9bSpCIgr#rkqriGR`7zHbRA20EYbH_kh#K zIJ@oH4~IA~u+7GuA>9l$dg2;f#jIs}Y&WU!XG*eAS3q&mjEkIfBL}qx z`nO694oPP8k@N~&H3#TF=C`7bLZ&2?5E`999UV}zrt%rcbGHtbIi_21`S}AYR^zHb zpl+ys4~N(QK&2i1faA=xiIkm&?#6&Ls+I1fq6TCRDd+iy7z&W(+j;hYhTm6LO*q}eFxqK89uCr-hd z=^~4EURO2r#>%AU=Vz(tT`b&*NP=dQlJ!ns)gLGpix+e3o0l_ zl&8f+Efj7E&BF{kj2uUOM7Zu@v}XKx;u=5yosr|EkBHU1RtYzQ6PsG10Vj3>xSy%% zWh~hejGjSa2a)JV9b5$+9Z&ovg#wHyDi>H#=q{KF)=DbH=?Qq2rD;1Khfu*}Jyrzn zR+=skQQCb1Q_;6sGILC50WLO(*HT?XEtEfwFr+|DMs&8E^q@F}uveItT_aA8!;`H{ zeSCZ(N-og1$|WyjHJe>UP3=UfS~!EnbqCiVvNaER8KT=<1qGBY%<3!I*qqgCa612^ z_tCmjm%A|8w5%6}>UB=U+Y~4ev_ACUl&>$2#x~lwl?8mc6Y$|uUn_Th)bEdM)3k-$ z`U@&CSg7GC0U2+v?VoU_c?jJ)csJB#&DN*s{ZXlTMYAcm7}jikqdC9hqu#>dxA#w) z`d_uRj10Z$zbym9--yv_de_0J0R#W+9@{+7A#>R=_^+Ms6Ys~DGDPD0#8}Ys{&L*>=a%n%C)Z6R=B1dbjdc^{LR$*k2is-5Za;l;-4;9C8!IY?i$b)m z;3B0G{>H+?FhMzNr_Gk7_cnW;@_nFHyvR0%p@J(tE-QOW_C9bGDen<_BU;gtKj;tT zG+rFcGn5DGIVU7`70}f+4!o@d;d*@k&iu72`NI9nR$lx_O-V^(LqEUJwubN1_+y7fu#-`hT<{Gkhlo_;Z{+L)d&pZ4R|!kC2D$9;J(bybDsIO#0Gx++W+bh z*q5IlB!cnB&K<%HAj=M%-oNj>`^da!L-|gLQ@#JpA)uUn7gASlD$nXV*%tKU``bsl zwnbl_I3;fHWg5FG7a@sj0PP0hE&B&g?fc{6)eq0f=+MEI#A&M!41U?yIUHX;dE=$t z`>{dqrnv;|_hCgh0_RHitdh>|yvmfpw%7DTCeJzT?SBZh*3mrf7 z#X|E>6gs4ACj5(rq0N*0L88)BO1;0 zl}FQbM#Vv-7hhPSgw{KNN9!sOc*n{w>ysA4XLloK^QM6QzMTQyx{oAk$8FXyJiE*r7f$PMG3gUq(BB3piq7&Umy4V$h4sqGBWfpbzIoy$D+!RDG2t_`b* z1p)B(=bJzvY>75Z(gG~0E!nf*Z77Bd4@m2t$^#WX2)OAzNsX5arUbWG@wIP$a|*hDm$6 z2jhxliMgprmO`ac%IwdDs$Vv3%e(x9*N?d;H;6pJ=u_%tq58X6OlOc|NGuU^_jk!}Y<#NU_bS1oG>Ny;daWH>R`&GiQ_Ro)%ifE|bI%AndoR5jJM+uj{Gz>ZCEWKb0#F0k#$ZSUM2 zK<*&XmciW*aZd{HBR~_7FxhR%;DQiW247j}ErADqDQcTCxG0EfC2L#h{YxA8C1YvC zpc+6_FL^GNGjotV6FkTYSKKD5_*PpaJ9Ho&Y@#+_4OcuYs#v0xpBdV89cSvmM#dfGgisaL3%5Tbse9?jIGHN+RHXUC$M z7>q$2S3OS~8cv(@dbA?lwHK}n!1uiC`X{Osq&3u1j?cB?#%SP6K=U$O5h27KT9q9cVmpYrQRD?){geT^AR7gzRW@Hxf6OzYqQUF^)Jby~=b)Vy5RG-( zWw^abgpTeksF!e5fG9=#ZsRM-H^96g^ep%9TrHqod9RS+t|KBm>&|>wq7Q^9Y3Gk< z;Z1VE#n7S5HVsJ)U>!@wkq;(`(xp3dW+Z3^&~PCfgtKSvf#*8*8|e!03czDw#ryv* zj@1MXWAT@bq7IAlbc8ZHa^HnQEky%?ib5v@V4vQ8L;U3Ze6Sw$EiTjabz~PQE06;f zq~%$ghPYs^wZ1GXSy_r4Op=ykoy`>-A(x6n80fslS^LvBL1n>i&@B~I<`)a{Es-kv zT(dh*`q*PQVr@d#tEcj9INPW76rukM>OPhgYEZ(sYu4E-$n1@*c9N8eISfa9hiVT; z;z!-sK97A=28O`)vk+2`Bdc@hchaKsd@BHg{w0?_l-BzanWrwB7w zdQ#ixwy#E{(*Cr-LKx}fGPrK3tvtuatGo>yPNela7v{JfX4gH@!dAD&-XQ>se$u&~ zBOXKYtZsdwpxUDpf++of7ykf_qd`G489gbpLrpqdVP<}03Yq{EHK)>GL2IX~Mi&?+ ztj`20QVkB)!i1InK>z6m*8-UE=Yghty1sh?O!!rUlcCg!z-2 z$szSLBbe|RsL&A9^HPQhGu9P$RV;uHCQR?F2&a;K=3&BwOoh~P<6$1$y}49QzHZ>x z3U{xKm($G}{j1^b<*xF?5q&Tp?*7d#-aGO=D>HBt66mn6}ZooG+ z2{Q6os{$z_deo!Kjg)Z3OIht^K0lNkDB{JV-7@tXt}!O!#RHGf_3IaJB8;1{6t(ic z2buT!j^D6S7JrMA`UyJ}$S9`x>Msh?FO~+sJAH`#33iLE5;3Y$%j3(k|EbE-2W`FNNH# zVpxnJs3v16Qjm%<5f{;PxdJV1q27|6{8!M#a7B}-M~gQJh(NjH75$C0t+70$Flr>} z{iJYvq*N@n#`uo%EU1Y1zTwMyXKo?lkW-cK*V9|GhaH~`Ic|v)F8@__NEngy3@oDF z*vhH=WK8{ci>*mqMsz}$I3l^T|4HPYFm~HJ_3bkuzthXi0L@f9>QPr9?UOXUYf>Xc zlI%T5f-ucyQseA%JmYI%da0Bk&=p~1EJpA85}xvoPHqI#*Q7)kg&)YFN~}xMM*AWc zeB0GhF{dm^;db}Li;uExIvs>!dlD8GBZC8dyksQ(m3p5->wWTV^d!@LY(oc8#3`9_P=0JhC}2Z;ni zbYZtRedo_|O(OD2DS*Ye+fAp+-!1A=fQl*G3(A0behF+dQ-rD_xRfAWng&tRc>75Nlig$Mn z9up+qjfXv1aNu!$pyGLC_1rqER?JGuk-gB58G*{y{B9MB0#DEFkIKU+x%dmCMH zMn_(k)s(mYVF>%c<%WA~A6y3OLw$=2ejIjS^T;MI+QyG*043OMa>l1hM0turnZXio z=}=3V5svQ&FCB~xDlWdt_jy125!u6~BRqBoV2LH&GWL8bLbvM7$;>?z01cOD;>A); zQb5VTA?$MzNjxB+yj#fFB2|=kvNNAAw-*ahvOiQR2^e1n^Fq+GU3U;aD~q+eN7h2@ zpIT>uWUd2Jet8wa+NrVyAUD{=J4g$$h+Psp#WOU`;q1O*xm*}=8FCpd(Lx{&qG0fE zNnTdlV8$i**d^ziSHS~4OS`zSt_RpUVVSBQZpq8A6mm~3`bMijg_-9YihB;&vj>fM zv{UuEqI8dp$7FpIBiN}o)2niXd2TY#RO;E%uUD=+&P2kDeVkPPD@6uBW(F#+83gQI z>drA}UHZc5)7cty=$Z6C-`V)>#dYKR$47nECQaX;`}w)?nZ9-ul2u9Pg;rnv`Q**j z_xOtz3u9-$echaFiTu|;d4193gdPw>UO_z9YJ=~?g;%at=`yWL6FJW|Rz6Q~bB>Pv zX*D^~ZvM~3Z=?Tj68f`zww+#>dcO4otKXglEE_LnefjeBVe0Zx`o_>4JM2cn$Jb3q z-Y5O>YmWaVNfd7l3prR%Pn@Z^Ft~OsL(r0i0S=lWA$6|cUbsPYb6-c5ft22 z6-;F>1X(sun4g-wFmJZ-lcjctmT|7VyMT7RjM#Mr4C!ur(e)wBnZ1B`&JV9+bO3LT zMV8t3-nh8XjoCVI`lXomkX7Tf-;BaGEXzlQjB5WQ# z(edrs=H5}&GOOebn4J6=&t^HkF_FX#a$T)zvH$PtWn{WDO`zlgW$*W)QbBP;zfwpzNUkFy7 zFK;AoESsD-y}U4esOF$0vPb_m2K-+nCSv7A6FeU?f#yW{8Ijc~#O&U{E;|2L^U!gKaL zXNb`B8Bu?lxcK|)Tdzj{(aofQKcn&Q)5Vpl&oss(RsHE^^45x#8Z8!w4n2PS_?o`o zf+W+OYH)5qI^d3jdeSc>QZp?_$zbeZ%%_)SdxVn}$NqiEcVY9_1@*tq%vN11@?V~* zya=5D@`yjq7WwpQ!v-Fs3_Kj+=iTeUOwik?UX7C00Im*_TH5;9JMn0$h1MZ?l15-Ipa2{gw)1u; zK9VOTW^Pw%xupc(x|x~fPF#^ACFaPfv;?8xpv;1Y?!*jPl8}npww546IOqZ2tUIw& zhGajB(P#Qcx{8G;Ivn~MCU!A0K#?jV1bpd6_O?HX)A=zlV}{sRC2 diff --git a/doc/html/_images/face_filling.png b/doc/html/_images/face_filling.png index 734585596cc30951d83048eca72d90bdd170bb54..22352cccdc19302a2b8dc25cffc2fa8a60b59cda 100644 GIT binary patch literal 15516 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 literal 3486 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 diff --git a/doc/html/_images/logging_face_fillet.png b/doc/html/_images/logging_face_fillet.png index e32a6cde1fd6b0e479ce5250579eae49230a23b5..d163c244749b830bad640bd20e7f820297aba7c4 100644 GIT binary patch literal 2445 zcmeHJ`&ZIQ6bFo6n7Xef^|KlN8jSdd;^Z&tidu8CzG+%B!1 zO7R)pZ2T5~)bvN4ZJXP&ux!H`LT|f?k%nuou-&uM=+-!ITtpJo?|&vSF4{L)<){!i zt&l=1gi>u(T4VtaOmU808%ZWt3@?L5f@5mR)lVBE@ps9_w9r$=7`_IF6D5~vBJr+$ zH>r4VaBt?&ow^+u{!0)0Q)$ra!{ZMC!PR3MAb9l3<$u5n0r_m!xqg76+hIxApl!Zm zodJ6dj7Gn5-5)R#cJ*i?OTlF}N12q+>%GXw5M8UNx;3!y7spl=L09Ym1w0LE9n0Se z^nBrWuxZdX4P>dATn*^4x|FMCfr}A&c(BD9*tM+~)Xbj?CrvOY)yI&L@S#-_Kxg$2 zxcp~9l3v{XJ<>4a3xyFK*rE9~uu7io<~Dw@0Dv>=wKZJ+84Z~KEAlthx83-5HvXSC z#XP+(Y-Xl*=Bf_o^M{5>LNZUE9RJp@WICY{&E`2;$&P|obY`3C92I|c8c?Y-pFhsL zqwXXl{;d!QrWMk%UfaAy)%>YSivE%?dRBwhl1-3F?{?4UCqzTIti8rogYdnlO&>lq9+fJM+1C{$n*y_ zKg2!3egEas{6?la41Rc$L2pGrs$r+t#u1m9lsCk}riXxY;qyTrfaf$I(M8jk6BFFQ z(bPPvpw;9G&#*xnx@{R`f)>xo&J5rfHTUG+#r9|hgE*GOX2tjRi4t*vT$a?%`v5xe z)p7Ox%w<`j!zih$QH3~JA zy#2#@^0E|8K%+A=7kXV5-exY0-y+J+kQcGdN_lc8OxwKZqlh7lH4qN#C*8@*BP4Kq zeI*>BTn~xio9`J)6c6NE1v`ja4wB^&W@ZD=%NE+S$Z8^Oq|iOpad1Yt+{$(k^?+$_>{_mYSMee99B%OpXD|36c1K%(x9pn2Iv%d#OV2?rZDp2Fn5;Ajk_%< zskI7|lv5WSE($pr`rcRhYQ=&l^hfB=O_HvWkuBSc-r$P;8S;SaOW(k&cIHrI1)pX@&cfi-UCrtY zYPG%$;?~E9DcWFg&(>JIQQcYuOZ8>YvlY62X>?N`;+hOc(<{CKMJ-zb|0~duLtd^m I2k~it13-q>g6w)`Ge&ib@e3YrTSQ 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 DRC0-O literal 4276 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 diff --git a/doc/html/_images/logging_solid_draft.png b/doc/html/_images/logging_solid_draft.png index 1a6f63f8866c5a244ee5d7da796a71807eaafc32..d6079b6886d30944170e2b0e8737af10ba3b589c 100644 GIT binary patch literal 4634 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 j857vCnmB$udr1Y$288(2PnZ+eU*Xhiao{ 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 diff --git a/doc/html/_images/logging_solid_fillet.png b/doc/html/_images/logging_solid_fillet.png index 9782c8e827ebeb3be6eeebc6e176d87fa9a3636c..b1cefcff4565aca0068081608c32f635d1b6185b 100644 GIT binary patch literal 8290 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 CA^>*) literal 7973 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 X$3uGtWGNl+yElumq50K3eE|PIjO|*K diff --git a/doc/html/_images/logging_solid_simplify1.png b/doc/html/_images/logging_solid_simplify1.png index e8197866e7a0b02c260570600fcacc5b8136540d..845ef35aee2d8ceaf37a0e64f1ae3011fe484ebd 100644 GIT binary patch literal 4795 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%0ABAYE6JG2* zx?t-Gn=H0=RNr}Q$Nt3+)Cv+GFI_(#(^7EVvG=pG7mzi{Q|l^OR(aMIZFCGb0W(&5 zCois9XZvPc86BqJ&2SA1=eK2o?Jx2Tv)$O~k#AkKrxu*yoGd!anVmj0Ri4~1psgfX zBnqwGf2n0Rjg{9i82K*i7%@AfZvlJ9?k-L4QKSWE1-ssj;+Ku22Swiu!?YllmZ>Pg zjpWpq8dSecnrwu_Ht9~>S>@CSh8z$MnUIz)wA9Y#F#`54#*0cBJ6&Cfuh%5#qRsqp zlq!DN$fLRf<|sbNQhES8a9KR8Jpord@Z?vXs<6>bML_ojt-CzyD>A~)h@{EQ4Jk-p zVJfO{N1iMN)$fq*5q-ucYcrFNit-AaN|WF@Ico72BjWk&hj?CLXYmc9_P| zkgbi2_D4L)^!VSt+#K$8S4XAuvfL9nUznI52Sa84>5x zaZVo1ar0&@xphr1?~=|j&N^-Hs8S}wx#~NmDz=Oae3FyY$7sX1+A!0m2N22LRFtU8 z6;>~ne-6blQ-h-YL|WK^@!C-Qa!iBr!t3b9pPw=e`sd85`{PD!-XHyWQ7r*nx?>2~ zoO7;MFV!R0-dd>yTtutu#;)U!=}-6s%`7n}Gj**2$6^N;`ezy!#+#g$ej(q>NbQ+| zz)Q*a8pnIVVbjU@Bkbac`1cLw(tjAkcyHH_Rm14ynYw|c?CSc#=?`a}BBY|7jT2W9 zJvuvoVH39(pkIpWN*g;uOllZC!+b`N?!&4@^%)$SZ5z1o&I@_<>b^c^dgnVP4zdEK zW9(qIUlr3lwd+@sEIoq@eaOmpOJA172Z^e%16N~KYR-z{2NwFDJct|dJU;)={ei`y z4`=FlE$0=&FsX+Gh# ze*cejgT;SWe`_(AYdx@LgZ=Dfp9E^bfvqP5Mb|VR`?J2XIc2pI&H8to8pdiz8>a>3 z;d(?(a^3!RiJNA&zt+gL-D9?i^S}0~IXwNT?KD;DljjgW-5)<5w1RZFQAXy%W(?BE zT}$JcNp}lX$i|SXglS$%HHD?Fx=Ev{+czRj&~WRQw9|a52~4ey^K!AxQba6_&jsmV@FR_zP%WPd%t@9xe<3PFg|B*u+Y$Qn)) z_;J&e3~D2a8U8&FA>0Frw~{RoD4pzNHRi=4U$cnlZA7G_`Q(OK`*}rvgFM=mvZ8tv QIgOHYclCBDa|WUR1L=hG%m4rY literal 4430 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 H0>S?W^Ytjf diff --git a/doc/html/_images/logging_solid_simplify2.png b/doc/html/_images/logging_solid_simplify2.png index c16f14f1f52dec90f71eec7f026861dfe8f14d1d..2e9329c740200e9424fda66078c3b11747768ed5 100644 GIT binary patch literal 4620 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 literal 4249 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 GGXDn-q|6Bb diff --git a/doc/html/_images/solid_box.png b/doc/html/_images/solid_box.png index 2e4862d6b2510a7f9064b881abf04cca1150f15e..d8218d0d7913b1c01b39cec41dda3e3928b3c88b 100644 GIT binary patch literal 3934 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 QUYI4E>|N|CZD`Q{0Y|+HjsO4v literal 3581 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 Q@b{dYmxu4xa(4*+AE|3qrT_o{ diff --git a/doc/html/_images/solid_cone.png b/doc/html/_images/solid_cone.png index d077f78cf7404ba192f353645dfaad48e87cf2df..08a386b611036fba958f8bffd6c10696db48af22 100644 GIT binary patch literal 10841 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 %P{+DEJIzI~ZyJdc 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 ba);A#*7i<3CuSBai3EVubX9AVU%vk@lANK( diff --git a/doc/html/_images/solid_cylinder.png b/doc/html/_images/solid_cylinder.png index 5a69b64354ce052e4f8d02a6c0faf0fec373fd5c..7d58f43648fe8fa1eeee9fef6f018bcdff1d4baa 100644 GIT binary patch literal 4925 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 literal 5240 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 Patwo~tDnm{r-UW|SqK~B literal 17476 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 diff --git a/doc/html/_images/solid_torus.png b/doc/html/_images/solid_torus.png index 9d1082bc2482106e51bad87f5f6fedfe29972bcb..7f21f8b6f52f90e5c22500e6d10e77762bd69cc3 100644 GIT binary patch literal 14521 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

    V|TCyEI9#cpYg5|KvLXxaLrBB+=$tr>5_B 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 JYiKo`|jD` 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 diff --git a/doc/html/_images/trms_mirror.png b/doc/html/_images/trms_mirror.png index 6d635b18f491534769467996d2f8f6275433b40d..14a3959b6eace5533a67b878140afcf5ca5ee681 100644 GIT binary patch literal 3835 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 Zfwt|{$cWlSUHHdL&cW8%rr;Qz`yZ(`F$4er diff --git a/doc/html/_images/trms_scale.png b/doc/html/_images/trms_scale.png index 7c18b271d071a7705fb66b56209dfacdfeaecae4..d409c07947477d5167719dc9bd079294a9ea7fa9 100644 GIT binary patch literal 3752 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 literal 3219 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 diff --git a/doc/html/_images/trms_translate.png b/doc/html/_images/trms_translate.png index a9103fdca622a2da3fda0bc7f0919c68197179cb..0f42f667bd02ffaa16f1d5fa7adb11885253e207 100644 GIT binary patch delta 2219 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 F{{hQ)gWCWA delta 1908 zcmXYydsq`^7RHk_U;?%XmVhX@_=pq@f~|pS1ftwbk&7V{!aWL4uz^6Uau)}uii%J! zX#^sIMFcY;ni3K$5ZOqT6)Uof1EK=r1-3u{0YkWECw=zMGw*NC`Of#g&&;^B&a&9b zq=)38&e9a3-(>>RfB!~q;ZWYb!iuA*c)bxbzRo$}# z!Io3qss-A=icU>cQU5YC{>hF8T~MyWga|pKXfKGVaq8u;1gpvmQSlcZk$jG*mQ3O4ClTeB=6a z8xfLPWS(8m`z1+pEVf7zFUf=~?`9eBcRMof-3kAEV*^KU%OID}E}*!z`a4RFH0{q! zxk++(u@p2Wu&Nkh8_LB2I4)htMFM4|&r9H=a{_6^0@TII!SC`O6x)avxfCToS~>m? zHr7Uh^c>+zgzic460&-{X*86=<2E8wPjW>-F(;MTDz*_;Nq=r@AxHWWSXQa^Eb5_a zNC~sBRO&=zHJ^3{ZbFTS+E8C6f~>I9`v7nAr{fvuN`3KFylhN-?ao6!aCsg_aYUM5 z4DYjNOH1HwwY)n7mT4{gr9$KmAzz7i`og0E4#nSqWbR-G7NdxX8ZKiBYgqGmi6;Zd zXYSd~R)k2l)#m#XSjQN^dFDqS2q-WRlYX);gJPGjBK9@a!US=RiCR=?keE$9S`0%B zIPrW_1;1hMqc#PAz~{!h_-4oa8rB>0&Fqm-zFF>i9@;RFF0=NA(IafbUx}up?*RFn zkMRaY=)gYkok7`8An6@}TepEg{FRtsxT^$?Ad+}M9+N_ojf$9-_CTR|!#)QCA;2e2 z9R{2j$N{y;#n43ID;vFlA|Qa;KJa&!34G#JbPxkEUp?1;nf__n{gvH=7>JiDA5O_8 zw3fm_<_+Jcx<(!p+aQW0IuEXt_XSIomwxJ5tAE#tkqe1PHhpA*alVZ9up+oMGuB@tljwwhmz2h^fVLBt4p~W@xh{@F0j~Hob@_>pcFn0Ay5t_K&lP#h-6SU z<0X_hxdULSx$Z0$IY3CGBR2rnCN^`$NP&4nkTqJ>?Gd3G9YQQu*8&xgsftM25cjJF zi(xtlJ{m)U8LTUq0i*RMH+T2;<*8P$HC3Gf&-(k!ukaxMihMshxY~m6Dw7b|&^4GG~|-7UmLluV*F4 zqXVZMn;ek0uPse1EoIF$lgJz}Cg&5P(P&u7d^!P~?3kUM6^GWpY-#0Sf#~~Z7DqZR zjy9@Akc`((1xAANwTuiuPskE4`n5;ShtBjV?Lkm2MW-I=d_wv zabDa!qo%uW=L2QA)>qHdfKSfEU0-+LjuS{5yk)t0^UJGF3w|&D`r>(VeQ2+j-hzC? zufqu_ssDt+(OrFTLY~p{U!U8|m_tTivWC-~)wq1|_s1#Q*)$NFTF<-4!S?bdg|=$k zj{ZOY;2oCb()U)vwvf?e@GkMvbl?3LDxrJbc42)$j+MX31#>-EMP z!FEKE*q^r6Ja%*|xbpGEMkCYm9*%1{Idbb+-AIwwTE@Fag(D@wo{R5?LA`Bu4F?-q zL5@sm`v^XAWlu~@nAsiBXs!lq-}FNg=JBTa);FzU{t~@83TbsA8rcTrdUK7RS&W zJc{v0OFfzEi3Re>J+HsayC U_rHA&qJLKm-8abR&LIx;KeRlod;kCd diff --git a/doc/html/_images/wire.png b/doc/html/_images/wire.png index 6b6e68a3d1652e9570a0d8b6cd2806e9a32696df..52026ec4f8e32deb91af2a90dd6cc009f6be0a51 100644 GIT binary patch literal 3109 zcmeHJXH-*L77h`l1Pm%%5ER5`i-`iFpcHBPkRl=)2xKCGP$LASS1CaSLDVOYfb>U` z(1HR=36cR(qz{Bh3j$IE={>Z$!S~jiS!@2xtTpp%e%y7=-uv#o&)NHY-#L*c#(E+` zQbG_2L`47UWm5=*=PCF-6M%x6x={B^;2`LB)xrY;f$ishJdhVjlHi1;e_8vMZ_-r% z^$6U^p$~&Av7*jtStfP&FB?bzH^QBGB`VH3>RqJ)VHJ@X$V#{LRsN#K|GM>`%s4;;CU2zVG(i|Enx=KMgS1irG-d_@zsg`-}LWSBLj{0 zT9V)=Gd>pSPVFXZ_fp!fFx}ad;(m*kUL7CbM=>RTVe|y$)6s3UcSxf;TSO2 zUE_|G+-jX=@4j=2o^DnXKH7R;^B|v1leqe@ zxWca&GZfc@^UZ36NA(|`mJ=n^cOEDTNoYPOx*rfF#I=CJ#pbwYx!cmEP@s_j|(Nv31MCe{-m^}P2@X=|E2Tu zJ}4JniuSu-%koMoDPK5_I$TfEP`b?{(yO5c3S9hoCslvv4>kL~PnMhAvmx4CE6Us8 zso)MQqxX7HHV?N|Jd-;MW&mRq2aUgyo(hVXwRm^r#i4}E6OzuZ9aCM)dT4FS(O=EdK)uV}N&(OjT}WE)}h zgR`R9o898j(>)07Kg!w10Tl(Gk6qd+HX&9H=J zZ5!pZW4tz<3bF@Yg%lG7uV@s2o)TWiek*Hp1Qbjk-+lS|>gdBY=wB z4Fv2z-;Nrm+sFCoBEU&;J>ctcD3?l&J%VjJAyPD%%`ck)EdIRESbjgy5m?kh!pf7q zKg;M80xZ|W+L#-#p^{2xtnmYT?WbK5&g*oVM)>sPM^zV1jBWu%`m?@IoP&8`hUd3z zNTO<~f|@5HONns8M73O|QanF>5BoUgR5Ff?6Yer`a6Pby`M|>Ykk5C{_43pAg6t%d zpB{k~Ob_ca|C#n6jD)-#fxW5Eka|@4zD*lsHhGM0`WtCW3A(o_`Mg-rWV*EmM!uUN zCAB4KuzDQ|WL}45!Wlg!Yh(m{wY#Q?Qvvvk=NE7msnGosn;q3}7(JaVij<@!)xme0 zT#B9niB_g@&GvR7-ld20+qu8Fvw@1*o1U4+M7l79)H5bg47|d8gS~akQLt|sE>@75 z%>TtbX*9SxH=G)@+-)dNFIkHE5Ob*aUGO&HiALG@YjZLK-#!N6*xK2R484y^OeHxx zSFMdE7FBbIyK?8?{QE;D_8`dg$d}=kw04Ca%yz1PY8V zfPZEX7ruf+Eyy$q);vZ!JBu=^a-E8`hYQq=w2!Aerj;8elT z({KQVm)brJSD)2-{GoDtYkeSidy`^yZ>>dbCU7D*$2*vY=h?4j_KEEdHj^39DNTAi z`26~%?l-OjpY?RfwitkWl@*a>-jfSkUHgaM$_h_!^ zBQ)hl-~(H!_n9rS&KzxoRouKCBKVA5M(jfaL{^`7ugeql`H!Q7Y5EFVh3!kA;K8eG zj!JY{8160$e^)?#M{&0{bW7o4hH?hXh{eh-Hz~CSE;OsigQs`AQ51#OL6<6H3y75v j2GrCS{$G9X4hKKZN4X&$X*~nq{Sf^t#+M6q@L_)kJq=LS literal 2974 zcmeHJeK^y58)uKnyOl^KFLk1mc`Gl8OjbHARASE%mWZsVLyVP|jn)gLtI&}}iNf$h zGZwKNOGye*t0g&J%FLX|5N7ajFy6D}B~Ar%E+ze?a`m~0HTwI`7{57u_(1m3CDtnTAv$gD9_Lz8 zXN=4p5qEo@K6tue+sZXK6>?Kye%tA(#y7mDf~N)3PD1BEPKcOu3MD0lPm2$cNF=y1 zdkY$+kW!+ge#Qjns=Mbo{wo4$d>XH4^Z%p&DjOM>(Wn$m=b_qr+JcFR zRfz`vOeWJogue6qNM3)~;rNmSzdO|1V>e24>1~(s-YB~w+fFm#422=jjufGgI<}?Z zGZ7TK&VD1)DA8`|UO2(q%I;W3b!EDZ50eAcGX(Axo8QR@xIT;9eQtRuB7T8%vfYT=IwU(3|K5U89x&9poPpu&!fXDcazK#`ju-2PnoKvX^)c6{Zmpxv z4Y%4OIJZYn@b*C(SnH4`i{D-9(jwtQeXqrk5MQe6u@%+%(H<8G?|F`{-K>%0&+d)o z(JRTtSZhz3eR)naK>=5G8Na*=|CqJ1hO3?9uei#td>A0D`?uF}0YFj8cuVgCfEFJ2 zDAtMXZT@bZg?)KCP&w9Em&Z5^^{PeO%swP}w+?Zz2v|xPu{WyeTd-8lh5YK$Tr=z_ zVU4i9+DBPo4`3m59psQMbe2J-XH$UDkv>9>g$d#yV*y!5w+XF4AQ><&BeM30YO22H z0+I!Fe?i)+<$O{b^Aeg65`fP!|JFmVmcSO;sQL$-nBt1cX+8cK$F8zDjMT=0&jd1P}ns_N|DFLDxal& z=~a$=L8Es_@Q22C-7JT91f;nh)oR=u0j~CEi`VNQNW9e4P8$!{d{Mm0w&aHWamgFZUn^9?7N{qw-8JDu}Rg0?ic z(&FzKC<9z#WxDGYt;X#*51cCkaFu~ZPN2yi%DrjIH*JmyyT)AU^og+~=qi+A3`lH~ zGcGQ@WzPk!wjS{GTRVPvP0IYLjX}C#w+-;zLwH9eVyx$rlpXQ_MnZWjrGK+UGBzqgwrS1Kf<; zOV}Gi6+Mr*1Z87Qk)5y${g?_&K!6+g>&8}K&QAl~`hfF{^%HMn`;qwOID)T#a_*km zl!iWnFKY%zIiwiaTNW#FM0S#Y9KVBYTeKt9I1mov?&;+beK#*eT2j*EpIymJ%L9FP zq5`A6V6&u<>Ytqy#Ukis1fUq}i$$?{-j5sonrK>MTf4?t&3K+;aPV4XR-gQ5fiwnJ zN43_XXc)CVajK(c5n864epBugBi?J=J3^JcFnEn_-!PM9Bg;5QQkg0brD++_8`vG1 z2F2Hh{W_R-FAd#jA4`2p!yn|8hw_y$+2hrf_)cHqFL-Z2N_NVGO71S@HCPF&+yNJp z9qgi?3HXZyjjXm@o2KR;yquk<&Y~ksqCD5a36_E-=ybRKy+P23o0WrxW#YswWrF2w zH@eFm3aX*lF=x)mRFd=}cvtn>^~nrKo=f70V%TLImY%yVeU2k4gK1{YA4YNU78z5; z$|I&z8b-;Gc;(!IX|`Fx$r|cDbv-Cg$INSgQ{oBvrDZ|H!4J0!1cSX~IDJGW5jsS_-7gbf zi@q-z&JEW3fxc!z-Y|NdGR(M;;7X}ux*X@0^4qyN5qUW%S%$A{K2nfGm14{u46O#mWwF8Vq!43;<{TEC}`h)DZuno@;-GfUWRm%-N)&~?bo#$tUim$|sKBYOu z3!eP4F*r#Qw!@4S`=NVT@X2a<`$9&WngV4ezJ(31_+B8m5+v7(FfGGW(TzTnahLkYNDGKi~f@#GSiIZ^y7 zTpOnO+rH z*Ts`hfkWb_wq@D|5)kJ(RrQEFRMah&?G7^BmN9cnir039QkDw-@-+PUIQ@O|=TLBr X#LS~N4)zfY+zLCldu^+9!;}97#q&6H diff --git a/doc/html/_images/wire_helix.png b/doc/html/_images/wire_helix.png index 0498a7e22adf193023d1196bb45fd84401b63e02..30cf851b1a0323abc4efdad2fc86457e05bb93de 100644 GIT binary patch literal 3768 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 literal 3471 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 Y^{AH1znz{7|6$1-uyeM(zn9MZKR*ROuK)l5 diff --git a/doc/html/_images/wire_polygon.png b/doc/html/_images/wire_polygon.png index 24499acba2dc3aaf589e26bec9ada21285c9d2a7..ebb37de87218fe3ec4c2889861f0959dd8e9d6f0 100644 GIT binary patch literal 3639 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 literal 3459 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 Hh)MqkRu^fR diff --git a/doc/html/_images/wire_rectangle.png b/doc/html/_images/wire_rectangle.png index 58031c78725dabcd3562a212acd5caad5c173009..64722087cdcc3c72851796fe982283210fd459dc 100644 GIT binary patch literal 2268 zcmeAS@N?(olHy`uVBq!ia0y~yV4MKN6FHcGB1amF?0^(!fk$L90|U1(2s1Lwnj^u$ zz|rUF;uumf=k0C(jL?^|#~U1 zs&^2N>}+k2mNpmdiSk%fa{Yn)1y^$=R^GBuO)l3~y<^ifwK@vY6Q?>He{#=9t$g3% z&uh-@+_UHX?q46~O`g2$YL=)&lj_}j3=X?lxH}Xh9C!{gC2@!eIB#f>XktAgprg>1 zz-TxsMQUgiZHZc&m(Q4xw>B*MmnZd@oONcT(sW4bRckHK;OF&wtj{nX}%# zV@~k%U48Y{H#vq|k0uJxr7&2)eE9HT{rG)0_5c2yk@uf(x3}o&Dd%>++S{wm*M_~m z9mo8`?&a&()jvKwJbwG+$&<6q^W%1vWC~6zJH%vVY+ztuVq#)u_U+%de}8|k4qqQP zXX)Gx4Sl)y_WXQzcXz0%rKP2*Y3b8bQ;$Yo=j48I^V8GyaeHUYm=UqX6==rK8@ozhzj*ON=}&5bnz~NHylpu*i=LmGdo<=E zC-;oyOTDM-ed+=ikO}jus;a~)UEc#sOh0h>dFyISepL0YpFV044$-sjn|_U){#_x$ zp}H>i>!Mlm=4ebp?H_z&Fh#72u_TBgIvRCb)`(HdWW8uy?JZlwD zGAh_N{&LlgxyzmICo<+{{<|2Ge|7z;ujW9jIAU!da)@2%TsFI#TkHa-Ijo-zbJM-t#-xn@i z*pzzO&CPA!!#TINN*RICr_T74-C|2TUV|6_wS!= z^|zS)b$|c9{qUjSvdR2ap`2nDR!W=a<=ohi=(xbcu~&n4m%WX;5gEQV>g%7MpYPqfXX(x*c46M` z&}93y=l4Z?=v=;R85)G_s|7&i2{P(Ri_FYL^ef^G%(7#Jx zedd1}xjpahV)y=g@%(&z-@bm8wJdrPJh?)J<<`gbtNw@l{rLB+|EjvUukHN*BX89F zdbC(RWbeAF*ssr5om_Q(^{TADzrM2b$^5WL`~B_h^>wkcRU?4O@6N2W7mvUGk>jkt zZBoB}m$kBmy8pa6^XBa zsa`e)*8fqjco}-UH#G1ZWHMsmJ|Uo^;5^D9Eex#O7GDg?XMFG-NPqfye_EL~!~dfN z7BV|jS)4|LbTnBFNY?6kT5R8T_~E5@%n!D=Exwqs@;ifp*!C8Owgg7WCe{=Vu?dP1 z}au`%iEtE-deXh1wGw~JZQ56RyK>mC;D*dmRk)Z3`@ z)4hfHAk(og|3Bo{5EEkISDBM7tG~TTFt8|lbK}m_RiUfb#qG6vXls$kn0yoH;{<~n z+j4IMky*}-4=*k*c9kmm^W$SXzx=;FMc?1uefjcbqxedu$I^WNV|$d{`+#zfr?2_5 z{ti&<$;s;d^7ixMZ|G)r{C^<-sC3Dj8ylx;hsW(M%QcYj z@%3FBzyIH{UTNm@zyQCsDfRSB<8-moBWKQ>*;o5J@BY5OUteGMpKo{e+_`gWxy3dx zgs+Q<+?I0_7*XQY7ruP?vbXyCzM7v!KR-SF>AJn;zz$$aTIM_Z-rj2SnT68kd4K-> z{e8S&{&{$f7l+OPps>2}i$ks4v(58?4tNW+`un?s2?nO7Tl4SlV`k?&v(`G1alg5-aq-_@ zU(NIH#q6)EeODWQdb+-S-Jc&xXLeP5d~|zzJ}^z$@84AW`y0@b%gg;idcGf*uLlNE znt{X|o61jzfnjS`^W$ga4=3LGPuKSYz4YnALg)Q!?(C^7e$c|&lgXqX^f$K;6qbL? q?@rHQZek6oXrnN9;Ll!vIGta-+bcRd;sUVZXYh3Ob6Mw<&;$S^iXg=R diff --git a/doc/html/_static/ajax-loader.gif b/doc/html/_static/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330 GIT binary patch literal 673 zcmZ?wbhEHb6krfw_{6~Q|Nno%(3)e{?)x>&1u}A`t?OF7Z|1gRivOgXi&7IyQd1Pl zGfOfQ60;I3a`F>X^fL3(@);C=vM_KlFfb_o=k{|A33hf2a5d61U}gjg=>Rd%XaNQW zW@Cw{|b%Y*pl8F?4B9 zlo4Fz*0kZGJabY|>}Okf0}CCg{u4`zEPY^pV?j2@h+|igy0+Kz6p;@SpM4s6)XEMg z#3Y4GX>Hjlml5ftdH$4x0JGdn8~MX(U~_^d!Hi)=HU{V%g+mi8#UGbE-*ao8f#h+S z2a0-5+vc7MU$e-NhmBjLIC1v|)9+Im8x1yacJ7{^tLX(ZhYi^rpmXm0`@ku9b53aN zEXH@Y3JaztblgpxbJt{AtE1ad1Ca>{v$rwwvK(>{m~Gf_=-Ro7Fk{#;i~+{{>QtvI yb2P8Zac~?~=sRA>$6{!(^3;ZP0TPFR(G_-UDU(8Jl0?(IXu$~#4A!880|o%~Al1tN literal 0 HcmV?d00001 diff --git a/doc/html/_static/basic.css b/doc/html/_static/basic.css index a04d654..43e8baf 100644 --- a/doc/html/_static/basic.css +++ b/doc/html/_static/basic.css @@ -1,6 +1,12 @@ -/** - * Sphinx stylesheet -- basic theme - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * */ /* -- main layout ----------------------------------------------------------- */ @@ -73,6 +79,14 @@ div.sphinxsidebar input { font-size: 1em; } +div.sphinxsidebar #searchbox input[type="text"] { + width: 170px; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + width: 30px; +} + img { border: 0; } @@ -127,6 +141,10 @@ span.linkdescr { /* -- general index --------------------------------------------------------- */ +table.indextable { + width: 100%; +} + table.indextable td { text-align: left; vertical-align: top; @@ -152,6 +170,20 @@ img.toggler { cursor: pointer; } +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + /* -- general body styles --------------------------------------------------- */ a.headerlink { @@ -189,6 +221,36 @@ p.rubric { font-weight: bold; } +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + /* -- sidebars -------------------------------------------------------------- */ div.sidebar { @@ -252,7 +314,7 @@ table.docutils { } table.docutils td, table.docutils th { - padding: 1px 8px 1px 0; + padding: 1px 8px 1px 5px; border-top: 0; border-left: 0; border-right: 0; @@ -272,8 +334,37 @@ th { padding-right: 5px; } +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + /* -- other body styles ----------------------------------------------------- */ +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + dl { margin-bottom: 15px; } @@ -292,7 +383,7 @@ dd { margin-left: 30px; } -dt:target, .highlight { +dt:target, .highlighted { background-color: #fbe54e; } @@ -329,7 +420,7 @@ dl.glossary dt { } .footnote:target { - background-color: #ffa + background-color: #ffa; } .line-block { @@ -344,10 +435,28 @@ dl.glossary dt { margin-left: 1.5em; } +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + /* -- code displays --------------------------------------------------------- */ pre { overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ } td.linenos pre { @@ -384,6 +493,20 @@ h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { background-color: transparent; } +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + /* -- math display ---------------------------------------------------------- */ img.math { @@ -414,4 +537,4 @@ span.eqno { #top-link { display: none; } -} +} \ No newline at end of file diff --git a/doc/html/_static/comment-bright.png b/doc/html/_static/comment-bright.png new file mode 100644 index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903 GIT binary patch literal 3500 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 A2LJ#7 literal 0 HcmV?d00001 diff --git a/doc/html/_static/comment.png b/doc/html/_static/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95 GIT binary patch literal 3445 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 Xn!ZpXD%P(H00000NkvXXu0mjf= 0 && !jQuery.className.has(node.parentNode, className)) { + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { var span = document.createElement("span"); span.className = className; span.appendChild(document.createTextNode(val.substr(pos, text.length))); @@ -79,14 +94,14 @@ jQuery.fn.highlightText = function(text, className) { } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { - highlight(this) + highlight(this); }); } } return this.each(function() { highlight(this); }); -} +}; /** * Small JavaScript module for the documentation. @@ -96,7 +111,7 @@ var Documentation = { init : function() { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); - this.initModIndex(); + this.initIndexTable(); }, /** @@ -107,7 +122,7 @@ var Documentation = { LOCALE : 'unknown', // gettext and ngettext don't access this so that the functions - // can savely bound to a different name (_ = Documentation.gettext) + // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; if (typeof translated == 'undefined') @@ -167,29 +182,29 @@ var Documentation = { var body = $('div.body'); window.setTimeout(function() { $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlight'); + body.highlightText(this.toLowerCase(), 'highlighted'); }); }, 10); - $('

  • ') - .appendTo($('.sidebar .this-page-menu')); + $('') + .appendTo($('#searchbox')); } }, /** - * init the modindex toggle buttons + * init the domain index toggle buttons */ - initModIndex : function() { + initIndexTable : function() { var togglers = $('img.toggler').click(function() { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); - console.log($('tr.cg-' + idnum).toggle()); + $('tr.cg-' + idnum).toggle(); if (src.substr(-9) == 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX) { + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { togglers.click(); } }, @@ -198,8 +213,8 @@ var Documentation = { * helper function to hide the search marks again */ hideSearchWords : function() { - $('.sidebar .this-page-menu li.highlight-link').fadeOut(300); - $('span.highlight').removeClass('highlight'); + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); }, /** diff --git a/doc/html/_static/down-pressed.png b/doc/html/_static/down-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7ad782782e4f8e39b0c6e15c7344700cdd2527 GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}Z23@f-Ava~9&<9T!#}JFtXD=!G zGdl{fK6ro2OGiOl+hKvH6i=D3%%Y^j`yIkRn!8O>@bG)IQR0{Kf+mxNd=_WScA8u_ z3;8(7x2){m9`nt+U(Nab&1G)!{`SPVpDX$w8McLTzAJ39wprG3p4XLq$06M`%}2Yk zRPPsbES*dnYm1wkGL;iioAUB*Or2kz6(-M_r_#Me-`{mj$Z%( literal 0 HcmV?d00001 diff --git a/doc/html/_static/down.png b/doc/html/_static/down.png new file mode 100644 index 0000000000000000000000000000000000000000..3003a88770de3977d47a2ba69893436a2860f9e7 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}xaV3tUZ$qnrLa#kt978NlpS`ru z&)HFc^}^>{UOEce+71h5nn>6&w6A!ieNbu1wh)UGh{8~et^#oZ1# z>T7oM=FZ~xXWnTo{qnXm$ZLOlqGswI_m2{XwVK)IJmBjW{J3-B3x@C=M{ShWt#fYS9M?R;8K$~YwlIqwf>VA7q=YKcwf2DS4Zj5inDKXXB1zl=(YO3ST6~rDq)&z z*o>z)=hxrfG-cDBW0G$!?6{M<$@{_4{m1o%Ub!naEtn|@^frU1tDnm{r-UW|!^@B8 literal 0 HcmV?d00001 diff --git a/doc/html/_static/jquery.js b/doc/html/_static/jquery.js index fff6776..96d660c 100644 --- a/doc/html/_static/jquery.js +++ b/doc/html/_static/jquery.js @@ -1,24 +1,30 @@ /*! - * jQuery JavaScript Library v1.4.2 + * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * - * Copyright 2010, John Resig + * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation + * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Sat Feb 13 22:33:48 2010 -0500 + * Date: Thu Nov 15 18:28:24 BRST 2012 */ (function( window, undefined ) { +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); + return new jQuery.fn.init( selector, context, rootjQuery ); }, // Map over jQuery in case of overwrite @@ -27,52 +33,70 @@ var jQuery = function( selector, context ) { // Map over the $ in case of overwrite _$ = window.$, - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, // Used for trimming whitespace - rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, + trimLeft = /^\s+/, + trimRight = /\s+$/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, // For matching the engine and version of the browser browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], + + // The deferred used on DOM ready + readyList, // The ready event handler DOMContentLoaded, // Save a reference to some core methods toString = Object.prototype.toString, - hasOwnProperty = Object.prototype.hasOwnProperty, + hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, - indexOf = Array.prototype.indexOf; + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), or $(undefined) @@ -86,12 +110,12 @@ jQuery.fn = jQuery.prototype = { this.length = 1; return this; } - + // The body element only exists once, optimize finding it - if ( selector === "body" && !context ) { + if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; - this.selector = "body"; + this.selector = selector; this.length = 1; return this; } @@ -99,14 +123,21 @@ jQuery.fn = jQuery.prototype = { // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + 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] ) { - doc = (context ? context.ownerDocument || context : document); + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); // If a single string is passed in and it's a single tag // just do a createElement and skip the rest @@ -122,17 +153,19 @@ jQuery.fn = jQuery.prototype = { } } else { - ret = buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; } - + return jQuery.merge( this, selector ); - + // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); - if ( elem ) { + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { @@ -149,21 +182,14 @@ jQuery.fn = jQuery.prototype = { return this; } - // HANDLE: $("TAG") - } else if ( !context && /^\w+$/.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - return jQuery.merge( this, selector ); - // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); + return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { - return jQuery( context ).find( selector ); + return this.constructor( context ).find( selector ); } // HANDLE: $(function) @@ -172,7 +198,7 @@ jQuery.fn = jQuery.prototype = { return rootjQuery.ready( selector ); } - if (selector.selector !== undefined) { + if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } @@ -184,7 +210,7 @@ jQuery.fn = jQuery.prototype = { selector: "", // The current version of jQuery being used - jquery: "1.4.2", + jquery: "1.7.2", // The default length of a jQuery object is 0 length: 0, @@ -207,18 +233,18 @@ jQuery.fn = jQuery.prototype = { this.toArray() : // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); + ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set - var ret = jQuery(); + var ret = this.constructor(); if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); - + } else { jQuery.merge( ret, elems ); } @@ -229,7 +255,7 @@ jQuery.fn = jQuery.prototype = { ret.context = this.context; if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; } @@ -244,29 +270,22 @@ jQuery.fn = jQuery.prototype = { each: function( callback, args ) { return jQuery.each( this, callback, args ); }, - + ready: function( fn ) { // Attach the listeners jQuery.bindReady(); - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } + // Add the callback + readyList.add( fn ); return this; }, - + eq: function( i ) { + i = +i; return i === -1 ? this.slice( i ) : - this.slice( i, +i + 1 ); + this.slice( i, i + 1 ); }, first: function() { @@ -287,9 +306,9 @@ jQuery.fn = jQuery.prototype = { return callback.call( elem, i, elem ); })); }, - + end: function() { - return this.prevObject || jQuery(null); + return this.prevObject || this.constructor(null); }, // For internal use only. @@ -303,8 +322,11 @@ jQuery.fn = jQuery.prototype = { jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { @@ -338,10 +360,15 @@ jQuery.extend = jQuery.fn.extend = function() { continue; } - // Recurse if we're merging object literal values or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { - var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src - : jQuery.isArray(copy) ? [] : {}; + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); @@ -360,67 +387,79 @@ jQuery.extend = jQuery.fn.extend = function() { jQuery.extend({ noConflict: function( deep ) { - window.$ = _$; + if ( window.$ === jQuery ) { + window.$ = _$; + } - if ( deep ) { + if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }, - + // Is the DOM ready to be used? Set to true once it occurs. isReady: false, - + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + // Handle when the DOM is ready - ready: function() { - // Make sure that the DOM is not already loaded - if ( !jQuery.isReady ) { + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { - return setTimeout( jQuery.ready, 13 ); + return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Reset the list of functions - readyList = null; + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; } + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); } } }, - + bindReady: function() { - if ( readyBound ) { + if ( readyList ) { return; } - readyBound = true; + readyList = jQuery.Callbacks( "once memory" ); // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { - return jQuery.ready(); + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - + // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); @@ -428,8 +467,8 @@ jQuery.extend({ } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); - + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); @@ -451,35 +490,54 @@ jQuery.extend({ // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { - return toString.call(obj) === "[object Function]"; + return jQuery.type(obj) === "function"; }, - isArray: function( obj ) { - return toString.call(obj) === "[object Array]"; + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } - - // Not own constructor property must be Object - if ( obj.constructor - && !hasOwnProperty.call(obj, "constructor") - && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 return false; } - + // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. - + var key; for ( key in obj ) {} - - return key === undefined || hasOwnProperty.call( obj, key ); + + return key === undefined || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { @@ -488,11 +546,11 @@ jQuery.extend({ } return true; }, - + error: function( msg ) { - throw msg; + throw new Error( msg ); }, - + parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; @@ -500,48 +558,70 @@ jQuery.extend({ // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); - + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js - if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") - .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); + return ( new Function( "return " + data ) )(); - } else { - jQuery.error( "Invalid JSON: " + data ); } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; }, noop: function() {}, - // Evalulates a script in a global context + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { - if ( data && rnotwhite.test(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.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = 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 ); + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); } }, + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); }, @@ -550,7 +630,7 @@ jQuery.extend({ each: function( object, callback, args ) { var name, i = 0, length = object.length, - isObj = length === undefined || jQuery.isFunction(object); + isObj = length === undefined || jQuery.isFunction( object ); if ( args ) { if ( isObj ) { @@ -576,17 +656,31 @@ jQuery.extend({ } } } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } } } return object; }, - trim: function( text ) { - return (text || "").replace( rtrim, "" ); - }, + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, // results is for internal usage only makeArray: function( array, results ) { @@ -594,9 +688,10 @@ jQuery.extend({ if ( array != null ) { // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); @@ -606,14 +701,22 @@ jQuery.extend({ return ret; }, - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } + inArray: function( elem, array, i ) { + var len; - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } } } @@ -621,13 +724,14 @@ jQuery.extend({ }, merge: function( first, second ) { - var i = first.length, j = 0; + var i = first.length, + j = 0; if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } - + } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; @@ -640,12 +744,14 @@ jQuery.extend({ }, grep: function( elems, callback, inv ) { - var ret = []; + var ret = [], retVal; + inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { - if ( !inv !== !callback( elems[ i ], i ) ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { ret.push( elems[ i ] ); } } @@ -655,69 +761,167 @@ jQuery.extend({ // arg is for internal usage only map: function( elems, callback, arg ) { - var ret = [], value; + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); - if ( value != null ) { - ret[ ret.length ] = value; + if ( value != null ) { + ret[ ret.length ] = value; + } } } + // Flatten any nested arrays return ret.concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, - proxy: function( fn, proxy, thisObject ) { - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; } - if ( !proxy && fn ) { + // Simulated bind + var args = slice.call( arguments, 2 ), proxy = function() { - return fn.apply( thisObject || this, arguments ); + return fn.apply( context, args.concat( slice.call( arguments ) ) ); }; - } // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - // So proxy can be declared as an argument return proxy; }, + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase(); - var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || - []; + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; return { browser: match[1] || "", version: match[2] || "0" }; }, + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + browser: {} }); +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; @@ -729,10 +933,10 @@ if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; } -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - return indexOf.call( array, elem ); - }; +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; } // All jQuery objects should point back to these @@ -765,7 +969,7 @@ function doScrollCheck() { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); - } catch( error ) { + } catch(e) { setTimeout( doScrollCheck, 1 ); return; } @@ -774,77 +978,422 @@ function doScrollCheck() { jQuery.ready(); } -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 || "" ); - } +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; } + return object; } -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; } - - return elems; + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; -} +}); + + -function now() { - return (new Date).getTime(); -} -(function() { - jQuery.support = {}; +jQuery.support = (function() { - var root = document.documentElement, - script = document.createElement("script"), - div = document.createElement("div"), - id = "script" + now(); + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; - div.style.display = "none"; - div.innerHTML = "
    a"; + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; - var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0]; + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; // Can't get basic test support if ( !all || !all.length || !a ) { - return; + return {}; } - jQuery.support = { + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, + leadingWhitespace: ( div.firstChild.nodeType === 3 ), // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables @@ -855,17 +1404,17 @@ function now() { htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute - // (IE uses .cssText insted) - style: /red/.test( a.getAttribute("style") ), + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", + hrefNormalized: ( a.getAttribute("href") === "/a" ), // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), + opacity: /^0.55/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) @@ -874,237 +1423,556 @@ function now() { // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) - checkOn: div.getElementsByTagName("input")[0].value === "on", + checkOn: ( input.value === "on" ), // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected, + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, - parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null, + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, deleteExpando: true, - checkClone: false, - scriptEval: false, noCloneEvent: true, - boxModel: null + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true }; - script.type = "text/javascript"; - try { - script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e) {} + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); - root.insertBefore( script, root.firstChild ); + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; - // Make sure that the execution of code works by injecting a script - // tag with appendChild/createTextNode - // (IE doesn't support this, fails, and uses .text instead) - if ( window[ id ] ) { - jQuery.support.scriptEval = true; - delete window[ id ]; - } + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { - delete script.test; - - } catch(e) { - jQuery.support.deleteExpando = false; + delete div.test; + } catch( e ) { + support.deleteExpando = false; } - root.removeChild( script ); - - if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click() { + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) - jQuery.support.noCloneEvent = false; - div.detachEvent("onclick", click); + support.noCloneEvent = false; }); - div.cloneNode(true).fireEvent("onclick"); + div.cloneNode( true ).fireEvent( "onclick" ); } - div = document.createElement("div"); - div.innerHTML = ""; + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; - var fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); + input.setAttribute("checked", "checked"); - // WebKit doesn't clone checked state correctly in fragments - jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); - // Figure out if the W3C box model works as expected - // document.body must exist before we can do this - jQuery(function() { - var div = document.createElement("div"); - div.style.width = div.style.paddingLeft = "1px"; + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); - document.body.appendChild( div ); - jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - document.body.removeChild( div ).style.display = 'none'; + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - div = null; - }); + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; - - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - el = null; - - return isSupported; - }; - - jQuery.support.submitBubbles = eventSupported("submit"); - jQuery.support.changeBubbles = eventSupported("change"); + fragment.removeChild( input ); + fragment.appendChild( div ); - // release memory in IE - root = script = div = all = a = null; + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
    " + + "" + + "
    "; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; })(); -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; -var expando = "jQuery" + now(), uuid = 0, windowData = {}; + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; jQuery.extend({ cache: {}, - - expando:expando, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, - "object": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, - data: function( elem, name, data ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { return; } - elem = elem == window ? - windowData : - elem; + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", - var id = elem[ expando ], cache = jQuery.cache, thisCache; + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, - if ( !id && typeof name === "string" && data === undefined ) { - return null; - } + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; - // Compute a unique ID for the element - if ( !id ) { - id = ++uuid; + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; } - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - elem[ expando ] = id; - thisCache = cache[ id ] = jQuery.extend(true, {}, name); + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } - } else if ( !cache[ id ] ) { - elem[ expando ] = id; + if ( !cache[ id ] ) { cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } } - thisCache = cache[ id ]; + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } - // Prevent overriding the named cache with undefined values if ( data !== undefined ) { - thisCache[ name ] = data; + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; } - return typeof name === "string" ? thisCache[ name ] : thisCache; + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; }, - removeData: function( elem, name ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { return; } - elem = elem == window ? - windowData : - elem; + var thisCache, i, l, - var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } - // If we want to remove a specific section of the element's data if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; } + } - // Otherwise, we want to remove all of the element's data + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; } else { - if ( jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; + cache[ id ] = null; + } + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; } + } + }, - // Completely remove the data cache - delete cache[ id ]; + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } } + + return true; } }); jQuery.fn.extend({ data: function( key, value ) { - if ( typeof key === "undefined" && this.length ) { - return jQuery.data( this[0] ); + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } - } else if ( typeof key === "object" ) { + // Sets multiple values + if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } - var parts = key.split("."); + parts = key.split( ".", 2 ); parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; } - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } else { - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); }); - } + }, null, value, arguments.length > 1, null, false ); }, removeData: function( key ) { @@ -1113,34 +1981,128 @@ jQuery.fn.extend({ }); } }); -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; } + } + + return data; +} - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; } + } - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data) ); + return true; +} - } else { - q.push( data ); + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); - return q; + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } }, dequeue: function( elem, type ) { type = type || "fx"; - var queue = jQuery.queue( elem, type ), fn = queue.shift(); + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { @@ -1151,104 +2113,167 @@ jQuery.extend({ // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { - queue.unshift("inprogress"); + queue.unshift( "inprogress" ); } - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); } } }); jQuery.fn.extend({ queue: function( type, data ) { + var setter = 2; + if ( typeof type !== "string" ) { data = type; type = "fx"; + setter--; } - if ( data === undefined ) { + if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } - return this.each(function( i, elem ) { - var queue = jQuery.queue( this, type, data ); - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, - // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; }); }, - clearQueue: function( type ) { return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); } }); -var rclass = /[\n\t]/g, + + + + +var rclass = /[\n\t\r]/g, rspace = /\s+/, rreturn = /\r/g, - rspecialurl = /href|src|style/, - rtype = /(button|input)/i, - rfocusable = /(button|input|object|select|textarea)/i, - rclickable = /^(a|area)$/i, - rradiocheck = /radio|checkbox/; + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; jQuery.fn.extend({ attr: function( name, value ) { - return access( this, name, value, true, jQuery.attr ); + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, - removeAttr: function( name, fn ) { - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} }); }, addClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); }); } if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspace ); + classNames = value.split( rspace ); - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; if ( elem.nodeType === 1 ) { - if ( !elem.className ) { + if ( !elem.className && classNames.length === 1 ) { elem.className = value; } else { - var className = " " + elem.className + " ", setClass = elem.className; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - setClass += " " + classNames[c]; + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; } } elem.className = jQuery.trim( setClass ); @@ -1261,24 +2286,25 @@ jQuery.fn.extend({ }, removeClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); }); } if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split(rspace); + classNames = ( value || "" ).split( rspace ); - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; if ( elem.nodeType === 1 && elem.className ) { if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); } elem.className = jQuery.trim( className ); @@ -1293,19 +2319,21 @@ jQuery.fn.extend({ }, toggleClass: function( value, stateVal ) { - var type = typeof value, isBool = typeof stateVal === "boolean"; + var type = typeof value, + isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names - var className, i = 0, self = jQuery(this), + var className, + i = 0, + self = jQuery( this ), state = stateVal, classNames = value.split( rspace ); @@ -1318,19 +2346,21 @@ jQuery.fn.extend({ } else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set - jQuery.data( this, "__className__", this.className ); + jQuery._data( this, "__className__", this.className ); } // toggle whole className - this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } @@ -1339,95 +2369,59 @@ jQuery.fn.extend({ }, val: function( value ) { - if ( value === undefined ) { - var elem = this[0]; + var hooks, ret, isFunction, + elem = this[0]; + if ( !arguments.length ) { if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - } - - // 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"; + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - // 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(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; } - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); + ret = elem.value; + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; } - return undefined; + return; } - var isFunction = jQuery.isFunction(value); + isFunction = jQuery.isFunction( value ); - return this.each(function(i) { - var self = jQuery(this), val = value; + return this.each(function( i ) { + var self = jQuery(this), val; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { - val = value.call(this, i, self.val()); + val = value.call( this, i, self.val() ); + } else { + val = value; } - // Typecast each time if the value is a Function and the appended - // value is therefore different each time. - if ( typeof val === "number" ) { + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { val += ""; - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; }); + } - if ( !values.length ) { - this.selectedIndex = -1; - } + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - } else { + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); @@ -1435,212 +2429,559 @@ jQuery.fn.extend({ }); jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + 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 + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, height: true, offset: true }, - + attr: function( elem, name, value, pass ) { - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; } if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; } - // If applicable, access the attribute via the DOM 0 way - if ( name in elem && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); } + elem.removeAttribute( getSetAttribute ? name : propName ); - elem[ name ] = value; + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } } + } + } + }, - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + propHooks: { + tabIndex: { + get: function( elem ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); + var attributeNode = elem.getAttributeNode("tabindex"); - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); - return elem[ name ]; +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); } + return ( ret.nodeValue = value + "" ); + } + }; - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; } + } + }); + }); - return elem.style.cssText; + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; } + nodeHook.set( elem, value, name ); + } + }; +} - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; } + }); +} - // elem is actually elem.style ... set the style - // Using attr for specific style information is now deprecated. Use style instead. - return jQuery.style( elem, name, value ); - } +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); }); -var rnamespaces = /\.(.*)$/, - fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); }; /* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } + add: function( elem, types, handler, data, selector ) { - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; - var handleObjIn, handleObj; + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; + selector = handleObjIn.selector; } - // Make sure that the function being executed has a unique ID + // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } - // Init the element's event structure - var elemData = jQuery.data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; } - - var events = elemData.events = elemData.events || {}, - eventHandle = elemData.handle, eventHandle; - + eventHandle = elemData.handle; if ( !eventHandle ) { - elemData.handle = eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; } - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); - } else { - namespaces = []; - handleObj.namespace = ""; - } + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; - handleObj.type = type; - handleObj.guid = handler.guid; + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; - // Init the event handler queue + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; if ( !handlers ) { handlers = events[ type ] = []; + handlers.delegateCount = 0; - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false + // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { @@ -1651,19 +2992,23 @@ jQuery.event = { } } } - - if ( special.add ) { - special.add.call( elem, handleObj ); + + if ( special.add ) { + special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } - // Add the function to the element's handler list - handlers.push( handleObj ); + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } - // Keep track of which events have been used, for global triggering + // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } @@ -1674,426 +3019,528 @@ jQuery.event = { global: {}, // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - elemData = jQuery.data( elem ), - events = elemData && elemData.events; - - if ( !elemData || !events ) { - return; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; + remove: function( elem, types, handler, selector, mappedTypes ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + if ( !elemData || !(events = elemData.events) ) { return; } - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)") - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( var j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } - continue; } special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; - for ( var j = pos || 0; j < eventType.length; j++ ) { + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } + if ( handleObj.selector ) { + eventType.delegateCount--; } - - if ( pos != null ) { - break; + if ( special.remove ) { + special.remove.call( elem, handleObj ); } } } - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - removeEvent( elem, type, elemData.handle ); + jQuery.removeEvent( elem, type, elemData.handle ); } - ret = null; delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; + handle = elemData.handle; if ( handle ) { handle.elem = null; } - delete elemData.events; - delete elemData.handle; - - if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem ); - } + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); } }, - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + // Event object or event type var type = event.type || event, - bubbling = arguments[3]; + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[expando] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( jQuery.event.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); - // Handle triggering a single element + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } } + return; + } - // Clean up in case it is reused - event.result = undefined; + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); } - event.currentTarget = elem; + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); - // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.apply( elem, data ); + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; } - var parent = elem.parentNode || elem.ownerDocument; + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - } + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; } - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; - } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, - isClick = jQuery.nodeName(target, "a") && type === "click", - special = jQuery.event.special[ type ] || {}; + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { - if ( (!special._default || special._default.call( elem, event ) === false) && - !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - try { - if ( target[ type ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + type ]; + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { - if ( old ) { - target[ "on" + type ] = null; - } + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; - jQuery.event.triggered = true; - target[ type ](); + if ( old ) { + elem[ ontype ] = null; } - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; - if ( old ) { - target[ "on" + type ] = old; + if ( old ) { + elem[ ontype ] = old; + } } - - jQuery.event.triggered = false; } } + + return event.result; }, - handle: function( event ) { - var all, handlers, namespaces, namespace, events; + dispatch: function( event ) { - event = arguments[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); - // Namespaced event handlers - all = event.type.indexOf(".") < 0 && !event.exclusive; + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; - if ( !all ) { - namespaces = event.type.split("."); - event.type = namespaces.shift(); - namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; } - var events = jQuery.data(this, "events"), handlers = events[ event.type ]; + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { - if ( events && handlers ) { - // Clone the handlers to prevent manipulation - handlers = handlers.slice(0); + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { - // Filter the functions by class - if ( all || namespace.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, arguments ); + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; - if ( ret !== undefined ) { - event.result = ret; + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } - - if ( event.isImmediatePropagationStopped() ) { - break; - } } } } + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + return event.result; }, - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, fix: function( event ) { - if ( event[ expando ] ) { + if ( event[ jQuery.expando ] ) { return event; } - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + event = jQuery.Event( originalEvent ); - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; + for ( i = copy.length; i; ) { + prop = copy[ --i ]; event[ prop ] = originalEvent[ prop ]; } - // Fix target property, if necessary + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either + event.target = originalEvent.srcElement || document; } - // check if target is a textnode (safari) + // Target should not be a text node (#504, Safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { - event.which = event.charCode || event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { event.metaKey = event.ctrlKey; } - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; }, - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - special: { ready: { // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop + setup: jQuery.bindReady }, - live: { - add: function( handleObj ) { - jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); - }, - - remove: function( handleObj ) { - var remove = true, - type = handleObj.origType.replace(rnamespaces, ""); - - jQuery.each( jQuery.data(this, "events").live || [], function() { - if ( type === this.origType.replace(rnamespaces, "") ) { - remove = false; - return false; - } - }); - - if ( remove ) { - jQuery.event.remove( this, handleObj.origType, liveHandler ); - } - } + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows - if ( this.setInterval ) { + if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } - - return false; }, + teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } } }; -var removeEvent = document.removeEventListener ? +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { - elem.removeEventListener( type, handle, false ); - } : + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : function( elem, type, handle ) { - elem.detachEvent( "on" + type, handle ); + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } }; -jQuery.Event = function( src ) { +jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + // Event type } else { this.type = src; } - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = now(); + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed - this[ expando ] = true; + this[ jQuery.expando ] = true; }; function returnFalse() { @@ -2113,13 +3560,15 @@ jQuery.Event.prototype = { if ( !e ) { return; } - + // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); - } + // otherwise set the returnValue property of the original event to false (IE) - e.returnValue = false; + } else { + e.returnValue = false; + } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; @@ -2144,319 +3593,312 @@ jQuery.Event.prototype = { isImmediatePropagationStopped: returnFalse }; -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - // Traverse up the tree - while ( parent && parent !== this ) { - parent = parent.parentNode; - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events +// Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; } }; }); -// submit delegation +// IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - return trigger( "submit", this, arguments ); - } - }); + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, - } else { + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { return false; } - }, - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); } }; - } -// change delegation, happens here so we have bind. +// IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { - var formElems = /textarea|input|select/i, - - changeFilters, - - getVal = function( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - return jQuery.event.trigger( e, arguments[1], elem ); - } - }; - jQuery.event.special.change = { - filters: { - focusout: testChange, - click: function( e ) { - var elem = e.target, type = elem.type; + setup: function() { - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information/focus[in] is not needed anymore - beforeactivate: function( e ) { - var elem = e.target; - jQuery.data( elem, "_change_data", getVal(elem) ); - } + }); }, - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } + handle: function( event ) { + var elem = event.target; - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); } - - return formElems.test( this.nodeName ); }, - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); + teardown: function() { + jQuery.event.remove( this, "._change" ); - return formElems.test( this.nodeName ); + return rformElems.test( this.nodeName ); } }; - - changeFilters = jQuery.event.special.change.filters; -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); } // Create "bubbling" focus and blur events -if ( document.addEventListener ) { +if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + jQuery.event.special[ fix ] = { setup: function() { - this.addEventListener( orig, handler, true ); - }, - teardown: function() { - this.removeEventListener( orig, handler, true ); + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } } }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.handle.call( this, e ); - } }); } -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = name === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; +jQuery.fn.extend({ - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; } - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); return this; }, - + delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); + return this.on( types, selector, data, fn ); }, - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); }, - + trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, - triggerHandler: function( type, data ) { if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; + return jQuery.event.trigger( type, data, this[0], true ); } }, toggle: function( fn ) { // Save reference to arguments for access in closure - var args = arguments, i = 1; + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); + args[ i++ ].guid = guid; } - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); + return this.click( toggler ); }, hover: function( fnOver, fnOut ) { @@ -2464,216 +3906,106 @@ jQuery.fn.extend({ } }); -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - if ( jQuery.isFunction( data ) ) { + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { fn = data; - data = undefined; + data = null; } - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } - preType = type; + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); - if ( type === "focus" || type === "blur" ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - } else { - type = (liveMap[ type ] || type) + namespaces; - } - if ( name === "live" ) { - // bind live handler - context.each(function(){ - jQuery.event.add( this, liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - }); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ - } else { - // unbind live handler - context.unbind( liveConvert( type, selector ), fn ); - } - } - - return this; - } -}); - -function liveHandler( event ) { - var stop, elems = [], selectors = [], args = arguments, - related, match, handleObj, elem, j, i, l, data, - events = jQuery.data( this, "events" ); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { - return; - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( match[i].selector === handleObj.selector ) { - elem = match[i].elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) { - stop = false; - break; - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - window.attachEvent("onunload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), done = 0, toString = Object.prototype.toString, hasDuplicate = false, - baseHasDuplicate = true; + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; // Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. -[0, 0].sort(function(){ +[0, 0].sort(function() { baseHasDuplicate = false; return 0; }); -var Sizzle = function(selector, context, results, seed) { +var Sizzle = function( selector, context, results, seed ) { results = results || []; - var origContext = context = context || document; + context = context || document; + + var origContext = context; if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } - + if ( !selector || typeof selector !== "string" ) { return results; } - var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], soFar = selector; - + // Reset the position of the chunker regexp (start from head) - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } } - } + } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); + set = posProcess( parts[0] + parts[1], context, seed ); + } else { set = Expr.relative[ parts[0] ] ? [ context ] : @@ -2685,33 +4017,42 @@ var Sizzle = function(selector, context, results, seed) { if ( Expr.relative[ selector ] ) { selector += parts.shift(); } - - set = posProcess( selector, set ); + + set = posProcess( selector, set, seed ); } } + } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; } if ( context ) { - var ret = seed ? + ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; if ( parts.length > 0 ) { - checkSet = makeArray(set); + checkSet = makeArray( set ); + } else { prune = false; } while ( parts.length ) { - var cur = parts.pop(), pop = cur; + cur = parts.pop(); + pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; @@ -2725,6 +4066,7 @@ var Sizzle = function(selector, context, results, seed) { Expr.relative[ cur ]( checkSet, pop, contextXML ); } + } else { checkSet = parts = []; } @@ -2741,19 +4083,22 @@ var Sizzle = function(selector, context, results, seed) { if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { - for ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { results.push( set[i] ); } } + } else { - for ( var i = 0; checkSet[i] != null; i++ ) { + for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } + } else { makeArray( checkSet, results ); } @@ -2766,15 +4111,15 @@ var Sizzle = function(selector, context, results, seed) { return results; }; -Sizzle.uniqueSort = function(results){ +Sizzle.uniqueSort = function( results ) { if ( sortOrder ) { hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); + results.sort( sortOrder ); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); } } } @@ -2783,27 +4128,32 @@ Sizzle.uniqueSort = function(results){ return results; }; -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; }; -Sizzle.find = function(expr, context, isXML){ - var set, match; +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; if ( !expr ) { return []; } - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); + left = match[1]; + match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); + match[1] = (match[1] || "").replace( rBackslash, "" ); set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; @@ -2813,20 +4163,29 @@ Sizzle.find = function(expr, context, isXML){ } if ( !set ) { - set = context.getElementsByTagName("*"); + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; } - return {set: set, expr: expr}; + return { set: set, expr: expr }; }; -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); while ( expr && set.length ) { - for ( var type in Expr.filter ) { + for ( type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, left = match[1]; + filter = Expr.filter[ type ]; + left = match[1]; + anyFound = false; match.splice(1,1); @@ -2844,23 +4203,26 @@ Sizzle.filter = function(expr, set, inplace, not){ if ( !match ) { anyFound = found = true; + } else if ( match === true ) { continue; } } if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; + pass = not ^ found; if ( inplace && found != null ) { if ( pass ) { anyFound = true; + } else { curLoop[i] = false; } + } else if ( pass ) { result.push( item ); anyFound = true; @@ -2889,6 +4251,7 @@ Sizzle.filter = function(expr, set, inplace, not){ if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); + } else { break; } @@ -2901,35 +4264,82 @@ Sizzle.filter = function(expr, set, inplace, not){ }; Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; }; var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], + match: { - ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, + leftMatch: {}, + attrMap: { "class": "className", "for": "htmlFor" }, + attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); } }, + relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), + isTag = isPartStr && !rNonWord.test( part ), isPartStrNotTag = isPartStr && !isTag; if ( isTag ) { @@ -2950,22 +4360,29 @@ var Expr = Sizzle.selectors = { Sizzle.filter( part, checkSet, true ); } }, - ">": function(checkSet, part){ - var isPartStr = typeof part === "string"; - if ( isPartStr && !/\W/.test(part) ) { + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { part = part.toLowerCase(); - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; + for ( ; i < l; i++ ) { + elem = checkSet[i]; + if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } + } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; + for ( ; i < l; i++ ) { + elem = checkSet[i]; + if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : @@ -2978,37 +4395,50 @@ var Expr = Sizzle.selectors = { } } }, + "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; + var nodeCheck, + doneName = done++, + checkFn = dirCheck; - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; checkFn = dirNodeCheck; } - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; checkFn = dirNodeCheck; } - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); } }, + find: { - ID: function(match, context, isXML){ + ID: function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); - return m ? [m] : []; + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; } }, - NAME: function(match, context){ + + NAME: function( match, context ) { if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); + var ret = [], + results = context.getElementsByName( match[1] ); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { @@ -3019,13 +4449,16 @@ var Expr = Sizzle.selectors = { return ret.length === 0 ? null : ret; } }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } } }, preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; if ( isXML ) { return match; @@ -3033,10 +4466,11 @@ var Expr = Sizzle.selectors = { for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { if ( !inplace ) { result.push( elem ); } + } else if ( inplace ) { curLoop[i] = false; } @@ -3045,16 +4479,25 @@ var Expr = Sizzle.selectors = { return false; }, - ID: function(match){ - return match[1].replace(/\\/g, ""); + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); }, - TAG: function(match, curLoop){ - return match[1].toLowerCase(); + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); }, - CHILD: function(match){ + + CHILD: function( match ) { if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); @@ -3062,217 +4505,296 @@ var Expr = Sizzle.selectors = { match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } // TODO: Move to normal caching system match[0] = done++; return match; }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; } return match; }, - PSEUDO: function(match, curLoop, inplace, result, not){ + + PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); + } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { result.push.apply( result, ret ); } + return false; } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } - + return match; }, - POS: function(match){ + + POS: function( match ) { match.unshift( true ); + return match; } }, + filters: { - enabled: function(elem){ + enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; }, - disabled: function(elem){ + + disabled: function( elem ) { return elem.disabled === true; }, - checked: function(elem){ + + checked: function( elem ) { return elem.checked === true; }, - selected: function(elem){ + + selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly - elem.parentNode.selectedIndex; + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + return elem.selected === true; }, - parent: function(elem){ + + parent: function( elem ) { return !!elem.firstChild; }, - empty: function(elem){ + + empty: function( elem ) { return !elem.firstChild; }, - has: function(elem, i, match){ + + has: function( elem, i, match ) { return !!Sizzle( match[3], elem ).length; }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); }, - text: function(elem){ - return "text" === elem.type; + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; }, - radio: function(elem){ - return "radio" === elem.type; + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; }, - checkbox: function(elem){ - return "checkbox" === elem.type; + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; }, - file: function(elem){ - return "file" === elem.type; + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; }, - password: function(elem){ - return "password" === elem.type; + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; }, - submit: function(elem){ - return "submit" === elem.type; + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; }, - image: function(elem){ - return "image" === elem.type; + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; }, - reset: function(elem){ - return "reset" === elem.type; + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; } }, setFilters: { - first: function(elem, i){ + first: function( elem, i ) { return i === 0; }, - last: function(elem, i, match, array){ + + last: function( elem, i, match, array ) { return i === array.length - 1; }, - even: function(elem, i){ + + even: function( elem, i ) { return i % 2 === 0; }, - odd: function(elem, i){ + + odd: function( elem, i ) { return i % 2 === 1; }, - lt: function(elem, i, match){ + + lt: function( elem, i, match ) { return i < match[3] - 0; }, - gt: function(elem, i, match){ + + gt: function( elem, i, match ) { return i > match[3] - 0; }, - nth: function(elem, i, match){ + + nth: function( elem, i, match ) { return match[3] - 0 === i; }, - eq: function(elem, i, match){ + + eq: function( elem, i, match ) { return match[3] - 0 === i; } }, filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); + } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { var not = match[3]; - for ( var i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { return false; } } return true; + } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); + Sizzle.error( name ); } }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; } } - if ( type === "first" ) { - return true; + + if ( type === "first" ) { + return true; } + node = elem; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; } } + return true; - case 'nth': - var first = match[2], last = match[3]; + + case "nth": + first = match[2]; + last = match[3]; if ( first === 1 && last === 0 ) { return true; } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } - } - parent.sizcache = doneName; + } + + parent[ expando ] = doneName; } - - var diff = elem.nodeIndex - last; + + diff = elem.nodeIndex - last; + if ( first === 0 ) { return diff === 0; + } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, - ID: function(elem, match){ + + ID: function( elem, match ) { return elem.nodeType === 1 && elem.getAttribute("id") === match; }, - TAG: function(elem, match){ - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; }, - CLASS: function(elem, match){ + + CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, - ATTR: function(elem, match){ + + ATTR: function( elem, match ) { var name = match[1], - result = Expr.attrHandle[ name ] ? + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : @@ -3283,6 +4805,8 @@ var Expr = Sizzle.selectors = { return result == null ? type === "!=" : + !type && Sizzle.attr ? + result != null : type === "=" ? value === check : type === "*=" ? @@ -3301,8 +4825,10 @@ var Expr = Sizzle.selectors = { value === check || value.substr(0, check.length + 1) === check + "-" : false; }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); @@ -3311,23 +4837,27 @@ var Expr = Sizzle.selectors = { } }; -var origPOS = Expr.match.POS; +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){ - return "\\" + (num - 0 + 1); - })); + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; -var makeArray = function(array, results) { +var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); if ( results ) { results.push.apply( results, array ); return results; } - + return array; }; @@ -3339,19 +4869,22 @@ try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; // Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); + } else { if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { + for ( var l = array.length; i < l; i++ ) { ret.push( array[i] ); } + } else { - for ( var i = 0; array[i]; i++ ) { + for ( ; array[i]; i++ ) { ret.push( array[i] ); } } @@ -3361,78 +4894,100 @@ try { }; } -var sortOrder; +var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } return a.compareDocumentPosition ? -1 : 1; } - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; + return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; -} else if ( "sourceIndex" in document.documentElement ) { + +} else { sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.sourceIndex ? -1 : 1; + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; } - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.ownerDocument ? -1 : 1; + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; } - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; } - return ret; + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); }; -} -// Utility function for retreiving the text value of an array of DOM nodes -function getText( elems ) { - var ret = "", elem; + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; + var cur = a.nextSibling; - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; + while ( cur ) { + if ( cur === b ) { + return -1; + } - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); + cur = cur.nextSibling; } - } - return ret; + return 1; + }; } // Check to see if the browser returns elements by name when @@ -3440,31 +4995,40 @@ function getText( elems ) { (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), - id = "script" + (new Date).getTime(); + id = "script" + (new Date()).getTime(), + root = document.documentElement; + form.innerHTML = ""; // Inject it into the root element, check its status, and remove it quickly - var root = document.documentElement; root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ + Expr.find.ID = function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; } }; - Expr.filter.ID = function(elem, match){ + Expr.filter.ID = function( elem, match ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form ); - root = form = null; // release memory in IE + + // release memory in IE + root = form = null; })(); (function(){ @@ -3477,8 +5041,8 @@ function getText( elems ) { // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); // Filter out possible comments if ( match[1] === "*" ) { @@ -3499,19 +5063,25 @@ function getText( elems ) { // Check to see if an attribute returns normalized href attributes div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); }; } - div = null; // release memory in IE + // release memory in IE + div = null; })(); if ( document.querySelectorAll ) { (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + div.innerHTML = "

    "; // Safari can't handle uppercase or unicode characters when @@ -3519,29 +5089,145 @@ if ( document.querySelectorAll ) { if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } - - Sizzle = function(query, context, extra, seed){ + + Sizzle = function( query, context, extra, seed ) { context = context || document; // Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) - if ( !seed && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} - } - - return oldSizzle(query, context, extra, seed); - }; + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; for ( var prop in oldSizzle ) { Sizzle[ prop ] = oldSizzle[ prop ]; } - div = null; // release memory in IE + // release memory in IE + div = null; })(); } +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + (function(){ var div = document.createElement("div"); @@ -3559,32 +5245,35 @@ if ( document.querySelectorAll ) { if ( div.getElementsByClassName("e").length === 1 ) { return; } - + Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { + Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } }; - div = null; // release memory in IE + // release memory in IE + div = null; })(); function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; + if ( elem ) { - elem = elem[dir]; var match = false; + elem = elem[dir]; + while ( elem ) { - if ( elem.sizcache === doneName ) { + if ( elem[ expando ] === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; + elem[ expando ] = doneName; elem.sizset = i; } @@ -3604,21 +5293,24 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; + if ( elem ) { - elem = elem[dir]; var match = false; + elem = elem[dir]; + while ( elem ) { - if ( elem.sizcache === doneName ) { + if ( elem[ expando ] === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 ) { if ( !isXML ) { - elem.sizcache = doneName; + elem[ expando ] = doneName; elem.sizset = i; } + if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; @@ -3639,21 +5331,34 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { } } -var contains = document.compareDocumentPosition ? function(a, b){ - return !!(a.compareDocumentPosition(b) & 16); -} : function(a, b){ - return a !== b && (a.contains ? a.contains(b) : true); -}; +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; -var isXML = function(elem){ +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) + // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; }; -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", root = context.nodeType ? [context] : context; // Position selectors must be done after the filter @@ -3666,73 +5371,69 @@ var posProcess = function(selector, context){ selector = Expr.relative[selector] ? selector + "*" : selector; for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); + Sizzle( selector, root[i], tmpSet, seed ); } return Sizzle.filter( later, tmpSet ); }; // EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; -jQuery.text = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; -return; - -window.Sizzle = Sizzle; })(); + + var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector = /,/, - slice = Array.prototype.slice; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -}; -jQuery.fn.extend({ - find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), length = 0; + var ret = this.pushStack( "", "find", selector ), + length, n, r; - for ( var i = 0, l = this.length; i < l; i++ ) { + for ( i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret ); if ( i > 0 ) { // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; @@ -3763,65 +5464,81 @@ jQuery.fn.extend({ filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); }, - + is: function( selector ) { - return !!selector && jQuery.filter( selector, this ).length > 0; + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], match, matches = {}, selector; + var level = 1; - if ( cur && selectors.length ) { - for ( var i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); } } - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur }); - delete matches[selector]; - } - } - cur = cur.parentNode; - } + cur = cur.parentNode; + level++; } return ret; } - var pos = jQuery.expr.match.POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; - return this.map(function( i, cur ) { - while ( cur && cur.ownerDocument && cur !== context ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { - return cur; + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } } - cur = cur.parentNode; } - return null; - }); + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); }, - + // Determine the position of an element within // the matched set of elements index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used @@ -3830,8 +5547,8 @@ jQuery.fn.extend({ add: function( selector, context ) { var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? @@ -3880,7 +5597,7 @@ jQuery.each({ return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); @@ -3893,7 +5610,7 @@ jQuery.each({ }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); - + if ( !runtil.test( name ) ) { selector = until; } @@ -3902,13 +5619,13 @@ jQuery.each({ ret = jQuery.filter( selector, ret ); } - ret = this.length > 1 ? jQuery.unique( ret ) : ret; + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { ret = ret.reverse(); } - return this.pushStack( ret, name, slice.call(arguments).join(",") ); + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); }; }); @@ -3918,11 +5635,15 @@ jQuery.extend({ expr = ":not(" + expr + ")"; } - return jQuery.find.matches(expr, elems); + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); }, - + dir: function( elem, dir, until ) { - var matched = [], cur = elem[dir]; + var matched = [], + cur = elem[ dir ]; + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); @@ -3957,20 +5678,74 @@ jQuery.extend({ return r; } }); -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, - rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, - rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, rtagName = /<([\w:]+)/, rtbody = /"; - }, + rnoInnerhtml = /<(?:script|style)/i, + rnocache = /<(?:script|object|embed|option|style)/i, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], legend: [ 1, "
    ", "
    " ], @@ -3980,7 +5755,8 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, col: [ 2, "", "
    " ], area: [ 1, "", "" ], _default: [ 0, "", "" ] - }; + }, + safeFragment = createSafeFragment( document ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; @@ -3992,19 +5768,12 @@ if ( !jQuery.support.htmlSerialize ) { } jQuery.fn.extend({ - text: function( text ) { - if ( jQuery.isFunction(text) ) { - return this.each(function(i) { - var self = jQuery(this); - self.text( text.call(this, i, self.text()) ); - }); - } - - if ( typeof text !== "object" && text !== undefined ) { - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - } - - return jQuery.text( this ); + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); }, wrapAll: function( html ) { @@ -4030,7 +5799,7 @@ jQuery.fn.extend({ } return elem; - }).append(this); + }).append( this ); } return this; @@ -4044,7 +5813,8 @@ jQuery.fn.extend({ } return this.each(function() { - var self = jQuery( this ), contents = self.contents(); + var self = jQuery( this ), + contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); @@ -4056,8 +5826,10 @@ jQuery.fn.extend({ }, wrap: function( html ) { - return this.each(function() { - jQuery( this ).wrapAll( html ); + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); }); }, @@ -4091,7 +5863,7 @@ jQuery.fn.extend({ this.parentNode.insertBefore( elem, this ); }); } else if ( arguments.length ) { - var set = jQuery(arguments[0]); + var set = jQuery.clean( arguments ); set.push.apply( set, this.toArray() ); return this.pushStack( set, "before", arguments ); } @@ -4104,11 +5876,11 @@ jQuery.fn.extend({ }); } else if ( arguments.length ) { var set = this.pushStack( this, "after", arguments ); - set.push.apply( set, jQuery(arguments[0]).toArray() ); + set.push.apply( set, jQuery.clean(arguments) ); return set; } }, - + // keepData is for internal use only--do not document remove: function( selector, keepData ) { for ( var i = 0, elem; (elem = this[i]) != null; i++ ) { @@ -4119,11 +5891,11 @@ jQuery.fn.extend({ } if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); + elem.parentNode.removeChild( elem ); } } } - + return this; }, @@ -4139,88 +5911,58 @@ jQuery.fn.extend({ elem.removeChild( elem.firstChild ); } } - + return this; }, - clone: function( events ) { - // Do the clone - var ret = this.map(function() { - if ( !jQuery.support.noCloneEvent && !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 html = this.outerHTML, ownerDocument = this.ownerDocument; - if ( !html ) { - var div = ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(rinlinejQuery, "") - // Handle the case in IE 8 where action=/test/> self-closes a tag - .replace(/=([^="'>\s]+\/)>/g, '="$1">') - .replace(rleadingWhitespace, "")], ownerDocument)[0]; - } else { - return this.cloneNode(true); - } - }); - - // Copy the events from the original to the clone - if ( events === true ) { - cloneCopyEvent( this, ret ); - cloneCopyEvent( this.find("*"), ret.find("*") ); - } + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - // Return the cloned set - return ret; + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); }, html: function( value ) { - if ( value === undefined ) { - return this[0] && this[0].nodeType === 1 ? - this[0].innerHTML.replace(rinlinejQuery, "") : - null; + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; - // See if we can take a shortcut and just use innerHTML - } else if ( typeof value === "string" && !rnocache.test( value ) && - (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) && - !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) { + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + null; + } - value = value.replace(rxhtmlTag, fcloseTag); - try { - for ( var i = 0, l = this.length; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - if ( this[i].nodeType === 1 ) { - jQuery.cleanData( this[i].getElementsByTagName("*") ); - this[i].innerHTML = value; - } - } + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { - // If using innerHTML throws an exception, use the fallback method - } catch(e) { - this.empty().append( value ); - } + value = value.replace( rxhtmlTag, "<$1>" ); - } else if ( jQuery.isFunction( value ) ) { - this.each(function(i){ - var self = jQuery(this), old = self.html(); - self.empty().append(function(){ - return value.call( this, i, old ); - }); - }); + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } - } else { - this.empty().append( value ); - } + elem = 0; - return this; + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); }, replaceWith: function( value ) { @@ -4235,13 +5977,14 @@ jQuery.fn.extend({ } if ( typeof value !== "string" ) { - value = jQuery(value).detach(); + value = jQuery( value ).detach(); } return this.each(function() { - var next = this.nextSibling, parent = this.parentNode; + var next = this.nextSibling, + parent = this.parentNode; - jQuery(this).remove(); + jQuery( this ).remove(); if ( next ) { jQuery(next).before( value ); @@ -4250,7 +5993,9 @@ jQuery.fn.extend({ } }); } else { - return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ); + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; } }, @@ -4259,7 +6004,9 @@ jQuery.fn.extend({ }, domManip: function( args, table, callback ) { - var results, first, value = args[0], scripts = [], fragment, parent; + var results, first, fragment, parent, + value = args[0], + scripts = []; // We can't cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) { @@ -4284,11 +6031,11 @@ jQuery.fn.extend({ results = { fragment: parent }; } else { - results = buildFragment( args, this, scripts ); + results = jQuery.buildFragment( args, this, scripts ); } - + fragment = results.fragment; - + if ( fragment.childNodes.length === 1 ) { first = fragment = fragment.firstChild; } else { @@ -4298,120 +6045,327 @@ jQuery.fn.extend({ if ( first ) { table = table && jQuery.nodeName( first, "tr" ); - for ( var i = 0, l = this.length; i < l; i++ ) { + for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) { callback.call( table ? root(this[i], first) : this[i], - i > 0 || results.cacheable || this.length > 1 ? - fragment.cloneNode(true) : + // Make sure that we do not leak memory by inadvertently discarding + // the original fragment (which might have attached data) instead of + // using it; in addition, use the original fragment object for the last + // item instead of first because it can end up being emptied incorrectly + // in certain situations (Bug #8070). + // Fragments from the fragment cache must always be cloned and never used + // in place. + results.cacheable || ( l > 1 && i < lastIndex ) ? + jQuery.clone( fragment, true, true ) : fragment ); } } if ( scripts.length ) { - jQuery.each( scripts, evalScript ); + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + type: "GET", + global: false, + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); } } return this; - - function root( elem, cur ) { - return jQuery.nodeName(elem, "table") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } } }); -function cloneCopyEvent(orig, ret) { - var i = 0; +function root( elem, cur ) { + return jQuery.nodeName(elem, "table") ? + (elem.getElementsByTagName("tbody")[0] || + elem.appendChild(elem.ownerDocument.createElement("tbody"))) : + elem; +} - ret.each(function() { - if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) { - return; - } +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } - var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events; + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; - if ( events ) { - delete curData.handle; - curData.events = {}; + if ( events ) { + delete curData.handle; + curData.events = {}; - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); } } - }); -} + } -function buildFragment( args, nodes, scripts ) { - var fragment, cacheable, cacheresults, - doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document); + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} - // Only cache "small" (1/2 KB) strings that are associated with the main document - // Cloning options loses the selected state, so don't cache them - // IE 6 doesn't like it when you put or elements in a fragment - // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache - if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document && - !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) { +function cloneFixAttributes( src, dest ) { + var nodeName; - cacheable = true; - cacheresults = jQuery.fragments[ args[0] ]; - if ( cacheresults ) { - if ( cacheresults !== 1 ) { - fragment = cacheresults; - } - } + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; } - if ( !fragment ) { - fragment = doc.createDocumentFragment(); - jQuery.clean( args, doc, fragment, scripts ); + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); } - if ( cacheable ) { - jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1; + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); } - return { fragment: fragment, cacheable: cacheable }; -} + nodeName = dest.nodeName.toLowerCase(); -jQuery.fragments = {}; + // IE6-8 fail to clone children inside object elements that use + // the proprietary classid attribute value (rather than the type + // attribute) to identify the type of content to display + if ( nodeName === "object" ) { + dest.outerHTML = src.outerHTML; -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" + } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + if ( src.checked ) { + dest.defaultChecked = dest.checked = src.checked; + } + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); + + // Clear flags for bubbling special change/submit events, they must + // be reattached when the newly cloned events are first activated + dest.removeAttribute( "_submit_attached" ); + dest.removeAttribute( "_change_attached" ); +} + +jQuery.buildFragment = function( args, nodes, scripts ) { + var fragment, cacheable, cacheresults, doc, + first = args[ 0 ]; + + // nodes may contain either an explicit document object, + // a jQuery collection or context object. + // If nodes[0] contains a valid object to assign to doc + if ( nodes && nodes[0] ) { + doc = nodes[0].ownerDocument || nodes[0]; + } + + // Ensure that an attr object doesn't incorrectly stand in as a document object + // Chrome and Firefox seem to allow this to occur and will throw exception + // Fixes #8950 + if ( !doc.createDocumentFragment ) { + doc = document; + } + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + cacheable = true; + + cacheresults = jQuery.fragments[ first ]; + if ( cacheresults && cacheresults !== 1 ) { + fragment = cacheresults; + } + } + + if ( !fragment ) { + fragment = doc.createDocumentFragment(); + jQuery.clean( args, doc, fragment, scripts ); + } + + if ( cacheable ) { + jQuery.fragments[ first ] = cacheresults ? fragment : 1; + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { - var ret = [], insert = jQuery( selector ), + var ret = [], + insert = jQuery( selector ), parent = this.length === 1 && this[0].parentNode; - + if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { insert[ original ]( this[0] ); return this; - + } else { for ( var i = 0, l = insert.length; i < l; i++ ) { - var elems = (i > 0 ? this.clone(true) : this).get(); - jQuery.fn[ original ].apply( jQuery(insert[i]), elems ); + var elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); ret = ret.concat( elems ); } - + return this.pushStack( ret, name, insert.selector ); } }; }); +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( elem.type === "checkbox" || elem.type === "radio" ) { + elem.defaultChecked = elem.checked; + } +} +// Finds all inputs and passes them to fixDefaultChecked +function findInputs( elem ) { + var nodeName = ( elem.nodeName || "" ).toLowerCase(); + if ( nodeName === "input" ) { + fixDefaultChecked( elem ); + // Skip scripts, get other children + } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } +} + +// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js +function shimCloneNode( elem ) { + var div = document.createElement( "div" ); + safeFragment.appendChild( div ); + + div.innerHTML = elem.outerHTML; + return div.firstChild; +} + jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + // IE<=8 does not properly clone detached, unknown element nodes + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ? + elem.cloneNode( true ) : + shimCloneNode( elem ); + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + clean: function( elems, context, fragment, scripts ) { + var checkScriptType, script, j, + ret = []; + context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' @@ -4419,8 +6373,6 @@ jQuery.extend({ context = context.ownerDocument || context[0] && context[0].ownerDocument || document; } - var ret = []; - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { if ( typeof elem === "number" ) { elem += ""; @@ -4431,54 +6383,93 @@ jQuery.extend({ } // Convert html string into DOM nodes - if ( typeof elem === "string" && !rhtml.test( elem ) ) { - elem = context.createTextNode( elem ); + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Trim whitespace, otherwise indexOf won't work as expected + var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(), + wrap = wrapMap[ tag ] || wrapMap._default, + depth = wrap[0], + div = context.createElement("div"), + safeChildNodes = safeFragment.childNodes, + remove; + + // Append wrapper element to unknown element safe doc fragment + if ( context === document ) { + // Use the fragment we've already created for this document + safeFragment.appendChild( div ); + } else { + // Use a fragment created with the owner document + createSafeFragment( context ).appendChild( div ); + } - } else if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(rxhtmlTag, fcloseTag); + // Go to html and back, then peel off extra wrappers + div.innerHTML = wrap[1] + elem + wrap[2]; - // Trim whitespace, otherwise indexOf won't work as expected - var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(), - wrap = wrapMap[ tag ] || wrapMap._default, - depth = wrap[0], - div = context.createElement("div"); + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } - // Go to html and back, then peel off extra wrappers - div.innerHTML = wrap[1] + elem + wrap[2]; + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { - // Move to the right depth - while ( depth-- ) { - div = div.lastChild; - } + // String was a , *may* have spurious + var hasBody = rtbody.test(elem), + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
    " && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } - // Remove IE's autoinserted from table fragments - if ( !jQuery.support.tbody ) { + elem = div.childNodes; - // String was a
    , *may* have spurious - var hasBody = rtbody.test(elem), - tbody = tag === "table" && !hasBody ? - div.firstChild && div.firstChild.childNodes : + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if ( div ) { + div.parentNode.removeChild( div ); - // String was a bare or - wrap[1] === "
    " && !hasBody ? - div.childNodes : - []; + // Guard against -1 index exceptions in FF3.6 + if ( safeChildNodes.length > 0 ) { + remove = safeChildNodes[ safeChildNodes.length - 1 ]; - for ( var j = tbody.length - 1; j >= 0 ; --j ) { - if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { - tbody[ j ].parentNode.removeChild( tbody[ j ] ); + if ( remove && remove.parentNode ) { + remove.parentNode.removeChild( remove ); + } } } - } + } - // IE completely kills leading whitespace when innerHTML is used - if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + // Resets defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + var len; + if ( !jQuery.support.appendChecked ) { + if ( elem[0] && typeof (len = elem.length) === "number" ) { + for ( j = 0; j < len; j++ ) { + findInputs( elem[j] ); + } + } else { + findInputs( elem ); } - - elem = div.childNodes; } if ( elem.nodeType ) { @@ -4489,959 +6480,1889 @@ jQuery.extend({ } if ( fragment ) { - for ( var i = 0; ret[i]; i++ ) { - if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { - scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); - + checkScriptType = function( elem ) { + return !elem.type || rscriptType.test( elem.type ); + }; + for ( i = 0; ret[i]; i++ ) { + script = ret[i]; + if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) { + scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script ); + } else { - if ( ret[i].nodeType === 1 ) { - ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); + if ( script.nodeType === 1 ) { + var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType ); + + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); } - fragment.appendChild( ret[i] ); + fragment.appendChild( script ); } } } return ret; }, - + cleanData: function( elems ) { - var data, id, cache = jQuery.cache, + var data, id, + cache = jQuery.cache, special = jQuery.event.special, deleteExpando = jQuery.support.deleteExpando; - + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { + continue; + } + id = elem[ jQuery.expando ]; - + if ( id ) { data = cache[ id ]; - - if ( data.events ) { + + if ( data && data.events ) { for ( var type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); + // This is a shortcut to avoid jQuery.event.remove's overhead } else { - removeEvent( elem, type, data.handle ); + jQuery.removeEvent( elem, type, data.handle ); } } + + // Null the DOM reference to avoid IE6/7/8 leak (#7054) + if ( data.handle ) { + data.handle.elem = null; + } } - + if ( deleteExpando ) { delete elem[ jQuery.expando ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( jQuery.expando ); } - + delete cache[ id ]; } } } }); -// exclude the following css properties to add px -var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - ralpha = /alpha\([^)]*\)/, - ropacity = /opacity=([^)]*)/, - rfloat = /float/i, - rdashAlpha = /-([a-z])/ig, - rupper = /([A-Z])/g, - rnumpx = /^-?\d+(?:px)?$/i, - rnum = /^-?\d/, - - cssShow = { position: "absolute", visibility: "hidden", display:"block" }, - cssWidth = [ "Left", "Right" ], - cssHeight = [ "Top", "Bottom" ], - - // cache check for defaultView.getComputedStyle - getComputedStyle = document.defaultView && document.defaultView.getComputedStyle, - // normalize float css property - styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat", - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn.css = function( name, value ) { - return access( this, name, value, true, function( elem, name, value ) { - if ( value === undefined ) { - return jQuery.curCSS( elem, name ); - } - - if ( typeof value === "number" && !rexclude.test(name) ) { - value += "px"; - } - - jQuery.style( elem, name, value ); - }); -}; - -jQuery.extend({ - style: function( elem, name, value ) { - // don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // ignore negative width and height values #1599 - if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) { - value = undefined; - } - var style = elem.style || elem, set = value !== undefined; - // IE uses filters for opacity - if ( !jQuery.support.opacity && name === "opacity" ) { - if ( set ) { - // IE has trouble with opacity if it does not have layout - // Force it by setting the zoom level - style.zoom = 1; - // Set the alpha filter to set the opacity - var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"; - var filter = style.filter || jQuery.curCSS( elem, "filter" ) || ""; - style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity; - } - return style.filter && style.filter.indexOf("opacity=") >= 0 ? - (parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "": - ""; - } +var ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + // fixed for IE9, see #8346 + rupper = /([A-Z]|^ms)/g, + rnum = /^[\-+]?(?:\d*\.)?\d+$/i, + rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i, + rrelNum = /^([\-+])=([\-+.\de]+)/, + rmargin = /^margin/, - // Make sure we're using the right name for getting the float value - if ( rfloat.test( name ) ) { - name = styleFloat; - } + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - name = name.replace(rdashAlpha, fcamelCase); + // order is important! + cssExpand = [ "Top", "Right", "Bottom", "Left" ], - if ( set ) { - style[ name ] = value; - } + curCSS, - return style[ name ]; - }, + getComputedStyle, + currentStyle; - css: function( elem, name, force, extra ) { - if ( name === "width" || name === "height" ) { - var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight; +jQuery.fn.css = function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); +}; - function getWH() { - val = name === "width" ? elem.offsetWidth : elem.offsetHeight; +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; - if ( extra === "border" ) { - return; + } else { + return elem.style.opacity; } - - jQuery.each( which, function() { - if ( !extra ) { - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - } - - if ( extra === "margin" ) { - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - } else { - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - } - }); } - - if ( elem.offsetWidth !== 0 ) { - getWH(); - } else { - jQuery.swap( elem, props, getWH ); - } - - return Math.max(0, Math.round(val)); } - - return jQuery.curCSS( elem, name, force ); }, - curCSS: function( elem, name, force ) { - var ret, style = elem.style, filter; + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, - // IE uses filters for opacity - if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) { - ret = ropacity.test(elem.currentStyle.filter || "") ? - (parseFloat(RegExp.$1) / 100) + "" : - ""; + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, - return ret === "" ? - "1" : - ret; + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; } - // Make sure we're using the right name for getting the float value - if ( rfloat.test( name ) ) { - name = styleFloat; - } + // Make sure that we're working with the right name + var ret, type, origName = jQuery.camelCase( name ), + style = elem.style, hooks = jQuery.cssHooks[ origName ]; - if ( !force && style && style[ name ] ) { - ret = style[ name ]; + name = jQuery.cssProps[ origName ] || origName; - } else if ( getComputedStyle ) { + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; - // Only "float" is needed here - if ( rfloat.test( name ) ) { - name = "float"; + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; } - name = name.replace( rupper, "-$1" ).toLowerCase(); - - var defaultView = elem.ownerDocument.defaultView; - - if ( !defaultView ) { - return null; + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; } - var computedStyle = defaultView.getComputedStyle( elem, null ); + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } - if ( computedStyle ) { - ret = computedStyle.getPropertyValue( name ); + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} } - // We should always get a number back from opacity - if ( name === "opacity" && ret === "" ) { - ret = "1"; + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; } - } else if ( elem.currentStyle ) { - var camelCase = name.replace(rdashAlpha, fcamelCase); + // Otherwise just get the value from the style object + return style[ name ]; + } + }, - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; + css: function( elem, name, extra ) { + var ret, hooks; - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + // Make sure that we're working with the right name + name = jQuery.camelCase( name ); + hooks = jQuery.cssHooks[ name ]; + name = jQuery.cssProps[ name ] || name; - // 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 ( !rnumpx.test( ret ) && rnum.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; + // cssFloat needs a special treatment + if ( name === "cssFloat" ) { + name = "float"; + } - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = camelCase === "fontSize" ? "1em" : (ret || 0); - ret = style.pixelLeft + "px"; + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) { + return ret; - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } + // Otherwise, if a way to get the computed value exists, use that + } else if ( curCSS ) { + return curCSS( elem, name ); } - - return ret; }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback ) { - var old = {}; + var old = {}, + ret, name; // Remember the old values, and insert the new ones - for ( var name in options ) { + for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } - callback.call( elem ); + ret = callback.call( elem ); // Revert the old values - for ( var name in options ) { + for ( name in options ) { elem.style[ name ] = old[ name ]; } + + return ret; } }); -if ( jQuery.expr && jQuery.expr.filters ) { - jQuery.expr.filters.hidden = function( elem ) { - var width = elem.offsetWidth, height = elem.offsetHeight, - skip = elem.nodeName.toLowerCase() === "tr"; - - return width === 0 && height === 0 && !skip ? - true : - width > 0 && height > 0 && !skip ? - false : - jQuery.curCSS(elem, "display") === "none"; - }; +// DEPRECATED in 1.3, Use jQuery.css() instead +jQuery.curCSS = jQuery.css; - jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); - }; -} -var jsc = now(), - rscript = //gi, - rselectTextarea = /select|textarea/i, - rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i, - jsre = /=\?(&|$)/, - rquery = /\?/, - rts = /(\?|&)_=.*?(&|$)/, - rurl = /^(\w+:)?\/\/([^\/?#]+)/, - r20 = /%20/g, +if ( document.defaultView && document.defaultView.getComputedStyle ) { + getComputedStyle = function( elem, name ) { + var ret, defaultView, computedStyle, width, + style = elem.style; - // Keep a copy of the old load method - _load = jQuery.fn.load; + name = name.replace( rupper, "-$1" ).toLowerCase(); -jQuery.fn.extend({ - load: function( url, params, callback ) { - if ( typeof url !== "string" ) { - return _load.call( this, url ); + if ( (defaultView = elem.ownerDocument.defaultView) && + (computedStyle = defaultView.getComputedStyle( elem, null )) ) { - // Don't do a request if no elements are being requested - } else if ( !this.length ) { - return this; + ret = computedStyle.getPropertyValue( name ); + if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { + ret = jQuery.style( elem, name ); + } } - var off = url.indexOf(" "); - if ( off >= 0 ) { - var selector = url.slice(off, url.length); - url = url.slice(0, off); + // A tribute to the "awesome hack by Dean Edwards" + // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins + // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) { + width = style.width; + style.width = ret; + ret = computedStyle.width; + style.width = width; } - // Default to a GET request - var type = "GET"; + return ret; + }; +} - // If the second parameter was provided - if ( params ) { - // If it's a function - if ( jQuery.isFunction( params ) ) { - // We assume that it's the callback - callback = params; - params = null; +if ( document.documentElement.currentStyle ) { + currentStyle = function( elem, name ) { + var left, rsLeft, uncomputed, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; - // Otherwise, build a param string - } else if ( typeof params === "object" ) { - params = jQuery.param( params, jQuery.ajaxSettings.traditional ); - type = "POST"; + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && (uncomputed = style[ name ]) ) { + ret = uncomputed; + } + + // 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 ( rnumnonpx.test( ret ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; } } - var self = this; + return ret === "" ? "auto" : ret; + }; +} - // Request the remote document - jQuery.ajax({ - url: url, - type: type, - dataType: "html", - data: params, - complete: function( res, status ) { - // If successful, inject the HTML into all the matched elements - if ( status === "success" || status === "notmodified" ) { - // See if a selector was specified - self.html( selector ? - // Create a dummy div to hold the results - jQuery("
    ") - // inject the contents of the document in, removing the scripts - // to avoid any 'Permission Denied' errors in IE - .append(res.responseText.replace(rscript, "")) +curCSS = getComputedStyle || currentStyle; - // Locate the specified elements - .find(selector) : +function getWidthOrHeight( elem, name, extra ) { - // If not, just inject the full result - res.responseText ); - } + // Start with offset property + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + i = name === "width" ? 1 : 0, + len = 4; - if ( callback ) { - self.each( callback, [res.responseText, status, res] ); + if ( val > 0 ) { + if ( extra !== "border" ) { + for ( ; i < len; i += 2 ) { + if ( !extra ) { + val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0; + } else { + val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; } } - }); - - return this; - }, + } - serialize: function() { - return jQuery.param(this.serializeArray()); - }, - serializeArray: function() { - return this.map(function() { - return this.elements ? jQuery.makeArray(this.elements) : this; - }) - .filter(function() { - return this.name && !this.disabled && - (this.checked || rselectTextarea.test(this.nodeName) || - rinput.test(this.type)); - }) - .map(function( i, elem ) { - var val = jQuery(this).val(); + return val + "px"; + } - return val == null ? - null : - jQuery.isArray(val) ? - jQuery.map( val, function( val, i ) { - return { name: elem.name, value: val }; - }) : - { name: elem.name, value: val }; - }).get(); + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; } -}); -// Attach a bunch of functions for handling common AJAX events -jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) { - jQuery.fn[o] = function( f ) { - return this.bind(o, f); + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Add padding, border, margin + if ( extra ) { + for ( ; i < len; i += 2 ) { + val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0; + if ( extra !== "padding" ) { + val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + if ( extra === "margin" ) { + val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0; + } + } + } + + return val + "px"; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + if ( elem.offsetWidth !== 0 ) { + return getWidthOrHeight( elem, name, extra ); + } else { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } + } + }, + + set: function( elem, value ) { + return rnum.test( value ) ? + value + "px" : + value; + } }; }); -jQuery.extend({ +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( parseFloat( RegExp.$1 ) / 100 ) + "" : + computed ? "1" : ""; + }, - get: function( url, data, callback, type ) { - // shift arguments if data argument was omited - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = null; + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; } + }; +} - return jQuery.ajax({ - type: "GET", +jQuery(function() { + // This hook cannot be added until DOM ready because the support test + // for it is not run until after DOM ready + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "margin-right" ); + } else { + return elem.style.marginRight; + } + }); + } + }; + } +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + var width = elem.offsetWidth, + height = elem.offsetHeight; + + return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; +}); + + + + +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /)<[^<]*)*<\/script>/gi, + rselectTextarea = /^(?:select|textarea)/i, + rspacesAjax = /\s+/, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Document location + ajaxLocation, + + // Document location segments + ajaxLocParts, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if ( jQuery.isFunction( func ) ) { + var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ), + selection; + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.extend({ + load: function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + + // Don't do a request if no elements are being requested + } else if ( !this.length ) { + return this; + } + + var off = url.indexOf( " " ); + if ( off >= 0 ) { + var selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // Default to a GET request + var type = "GET"; + + // If the second parameter was provided + if ( params ) { + // If it's a function + if ( jQuery.isFunction( params ) ) { + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( typeof params === "object" ) { + params = jQuery.param( params, jQuery.ajaxSettings.traditional ); + type = "POST"; + } + } + + var self = this; + + // Request the remote document + jQuery.ajax({ url: url, - data: data, - success: callback, - dataType: type + type: type, + dataType: "html", + data: params, + // Complete callback (responseText is used internally) + complete: function( jqXHR, status, responseText ) { + // Store the response as specified by the jqXHR object + responseText = jqXHR.responseText; + // If successful, inject the HTML into all the matched elements + if ( jqXHR.isResolved() ) { + // #4825: Get the actual response in case + // a dataFilter is present in ajaxSettings + jqXHR.done(function( r ) { + responseText = r; + }); + // See if a selector was specified + self.html( selector ? + // Create a dummy div to hold the results + jQuery("
    ") + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append(responseText.replace(rscript, "")) + + // Locate the specified elements + .find(selector) : + + // If not, just inject the full result + responseText ); + } + + if ( callback ) { + self.each( callback, [ responseText, status, jqXHR ] ); + } + } }); - }, - getScript: function( url, callback ) { - return jQuery.get(url, null, callback, "script"); + return this; }, - getJSON: function( url, data, callback ) { - return jQuery.get(url, data, callback, "json"); + serialize: function() { + return jQuery.param( this.serializeArray() ); }, - post: function( url, data, callback, type ) { - // shift arguments if data argument was omited + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted if ( jQuery.isFunction( data ) ) { type = type || callback; callback = data; - data = {}; + data = undefined; } return jQuery.ajax({ - type: "POST", + type: method, url: url, data: data, success: callback, dataType: type }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); }, - ajaxSetup: function( settings ) { - jQuery.extend( jQuery.ajaxSettings, settings ); + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; }, ajaxSettings: { - url: location.href, + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), global: true, type: "GET", - contentType: "application/x-www-form-urlencoded", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: true, async: true, /* timeout: 0, data: null, + dataType: null, username: null, password: null, + cache: null, traditional: false, + headers: {}, */ - // Create the request object; Microsoft failed to properly - // implement the XMLHttpRequest in IE7 (can't request local files), - // so we use the ActiveXObject when it is available - // This function can be overriden by calling jQuery.ajaxSetup - xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ? - function() { - return new window.XMLHttpRequest(); - } : - function() { - try { - return new window.ActiveXObject("Microsoft.XMLHTTP"); - } catch(e) {} - }, + accepts: { xml: "application/xml, text/xml", html: "text/html", - script: "text/javascript, application/javascript", - json: "application/json, text/javascript", text: "text/plain", - _default: "*/*" - } - }, + json: "application/json, text/javascript", + "*": allTypes + }, - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, - ajax: function( origSettings ) { - var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings); - - var jsonp, status, data, - callbackContext = origSettings && origSettings.context || s, - type = s.type.toUpperCase(); + responseFields: { + xml: "responseXML", + text: "responseText" + }, - // convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, - // Handle JSONP Parameter Callbacks - if ( s.dataType === "jsonp" ) { - if ( type === "GET" ) { - if ( !jsre.test( s.url ) ) { - s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?"; + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // ifModified key + ifModifiedKey, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // The jqXHR state + state = 0, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || "abort"; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; } - } else if ( !s.data || !jsre.test(s.data) ) { - s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + + // Called once + if ( state === 2 ) { + return; } - s.dataType = "json"; - } - // Build temporary JSONP function - if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) { - jsonp = s.jsonpCallback || ("jsonp" + jsc++); + // State is "done" now + state = 2; - // Replace the =? sequence both in the query string and the data - if ( s.data ) { - s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); } - s.url = s.url.replace(jsre, "=" + jsonp + "$1"); + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; - // We need to make sure - // that a JSONP style response is executed properly - s.dataType = "script"; + // Cache response headers + responseHeadersString = headers || ""; - // Handle JSONP-style loading - window[ jsonp ] = window[ jsonp ] || function( tmp ) { - data = tmp; - success(); - complete(); - // Garbage collect - window[ jsonp ] = undefined; + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; - try { - delete window[ jsonp ]; - } catch(e) {} + var isSuccess, + success, + error, + statusText = nativeStatusText, + response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, + lastModified, + etag; + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { - if ( head ) { - head.removeChild( script ); + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) { + jQuery.lastModified[ ifModifiedKey ] = lastModified; + } + if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) { + jQuery.etag[ ifModifiedKey ] = etag; + } } - }; - } - if ( s.dataType === "script" && s.cache === null ) { - s.cache = false; + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + try { + success = ajaxConvert( s, response ); + statusText = "success"; + isSuccess = true; + } catch(e) { + // We have a parsererror + statusText = "parsererror"; + error = e; + } + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = "" + ( nativeStatusText || statusText ); + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } } - if ( s.cache === false && type === "GET" ) { - var ts = now(); + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.then( tmp, tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax ); - // try replacing _= if it is there - var ret = s.url.replace(rts, "$1_=" + ts + "$2"); + // Determine if a cross-domain request is in order + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } - // if nothing was replaced, add timestamp to the end - s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); } - // If data is available, append data to url for get requests - if ( s.data && type === "GET" ) { - s.url += (rquery.test(s.url) ? "&" : "?") + s.data; + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return false; } + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + // Watch for a new set of requests - if ( s.global && ! jQuery.active++ ) { + if ( fireGlobals && jQuery.active++ === 0 ) { jQuery.event.trigger( "ajaxStart" ); } - // Matches an absolute URL, and saves the domain - var parts = rurl.exec( s.url ), - remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host); + // More options handling for requests with no content + if ( !s.hasContent ) { - // If we're requesting a remote document - // and trying to load JSON or Script with a GET - if ( s.dataType === "script" && type === "GET" && remote ) { - var head = document.getElementsByTagName("head")[0] || document.documentElement; - var script = document.createElement("script"); - script.src = s.url; - if ( s.scriptCharset ) { - script.charset = s.scriptCharset; + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; } - // Handle Script loading - if ( !jsonp ) { - var done = false; + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; - // Attach handlers for all browsers - script.onload = script.onreadystatechange = function() { - if ( !done && (!this.readyState || - this.readyState === "loaded" || this.readyState === "complete") ) { - done = true; - success(); - complete(); + // Add anti-cache in url if needed + if ( s.cache === false ) { - // Handle memory leak in IE - script.onload = script.onreadystatechange = null; - if ( head && script.parentNode ) { - head.removeChild( script ); - } - } - }; + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); } + } - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709 and #4378). - head.insertBefore( script, head.firstChild ); + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } - // We handle everything using the script element injection - return undefined; + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } } - var requestDone = false; + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } - // Create the request object - var xhr = s.xhr(); + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already + jqXHR.abort(); + return false; - if ( !xhr ) { - return; } - // Open the socket - // Passing null username, generates a login popup on Opera (#2865) - if ( s.username ) { - xhr.open(type, s.url, s.async, s.username, s.password); - } else { - xhr.open(type, s.url, s.async); + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); } - // Need an extra try/catch for cross domain requests in Firefox 3 - try { - // Set the correct header, if data is being sent - if ( s.data || origSettings && origSettings.contentType ) { - xhr.setRequestHeader("Content-Type", s.contentType); - } + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[s.url] ) { - xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]); - } + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } - if ( jQuery.etag[s.url] ) { - xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]); + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; } } + } + + return jqXHR; + }, + + // Serialize an array of form elements or a set of + // key/values into a query string + param: function( a, traditional ) { + var s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : value; + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); - // Set header so the called script knows that it's an XMLHttpRequest - // Only send the header if it's not a remote XHR - if ( !remote ) { - xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( var prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); } + } - // Set the Accepts header for the server, depending on the dataType - xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? - s.accepts[ s.dataType ] + ", */*" : - s.accepts._default ); - } catch(e) {} + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); + } +}); - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) { - // Handle the global AJAX counter - if ( s.global && ! --jQuery.active ) { - jQuery.event.trigger( "ajaxStop" ); +function buildParams( prefix, obj, traditional, add ) { + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); } + }); - // close opended socket - xhr.abort(); - return false; + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( var name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); } - if ( s.global ) { - trigger("ajaxSend", [xhr, s]); - } + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} - // Wait for a response to come back - var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) { - // The request was aborted - if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) { - // Opera doesn't call onreadystatechange before this point - // so we simulate the call - if ( !requestDone ) { - complete(); - } +// This is still on the jQuery object... for now +// Want to move this to jQuery.ajax some day +jQuery.extend({ - requestDone = true; - if ( xhr ) { - xhr.onreadystatechange = jQuery.noop; - } + // Counter for holding the number of active queries + active: 0, - // The transfer is complete and the data is available, or the request timed out - } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) { - requestDone = true; - xhr.onreadystatechange = jQuery.noop; + // Last-Modified header cache for next request + lastModified: {}, + etag: {} - status = isTimeout === "timeout" ? - "timeout" : - !jQuery.httpSuccess( xhr ) ? - "error" : - s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? - "notmodified" : - "success"; +}); - var errMsg; +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { - if ( status === "success" ) { - // Watch for, and catch, XML document parse errors - try { - // process the data (runs the xml through httpData regardless of callback) - data = jQuery.httpData( xhr, s.dataType, s ); - } catch(err) { - status = "parsererror"; - errMsg = err; - } - } + var contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields, + ct, + type, + finalDataType, + firstDataType; - // Make sure that the request was successful or notmodified - if ( status === "success" || status === "notmodified" ) { - // JSONP handles its own success callback - if ( !jsonp ) { - success(); - } - } else { - jQuery.handleError(s, xhr, status, errMsg); - } + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } - // Fire the complete handlers - complete(); + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } - if ( isTimeout === "timeout" ) { - xhr.abort(); - } + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } - // Stop memory leaks - if ( s.async ) { - xhr = null; - } + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; } - }; + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } - // Override the abort handler, if we can (IE doesn't allow it, but that's OK) - // Opera doesn't fire onreadystatechange at all on abort - try { - var oldAbort = xhr.abort; - xhr.abort = function() { - if ( xhr ) { - oldAbort.call( xhr ); - } + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} - onreadystatechange( "abort" ); - }; - } catch(e) { } +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { - // Timeout checker - if ( s.async && s.timeout > 0 ) { - setTimeout(function() { - // Check to see if the request is still happening - if ( xhr && !requestDone ) { - onreadystatechange( "timeout" ); + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + var dataTypes = s.dataTypes, + converters = {}, + i, + key, + length = dataTypes.length, + tmp, + // Current and previous dataTypes + current = dataTypes[ 0 ], + prev, + // Conversion expression + conversion, + // Conversion function + conv, + // Conversion functions (transitive conversion) + conv1, + conv2; + + // For each dataType in the chain + for ( i = 1; i < length; i++ ) { + + // Create converters map + // with lowercased keys + if ( i === 1 ) { + for ( key in s.converters ) { + if ( typeof key === "string" ) { + converters[ key.toLowerCase() ] = s.converters[ key ]; } - }, s.timeout); + } } - // Send the data - try { - xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null ); - } catch(e) { - jQuery.handleError(s, xhr, null, e); - // Fire the complete handlers - complete(); + // Get the dataTypes + prev = current; + current = dataTypes[ i ]; + + // If current is auto dataType, update it to prev + if ( current === "*" ) { + current = prev; + // If no auto and dataTypes are actually different + } else if ( prev !== "*" && prev !== current ) { + + // Get the converter + conversion = prev + " " + current; + conv = converters[ conversion ] || converters[ "* " + current ]; + + // If there is no direct converter, search transitively + if ( !conv ) { + conv2 = undefined; + for ( conv1 in converters ) { + tmp = conv1.split( " " ); + if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) { + conv2 = converters[ tmp[1] + " " + current ]; + if ( conv2 ) { + conv1 = converters[ conv1 ]; + if ( conv1 === true ) { + conv = conv2; + } else if ( conv2 === true ) { + conv = conv1; + } + break; + } + } + } + } + // If we found no converter, dispatch an error + if ( !( conv || conv2 ) ) { + jQuery.error( "No conversion from " + conversion.replace(" "," to ") ); + } + // If found converter is not an equivalence + if ( conv !== true ) { + // Convert with 1 or 2 converters accordingly + response = conv ? conv( response ) : conv2( conv1(response) ); + } } + } + return response; +} - // firefox 1.5 doesn't fire statechange for sync requests - if ( !s.async ) { - onreadystatechange(); - } - function success() { - // If a local callback was specified, fire it and pass it the data - if ( s.success ) { - s.success.call( callbackContext, data, status, xhr ); - } - // Fire the global callback - if ( s.global ) { - trigger( "ajaxSuccess", [xhr, s] ); + +var jsc = jQuery.now(), + jsre = /(\=)\?(&|$)|\?\?/i; + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + return jQuery.expando + "_" + ( jsc++ ); + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType ); + + if ( s.dataTypes[ 0 ] === "jsonp" || + s.jsonp !== false && ( jsre.test( s.url ) || + inspectData && jsre.test( s.data ) ) ) { + + var responseContainer, + jsonpCallback = s.jsonpCallback = + jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback, + previous = window[ jsonpCallback ], + url = s.url, + data = s.data, + replace = "$1" + jsonpCallback + "$2"; + + if ( s.jsonp !== false ) { + url = url.replace( jsre, replace ); + if ( s.url === url ) { + if ( inspectData ) { + data = data.replace( jsre, replace ); + } + if ( s.data === data ) { + // Add callback manually + url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback; + } } } - function complete() { - // Process result - if ( s.complete ) { - s.complete.call( callbackContext, xhr, status); - } + s.url = url; + s.data = data; - // The request was completed - if ( s.global ) { - trigger( "ajaxComplete", [xhr, s] ); + // Install callback + window[ jsonpCallback ] = function( response ) { + responseContainer = [ response ]; + }; + + // Clean-up function + jqXHR.always(function() { + // Set callback back to previous value + window[ jsonpCallback ] = previous; + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( previous ) ) { + window[ jsonpCallback ]( responseContainer[ 0 ] ); } + }); - // Handle the global AJAX counter - if ( s.global && ! --jQuery.active ) { - jQuery.event.trigger( "ajaxStop" ); + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( jsonpCallback + " was not called" ); } - } - - function trigger(type, args) { - (s.context ? jQuery(s.context) : jQuery.event).trigger(type, args); - } + return responseContainer[ 0 ]; + }; - // return XMLHttpRequest to allow aborting the request etc. - return xhr; - }, + // force json dataType + s.dataTypes[ 0 ] = "json"; - handleError: function( s, xhr, status, e ) { - // If a local callback was specified, fire it - if ( s.error ) { - s.error.call( s.context || s, xhr, status, e ); - } + // Delegate to script + return "script"; + } +}); - // Fire the global callback - if ( s.global ) { - (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); - } - }, - // Counter for holding the number of active queries - active: 0, - // Determines if an XMLHttpRequest was successful or not - httpSuccess: function( xhr ) { - try { - // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 - return !xhr.status && location.protocol === "file:" || - // Opera returns 0 when status is 304 - ( xhr.status >= 200 && xhr.status < 300 ) || - xhr.status === 304 || xhr.status === 1223 || xhr.status === 0; - } catch(e) {} - return false; +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); - // Determines if an XMLHttpRequest returns NotModified - httpNotModified: function( xhr, url ) { - var lastModified = xhr.getResponseHeader("Last-Modified"), - etag = xhr.getResponseHeader("Etag"); +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); - if ( lastModified ) { - jQuery.lastModified[url] = lastModified; - } +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { - if ( etag ) { - jQuery.etag[url] = etag; - } + // This transport only deals with cross domain requests + if ( s.crossDomain ) { - // Opera returns 0 when status is 304 - return xhr.status === 304 || xhr.status === 0; - }, + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; - httpData: function( xhr, type, s ) { - var ct = xhr.getResponseHeader("content-type") || "", - xml = type === "xml" || !type && ct.indexOf("xml") >= 0, - data = xml ? xhr.responseXML : xhr.responseText; + return { - if ( xml && data.documentElement.nodeName === "parsererror" ) { - jQuery.error( "parsererror" ); - } + send: function( _, callback ) { - // Allow a pre-filtering function to sanitize the response - // s is checked to keep backwards compatibility - if ( s && s.dataFilter ) { - data = s.dataFilter( data, type ); - } + script = document.createElement( "script" ); - // The filter can actually parse the response - if ( typeof data === "string" ) { - // Get the JavaScript object, if JSON is used. - if ( type === "json" || !type && ct.indexOf("json") >= 0 ) { - data = jQuery.parseJSON( data ); + script.async = "async"; - // If the type is "script", eval it in global context - } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) { - jQuery.globalEval( data ); - } - } + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } - return data; - }, + script.src = s.url; - // Serialize an array of form elements or a set of - // key/values into a query string - param: function( a, traditional ) { - var s = []; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray(a) || a.jquery ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( var prefix in a ) { - buildParams( prefix, a[prefix] ); + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } } + }; + } +}); + + + + +var // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); } + } : false, + xhrId = 0, + xhrCallbacks; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var xhr = s.xhr(), + handle, + i; + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occured + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } - // Return the resulting serialization - return s.join("&").replace(r20, "+"); - - function buildParams( prefix, obj ) { - if ( jQuery.isArray(obj) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || /\[\]$/.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( _ ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + // if we're in sync mode or it's in cache + // and has been retrieved directly (IE6 & IE7) + // we need to manually fire the callback + if ( !s.async || xhr.readyState === 4 ) { + callback(); } else { - // If array item is non-scalar (array or object), encode its - // numeric index to resolve deserialization ambiguity issues. - // Note that rack (as of 1.0.0) can't currently deserialize - // nested arrays properly, and attempting to do so may cause - // a server error. Possible fixes are to modify rack's - // deserialization algorithm or to provide an option or flag - // to force array serialization to be shallow. - buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v ); + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; } - }); - - } else if ( !traditional && obj != null && typeof obj === "object" ) { - // Serialize object item. - jQuery.each( obj, function( k, v ) { - buildParams( prefix + "[" + k + "]", v ); - }); - - } else { - // Serialize scalar item. - add( prefix, obj ); - } - } + }, - function add( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction(value) ? value() : value; - s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; } - } -}); + }); +} + + + + var elemdisplay = {}, - rfxtypes = /toggle|show|hide/, - rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/, + iframe, iframeDoc, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i, timerId, fxAttrs = [ // height animations @@ -5450,69 +8371,83 @@ var elemdisplay = {}, [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ], // opacity animations [ "opacity" ] - ]; + ], + fxNow; jQuery.fn.extend({ - show: function( speed, callback ) { - if ( speed || speed === 0) { - return this.animate( genFx("show", 3), speed, callback); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - var old = jQuery.data(this[i], "olddisplay"); - - this[i].style.display = old || ""; - - if ( jQuery.css(this[i], "display") === "none" ) { - var nodeName = this[i].nodeName, display; + show: function( speed, easing, callback ) { + var elem, display; - if ( elemdisplay[ nodeName ] ) { - display = elemdisplay[ nodeName ]; - - } else { - var elem = jQuery("<" + nodeName + " />").appendTo("body"); - - display = elem.css("display"); + if ( speed || speed === 0 ) { + return this.animate( genFx("show", 3), speed, easing, callback ); - if ( display === "none" ) { - display = "block"; - } + } else { + for ( var i = 0, j = this.length; i < j; i++ ) { + elem = this[ i ]; - elem.remove(); + if ( elem.style ) { + display = elem.style.display; - elemdisplay[ nodeName ] = display; + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !jQuery._data(elem, "olddisplay") && display === "none" ) { + display = elem.style.display = ""; } - jQuery.data(this[i], "olddisplay", display); + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( (display === "" && jQuery.css(elem, "display") === "none") || + !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) { + jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) ); + } } } - // Set the display of the elements in a second loop + // Set the display of most of the elements in a second loop // to avoid the constant reflow - for ( var j = 0, k = this.length; j < k; j++ ) { - this[j].style.display = jQuery.data(this[j], "olddisplay") || ""; + for ( i = 0; i < j; i++ ) { + elem = this[ i ]; + + if ( elem.style ) { + display = elem.style.display; + + if ( display === "" || display === "none" ) { + elem.style.display = jQuery._data( elem, "olddisplay" ) || ""; + } + } } return this; } }, - hide: function( speed, callback ) { + hide: function( speed, easing, callback ) { if ( speed || speed === 0 ) { - return this.animate( genFx("hide", 3), speed, callback); + return this.animate( genFx("hide", 3), speed, easing, callback); } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - var old = jQuery.data(this[i], "olddisplay"); - if ( !old && old !== "none" ) { - jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display")); + var elem, display, + i = 0, + j = this.length; + + for ( ; i < j; i++ ) { + elem = this[i]; + if ( elem.style ) { + display = jQuery.css( elem, "display" ); + + if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) { + jQuery._data( elem, "olddisplay", display ); + } } } // Set the display of the elements in a second loop // to avoid the constant reflow - for ( var j = 0, k = this.length; j < k; j++ ) { - this[j].style.display = "none"; + for ( i = 0; i < j; i++ ) { + if ( this[i].style ) { + this[i].style.display = "none"; + } } return this; @@ -5522,7 +8457,7 @@ jQuery.fn.extend({ // Save the old toggle function _toggle: jQuery.fn.toggle, - toggle: function( fn, fn2 ) { + toggle: function( fn, fn2, callback ) { var bool = typeof fn === "boolean"; if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) { @@ -5535,54 +8470,102 @@ jQuery.fn.extend({ }); } else { - this.animate(genFx("toggle", 3), fn, fn2); + this.animate(genFx("toggle", 3), fn, fn2, callback); } return this; }, - fadeTo: function( speed, to, callback ) { + fadeTo: function( speed, to, easing, callback ) { return this.filter(":hidden").css("opacity", 0).show().end() - .animate({opacity: to}, speed, callback); + .animate({opacity: to}, speed, easing, callback); }, animate: function( prop, speed, easing, callback ) { - var optall = jQuery.speed(speed, easing, callback); + var optall = jQuery.speed( speed, easing, callback ); if ( jQuery.isEmptyObject( prop ) ) { - return this.each( optall.complete ); + return this.each( optall.complete, [ false ] ); } - return this[ optall.queue === false ? "each" : "queue" ](function() { - var opt = jQuery.extend({}, optall), p, - hidden = this.nodeType === 1 && jQuery(this).is(":hidden"), - self = this; + // Do not change referenced properties as per-property easing will be lost + prop = jQuery.extend( {}, prop ); - for ( p in prop ) { - var name = p.replace(rdashAlpha, fcamelCase); + function doAnimation() { + // XXX 'this' does not always have a nodeName when running the + // test suite + + if ( optall.queue === false ) { + jQuery._mark( this ); + } + + var opt = jQuery.extend( {}, optall ), + isElement = this.nodeType === 1, + hidden = isElement && jQuery(this).is(":hidden"), + name, val, p, e, hooks, replace, + parts, start, end, unit, + method; + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; + + // first pass over propertys to expand / normalize + for ( p in prop ) { + name = jQuery.camelCase( p ); if ( p !== name ) { prop[ name ] = prop[ p ]; delete prop[ p ]; - p = name; } - if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) { - return opt.complete.call(this); + if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) { + replace = hooks.expand( prop[ name ] ); + delete prop[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for ( p in replace ) { + if ( ! ( p in prop ) ) { + prop[ p ] = replace[ p ]; + } + } + } + } + + for ( name in prop ) { + val = prop[ name ]; + // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) + if ( jQuery.isArray( val ) ) { + opt.animatedProperties[ name ] = val[ 1 ]; + val = prop[ name ] = val[ 0 ]; + } else { + opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing'; } - if ( ( p === "height" || p === "width" ) && this.style ) { - // Store display property - opt.display = jQuery.css(this, "display"); + if ( val === "hide" && hidden || val === "show" && !hidden ) { + return opt.complete.call( this ); + } + if ( isElement && ( name === "height" || name === "width" ) ) { // Make sure that nothing sneaks out - opt.overflow = this.style.overflow; - } + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( this, "display" ) === "inline" && + jQuery.css( this, "float" ) === "none" ) { - if ( jQuery.isArray( prop[p] ) ) { - // Create (if needed) and add to specialEasing - (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1]; - prop[p] = prop[p][0]; + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) { + this.style.display = "inline-block"; + + } else { + this.style.zoom = 1; + } + } } } @@ -5590,32 +8573,40 @@ jQuery.fn.extend({ this.style.overflow = "hidden"; } - opt.curAnim = jQuery.extend({}, prop); + for ( p in prop ) { + e = new jQuery.fx( this, opt, p ); + val = prop[ p ]; - jQuery.each( prop, function( name, val ) { - var e = new jQuery.fx( self, opt, name ); + if ( rfxtypes.test( val ) ) { - if ( rfxtypes.test(val) ) { - e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop ); + // Tracks whether to show or hide based on private + // data attached to the element + method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 ); + if ( method ) { + jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" ); + e[ method ](); + } else { + e[ val ](); + } } else { - var parts = rfxnum.exec(val), - start = e.cur(true) || 0; + parts = rfxnum.exec( val ); + start = e.cur(); if ( parts ) { - var end = parseFloat( parts[2] ), - unit = parts[3] || "px"; + end = parseFloat( parts[2] ); + unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" ); // We need to compute starting value if ( unit !== "px" ) { - self.style[ name ] = (end || 1) + unit; - start = ((end || 1) / e.cur(true)) * start; - self.style[ name ] = start + unit; + jQuery.style( this, p, (end || 1) + unit); + start = ( (end || 1) / e.cur() ) * start; + jQuery.style( this, p, start + unit); } // If a +=/-= token was provided, we're doing a relative animation if ( parts[1] ) { - end = ((parts[1] === "-=" ? -1 : 1) * end) + start; + end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start; } e.custom( start, end, unit ); @@ -5624,89 +8615,155 @@ jQuery.fn.extend({ e.custom( start, val, "" ); } } - }); + } // For JS strict compliance return true; - }); - }, + } - stop: function( clearQueue, gotoEnd ) { - var timers = jQuery.timers; + return optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, - if ( clearQueue ) { - this.queue([]); + stop: function( type, clearQueue, gotoEnd ) { + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); } - this.each(function() { - // go in reverse order so anything added to the queue during the loop is ignored - for ( var i = timers.length - 1; i >= 0; i-- ) { - if ( timers[i].elem === this ) { - if (gotoEnd) { - // force the next step to be the last - timers[i](true); - } + return this.each(function() { + var index, + hadTimers = false, + timers = jQuery.timers, + data = jQuery._data( this ); + + // clear marker counters if we know they won't be + if ( !gotoEnd ) { + jQuery._unmark( true, this ); + } - timers.splice(i, 1); + function stopQueue( elem, data, index ) { + var hooks = data[ index ]; + jQuery.removeData( elem, index, true ); + hooks.stop( gotoEnd ); + } + + if ( type == null ) { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) { + stopQueue( this, data, index ); + } } + } else if ( data[ index = type + ".run" ] && data[ index ].stop ){ + stopQueue( this, data, index ); } - }); - // start the next in the queue if the last step wasn't forced - if ( !gotoEnd ) { - this.dequeue(); - } + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + if ( gotoEnd ) { - return this; + // force the next step to be the last + timers[ index ]( true ); + } else { + timers[ index ].saveState(); + } + hadTimers = true; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( !( gotoEnd && hadTimers ) ) { + jQuery.dequeue( this, type ); + } + }); } }); +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout( clearFxNow, 0 ); + return ( fxNow = jQuery.now() ); +} + +function clearFxNow() { + fxNow = undefined; +} + +// Generate parameters to create a standard animation +function genFx( type, num ) { + var obj = {}; + + jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() { + obj[ this ] = type; + }); + + return obj; +} + // Generate shortcuts for custom animations jQuery.each({ - slideDown: genFx("show", 1), - slideUp: genFx("hide", 1), - slideToggle: genFx("toggle", 1), + slideDown: genFx( "show", 1 ), + slideUp: genFx( "hide", 1 ), + slideToggle: genFx( "toggle", 1 ), fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" } + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } }, function( name, props ) { - jQuery.fn[ name ] = function( speed, callback ) { - return this.animate( props, speed, callback ); + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); }; }); jQuery.extend({ speed: function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? speed : { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || jQuery.isFunction( speed ) && speed, duration: speed, - easing: fn && easing || easing && !jQuery.isFunction(easing) && easing + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing }; opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default; + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } // Queueing opt.old = opt.complete; - opt.complete = function() { - if ( opt.queue !== false ) { - jQuery(this).dequeue(); - } + + opt.complete = function( noUnmark ) { if ( jQuery.isFunction( opt.old ) ) { opt.old.call( this ); } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } else if ( noUnmark !== false ) { + jQuery._unmark( this ); + } }; return opt; }, easing: { - linear: function( p, n, firstNum, diff ) { - return firstNum + diff * p; + linear: function( p ) { + return p; }, - swing: function( p, n, firstNum, diff ) { - return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; + swing: function( p ) { + return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5; } }, @@ -5717,9 +8774,7 @@ jQuery.extend({ this.elem = elem; this.prop = prop; - if ( !options.orig ) { - options.orig = {}; - } + options.orig = options.orig || {}; } }); @@ -5731,55 +8786,71 @@ jQuery.fx.prototype = { this.options.step.call( this.elem, this.now, this ); } - (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); - - // Set display property to block for height/width animations - if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) { - this.elem.style.display = "block"; - } + ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this ); }, // Get the current size - cur: function( force ) { - if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) { + cur: function() { + if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) { return this.elem[ this.prop ]; } - var r = parseFloat(jQuery.css(this.elem, this.prop, force)); - return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0; + var parsed, + r = jQuery.css( this.elem, this.prop ); + // Empty strings, null, undefined and "auto" are converted to 0, + // complex values such as "rotate(1rad)" are returned as is, + // simple values such as "10px" are parsed to Float. + return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed; }, // Start an animation from one number to another custom: function( from, to, unit ) { - this.startTime = now(); - this.start = from; + var self = this, + fx = jQuery.fx; + + this.startTime = fxNow || createFxNow(); this.end = to; - this.unit = unit || this.unit || "px"; - this.now = this.start; + this.now = this.start = from; this.pos = this.state = 0; + this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" ); - var self = this; function t( gotoEnd ) { - return self.step(gotoEnd); + return self.step( gotoEnd ); } + t.queue = this.options.queue; t.elem = this.elem; + t.saveState = function() { + if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) { + if ( self.options.hide ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.start ); + } else if ( self.options.show ) { + jQuery._data( self.elem, "fxshow" + self.prop, self.end ); + } + } + }; if ( t() && jQuery.timers.push(t) && !timerId ) { - timerId = setInterval(jQuery.fx.tick, 13); + timerId = setInterval( fx.tick, fx.interval ); } }, // Simple 'show' function show: function() { + var dataShow = jQuery._data( this.elem, "fxshow" + this.prop ); + // Remember where we started, so that we can go back to it later - this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); + this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop ); this.options.show = true; // Begin the animation - // Make sure that we start at a small width/height to avoid any - // flash of content - this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur()); + // Make sure that we start at a small width/height to avoid any flash of content + if ( dataShow !== undefined ) { + // This show is picking up where a previous hide or show left off + this.custom( this.cur(), dataShow ); + } else { + this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() ); + } // Start by showing the element jQuery( this.elem ).show(); @@ -5788,72 +8859,84 @@ jQuery.fx.prototype = { // Simple 'hide' function hide: function() { // Remember where we started, so that we can go back to it later - this.options.orig[this.prop] = jQuery.style( this.elem, this.prop ); + this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop ); this.options.hide = true; // Begin the animation - this.custom(this.cur(), 0); + this.custom( this.cur(), 0 ); }, // Each step of an animation step: function( gotoEnd ) { - var t = now(), done = true; + var p, n, complete, + t = fxNow || createFxNow(), + done = true, + elem = this.elem, + options = this.options; - if ( gotoEnd || t >= this.options.duration + this.startTime ) { + if ( gotoEnd || t >= options.duration + this.startTime ) { this.now = this.end; this.pos = this.state = 1; this.update(); - this.options.curAnim[ this.prop ] = true; + options.animatedProperties[ this.prop ] = true; - for ( var i in this.options.curAnim ) { - if ( this.options.curAnim[i] !== true ) { + for ( p in options.animatedProperties ) { + if ( options.animatedProperties[ p ] !== true ) { done = false; } } if ( done ) { - if ( this.options.display != null ) { - // Reset the overflow - this.elem.style.overflow = this.options.overflow; - - // Reset the display - var old = jQuery.data(this.elem, "olddisplay"); - this.elem.style.display = old ? old : this.options.display; + // Reset the overflow + if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) { - if ( jQuery.css(this.elem, "display") === "none" ) { - this.elem.style.display = "block"; - } + jQuery.each( [ "", "X", "Y" ], function( index, value ) { + elem.style[ "overflow" + value ] = options.overflow[ index ]; + }); } // Hide the element if the "hide" operation was done - if ( this.options.hide ) { - jQuery(this.elem).hide(); + if ( options.hide ) { + jQuery( elem ).hide(); } // Reset the properties, if the item has been hidden or shown - if ( this.options.hide || this.options.show ) { - for ( var p in this.options.curAnim ) { - jQuery.style(this.elem, p, this.options.orig[p]); + if ( options.hide || options.show ) { + for ( p in options.animatedProperties ) { + jQuery.style( elem, p, options.orig[ p ] ); + jQuery.removeData( elem, "fxshow" + p, true ); + // Toggle data is no longer needed + jQuery.removeData( elem, "toggle" + p, true ); } } // Execute the complete function - this.options.complete.call( this.elem ); + // in the event that the complete function throws an exception + // we must ensure it won't be called twice. #5684 + + complete = options.complete; + if ( complete ) { + + options.complete = false; + complete.call( elem ); + } } return false; } else { - var n = t - this.startTime; - this.state = n / this.options.duration; - - // Perform the easing function, defaults to swing - var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop]; - var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear"); - this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration); - this.now = this.start + ((this.end - this.start) * this.pos); + // classical easing cannot be used with an Infinity duration + if ( options.duration == Infinity ) { + this.now = t; + } else { + n = t - this.startTime; + this.state = n / options.duration; + // Perform the easing function, defaults to swing + this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration ); + this.now = this.start + ( (this.end - this.start) * this.pos ); + } // Perform the next step of the animation this.update(); } @@ -5864,11 +8947,15 @@ jQuery.fx.prototype = { jQuery.extend( jQuery.fx, { tick: function() { - var timers = jQuery.timers; + var timer, + timers = jQuery.timers, + i = 0; - for ( var i = 0; i < timers.length; i++ ) { - if ( !timers[i]() ) { - timers.splice(i--, 1); + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); } } @@ -5876,27 +8963,29 @@ jQuery.extend( jQuery.fx, { jQuery.fx.stop(); } }, - + + interval: 13, + stop: function() { clearInterval( timerId ); timerId = null; }, - + speeds: { slow: 600, - fast: 200, - // Default speed - _default: 400 + fast: 200, + // Default speed + _default: 400 }, step: { opacity: function( fx ) { - jQuery.style(fx.elem, "opacity", fx.now); + jQuery.style( fx.elem, "opacity", fx.now ); }, _default: function( fx ) { if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) { - fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit; + fx.elem.style[ fx.prop ] = fx.now + fx.unit; } else { fx.elem[ fx.prop ] = fx.now; } @@ -5904,6 +8993,16 @@ jQuery.extend( jQuery.fx, { } }); +// Ensure props that can't be negative don't go there on undershoot easing +jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) { + // exclude marginTop, marginLeft, marginBottom and marginRight from this list + if ( prop.indexOf( "margin" ) ) { + jQuery.fx.step[ prop ] = function( fx ) { + jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit ); + }; + } +}); + if ( jQuery.expr && jQuery.expr.filters ) { jQuery.expr.filters.animated = function( elem ) { return jQuery.grep(jQuery.timers, function( fn ) { @@ -5912,69 +9011,94 @@ if ( jQuery.expr && jQuery.expr.filters ) { }; } -function genFx( type, num ) { - var obj = {}; +// Try to restore the default display value of an element +function defaultDisplay( nodeName ) { - jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() { - obj[ this ] = type; - }); + if ( !elemdisplay[ nodeName ] ) { - return obj; -} -if ( "getBoundingClientRect" in document.documentElement ) { - jQuery.fn.offset = function( options ) { - var elem = this[0]; + var body = document.body, + elem = jQuery( "<" + nodeName + ">" ).appendTo( body ), + display = elem.css( "display" ); + elem.remove(); - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // No iframe to use yet, so create it + if ( !iframe ) { + iframe = document.createElement( "iframe" ); + iframe.frameBorder = iframe.width = iframe.height = 0; + } - if ( !elem || !elem.ownerDocument ) { - return null; - } + body.appendChild( iframe ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write( ( jQuery.support.boxModel ? "" : "" ) + "" ); + iframeDoc.close(); + } + + elem = iframeDoc.createElement( nodeName ); - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); + iframeDoc.body.appendChild( elem ); + + display = jQuery.css( elem, "display" ); + body.removeChild( iframe ); } - var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement, - clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, - top = box.top + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop, - left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; + // Store the correct default display + elemdisplay[ nodeName ] = display; + } - return { top: top, left: left }; - }; + return elemdisplay[ nodeName ]; +} -} else { - jQuery.fn.offset = function( options ) { - var elem = this[0]; - if ( options ) { - return this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - if ( !elem || !elem.ownerDocument ) { - return null; - } - if ( elem === elem.ownerDocument.body ) { - return jQuery.offset.bodyOffset( elem ); +var getOffset, + rtable = /^t(?:able|d|h)$/i, + rroot = /^(?:body|html)$/i; + +if ( "getBoundingClientRect" in document.documentElement ) { + getOffset = function( elem, doc, docElem, box ) { + try { + box = elem.getBoundingClientRect(); + } catch(e) {} + + // Make sure we're not dealing with a disconnected DOM node + if ( !box || !jQuery.contains( docElem, elem ) ) { + return box ? { top: box.top, left: box.left } : { top: 0, left: 0 }; } - jQuery.offset.initialize(); + var body = doc.body, + win = getWindow( doc ), + clientTop = docElem.clientTop || body.clientTop || 0, + clientLeft = docElem.clientLeft || body.clientLeft || 0, + scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop, + scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft, + top = box.top + scrollTop - clientTop, + left = box.left + scrollLeft - clientLeft; + + return { top: top, left: left }; + }; - var offsetParent = elem.offsetParent, prevOffsetParent = elem, - doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, - body = doc.body, defaultView = doc.defaultView, +} else { + getOffset = function( elem, doc, docElem ) { + var computedStyle, + offsetParent = elem.offsetParent, + prevOffsetParent = elem, + body = doc.body, + defaultView = doc.defaultView, prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle, - top = elem.offsetTop, left = elem.offsetLeft; + top = elem.offsetTop, + left = elem.offsetLeft; while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { - if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) { + if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) { break; } @@ -5986,15 +9110,16 @@ if ( "getBoundingClientRect" in document.documentElement ) { top += elem.offsetTop; left += elem.offsetLeft; - if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) { + if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) { top += parseFloat( computedStyle.borderTopWidth ) || 0; left += parseFloat( computedStyle.borderLeftWidth ) || 0; } - prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; + prevOffsetParent = offsetParent; + offsetParent = elem.offsetParent; } - if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) { + if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) { top += parseFloat( computedStyle.borderTopWidth ) || 0; left += parseFloat( computedStyle.borderLeftWidth ) || 0; } @@ -6007,7 +9132,7 @@ if ( "getBoundingClientRect" in document.documentElement ) { left += body.offsetLeft; } - if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) { + if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) { top += Math.max( docElem.scrollTop, body.scrollTop ); left += Math.max( docElem.scrollLeft, body.scrollLeft ); } @@ -6016,69 +9141,79 @@ if ( "getBoundingClientRect" in document.documentElement ) { }; } -jQuery.offset = { - initialize: function() { - var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0, - html = "
    "; - - jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } ); - - container.innerHTML = html; - body.insertBefore( container, body.firstChild ); - innerDiv = container.firstChild; - checkDiv = innerDiv.firstChild; - td = innerDiv.nextSibling.firstChild.firstChild; +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } - this.doesNotAddBorder = (checkDiv.offsetTop !== 5); - this.doesAddBorderForTableAndCells = (td.offsetTop === 5); + var elem = this[0], + doc = elem && elem.ownerDocument; - checkDiv.style.position = "fixed", checkDiv.style.top = "20px"; - // safari subtracts parent border width here which is 5px - this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15); - checkDiv.style.position = checkDiv.style.top = ""; + if ( !doc ) { + return null; + } - innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative"; - this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); + if ( elem === doc.body ) { + return jQuery.offset.bodyOffset( elem ); + } - this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop); + return getOffset( elem, doc, doc.documentElement ); +}; - body.removeChild( container ); - body = container = innerDiv = checkDiv = table = td = null; - jQuery.offset.initialize = jQuery.noop; - }, +jQuery.offset = { bodyOffset: function( body ) { - var top = body.offsetTop, left = body.offsetLeft; + var top = body.offsetTop, + left = body.offsetLeft; - jQuery.offset.initialize(); - - if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) { - top += parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0; - left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0; + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; } return { top: top, left: left }; }, - + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + // set position first, in-case top/left are set even on static elem - if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) { + if ( position === "static" ) { elem.style.position = "relative"; } - var curElem = jQuery( elem ), + + var curElem = jQuery( elem ), curOffset = curElem.offset(), - curTop = parseInt( jQuery.curCSS( elem, "top", true ), 10 ) || 0, - curLeft = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0; + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } if ( jQuery.isFunction( options ) ) { options = options.call( elem, i, curOffset ); } - var props = { - top: (options.top - curOffset.top) + curTop, - left: (options.left - curOffset.left) + curLeft - }; - + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + if ( "using" in options ) { options.using.call( elem, props ); } else { @@ -6089,6 +9224,7 @@ jQuery.offset = { jQuery.fn.extend({ + position: function() { if ( !this[0] ) { return null; @@ -6101,17 +9237,17 @@ jQuery.fn.extend({ // Get correct offsets offset = this.offset(), - parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); // Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 - offset.top -= parseFloat( jQuery.curCSS(elem, "marginTop", true) ) || 0; - offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0; + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; // Add offsetParent borders - parentOffset.top += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth", true) ) || 0; - parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0; + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; // Subtract the two offsets return { @@ -6123,7 +9259,7 @@ jQuery.fn.extend({ offsetParent: function() { return this.map(function() { var offsetParent = this.offsetParent || document.body; - while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { offsetParent = offsetParent.offsetParent; } return offsetParent; @@ -6133,108 +9269,136 @@ jQuery.fn.extend({ // Create scrollLeft and scrollTop methods -jQuery.each( ["Left", "Top"], function( i, name ) { - var method = "scroll" + name; - - jQuery.fn[ method ] = function(val) { - var elem = this[0], win; - - if ( !elem ) { - return null; - } +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); - if ( val !== undefined ) { - // Set the scroll offset - return this.each(function() { - win = getWindow( this ); + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); - if ( win ) { - win.scrollTo( - !i ? val : jQuery(win).scrollLeft(), - i ? val : jQuery(win).scrollTop() - ); + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + jQuery.support.boxModel && win.document.documentElement[ method ] || + win.document.body[ method ] : + elem[ method ]; + } - } else { - this[ method ] = val; - } - }); - } else { - win = getWindow( elem ); + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); - // Return the scroll offset - return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] : - jQuery.support.boxModel && win.document.documentElement[ method ] || - win.document.body[ method ] : - elem[ method ]; - } + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); }; }); function getWindow( elem ) { - return ("scrollTo" in elem && elem.document) ? + return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false; } -// Create innerHeight, innerWidth, outerHeight and outerWidth methods -jQuery.each([ "Height", "Width" ], function( i, name ) { - var type = name.toLowerCase(); + + + +// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + var clientProp = "client" + name, + scrollProp = "scroll" + name, + offsetProp = "offset" + name; // innerHeight and innerWidth - jQuery.fn["inner" + name] = function() { - return this[0] ? - jQuery.css( this[0], type, false, "padding" ) : + jQuery.fn[ "inner" + name ] = function() { + var elem = this[0]; + return elem ? + elem.style ? + parseFloat( jQuery.css( elem, type, "padding" ) ) : + this[ type ]() : null; }; // outerHeight and outerWidth - jQuery.fn["outer" + name] = function( margin ) { - return this[0] ? - jQuery.css( this[0], type, false, margin ? "margin" : "border" ) : + jQuery.fn[ "outer" + name ] = function( margin ) { + var elem = this[0]; + return elem ? + elem.style ? + parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) : + this[ type ]() : null; }; - jQuery.fn[ type ] = function( size ) { - // Get window width or height - var elem = this[0]; - if ( !elem ) { - return size == null ? null : this; - } - - if ( jQuery.isFunction( size ) ) { - return this.each(function( i ) { - var self = jQuery( this ); - self[ type ]( size.call( this, i, self[ type ]() ) ); - }); - } + jQuery.fn[ type ] = function( value ) { + return jQuery.access( this, function( elem, type, value ) { + var doc, docElemProp, orig, ret; - return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window? - // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode - elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] || - elem.document.body[ "client" + name ] : + if ( jQuery.isWindow( elem ) ) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[ clientProp ]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[ clientProp ] || docElemProp; + } // Get document width or height - (elem.nodeType === 9) ? // is it a document + if ( elem.nodeType === 9 ) { // Either scroll[Width/Height] or offset[Width/Height], whichever is greater - Math.max( - elem.documentElement["client" + name], - elem.body["scroll" + name], elem.documentElement["scroll" + name], - elem.body["offset" + name], elem.documentElement["offset" + name] - ) : - - // Get or set width or height on the element - size === undefined ? - // Get width or height on the element - jQuery.css( elem, type ) : - - // Set the width or height on the element (default to pixels if value is unitless) - this.css( type, typeof size === "string" ? size : size + "px" ); - }; + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if ( doc[ clientProp ] >= doc[ scrollProp ] ) { + return doc[ clientProp ]; + } + + return Math.max( + elem.body[ scrollProp ], doc[ scrollProp ], + elem.body[ offsetProp ], doc[ offsetProp ] + ); + } + + // Get width or height on the element + if ( value === undefined ) { + orig = jQuery.css( elem, type ); + ret = parseFloat( orig ); + return jQuery.isNumeric( ret ) ? ret : orig; + } + // Set the width or height on the element + jQuery( elem ).css( type, value ); + }, type, value, arguments.length, null ); + }; }); + + + + // Expose jQuery to the global object window.jQuery = window.$ = jQuery; -})(window); +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + + + +})( window ); diff --git a/doc/html/_static/pygments.css b/doc/html/_static/pygments.css index 1f2d2b6..1a14f2a 100644 --- a/doc/html/_static/pygments.css +++ b/doc/html/_static/pygments.css @@ -1,61 +1,62 @@ -.hll { background-color: #ffffcc } -.c { color: #408090; font-style: italic } /* Comment */ -.err { border: 1px solid #FF0000 } /* Error */ -.k { color: #007020; font-weight: bold } /* Keyword */ -.o { color: #666666 } /* Operator */ -.cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.cp { color: #007020 } /* Comment.Preproc */ -.c1 { color: #408090; font-style: italic } /* Comment.Single */ -.cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.gd { color: #A00000 } /* Generic.Deleted */ -.ge { font-style: italic } /* Generic.Emph */ -.gr { color: #FF0000 } /* Generic.Error */ -.gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.gi { color: #00A000 } /* Generic.Inserted */ -.go { color: #303030 } /* Generic.Output */ -.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.gs { font-weight: bold } /* Generic.Strong */ -.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.gt { color: #0040D0 } /* Generic.Traceback */ -.kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.kp { color: #007020 } /* Keyword.Pseudo */ -.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.kt { color: #902000 } /* Keyword.Type */ -.m { color: #208050 } /* Literal.Number */ -.s { color: #4070a0 } /* Literal.String */ -.na { color: #4070a0 } /* Name.Attribute */ -.nb { color: #007020 } /* Name.Builtin */ -.nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.no { color: #60add5 } /* Name.Constant */ -.nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.ne { color: #007020 } /* Name.Exception */ -.nf { color: #06287e } /* Name.Function */ -.nl { color: #002070; font-weight: bold } /* Name.Label */ -.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.nt { color: #062873; font-weight: bold } /* Name.Tag */ -.nv { color: #bb60d5 } /* Name.Variable */ -.ow { color: #007020; font-weight: bold } /* Operator.Word */ -.w { color: #bbbbbb } /* Text.Whitespace */ -.mf { color: #208050 } /* Literal.Number.Float */ -.mh { color: #208050 } /* Literal.Number.Hex */ -.mi { color: #208050 } /* Literal.Number.Integer */ -.mo { color: #208050 } /* Literal.Number.Oct */ -.sb { color: #4070a0 } /* Literal.String.Backtick */ -.sc { color: #4070a0 } /* Literal.String.Char */ -.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.s2 { color: #4070a0 } /* Literal.String.Double */ -.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.sh { color: #4070a0 } /* Literal.String.Heredoc */ -.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.sx { color: #c65d09 } /* Literal.String.Other */ -.sr { color: #235388 } /* Literal.String.Regex */ -.s1 { color: #4070a0 } /* Literal.String.Single */ -.ss { color: #517918 } /* Literal.String.Symbol */ -.bp { color: #007020 } /* Name.Builtin.Pseudo */ -.vc { color: #bb60d5 } /* Name.Variable.Class */ -.vg { color: #bb60d5 } /* Name.Variable.Global */ -.vi { color: #bb60d5 } /* Name.Variable.Instance */ -.il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #303030 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/doc/html/_static/searchtools.js b/doc/html/_static/searchtools.js index f679a75..663be4c 100644 --- a/doc/html/_static/searchtools.js +++ b/doc/html/_static/searchtools.js @@ -1,3 +1,14 @@ +/* + * searchtools.js_t + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for the full-text search. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + /** * helper function to return a node containing the * search summary for a given text. keywords is a list @@ -20,15 +31,16 @@ jQuery.makeSearchSummary = function(text, keywords, hlwords) { ((start + 240 - text.length) ? '...' : ''); var rv = $('
    ').text(excerpt); $.each(hlwords, function() { - rv = rv.highlightText(this, 'highlight'); + rv = rv.highlightText(this, 'highlighted'); }); return rv; } + /** * Porter Stemmer */ -var PorterStemmer = function() { +var Stemmer = function() { var step2list = { ational: 'ate', @@ -226,9 +238,11 @@ var Search = { } }, - /** - * Sets the index - */ + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, success: null, + dataType: "script", cache: true}); + }, + setIndex : function(index) { var q; this._index = index; @@ -287,18 +301,25 @@ var Search = { }, query : function(query) { - // stem the searchterms and add them to the - // correct list - var stemmer = new PorterStemmer(); + var stopwords = ["and","then","into","it","as","are","in","if","for","no","there","their","was","is","be","to","that","but","they","not","such","with","by","a","on","these","of","will","this","near","the","or","at"]; + + // Stem the searchterms and add them to the correct list + var stemmer = new Stemmer(); var searchterms = []; var excluded = []; var hlterms = []; var tmp = query.split(/\s+/); - var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null; + var objectterms = []; for (var i = 0; i < tmp.length; i++) { - // ignore leading/trailing whitespace - if (tmp[i] == "") + if (tmp[i] != "") { + objectterms.push(tmp[i].toLowerCase()); + } + + if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) || + tmp[i] == "") { + // skip this "word" continue; + } // stem the word var word = stemmer.stemWord(tmp[i]).toLowerCase(); // select the correct list @@ -316,50 +337,37 @@ var Search = { }; var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); - console.debug('SEARCH: searching for:'); - console.info('required: ', searchterms); - console.info('excluded: ', excluded); + // console.debug('SEARCH: searching for:'); + // console.info('required: ', searchterms); + // console.info('excluded: ', excluded); // prepare search var filenames = this._index.filenames; var titles = this._index.titles; var terms = this._index.terms; - var descrefs = this._index.descrefs; - var modules = this._index.modules; - var desctypes = this._index.desctypes; var fileMap = {}; var files = null; + // different result priorities + var importantResults = []; var objectResults = []; var regularResults = []; + var unimportantResults = []; $('#search-progress').empty(); // lookup as object - if (object != null) { - for (var module in modules) { - if (module.indexOf(object) > -1) { - fn = modules[module]; - descr = _('module, in ') + titles[fn]; - objectResults.push([filenames[fn], module, '#module-'+module, descr]); - } - } - for (var prefix in descrefs) { - for (var name in descrefs[prefix]) { - var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { - match = descrefs[prefix][name]; - descr = desctypes[match[1]] + _(', in ') + titles[match[0]]; - objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]); - } - } - } + for (var i = 0; i < objectterms.length; i++) { + var others = [].concat(objectterms.slice(0,i), + objectterms.slice(i+1, objectterms.length)) + var results = this.performObjectSearch(objectterms[i], others); + // Assume first word is most likely to be the object, + // other words more likely to be in description. + // Therefore put matches for earlier words first. + // (Results are eventually used in reverse order). + objectResults = results[0].concat(objectResults); + importantResults = results[1].concat(importantResults); + unimportantResults = results[2].concat(unimportantResults); } - // sort results descending - objectResults.sort(function(a, b) { - return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); - }); - - // perform the search on the required terms for (var i = 0; i < searchterms.length; i++) { var word = searchterms[i]; @@ -414,8 +422,9 @@ var Search = { return (left > right) ? -1 : ((left < right) ? 1 : 0); }); - // combine both - var results = regularResults.concat(objectResults); + // combine all results + var results = unimportantResults.concat(regularResults) + .concat(objectResults).concat(importantResults); // print the results var resultCount = results.length; @@ -424,10 +433,23 @@ var Search = { if (results.length) { var item = results.pop(); var listItem = $('
  • '); - listItem.append($('').attr( - 'href', - item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + - highlightstring + item[2]).html(item[1])); + if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') { + // dirhtml builder + var dirname = item[0] + '/'; + if (dirname.match(/\/index\/$/)) { + dirname = dirname.substring(0, dirname.length-6); + } else if (dirname == 'index/') { + dirname = ''; + } + listItem.append($('').attr('href', + DOCUMENTATION_OPTIONS.URL_ROOT + dirname + + highlightstring + item[2]).html(item[1])); + } else { + // normal html builders + listItem.append($('').attr('href', + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + + highlightstring + item[2]).html(item[1])); + } if (item[3]) { listItem.append($(' (' + item[3] + ')')); Search.output.append(listItem); @@ -437,12 +459,14 @@ var Search = { } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { $.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt', function(data) { - listItem.append($.makeSearchSummary(data, searchterms, hlterms)); - Search.output.append(listItem); + if (data != '') { + listItem.append($.makeSearchSummary(data, searchterms, hlterms)); + Search.output.append(listItem); + } listItem.slideDown(5, function() { displayNextItem(); }); - }); + }, "text"); } else { // no source available, just display title Search.output.append(listItem); @@ -463,9 +487,74 @@ var Search = { } } displayNextItem(); + }, + + performObjectSearch : function(object, otherterms) { + var filenames = this._index.filenames; + var objects = this._index.objects; + var objnames = this._index.objnames; + var titles = this._index.titles; + + var importantResults = []; + var objectResults = []; + var unimportantResults = []; + + for (var prefix in objects) { + for (var name in objects[prefix]) { + var fullname = (prefix ? prefix + '.' : '') + name; + if (fullname.toLowerCase().indexOf(object) > -1) { + var match = objects[prefix][name]; + var objname = objnames[match[1]][2]; + var title = titles[match[0]]; + // If more than one term searched for, we require other words to be + // found in the name/title/description + if (otherterms.length > 0) { + var haystack = (prefix + ' ' + name + ' ' + + objname + ' ' + title).toLowerCase(); + var allfound = true; + for (var i = 0; i < otherterms.length; i++) { + if (haystack.indexOf(otherterms[i]) == -1) { + allfound = false; + break; + } + } + if (!allfound) { + continue; + } + } + var descr = objname + _(', in ') + title; + anchor = match[3]; + if (anchor == '') + anchor = fullname; + else if (anchor == '-') + anchor = objnames[match[1]][1] + '-' + fullname; + result = [filenames[match[0]], fullname, '#'+anchor, descr]; + switch (match[2]) { + case 1: objectResults.push(result); break; + case 0: importantResults.push(result); break; + case 2: unimportantResults.push(result); break; + } + } + } + } + + // sort results descending + objectResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + importantResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + unimportantResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + return [importantResults, objectResults, unimportantResults] } } $(document).ready(function() { Search.init(); -}); +}); \ No newline at end of file diff --git a/doc/html/_static/sphinxdoc.css b/doc/html/_static/sphinxdoc.css index 75b2ae0..b680a95 100644 --- a/doc/html/_static/sphinxdoc.css +++ b/doc/html/_static/sphinxdoc.css @@ -1,8 +1,13 @@ -/** - * Sphinx stylesheet -- sphinxdoc theme - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +/* + * sphinxdoc.css_t + * ~~~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- sphinxdoc theme. Originally created by + * Armin Ronacher for Werkzeug. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. * - * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl. */ @import url("basic.css"); @@ -321,3 +326,14 @@ div.versioninfo { line-height: 1.3em; font-size: 0.9em; } + +.viewcode-back { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', + 'Verdana', sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} \ No newline at end of file diff --git a/doc/html/_static/underscore.js b/doc/html/_static/underscore.js new file mode 100644 index 0000000..eaba008 --- /dev/null +++ b/doc/html/_static/underscore.js @@ -0,0 +1,807 @@ +// Underscore.js 1.1.6 +// (c) 2011 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore is freely distributable under the MIT license. +// Portions of Underscore are inspired or borrowed from Prototype, +// Oliver Steele's Functional, and John Resig's Micro-Templating. +// For all details and documentation: +// http://documentcloud.github.com/underscore + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `global` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Establish the object that gets returned to break out of a loop iteration. + var breaker = {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var slice = ArrayProto.slice, + unshift = ArrayProto.unshift, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeForEach = ArrayProto.forEach, + nativeMap = ArrayProto.map, + nativeReduce = ArrayProto.reduce, + nativeReduceRight = ArrayProto.reduceRight, + nativeFilter = ArrayProto.filter, + nativeEvery = ArrayProto.every, + nativeSome = ArrayProto.some, + nativeIndexOf = ArrayProto.indexOf, + nativeLastIndexOf = ArrayProto.lastIndexOf, + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { return new wrapper(obj); }; + + // Export the Underscore object for **CommonJS**, with backwards-compatibility + // for the old `require()` API. If we're not in CommonJS, add `_` to the + // global object. + if (typeof module !== 'undefined' && module.exports) { + module.exports = _; + _._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.1.6'; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles objects implementing `forEach`, arrays, and raw objects. + // Delegates to **ECMAScript 5**'s native `forEach` if available. + var each = _.each = _.forEach = function(obj, iterator, context) { + if (obj == null) return; + if (nativeForEach && obj.forEach === nativeForEach) { + obj.forEach(iterator, context); + } else if (_.isNumber(obj.length)) { + for (var i = 0, l = obj.length; i < l; i++) { + if (iterator.call(context, obj[i], i, obj) === breaker) return; + } + } else { + for (var key in obj) { + if (hasOwnProperty.call(obj, key)) { + if (iterator.call(context, obj[key], key, obj) === breaker) return; + } + } + } + }; + + // Return the results of applying the iterator to each element. + // Delegates to **ECMAScript 5**'s native `map` if available. + _.map = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); + each(obj, function(value, index, list) { + results[results.length] = iterator.call(context, value, index, list); + }); + return results; + }; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. + _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { + var initial = memo !== void 0; + if (obj == null) obj = []; + if (nativeReduce && obj.reduce === nativeReduce) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); + } + each(obj, function(value, index, list) { + if (!initial && index === 0) { + memo = value; + initial = true; + } else { + memo = iterator.call(context, memo, value, index, list); + } + }); + if (!initial) throw new TypeError("Reduce of empty array with no initial value"); + return memo; + }; + + // The right-associative version of reduce, also known as `foldr`. + // Delegates to **ECMAScript 5**'s native `reduceRight` if available. + _.reduceRight = _.foldr = function(obj, iterator, memo, context) { + if (obj == null) obj = []; + if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { + if (context) iterator = _.bind(iterator, context); + return memo !== void 0 ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); + } + var reversed = (_.isArray(obj) ? obj.slice() : _.toArray(obj)).reverse(); + return _.reduce(reversed, iterator, memo, context); + }; + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, iterator, context) { + var result; + any(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) { + result = value; + return true; + } + }); + return result; + }; + + // Return all the elements that pass a truth test. + // Delegates to **ECMAScript 5**'s native `filter` if available. + // Aliased as `select`. + _.filter = _.select = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); + each(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) results[results.length] = value; + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + each(obj, function(value, index, list) { + if (!iterator.call(context, value, index, list)) results[results.length] = value; + }); + return results; + }; + + // Determine whether all of the elements match a truth test. + // Delegates to **ECMAScript 5**'s native `every` if available. + // Aliased as `all`. + _.every = _.all = function(obj, iterator, context) { + var result = true; + if (obj == null) return result; + if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); + each(obj, function(value, index, list) { + if (!(result = result && iterator.call(context, value, index, list))) return breaker; + }); + return result; + }; + + // Determine if at least one element in the object matches a truth test. + // Delegates to **ECMAScript 5**'s native `some` if available. + // Aliased as `any`. + var any = _.some = _.any = function(obj, iterator, context) { + iterator || (iterator = _.identity); + var result = false; + if (obj == null) return result; + if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); + each(obj, function(value, index, list) { + if (result = iterator.call(context, value, index, list)) return breaker; + }); + return result; + }; + + // Determine if a given value is included in the array or object using `===`. + // Aliased as `contains`. + _.include = _.contains = function(obj, target) { + var found = false; + if (obj == null) return found; + if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; + any(obj, function(value) { + if (found = value === target) return true; + }); + return found; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + return _.map(obj, function(value) { + return (method.call ? method || value : value[method]).apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, function(value){ return value[key]; }); + }; + + // Return the maximum element or (element-based computation). + _.max = function(obj, iterator, context) { + if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj); + var result = {computed : -Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed >= result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iterator, context) { + if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj); + var result = {computed : Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed < result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Sort the object's values by a criterion produced by an iterator. + _.sortBy = function(obj, iterator, context) { + return _.pluck(_.map(obj, function(value, index, list) { + return { + value : value, + criteria : iterator.call(context, value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }), 'value'); + }; + + // Use a comparator function to figure out at what index an object should + // be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iterator) { + iterator || (iterator = _.identity); + var low = 0, high = array.length; + while (low < high) { + var mid = (low + high) >> 1; + iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid; + } + return low; + }; + + // Safely convert anything iterable into a real, live array. + _.toArray = function(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + if (_.isArray(iterable)) return iterable; + if (_.isArguments(iterable)) return slice.call(iterable); + return _.values(iterable); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + return _.toArray(obj).length; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head`. The **guard** check allows it to work + // with `_.map`. + _.first = _.head = function(array, n, guard) { + return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; + }; + + // Returns everything but the first entry of the array. Aliased as `tail`. + // Especially useful on the arguments object. Passing an **index** will return + // the rest of the values in the array from that index onward. The **guard** + // check allows it to work with `_.map`. + _.rest = _.tail = function(array, index, guard) { + return slice.call(array, (index == null) || guard ? 1 : index); + }; + + // Get the last element of an array. + _.last = function(array) { + return array[array.length - 1]; + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, function(value){ return !!value; }); + }; + + // Return a completely flattened version of an array. + _.flatten = function(array) { + return _.reduce(array, function(memo, value) { + if (_.isArray(value)) return memo.concat(_.flatten(value)); + memo[memo.length] = value; + return memo; + }, []); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + var values = slice.call(arguments, 1); + return _.filter(array, function(value){ return !_.include(values, value); }); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted) { + return _.reduce(array, function(memo, el, i) { + if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) memo[memo.length] = el; + return memo; + }, []); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersect = function(array) { + var rest = slice.call(arguments, 1); + return _.filter(_.uniq(array), function(item) { + return _.every(rest, function(other) { + return _.indexOf(other, item) >= 0; + }); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + var args = slice.call(arguments); + var length = _.max(_.pluck(args, 'length')); + var results = new Array(length); + for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i); + return results; + }; + + // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), + // we need this function. Return the position of the first occurrence of an + // item in an array, or -1 if the item is not included in the array. + // Delegates to **ECMAScript 5**'s native `indexOf` if available. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = function(array, item, isSorted) { + if (array == null) return -1; + var i, l; + if (isSorted) { + i = _.sortedIndex(array, item); + return array[i] === item ? i : -1; + } + if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item); + for (i = 0, l = array.length; i < l; i++) if (array[i] === item) return i; + return -1; + }; + + + // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. + _.lastIndexOf = function(array, item) { + if (array == null) return -1; + if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item); + var i = array.length; + while (i--) if (array[i] === item) return i; + return -1; + }; + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (arguments.length <= 1) { + stop = start || 0; + start = 0; + } + step = arguments[2] || 1; + + var len = Math.max(Math.ceil((stop - start) / step), 0); + var idx = 0; + var range = new Array(len); + + while(idx < len) { + range[idx++] = start; + start += step; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Binding with arguments is also known as `curry`. + // Delegates to **ECMAScript 5**'s native `Function.bind` if available. + // We check for `func.bind` first, to fail fast when `func` is undefined. + _.bind = function(func, obj) { + if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + var args = slice.call(arguments, 2); + return function() { + return func.apply(obj, args.concat(slice.call(arguments))); + }; + }; + + // Bind all of an object's methods to that object. Useful for ensuring that + // all callbacks defined on an object belong to it. + _.bindAll = function(obj) { + var funcs = slice.call(arguments, 1); + if (funcs.length == 0) funcs = _.functions(obj); + each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memo = {}; + hasher || (hasher = _.identity); + return function() { + var key = hasher.apply(this, arguments); + return hasOwnProperty.call(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); + }; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ return func.apply(func, args); }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = function(func) { + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); + }; + + // Internal function used to implement `_.throttle` and `_.debounce`. + var limit = function(func, wait, debounce) { + var timeout; + return function() { + var context = this, args = arguments; + var throttler = function() { + timeout = null; + func.apply(context, args); + }; + if (debounce) clearTimeout(timeout); + if (debounce || !timeout) timeout = setTimeout(throttler, wait); + }; + }; + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. + _.throttle = function(func, wait) { + return limit(func, wait, false); + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. + _.debounce = function(func, wait) { + return limit(func, wait, true); + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = function(func) { + var ran = false, memo; + return function() { + if (ran) return memo; + ran = true; + return memo = func.apply(this, arguments); + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return function() { + var args = [func].concat(slice.call(arguments)); + return wrapper.apply(this, args); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var funcs = slice.call(arguments); + return function() { + var args = slice.call(arguments); + for (var i=funcs.length-1; i >= 0; i--) { + args = [funcs[i].apply(this, args)]; + } + return args[0]; + }; + }; + + // Returns a function that will only be executed after being called N times. + _.after = function(times, func) { + return function() { + if (--times < 1) { return func.apply(this, arguments); } + }; + }; + + + // Object Functions + // ---------------- + + // Retrieve the names of an object's properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = nativeKeys || function(obj) { + if (obj !== Object(obj)) throw new TypeError('Invalid object'); + var keys = []; + for (var key in obj) if (hasOwnProperty.call(obj, key)) keys[keys.length] = key; + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + return _.map(obj, _.identity); + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + return _.filter(_.keys(obj), function(key){ return _.isFunction(obj[key]); }).sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = function(obj) { + each(slice.call(arguments, 1), function(source) { + for (var prop in source) { + if (source[prop] !== void 0) obj[prop] = source[prop]; + } + }); + return obj; + }; + + // Fill in a given object with default properties. + _.defaults = function(obj) { + each(slice.call(arguments, 1), function(source) { + for (var prop in source) { + if (obj[prop] == null) obj[prop] = source[prop]; + } + }); + return obj; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + // Check object identity. + if (a === b) return true; + // Different types? + var atype = typeof(a), btype = typeof(b); + if (atype != btype) return false; + // Basic equality test (watch out for coercions). + if (a == b) return true; + // One is falsy and the other truthy. + if ((!a && b) || (a && !b)) return false; + // Unwrap any wrapped objects. + if (a._chain) a = a._wrapped; + if (b._chain) b = b._wrapped; + // One of them implements an isEqual()? + if (a.isEqual) return a.isEqual(b); + // Check dates' integer values. + if (_.isDate(a) && _.isDate(b)) return a.getTime() === b.getTime(); + // Both are NaN? + if (_.isNaN(a) && _.isNaN(b)) return false; + // Compare regular expressions. + if (_.isRegExp(a) && _.isRegExp(b)) + return a.source === b.source && + a.global === b.global && + a.ignoreCase === b.ignoreCase && + a.multiline === b.multiline; + // If a is not an object by this point, we can't handle it. + if (atype !== 'object') return false; + // Check for different array lengths before comparing contents. + if (a.length && (a.length !== b.length)) return false; + // Nothing else worked, deep compare the contents. + var aKeys = _.keys(a), bKeys = _.keys(b); + // Different object sizes? + if (aKeys.length != bKeys.length) return false; + // Recursive comparison of contents. + for (var key in a) if (!(key in b) || !_.isEqual(a[key], b[key])) return false; + return true; + }; + + // Is a given array or object empty? + _.isEmpty = function(obj) { + if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; + for (var key in obj) if (hasOwnProperty.call(obj, key)) return false; + return true; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType == 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an arguments object? + _.isArguments = function(obj) { + return !!(obj && hasOwnProperty.call(obj, 'callee')); + }; + + // Is a given value a function? + _.isFunction = function(obj) { + return !!(obj && obj.constructor && obj.call && obj.apply); + }; + + // Is a given value a string? + _.isString = function(obj) { + return !!(obj === '' || (obj && obj.charCodeAt && obj.substr)); + }; + + // Is a given value a number? + _.isNumber = function(obj) { + return !!(obj === 0 || (obj && obj.toExponential && obj.toFixed)); + }; + + // Is the given value `NaN`? `NaN` happens to be the only value in JavaScript + // that does not equal itself. + _.isNaN = function(obj) { + return obj !== obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false; + }; + + // Is a given value a date? + _.isDate = function(obj) { + return !!(obj && obj.getTimezoneOffset && obj.setUTCFullYear); + }; + + // Is the given value a regular expression? + _.isRegExp = function(obj) { + return !!(obj && obj.test && obj.exec && (obj.ignoreCase || obj.ignoreCase === false)); + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iterators. + _.identity = function(value) { + return value; + }; + + // Run a function **n** times. + _.times = function (n, iterator, context) { + for (var i = 0; i < n; i++) iterator.call(context, i); + }; + + // Add your own custom functions to the Underscore object, ensuring that + // they're correctly added to the OOP wrapper as well. + _.mixin = function(obj) { + each(_.functions(obj), function(name){ + addToWrapper(name, _[name] = obj[name]); + }); + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = idCounter++; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(str, data) { + var c = _.templateSettings; + var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' + + 'with(obj||{}){__p.push(\'' + + str.replace(/\\/g, '\\\\') + .replace(/'/g, "\\'") + .replace(c.interpolate, function(match, code) { + return "'," + code.replace(/\\'/g, "'") + ",'"; + }) + .replace(c.evaluate || null, function(match, code) { + return "');" + code.replace(/\\'/g, "'") + .replace(/[\r\n\t]/g, ' ') + "__p.push('"; + }) + .replace(/\r/g, '\\r') + .replace(/\n/g, '\\n') + .replace(/\t/g, '\\t') + + "');}return __p.join('');"; + var func = new Function('obj', tmpl); + return data ? func(data) : func; + }; + + // The OOP Wrapper + // --------------- + + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + var wrapper = function(obj) { this._wrapped = obj; }; + + // Expose `wrapper.prototype` as `_.prototype` + _.prototype = wrapper.prototype; + + // Helper function to continue chaining intermediate results. + var result = function(obj, chain) { + return chain ? _(obj).chain() : obj; + }; + + // A method to easily add functions to the OOP wrapper. + var addToWrapper = function(name, func) { + wrapper.prototype[name] = function() { + var args = slice.call(arguments); + unshift.call(args, this._wrapped); + return result(func.apply(_, args), this._chain); + }; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + wrapper.prototype[name] = function() { + method.apply(this._wrapped, arguments); + return result(this._wrapped, this._chain); + }; + }); + + // Add all accessor Array functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + wrapper.prototype[name] = function() { + return result(method.apply(this._wrapped, arguments), this._chain); + }; + }); + + // Start chaining a wrapped Underscore object. + wrapper.prototype.chain = function() { + this._chain = true; + return this; + }; + + // Extracts the result from a wrapped and chained object. + wrapper.prototype.value = function() { + return this._wrapped; + }; + +})(); diff --git a/doc/html/_static/up-pressed.png b/doc/html/_static/up-pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..8bd587afee2fe38989383ff82010147ea56b93dd GIT binary patch literal 372 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*yM+OLB!qm#z$3ZNi+iKnkC`z>}Z1|5lxjZvvUp)Z~;jv*GO&raT- z#pEb(tbY1#Ey4dH;Y+=wAPPMA->(Ug=YM6W%tgKtA zI`O=0Laf#Y-Y4f~`^K_)D_mvj{B=4?=t!I41ZLNlI~j_4kE*^nvF$)|>mH^X%(>6c z8XimFvvIAOoRJf!>6jzIa5w(S%7lxdZ{*qJxhxpj6S#UB!oTuMX^Z^6%)IfT_v-!3 z=PEaM_iSh6_`s$!$NaEMP6gw}xaYa3wv(2tRq1T=+jv*GO&raUx z$K)u`w*Tuor>1}ySNCesuPuG-8#b%jw0sn-5fpk^!623V@1GR6+<`78?&Rhov&jx6 z*R7KttIVGJ=8yH~|HhI(uB&NIpYp$LXT}M`Z)D=?%dxpN#UiKM#HZsJK4DUm#Y3a5!dMF634rTxz_l%hvABb z(=Pc<$5*Xj@eE$@$89c0_oa>Y5;`&;INvn7C-9xQbH92`*_(~*lcvS}m5Z2pGdgKc z>;tJC%=6B^QS*>ubT+QGD)v`9z&&Y`y-xHu*7vDC$|9@xfdY)d)78&qol`;+01iQm A<^TWy literal 0 HcmV?d00001 diff --git a/doc/html/_static/websupport.js b/doc/html/_static/websupport.js new file mode 100644 index 0000000..e9bd1b8 --- /dev/null +++ b/doc/html/_static/websupport.js @@ -0,0 +1,808 @@ +/* + * websupport.js + * ~~~~~~~~~~~~~ + * + * sphinx.websupport utilties for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +(function($) { + $.fn.autogrow = function() { + return this.each(function() { + var textarea = this; + + $.fn.autogrow.resize(textarea); + + $(textarea) + .focus(function() { + textarea.interval = setInterval(function() { + $.fn.autogrow.resize(textarea); + }, 500); + }) + .blur(function() { + clearInterval(textarea.interval); + }); + }); + }; + + $.fn.autogrow.resize = function(textarea) { + var lineHeight = parseInt($(textarea).css('line-height'), 10); + var lines = textarea.value.split('\n'); + var columns = textarea.cols; + var lineCount = 0; + $.each(lines, function() { + lineCount += Math.ceil(this.length / columns) || 1; + }); + var height = lineHeight * (lineCount + 1); + $(textarea).css('height', height); + }; +})(jQuery); + +(function($) { + var comp, by; + + function init() { + initEvents(); + initComparator(); + } + + function initEvents() { + $('a.comment-close').live("click", function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }); + $('a.vote').live("click", function(event) { + event.preventDefault(); + handleVote($(this)); + }); + $('a.reply').live("click", function(event) { + event.preventDefault(); + openReply($(this).attr('id').substring(2)); + }); + $('a.close-reply').live("click", function(event) { + event.preventDefault(); + closeReply($(this).attr('id').substring(2)); + }); + $('a.sort-option').live("click", function(event) { + event.preventDefault(); + handleReSort($(this)); + }); + $('a.show-proposal').live("click", function(event) { + event.preventDefault(); + showProposal($(this).attr('id').substring(2)); + }); + $('a.hide-proposal').live("click", function(event) { + event.preventDefault(); + hideProposal($(this).attr('id').substring(2)); + }); + $('a.show-propose-change').live("click", function(event) { + event.preventDefault(); + showProposeChange($(this).attr('id').substring(2)); + }); + $('a.hide-propose-change').live("click", function(event) { + event.preventDefault(); + hideProposeChange($(this).attr('id').substring(2)); + }); + $('a.accept-comment').live("click", function(event) { + event.preventDefault(); + acceptComment($(this).attr('id').substring(2)); + }); + $('a.delete-comment').live("click", function(event) { + event.preventDefault(); + deleteComment($(this).attr('id').substring(2)); + }); + $('a.comment-markup').live("click", function(event) { + event.preventDefault(); + toggleCommentMarkupBox($(this).attr('id').substring(2)); + }); + } + + /** + * Set comp, which is a comparator function used for sorting and + * inserting comments into the list. + */ + function setComparator() { + // If the first three letters are "asc", sort in ascending order + // and remove the prefix. + if (by.substring(0,3) == 'asc') { + var i = by.substring(3); + comp = function(a, b) { return a[i] - b[i]; }; + } else { + // Otherwise sort in descending order. + comp = function(a, b) { return b[by] - a[by]; }; + } + + // Reset link styles and format the selected sort option. + $('a.sel').attr('href', '#').removeClass('sel'); + $('a.by' + by).removeAttr('href').addClass('sel'); + } + + /** + * Create a comp function. If the user has preferences stored in + * the sortBy cookie, use those, otherwise use the default. + */ + function initComparator() { + by = 'rating'; // Default to sort by rating. + // If the sortBy cookie is set, use that instead. + if (document.cookie.length > 0) { + var start = document.cookie.indexOf('sortBy='); + if (start != -1) { + start = start + 7; + var end = document.cookie.indexOf(";", start); + if (end == -1) { + end = document.cookie.length; + by = unescape(document.cookie.substring(start, end)); + } + } + } + setComparator(); + } + + /** + * Show a comment div. + */ + function show(id) { + $('#ao' + id).hide(); + $('#ah' + id).show(); + var context = $.extend({id: id}, opts); + var popup = $(renderTemplate(popupTemplate, context)).hide(); + popup.find('textarea[name="proposal"]').hide(); + popup.find('a.by' + by).addClass('sel'); + var form = popup.find('#cf' + id); + form.submit(function(event) { + event.preventDefault(); + addComment(form); + }); + $('#s' + id).after(popup); + popup.slideDown('fast', function() { + getComments(id); + }); + } + + /** + * Hide a comment div. + */ + function hide(id) { + $('#ah' + id).hide(); + $('#ao' + id).show(); + var div = $('#sc' + id); + div.slideUp('fast', function() { + div.remove(); + }); + } + + /** + * Perform an ajax request to get comments for a node + * and insert the comments into the comments tree. + */ + function getComments(id) { + $.ajax({ + type: 'GET', + url: opts.getCommentsURL, + data: {node: id}, + success: function(data, textStatus, request) { + var ul = $('#cl' + id); + var speed = 100; + $('#cf' + id) + .find('textarea[name="proposal"]') + .data('source', data.source); + + if (data.comments.length === 0) { + ul.html('
  • No comments yet.
  • '); + ul.data('empty', true); + } else { + // If there are comments, sort them and put them in the list. + var comments = sortComments(data.comments); + speed = data.comments.length * 100; + appendComments(comments, ul); + ul.data('empty', false); + } + $('#cn' + id).slideUp(speed + 200); + ul.slideDown(speed); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem retrieving the comments.'); + }, + dataType: 'json' + }); + } + + /** + * Add a comment via ajax and insert the comment into the comment tree. + */ + function addComment(form) { + var node_id = form.find('input[name="node"]').val(); + var parent_id = form.find('input[name="parent"]').val(); + var text = form.find('textarea[name="comment"]').val(); + var proposal = form.find('textarea[name="proposal"]').val(); + + if (text == '') { + showError('Please enter a comment.'); + return; + } + + // Disable the form that is being submitted. + form.find('textarea,input').attr('disabled', 'disabled'); + + // Send the comment to the server. + $.ajax({ + type: "POST", + url: opts.addCommentURL, + dataType: 'json', + data: { + node: node_id, + parent: parent_id, + text: text, + proposal: proposal + }, + success: function(data, textStatus, error) { + // Reset the form. + if (node_id) { + hideProposeChange(node_id); + } + form.find('textarea') + .val('') + .add(form.find('input')) + .removeAttr('disabled'); + var ul = $('#cl' + (node_id || parent_id)); + if (ul.data('empty')) { + $(ul).empty(); + ul.data('empty', false); + } + insertComment(data.comment); + var ao = $('#ao' + node_id); + ao.find('img').attr({'src': opts.commentBrightImage}); + if (node_id) { + // if this was a "root" comment, remove the commenting box + // (the user can get it back by reopening the comment popup) + $('#ca' + node_id).slideUp(); + } + }, + error: function(request, textStatus, error) { + form.find('textarea,input').removeAttr('disabled'); + showError('Oops, there was a problem adding the comment.'); + } + }); + } + + /** + * Recursively append comments to the main comment list and children + * lists, creating the comment tree. + */ + function appendComments(comments, ul) { + $.each(comments, function() { + var div = createCommentDiv(this); + ul.append($(document.createElement('li')).html(div)); + appendComments(this.children, div.find('ul.comment-children')); + // To avoid stagnating data, don't store the comments children in data. + this.children = null; + div.data('comment', this); + }); + } + + /** + * After adding a new comment, it must be inserted in the correct + * location in the comment tree. + */ + function insertComment(comment) { + var div = createCommentDiv(comment); + + // To avoid stagnating data, don't store the comments children in data. + comment.children = null; + div.data('comment', comment); + + var ul = $('#cl' + (comment.node || comment.parent)); + var siblings = getChildren(ul); + + var li = $(document.createElement('li')); + li.hide(); + + // Determine where in the parents children list to insert this comment. + for(i=0; i < siblings.length; i++) { + if (comp(comment, siblings[i]) <= 0) { + $('#cd' + siblings[i].id) + .parent() + .before(li.html(div)); + li.slideDown('fast'); + return; + } + } + + // If we get here, this comment rates lower than all the others, + // or it is the only comment in the list. + ul.append(li.html(div)); + li.slideDown('fast'); + } + + function acceptComment(id) { + $.ajax({ + type: 'POST', + url: opts.acceptCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + $('#cm' + id).fadeOut('fast'); + $('#cd' + id).removeClass('moderate'); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem accepting the comment.'); + } + }); + } + + function deleteComment(id) { + $.ajax({ + type: 'POST', + url: opts.deleteCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + var div = $('#cd' + id); + if (data == 'delete') { + // Moderator mode: remove the comment and all children immediately + div.slideUp('fast', function() { + div.remove(); + }); + return; + } + // User mode: only mark the comment as deleted + div + .find('span.user-id:first') + .text('[deleted]').end() + .find('div.comment-text:first') + .text('[deleted]').end() + .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + + ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) + .remove(); + var comment = div.data('comment'); + comment.username = '[deleted]'; + comment.text = '[deleted]'; + div.data('comment', comment); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem deleting the comment.'); + } + }); + } + + function showProposal(id) { + $('#sp' + id).hide(); + $('#hp' + id).show(); + $('#pr' + id).slideDown('fast'); + } + + function hideProposal(id) { + $('#hp' + id).hide(); + $('#sp' + id).show(); + $('#pr' + id).slideUp('fast'); + } + + function showProposeChange(id) { + $('#pc' + id).hide(); + $('#hc' + id).show(); + var textarea = $('#pt' + id); + textarea.val(textarea.data('source')); + $.fn.autogrow.resize(textarea[0]); + textarea.slideDown('fast'); + } + + function hideProposeChange(id) { + $('#hc' + id).hide(); + $('#pc' + id).show(); + var textarea = $('#pt' + id); + textarea.val('').removeAttr('disabled'); + textarea.slideUp('fast'); + } + + function toggleCommentMarkupBox(id) { + $('#mb' + id).toggle(); + } + + /** Handle when the user clicks on a sort by link. */ + function handleReSort(link) { + var classes = link.attr('class').split(/\s+/); + for (var i=0; iThank you! Your comment will show up ' + + 'once it is has been approved by a moderator.'); + } + // Prettify the comment rating. + comment.pretty_rating = comment.rating + ' point' + + (comment.rating == 1 ? '' : 's'); + // Make a class (for displaying not yet moderated comments differently) + comment.css_class = comment.displayed ? '' : ' moderate'; + // Create a div for this comment. + var context = $.extend({}, opts, comment); + var div = $(renderTemplate(commentTemplate, context)); + + // If the user has voted on this comment, highlight the correct arrow. + if (comment.vote) { + var direction = (comment.vote == 1) ? 'u' : 'd'; + div.find('#' + direction + 'v' + comment.id).hide(); + div.find('#' + direction + 'u' + comment.id).show(); + } + + if (opts.moderator || comment.text != '[deleted]') { + div.find('a.reply').show(); + if (comment.proposal_diff) + div.find('#sp' + comment.id).show(); + if (opts.moderator && !comment.displayed) + div.find('#cm' + comment.id).show(); + if (opts.moderator || (opts.username == comment.username)) + div.find('#dc' + comment.id).show(); + } + return div; + } + + /** + * A simple template renderer. Placeholders such as <%id%> are replaced + * by context['id'] with items being escaped. Placeholders such as <#id#> + * are not escaped. + */ + function renderTemplate(template, context) { + var esc = $(document.createElement('div')); + + function handle(ph, escape) { + var cur = context; + $.each(ph.split('.'), function() { + cur = cur[this]; + }); + return escape ? esc.text(cur || "").html() : cur; + } + + return template.replace(/<([%#])([\w\.]*)\1>/g, function() { + return handle(arguments[2], arguments[1] == '%' ? true : false); + }); + } + + /** Flash an error message briefly. */ + function showError(message) { + $(document.createElement('div')).attr({'class': 'popup-error'}) + .append($(document.createElement('div')) + .attr({'class': 'error-message'}).text(message)) + .appendTo('body') + .fadeIn("slow") + .delay(2000) + .fadeOut("slow"); + } + + /** Add a link the user uses to open the comments popup. */ + $.fn.comment = function() { + return this.each(function() { + var id = $(this).attr('id').substring(1); + var count = COMMENT_METADATA[id]; + var title = count + ' comment' + (count == 1 ? '' : 's'); + var image = count > 0 ? opts.commentBrightImage : opts.commentImage; + var addcls = count == 0 ? ' nocomment' : ''; + $(this) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-open' + addcls, + id: 'ao' + id + }) + .append($(document.createElement('img')).attr({ + src: image, + alt: 'comment', + title: title + })) + .click(function(event) { + event.preventDefault(); + show($(this).attr('id').substring(2)); + }) + ) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-close hidden', + id: 'ah' + id + }) + .append($(document.createElement('img')).attr({ + src: opts.closeCommentImage, + alt: 'close', + title: 'close' + })) + .click(function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }) + ); + }); + }; + + var opts = { + processVoteURL: '/_process_vote', + addCommentURL: '/_add_comment', + getCommentsURL: '/_get_comments', + acceptCommentURL: '/_accept_comment', + deleteCommentURL: '/_delete_comment', + commentImage: '/static/_static/comment.png', + closeCommentImage: '/static/_static/comment-close.png', + loadingImage: '/static/_static/ajax-loader.gif', + commentBrightImage: '/static/_static/comment-bright.png', + upArrow: '/static/_static/up.png', + downArrow: '/static/_static/down.png', + upArrowPressed: '/static/_static/up-pressed.png', + downArrowPressed: '/static/_static/down-pressed.png', + voting: false, + moderator: false + }; + + if (typeof COMMENT_OPTIONS != "undefined") { + opts = jQuery.extend(opts, COMMENT_OPTIONS); + } + + var popupTemplate = '\ +
    \ +

    \ + Sort by:\ + best rated\ + newest\ + oldest\ +

    \ +
    Comments
    \ +
    \ + loading comments...
    \ +
      \ +
      \ +

      Add a comment\ + (markup):

      \ +
      \ + reStructured text markup: *emph*, **strong**, \ + ``code``, \ + code blocks: :: and an indented block after blank line
      \ +
      \ + \ +

      \ + \ + Propose a change ▹\ + \ + \ + Propose a change ▿\ + \ +

      \ + \ + \ + \ + \ +
      \ +
      \ +
      '; + + var commentTemplate = '\ +
      \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ +
      \ +
      \ + \ + \ + \ + \ + \ + \ +
      \ +
      \ +
      \ +

      \ + <%username%>\ + <%pretty_rating%>\ + <%time.delta%>\ +

      \ +
      <#text#>
      \ +

      \ + \ + reply ▿\ + proposal ▹\ + proposal ▿\ + \ + \ +

      \ +
      \
      +<#proposal_diff#>\
      +        
      \ +
        \ +
        \ +
        \ +
        \ + '; + + var replyTemplate = '\ +
      • \ +
        \ +
        \ + \ + \ + \ + \ + \ +
        \ +
        \ +
      • '; + + $(document).ready(function() { + init(); + }); +})(jQuery); + +$(document).ready(function() { + // add comment anchors for all paragraphs that are commentable + $('.sphinx-has-comment').comment(); + + // highlight search words in search results + $("div.context").each(function() { + var params = $.getQueryParameters(); + var terms = (params.q) ? params.q[0].split(/\s+/) : []; + var result = $(this); + $.each(terms, function() { + result.highlightText(this.toLowerCase(), 'highlighted'); + }); + }); + + // directly open comment window if requested + var anchor = document.location.hash; + if (anchor.substring(0, 9) == '#comment-') { + $('#ao' + anchor.substring(9)).click(); + document.location.hash = '#s' + anchor.substring(9); + } +}); diff --git a/doc/html/boolean.html b/doc/html/boolean.html index 1ac94b7..cf46b4c 100644 --- a/doc/html/boolean.html +++ b/doc/html/boolean.html @@ -1,25 +1,31 @@ + + + - Boolean Operations — ccad v0.12 documentation + Boolean Operations — ccad 0.13 documentation + + + - + @@ -37,48 +43,48 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -161,7 +167,7 @@

        Notes the API.

        Sometimes OCC has trouble with booleans. I found the following helpful:

        -
        + @@ -197,13 +203,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/configuring_display.html b/doc/html/configuring_display.html index 7e7ff16..589df3f 100644 --- a/doc/html/configuring_display.html +++ b/doc/html/configuring_display.html @@ -1,25 +1,31 @@ + + + - Configuring Display — ccad v0.12 documentation + Configuring Display — ccad 0.13 documentation + + + - + @@ -37,45 +43,45 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • -

        Table Of Contents

        -
        @@ -133,13 +139,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • \ No newline at end of file diff --git a/doc/html/contents.html b/doc/html/contents.html index 3bbe502..65e8359 100644 --- a/doc/html/contents.html +++ b/doc/html/contents.html @@ -1,25 +1,31 @@ + + + - Contents — ccad v0.12 documentation + Contents — ccad 0.13 documentation + + + - + @@ -32,32 +38,32 @@

        Navigation

      • next |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Next topic

        -

        Introduction

        -

        This Page

        - - - +

        Next topic

        +

        Introduction

        +

        This Page

        + + +
        @@ -68,48 +74,50 @@

        Quick search

        @@ -127,12 +135,12 @@

        Navigation

      • next |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/controlling_display.html b/doc/html/controlling_display.html index 112236e..55b31ad 100644 --- a/doc/html/controlling_display.html +++ b/doc/html/controlling_display.html @@ -1,25 +1,31 @@ + + + - Controlling Display — ccad v0.12 documentation + Controlling Display — ccad 0.13 documentation + + + - + @@ -37,59 +43,59 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • -

        Table Of Contents

        -
        @@ -225,13 +231,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • \ No newline at end of file diff --git a/doc/html/creating_derived.html b/doc/html/creating_derived.html index 6249ba1..eec531d 100644 --- a/doc/html/creating_derived.html +++ b/doc/html/creating_derived.html @@ -1,25 +1,31 @@ + + + - Creating Derived Shapes — ccad v0.12 documentation + Creating Derived Shapes — ccad 0.13 documentation + + + - + @@ -37,50 +43,50 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -232,13 +238,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/creating_edges.html b/doc/html/creating_edges.html index 22278bd..b6ce567 100644 --- a/doc/html/creating_edges.html +++ b/doc/html/creating_edges.html @@ -1,25 +1,31 @@ + + + - Creating Edges — ccad v0.12 documentation + Creating Edges — ccad 0.13 documentation + + + - + @@ -37,50 +43,50 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -189,13 +195,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/creating_faces.html b/doc/html/creating_faces.html index eee723c..97a6cf1 100644 --- a/doc/html/creating_faces.html +++ b/doc/html/creating_faces.html @@ -1,25 +1,31 @@ + + + - Creating Faces — ccad v0.12 documentation + Creating Faces — ccad 0.13 documentation + + + - + @@ -37,46 +43,46 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -152,13 +158,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/creating_solids.html b/doc/html/creating_solids.html index fb0736f..2f256ca 100644 --- a/doc/html/creating_solids.html +++ b/doc/html/creating_solids.html @@ -1,25 +1,31 @@ + + + - Creating Solids — ccad v0.12 documentation + Creating Solids — ccad 0.13 documentation + + + - + @@ -37,50 +43,50 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -175,13 +181,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/creating_wires.html b/doc/html/creating_wires.html index 85ed7f6..d63d788 100644 --- a/doc/html/creating_wires.html +++ b/doc/html/creating_wires.html @@ -1,25 +1,31 @@ + + + - Creating Wires — ccad v0.12 documentation + Creating Wires — ccad 0.13 documentation + + + - + @@ -37,48 +43,48 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -170,13 +176,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/details.html b/doc/html/details.html index edf976f..4144aa5 100644 --- a/doc/html/details.html +++ b/doc/html/details.html @@ -1,25 +1,31 @@ + + + - Details — ccad v0.12 documentation + Details — ccad 0.13 documentation + + + - + @@ -36,53 +42,53 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Table Of Contents

        -
        @@ -198,12 +204,12 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/displaying.html b/doc/html/displaying.html index 4ae5f00..493a49a 100644 --- a/doc/html/displaying.html +++ b/doc/html/displaying.html @@ -1,25 +1,31 @@ + + + - Displaying — ccad v0.12 documentation + Displaying — ccad 0.13 documentation + + + - + @@ -36,35 +42,35 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Previous topic

        -

        File Transfer

        -

        Next topic

        -

        Stand-Alone Viewing

        -

        This Page

        - - - +

        Previous topic

        +

        File Transfer

        +

        Next topic

        +

        Stand-Alone Viewing

        +

        This Page

        + + +
        @@ -77,49 +83,51 @@

        Quick search

        Displaying

        You have your model in text. Now you want to see it. The ccad viewer can be run stand-alone or interactively.

        + @@ -140,12 +148,12 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/example1.html b/doc/html/example1.html index b83c52a..918769a 100644 --- a/doc/html/example1.html +++ b/doc/html/example1.html @@ -1,25 +1,31 @@ + + + - Example - Building Toy — ccad v0.12 documentation + Example - Building Toy — ccad 0.13 documentation + + + - + @@ -36,35 +42,35 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Previous topic

        -

        Configuring Display

        -

        Next topic

        -

        A Single Brick

        -

        This Page

        - - - +

        Previous topic

        +

        Configuring Display

        +

        Next topic

        +

        A Single Brick

        +

        This Page

        + + +
        @@ -93,17 +99,19 @@

        Example - Building Toy + @@ -124,12 +132,12 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/example1_brickpy.html b/doc/html/example1_brickpy.html index fbdb994..d22df53 100644 --- a/doc/html/example1_brickpy.html +++ b/doc/html/example1_brickpy.html @@ -1,25 +1,31 @@ + + + - brick.py — ccad v0.12 documentation + brick.py — ccad 0.13 documentation + + + - + @@ -37,36 +43,36 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • -

        Previous topic

        -

        A Single Brick

        -

        Next topic

        -

        Multiple Bricks

        -

        This Page

        - - - +

        Previous topic

        +

        A Single Brick

        +

        Next topic

        +

        Multiple Bricks

        +

        This Page

        + + +
        @@ -190,13 +196,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • \ No newline at end of file diff --git a/doc/html/example1_drawings.html b/doc/html/example1_drawings.html index 82811cc..ef0aed0 100644 --- a/doc/html/example1_drawings.html +++ b/doc/html/example1_drawings.html @@ -1,25 +1,31 @@ + + + - Drawings — ccad v0.12 documentation + Drawings — ccad 0.13 documentation + + + - + @@ -37,45 +43,45 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • -

        Table Of Contents

        -
        @@ -187,13 +193,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • \ No newline at end of file diff --git a/doc/html/example1_multibrick.html b/doc/html/example1_multibrick.html index d9ac7c2..eb6c482 100644 --- a/doc/html/example1_multibrick.html +++ b/doc/html/example1_multibrick.html @@ -1,25 +1,31 @@ + + + - Multiple Bricks — ccad v0.12 documentation + Multiple Bricks — ccad 0.13 documentation + + + - + @@ -37,36 +43,36 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • -

        Previous topic

        -

        brick.py

        -

        Next topic

        -

        Drawings

        -

        This Page

        - - - +

        Previous topic

        +

        brick.py

        +

        Next topic

        +

        Drawings

        +

        This Page

        + + +
        @@ -139,13 +145,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • \ No newline at end of file diff --git a/doc/html/example1_nuances.html b/doc/html/example1_nuances.html index d7b8b5a..2c9fb7b 100644 --- a/doc/html/example1_nuances.html +++ b/doc/html/example1_nuances.html @@ -1,25 +1,31 @@ + + + - Nuances — ccad v0.12 documentation + Nuances — ccad 0.13 documentation + + + - + @@ -33,33 +39,33 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • -

        Previous topic

        -

        Drawings

        -

        This Page

        - - - +

        Previous topic

        +

        Drawings

        +

        This Page

        + + +
        @@ -93,13 +99,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • \ No newline at end of file diff --git a/doc/html/example1_singlebrick.html b/doc/html/example1_singlebrick.html index aa8cd12..1fd8ddc 100644 --- a/doc/html/example1_singlebrick.html +++ b/doc/html/example1_singlebrick.html @@ -1,25 +1,31 @@ + + + - A Single Brick — ccad v0.12 documentation + A Single Brick — ccad 0.13 documentation + + + - + @@ -37,36 +43,36 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • -

        Previous topic

        -

        Example - Building Toy

        -

        Next topic

        -

        brick.py

        -

        This Page

        - - - +

        Previous topic

        +

        Example - Building Toy

        +

        Next topic

        +

        brick.py

        +

        This Page

        + + +
        @@ -307,13 +313,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Example - Building Toy »
      • \ No newline at end of file diff --git a/doc/html/file_transfer.html b/doc/html/file_transfer.html index 3bbff45..cc6d60d 100644 --- a/doc/html/file_transfer.html +++ b/doc/html/file_transfer.html @@ -1,25 +1,31 @@ + + + - File Transfer — ccad v0.12 documentation + File Transfer — ccad 0.13 documentation + + + - + @@ -37,49 +43,49 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -190,13 +196,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/genindex.html b/doc/html/genindex.html index 7fe3239..104428d 100644 --- a/doc/html/genindex.html +++ b/doc/html/genindex.html @@ -1,25 +1,33 @@ + + + + + - Index — ccad v0.12 documentation + Index — ccad 0.13 documentation + + + - +
        @@ -36,19 +44,19 @@

        Navigation

        - - + +
        @@ -58,13 +66,11 @@

        Quick search

        -

        Index

        - - - -
        +

        Index

        - +
        + +
        @@ -78,12 +84,12 @@

        Navigation

      • index
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/interactive.html b/doc/html/interactive.html index fe5d453..95e8e30 100644 --- a/doc/html/interactive.html +++ b/doc/html/interactive.html @@ -1,25 +1,31 @@ + + + - Interactive Viewing — ccad v0.12 documentation + Interactive Viewing — ccad 0.13 documentation + + + - + @@ -37,44 +43,44 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • -

        Table Of Contents

        -
        @@ -146,13 +152,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • \ No newline at end of file diff --git a/doc/html/intro.html b/doc/html/intro.html index 0ca8e93..b063274 100644 --- a/doc/html/intro.html +++ b/doc/html/intro.html @@ -1,25 +1,31 @@ + + + - Introduction — ccad v0.12 documentation + Introduction — ccad 0.13 documentation + + + - + @@ -36,43 +42,43 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Table Of Contents

        -
        @@ -130,12 +136,12 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/logging.html b/doc/html/logging.html index fee2bbd..e3485f3 100644 --- a/doc/html/logging.html +++ b/doc/html/logging.html @@ -1,25 +1,31 @@ + + + - Gathering Information and Miscellaneous Methods — ccad v0.12 documentation + Gathering Information and Miscellaneous Methods — ccad 0.13 documentation + + + - + @@ -37,88 +43,88 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -424,7 +430,7 @@

        fillet

        Filleting can be buggy. I found the following things helped improve success rate:

        -
        +

        chamfer

        @@ -527,13 +533,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/modelling.html b/doc/html/modelling.html index 90a01ac..ab055bb 100644 --- a/doc/html/modelling.html +++ b/doc/html/modelling.html @@ -1,25 +1,31 @@ + + + - Modelling — ccad v0.12 documentation + Modelling — ccad 0.13 documentation + + + - + @@ -36,35 +42,35 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • -

        Previous topic

        -

        Details

        -

        Next topic

        -

        Creating Edges

        -

        This Page

        - - - +

        Previous topic

        +

        Details

        +

        Next topic

        +

        Creating Edges

        +

        This Page

        + + +
        @@ -99,7 +105,7 @@

        Modelling

        Put in a hierarchy, it looks like this

        -
        +
        solid
        shell
        @@ -119,92 +125,94 @@

        Modellingwire much. I use the others rarely. Usually, I’m calling a higher level function, like sphere, that instantiates a solid, or arc, that instantiates an edge.

        +

        @@ -225,12 +233,12 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • \ No newline at end of file diff --git a/doc/html/objects.inv b/doc/html/objects.inv index df8db279637667e77676d8a001e33f95370e5b35..37610e796e3a93fafd3a2759c4fab6e5c3638d77 100644 GIT binary patch delta 154 zcmV;L0A>F@$pMfX0Wy&sAAd6nBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?T zV{dJ6a%FRKWn>_Ab7^j8AbM^@86NyUKL7v# delta 13 UcmX@fXgfig(Qu-SJd+U@02#po?*IS* diff --git a/doc/html/search.html b/doc/html/search.html index 76341af..c33c20d 100644 --- a/doc/html/search.html +++ b/doc/html/search.html @@ -1,26 +1,37 @@ + + + - Search — ccad v0.12 documentation + Search — ccad 0.13 documentation + + + - + + + +
        @@ -77,15 +88,12 @@

        Navigation

      • index
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • - - - \ No newline at end of file diff --git a/doc/html/searchindex.js b/doc/html/searchindex.js index e2d819b..e4cad1d 100644 --- a/doc/html/searchindex.js +++ b/doc/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({desctypes:{},terms:{represent:15,all:[0,20,2,15,5,12,18,14],code:[0,2,5,7,12,18,13],edg:[10,20,23,2,3,4,22,11,7,15,8,9],queri:20,lack:12,prefix:12,ellips:[10,20,15],higher:[2,15],abil:12,follow:[19,0,20,23,3,5,22,11,17,12,18,10,16,21,6,14],mill:2,consider:14,whose:[2,20],brepprimapi_spher:12,depend:11,system:[13,12,9],fancier:19,intermedi:[10,19],pulldown:19,program:[3,13,12,21,5],becam:1,under:19,larg:20,wavi:17,everi:[2,13,20],string:19,fals:3,mous:[4,24],graphic:5,mechan:[6,12],veri:[17,4],all_brick:13,mirroredx:0,pt2:10,pt1:10,tri:12,subtoler:20,level:[19,15],did:12,gui:[13,5],list:[20,2,5,22,11,14],iter:[3,20],"try":[13,4,24],item:[19,11,13],vector:[0,3],math:[10,0,20,2,3,22,11,7,12],polylin:20,round:[2,11,7],pleas:[3,18],upper:20,endmil:2,direct:[16,0,11,21],annot:3,zero:2,cost:12,design:[14,13,6,12,5],viewtyp:21,pass:[19,0,20,2,3,4,22,6,7,10,11,14],"0001000025000002e":20,further:12,"4x2":3,append:[2,0,7,20],blue:0,index:[20,4],what:[2,6,20,11],appear:[1,6,24,5],neg:11,section:[23,20],fillet:[1,20,23,2,3,4,16,7],current:[3,11],version:[19,0,11,12],intersect:11,"new":[0,11,20,13],blender:4,method:[19,0,20,2,15,21,23,14,9],contrast:13,wall_offset:[2,7],elimin:[23,20],themselv:20,deriv:[23,11,15,9],nuanc:[1,14,9,18],gener:[13,3,11,12,18],here:2,satisfi:7,to_fillet:[2,7],let:[6,20,12],ver:12,along:11,vertic:[20,15],modifi:18,valu:11,box:[0,20,23,2,15,5,11,7,12,16,21,24],great:13,convers:14,taper:[2,16],shift:4,larger:11,xvzf:12,chang:[0,20,2,3,4,11,12,14],hexagon:[22,11],glu:23,diamet:11,love:18,extra:20,appli:23,modul:[6,12],scalex:0,layer:15,scalez:0,revol:[11,15],"boolean":[1,20,2,15,23,9],uniqu:15,instal:[12,9],scalei:0,unit:[20,2,3,21,7,18],from:[10,20,23,3,21,4,5,22,11,17,12,16,13,6,24],describ:[0,20,15],would:[2,15,21],"4492127076447545e":20,visit:17,two:[23,20,12,15,14],next:[20,5],few:[22,19,13,20],call:[19,0,20,23,2,3,21,15,5,22,16,7,12,10,17,13],usr:12,black:3,vcenter:3,type:[20,4,21,6,14,24],until:5,minor:10,more:[20,23,2,15,22,6,17,12,16,13,14],add_menu:[19,8],exit:5,vout:3,peopl:12,notic:2,trail:1,face_from:[17,15],mirrorz:0,hole:11,hold:[2,4,24],must:[2,23,17],middl:[4,24],endpoint:10,restor:[14,21],setup:12,work:[1,20,16,17,12,24],focu:12,bezier_con:16,minimum:20,can:[0,1,20,23,2,21,4,5,10,6,12,11,13,8,24],learn:[22,6],root:12,def:[19,2,3,5,7,13],cad:[13,6,12,15],control:[8,9,21],nearest:20,prompt:[6,24,18],tar:12,process:1,lock:5,mirrorx:0,indic:[23,20],high:[22,16],sphere:[20,23,15,5,16,12,21,6,14,24],sourc:12,want:[19,0,2,3,5,6,17,18,13,8,14],sharp:[2,3],tan:[2,7],mirrori:0,alwai:12,surfac:[2,16,17,20],multipl:[20,22,11,18,13,9],turn:[22,3],add_menuitem:[19,13,8],cylind:[23,16,11,20,15],faulti:20,degre:[2,0,7],write:[0,13,3,12],how:[1,20,12,15,21],fourth:6,main:5,iso:3,simpl:[2,3,1,6,19],updat:12,map:20,recogn:2,penetr:2,haven:12,huge:13,max:20,after:[3,21,23,5,6,24],triedron:21,befor:[2,1,20],mac:12,plane:[20,11,17,15],okai:20,mai:[19,20,15,6,12,24],data:14,averag:20,"short":15,attempt:20,practic:17,third:[],sit:[2,20],caus:20,inform:[20,15,9],combin:20,shade:[4,21],anoth:[10,19,17],volum:20,first:[19,20,2,3,22,13],origin:[10,11,0,1],six:16,help:[1,20,23,2,15,21,6],arc_ellips:[10,20,15],over:[3,1],move:[0,20,15,23,4,9,24],becaus:[2,13,12],inner_wir:20,patent:3,through:[10,2,20],same:[0,20,2,4,10,23,18],subshap:20,hierarchi:[19,20,15],still:12,paramet:[19,0,20,2,6,7,14],outer:[2,20,15],fit:[20,21,10,11,17,8],knob_height:[2,7],chosen:2,fix:[3,20,14],gtk:[],better:[16,6],window:[5,21,6,12,13,24],button:[4,24],hidden:[3,4,21],therefor:12,might:19,pixel:21,them:[23,11,3,1,20],"return":[0,20,23,2,10,16,7,11,14],thei:[11,1,20],python:[13,6,12,5],auto:3,handi:4,rectangl:[22,2,7,15],number:[3,20,12,21],mode_wirefram:[8,21],terminolog:15,front:[12,4,21],now:[1,20,2,3,5,6,7,13,8,24],from_ig:[14,15],introduct:[6,8,12,9,24],chamfer:[23,20],display_car:19,troubleshoot:12,didn:20,separ:[],easili:6,simple_glu:23,radian:[10,2,7,20],each:[10,0,23,3,15,5,22,16,17,14,24],found:[23,20],quarter:10,side:[20,2,3,4,22,16,8],from_stl:14,q4thread:24,domain:[23,20],weight:10,car2:19,car1:19,procedur:12,rotatedx:0,rotatedz:0,connect:[22,15],our:13,extract:12,orient:[0,11],out:[2,23,20,4],shown:[16,3,6,17,14],closest:20,space:17,goe:2,newli:23,your:[19,21,12,5,8,24],categori:20,mate:[2,7],rel:[],print:[6,20],got:20,correct:20,red:[2,0,21],foreground:21,linear:11,insid:[2,11,17,15],manipul:19,differ:[13,17,12,24],standard:[4,21],reason:12,base:[2,6,7,13],usual:[2,20,12,15,5],put:[12,15],span:21,octopu:11,line_width:3,"10mm":18,capabl:3,angl:22,could:[2,21],wrong:20,pythonocc:12,keep:[12,4],thing:[2,20],length:20,to_ig:[14,15],place:[2,0,7,20,18],isn:[23,17,12],outsid:[2,11,14,15],prefer:12,imposs:[13,20],lambda:20,oper:[1,20,2,15,23,9],dimens:[2,0,3],major:10,directli:22,onc:[6,4,5],independ:24,scene:[4,21],wedg:[16,15],knob_base_rad:[2,7],alreadi:21,wrapper:12,wasn:1,thick:[2,7],open:12,straight:[10,11],size:[0,13,3,21],given:[0,11,13],dump:20,start:[2,3,13,24,5],arch:11,top:[2,3,16,4],sometim:[23,16,20,14],least:12,plastic:[2,7,18],toi:[1,13,9,18],draft:[2,3,7,20,21],too:[0,12],circl:[10,20,15,22,16,11],white:21,isometr:3,"final":[2,3,13,5],store:14,inner:20,wtop:[2,7],shell:[11,20,15],option:[19,21,11,7,17,16,6,14,24],tool:6,copi:[2,20],"1x1x1":20,brep_mod:14,specifi:20,part:[23,11],consult:[16,6,14],exactli:[23,17],than:[19,20,2,16,6,14],png:[3,21],serv:13,wide:22,provid:[11,6],remov:[3,1,20,4,21],rate:20,set_triedron:[8,21],project:[3,12,21],reus:13,stp:14,str:13,subcent:[2,7,20],posit:[23,2,0,11,20],seri:10,comput:6,viewer:[5,19,21,13,8,24],vertex5:20,ani:[4,21],packag:2,to_draft:20,have:[20,23,2,15,21,6,12,8,24],"__main__":[3,13,5],need:[23,2,3,15,11,17,12,24],knob_draft:[2,7],issu:20,engin:[3,12],squar:[20,11,17],min:20,bezier:[10,15],click:4,note:[20,23,2,3,15,16,11,14,24],also:[0,20,10,23,7,14],robustli:1,exampl:[19,0,1,20,10,23,3,15,21,22,6,17,18,11,16,13,14,9],build:[1,13,9,18],which:[1,20,23,5,10,11,12],noth:[3,20,24],singl:[0,2,15,11,18,13,9],even:4,begin:2,printer:6,allow:[13,20,12,4],set_foreground:[8,21],object:[23,0,6],reset_mode_draw:21,most:2,plai:1,regular:21,xsize:[2,3,7],segment:[22,10,11,15],why:[11,12,24],don:2,slightli:20,eject:[2,7],clear:[2,3,21,13,8,24],later:[22,2],metal:21,face:[20,23,2,4,11,7,15,17,16,8,14,9],pipe:[11,15],mode_shad:[8,21],unchang:0,boundari:[20,15],brep:[20,14,15],show:[2,13,18],api:[19,23,17,16,6,14],opposit:[2,4],radiu:[10,20,2,22,16,7,6],syntax:12,particularli:[23,20],corner:[22,2,20],find:[23,20],view1:[2,13,14],onli:[2,11,20,4],locat:[23,20],menu:[19,13,4],occ:[1,20,23,3,11,12,14],configur:[19,8,9,18],figur:13,helic:[22,11],should:[2,24,12,5],suppos:[6,18],analyz:2,factor:0,local:12,sure:[2,20],spun:11,"8x1":13,cube:[20,15],nearli:13,variou:[3,13,4],get:[2,11,20,12],handli:12,express:15,pocket:[23,20],nativ:14,drawn:[0,20],report:20,requir:[2,3,12,9,18],solidbrick:[2,7],ngon:[22,11,17,15],gather:[20,15,9],pydoc:[6,12],stl:[6,14],common:[23,15],nowher:1,where:12,view:[2,3,21,4,5,6,12,13,8,9,24],sew:20,set:[2,3,20,21],keypad:4,startup:13,hasn:20,maximum:20,display_brick:13,see:[19,1,3,4,5,23,8,24],arc:[22,10,11,15],fail:20,close:[22,11,17,21],mode_draw:[3,8,21],face3:20,best:20,extrud:[16,11],statu:4,wire:[20,2,15,22,11,17,14,9],kei:4,someth:[23,1,20,4,24],scaledi:0,tend:[2,20],face4:20,face5:20,enough:3,won:[20,4,18],face0:20,face1:20,face2:20,extrus:11,"import":[2,3,5,6,7,12,13,14,9,24],awai:[23,20],scaledx:0,scaledz:0,qt4:12,appreci:13,extend:[10,16,12],hotkei:4,set_background:[3,8,21],screen:21,extens:21,entir:[15,21],len:20,ipython:[2,6,7,24,18],toler:20,come:[0,12],addit:20,edge3:20,both:[17,12],last:[22,19,6,24,5],wirefram:[4,21],howev:[2,23,12,21],alon:[5,12,13,8,9,24],equal:[22,2],etc:20,instanc:[3,12,24],vup:3,mani:[2,16,14,24],corrupt:20,opencascad:12,whole:15,simpli:12,point:[10,0,20,2,21,22],color:[2,3,21],had:[11,1,15],height:[2,3,7,18],post_base_rad:[2,7],path:14,assum:[],coincid:[2,23,20],poli:20,toru:[16,15],brick_:3,second:24,addition:[2,20,12],fillet_rad:[2,7],compon:2,"5mm":18,much:[6,15],interest:4,brick:[2,3,7,18,13,9],from_step:[14,15],loft:[2,11,7,15],imag:3,convert:[2,14],argument:[19,12],coordin:[4,21],understand:[15,5],togeth:[23,20],rang:[2,7],those:[23,1,20,4],"case":[2,3,20,12,4],replic:2,subsequ:23,look:[19,1,2,15,21,6,7,12,18],solid:[20,23,2,15,11,4,16,14,9],align:2,easier:2,defin:[10,19,2,15,22,13],"while":[1,4],ought:2,abov:[2,0,20],aid:[2,6],loop:2,wire0:20,wire1:20,wire2:20,wire3:20,wall_thick:[2,7],wire5:20,almost:2,edge10:20,edge11:20,edge0:20,edge1:20,edge2:20,itself:20,edge4:20,cone:[20,2,15,16,7,24],edge6:20,edge7:20,edge8:20,edge9:20,unneed:[23,20],quit:[8,21],generate_imag:3,develop:[12,18],helix:[22,11,15],face_cent:20,perform:[2,0,23,20],suggest:12,make:[20,2,5,22,11,7],format:[6,14],fewer:0,sqrt:[10,2,3,7],complex:13,interact:[8,9,24],elong:22,success:20,document:[6,17,12,9],pan:[8,4,24],difficult:13,ball:2,screenshot:21,cubic:20,mode_hlr:[8,21],octagon:17,hand:0,fairli:12,fuse:[2,23,20,15],user:[12,9,5],improv:20,robust:[2,23],wherev:2,implement:[3,20],submenu:19,lower:[22,19,20],off:2,center:[10,20,2,3,15,22,16,4],vertex1:20,vertex0:20,vertex3:20,vertex2:20,well:[12,15],vertex4:20,vertex7:20,vertex6:20,without:10,command:6,thi:[19,0,20,23,2,3,4,5,15,6,7,12,11,14,9,24],model:[19,1,20,2,3,15,5,6,7,12,13,8,9,24],from_svg:[14,15],dimension:14,left:[22,20,4],rotatei:0,distanc:[22,11,4],just:12,less:[2,12],when:[19,0,20,2,3,4,23,17,18],edge5:20,rest:[],halfwai:21,rotatex:[0,11],shape:[0,20,23,2,4,5,10,11,15,12,17,21,8,14,9,24],shorthand:0,skill:12,glue:[23,15],yet:[3,12],versu:2,cut:[2,23,15],miscellan:[20,15,9],screendump:21,gtkglext:[],littl:21,pythoncc:12,instanti:[10,15,5,22,16,17,13],add:[2,13,24,12,19],overview:[6,20,15],els:[2,7],save:[0,21,8,3,14],approxim:20,match:17,knob:[2,7],applic:19,around:[20,4],transpar:21,read:[23,6,5],wall:[2,7],swig:12,rotatez:0,know:[19,23,12,4,18],background:[3,21],press:4,world:14,hollow:15,outerbrick:[2,7],name:[3,13,12],like:[19,0,20,2,3,15,5,6,7,12,21,24],specif:[2,20,4],arbitrari:[2,11,4,21],spine:11,manual:[22,12],zoom:[8,4],post_rad:[2,7],"6738190614671318e":20,necessari:[23,20,12],either:23,output:20,brepprimapi:12,nice:2,page:12,right:[0,20,4],old:[0,23],often:[22,20,1,17,23],simplifi:[23,20],linux:12,some:[20,2,3,23,12,11],back:[23,20,24],intern:[12,9],enumer:[2,7,20],set_siz:[3,8,21],mirror:[0,15,9],successfulli:12,slice:[23,11,20,15],bottom:[2,3,16],set_scal:[3,8,21],overlap:23,mathemat:[20,17,15],leav:20,inject:[2,18],overcom:1,caviti:2,condit:20,content:9,complic:[1,13],refer:4,machin:2,core:2,run:[3,5,12,13,8,24],power:[13,12],slight:14,widget:[],imaginari:20,ident:16,perpendicular:16,to_brep:[14,15],cumbersom:12,step:[1,14],although:20,offset:[2,11,15],"__name__":[3,13,5],post:[2,7],gthread:[],between:[2,23,20],simpler:[12,15],"9999999999999995e":20,about:[0,20,5,22,23,11],redraw:3,rare:[23,15],materi:21,ysize:[2,3,7],knob_rad:[2,7],helical_solid:[11,15],unfortun:[23,11,12],revolut:16,stand:[13,8,24,9,5],block:18,rotatedi:0,own:[2,12,15,5],pythonpath:12,within:[6,21],bound:[20,17,15],brick_imag:[3,18],three:[0,20,4],down:[19,4],wire4:20,notat:0,wrap:12,spline:[10,17,15],merg:[23,11,20],triangl:11,log:23,wai:[23,20],area:20,transfer:[15,14,9],support:20,rotat:[0,23,20,15,9],"long":[11,21],custom:[19,21],avail:[23,19,6],width:21,interfac:5,includ:1,select:[19,8,4],"function":[19,0,23,2,3,4,5,22,16,7,15,10,17,13,14],from_brep:[14,15],hard:12,form:[2,0,23,4],offer:[16,20,14,4],forc:2,tupl:[19,20],translat:[0,20,23,2,5,22,11,7,24],molder:2,line:[5,0,3,4,21,10,23,13,24],buggi:[2,20],"true":[2,7],count:[2,7,20],pull:19,made:15,shell0:20,consist:12,"default":[2,7,21],wbottom:[2,7],smooth:[3,1],displai:[19,23,2,3,21,4,5,6,12,13,8,14,9,24],troubl:[23,11,1,12],below:[23,13,20],problem:[23,20],similar:[16,18],stype:[11,14],curv:10,mirroredz:0,featur:[2,3,14],creat:[19,23,2,3,15,5,22,6,17,10,11,16,13,9,24],flat:17,certain:21,dure:15,convex:2,doesn:[19,11,20],mode:[3,4,21,13,8,24],mirroredi:0,exist:[19,0,23],file:[2,3,15,21,10,6,12,18,13,14,9],logo:14,ship:6,doe:[20,3,17,14],mold:[2,18],check:20,fill:[17,15,4],"0000e":20,readi:6,polygon:[22,11,20,15],set_project:[2,3,8,21],titl:19,edge_cent:[2,7],tip:2,detail:[19,16,12,9],planar:17,prism:[11,15],other:[23,2,11,7,15],futur:18,varieti:20,sprite:21,knob_top_rad:[2,7],you:[19,0,1,20,23,2,4,5,22,6,15,12,17,8,14,24],unlimit:13,realiti:1,viewstandard:[8,21],"0001000025000001e":20,draw:[3,21,9,18],sequenc:15,"class":[22,0,20,15],vertex:[20,15,22,11,4,8],drad:[2,7],scale:[0,15,3,9,21],consid:[11,15],to_step:[14,15],concav:2,ccad:[0,2,3,4,5,22,15,6,7,12,13,8,14,24],axi:0,innerbrick:[2,7],algorithm:23,directori:12,svg:[10,14],descript:6,orbit:[8,4],rule:[2,0],to_stl:[6,14,15],portion:[10,23],text:[6,8],profil:11},titles:["Moving, Rotating, Mirroring, and Scaling","Nuances","A Single Brick","Drawings","Using Display","Stand-Alone Viewing","Introduction","brick.py","Displaying","Contents","Creating Edges","Creating Derived Shapes","Details","Multiple Bricks","File Transfer","Modelling","Creating Solids","Creating Faces","Example - Building Toy","Configuring Display","Gathering Information and Miscellaneous Methods","Controlling Display","Creating Wires","Boolean Operations","Interactive Viewing"],modules:{},descrefs:{},filenames:["trms","example1_nuances","example1_singlebrick","example1_drawings","using_display","stand_alone","intro","example1_brickpy","displaying","contents","creating_edges","creating_derived","details","example1_multibrick","file_transfer","modelling","creating_solids","creating_faces","example1","configuring_display","logging","controlling_display","creating_wires","boolean","interactive"]}) \ No newline at end of file +Search.setIndex({objects:{},terms:{represent:15,all:[0,20,2,15,5,12,18,14],code:[0,2,5,7,12,18,13],edg:[10,20,23,2,3,4,22,11,7,15,8,9],queri:20,lack:12,prefix:12,ellips:[22,20,15],abil:12,follow:[19,0,20,23,3,10,5,22,11,17,12,18,16,21,6,14],mill:2,consider:14,whose:[2,20],brepprimapi_spher:12,depend:11,fancier:19,intermedi:[22,19],specif:[2,20,4],pulldown:19,program:[3,13,12,21,5],becam:1,under:19,larg:20,wavi:17,everi:[2,13,20],string:19,fals:3,mous:[4,24],graphic:5,mechan:[6,12],difficult:13,veri:[17,4],all_brick:13,pt2:22,pt1:22,tri:12,subtoler:20,level:[19,15],did:12,gui:[13,5],list:[20,2,5,10,11,14],iter:[3,20],"try":[13,4,24],item:[19,11,13],vector:[0,3],red:[2,0,21],particularli:[23,20],round:[2,11,7],pleas:[3,18],upper:20,endmil:2,direct:[16,0,11,21],uniqu:15,zero:2,cost:12,design:[14,13,6,12,5],viewtyp:21,pass:[19,0,20,2,3,10,4,22,6,7,11,14],"0001000025000002e":20,further:12,"4x2":3,append:[2,0,7,20],blue:0,index:[20,4],what:[2,6,20,11],appear:[1,6,24,5],neg:11,section:[23,20],slight:14,fillet:[1,20,23,2,3,4,16,7],current:[3,11],version:[19,0,11,12],intersect:11,"new":[0,11,20,13],method:[19,0,20,2,15,21,23,14,9],contrast:13,wall_offset:[2,7],elimin:[23,20],themselv:20,deriv:[23,11,15,9],nuanc:[1,14,9,18],gener:[13,3,11,12,18],here:2,satisfi:7,to_fillet:[2,7],let:[6,20,12],ver:12,along:11,vertic:[20,15],modifi:18,extrus:11,valu:11,leav:20,box:[0,20,23,2,15,5,11,7,12,16,21,24],great:13,convers:14,taper:[2,16],shift:4,larger:11,xvzf:12,chang:[0,20,2,3,4,11,12,14],hexagon:[10,11],glu:23,diamet:11,love:18,extra:20,appli:23,modul:[6,12],prefer:12,set_triedron:[8,21],scalez:0,revol:[11,15],"boolean":[1,20,2,15,23,9],instal:[12,9],should:[2,24,12,5],scalei:0,unit:[20,2,3,21,7,18],from:[10,20,23,3,21,4,5,22,11,17,12,16,13,6,24],describ:[0,20,15],would:[2,15,21],"4492127076447545e":20,visit:17,two:[23,20,12,15,14],next:[20,5],few:[10,19,13,20],call:[19,0,20,23,2,3,21,10,15,5,22,16,7,12,17,13],usr:12,save:[0,21,8,3,14],suppos:[6,18],vcenter:3,simpler:[12,15],type:[20,4,21,6,14,24],until:5,minor:22,more:[20,23,2,15,10,6,17,12,16,13,14],add_menu:[19,8],vout:3,peopl:12,notic:2,trail:1,face_from:[17,15],mirrorz:0,hole:11,hold:[2,4,24],must:[2,23,17],middl:[4,24],endpoint:22,sometim:[23,16,20,14],restor:[14,21],setup:12,work:[1,20,16,17,12,24],focu:12,bezier_con:16,left:[10,20,4],minimum:20,can:[0,1,20,23,2,21,4,5,22,6,12,11,13,8,24],learn:[10,6],root:12,def:[19,2,3,5,7,13],cad:[13,6,12,15],control:[8,9,21],nearest:20,prompt:[6,24,18],tar:12,process:1,lock:5,mirrorx:0,indic:[23,20],high:[10,16],sphere:[20,23,15,5,16,12,21,6,14,24],sourc:12,want:[19,0,2,3,5,6,17,18,13,8,14],sharp:[2,3],tan:[2,7],mirrori:0,alwai:12,surfac:[2,16,17,20],multipl:[20,10,11,18,13,9],turn:[10,3],add_menuitem:[19,13,8],cylind:[23,16,11,20,15],faulti:20,revolut:16,write:[0,13,3,12],knob_height:[2,7],fourth:6,place:[2,0,7,20,18],simpl:[2,3,1,6,19],updat:12,map:20,recogn:2,outsid:[2,11,14,15],huge:13,max:20,after:[3,21,23,5,6,24],triedron:21,befor:[2,1,20],wrong:20,to_ig:[14,15],okai:20,mai:[19,20,15,6,12,24],data:14,averag:20,subsequ:23,"short":15,attempt:20,practic:17,third:[],sit:[2,20],caus:20,inform:[20,15,9],combin:20,shade:[4,21],anoth:[22,19,17],volum:20,lambda:20,oper:[1,20,2,15,23,9],six:16,help:[1,20,23,2,15,21,6],arc_ellips:[22,20,15],over:[3,1],move:[0,20,15,23,4,9,24],becaus:[2,13,12],inner_wir:20,patent:3,through:[22,2,20],sqrt:[22,2,3,7],subshap:20,hierarchi:[19,20,15],still:12,paramet:[19,0,20,2,6,7,14],outer:[2,20,15],fit:[20,21,22,11,17,8],how:[1,20,12,15,21],chosen:2,fix:[3,20,14],gtk:[],better:[16,6],window:[5,21,6,12,13,24],button:[4,24],hidden:[3,4,21],therefor:12,might:19,pixel:21,them:[23,11,3,1,20],"return":[0,20,23,2,22,11,7,16,14],thei:[11,1,20],python:[13,6,12,5],auto:3,handi:4,rectangl:[10,2,7,15],number:[3,20,12,21],mode_wirefram:[8,21],brick_imag:[3,18],front:[12,4,21],now:[1,20,2,3,5,6,7,13,8,24],from_ig:[14,15],introduct:[6,8,12,9,24],chamfer:[23,20],display_car:19,troubleshoot:12,didn:20,separ:[],easili:6,simple_glu:23,radian:[22,2,7,20],each:[10,0,23,3,15,5,22,16,17,14,24],found:[23,20],redraw:3,side:[20,2,3,4,10,16,8],from_stl:14,q4thread:24,domain:[23,20],weight:22,car2:19,car1:19,procedur:12,rotatedx:0,rotatedz:0,connect:[10,15],annot:3,our:13,extract:12,orient:[0,11],out:[2,23,20,4],shown:[16,3,6,17,14],screenshot:21,space:17,goe:2,newli:23,spline:[22,17,15],categori:20,mate:[2,7],rel:[],print:[6,20],got:20,correct:20,math:[10,0,20,2,3,22,11,7,12],foreground:21,linear:11,insid:[2,11,17,15],manipul:19,given:[0,11,13],standard:[4,21],cut:[2,23,15],reason:12,base:[2,6,7,13],"6738190614671318e":20,put:[12,15],triangl:11,octopu:11,line_width:3,"10mm":18,fairli:12,angl:10,could:[2,21],view1:[2,13,14],mac:12,pythonocc:12,keep:[12,4],thing:[2,20],length:20,plane:[20,11,17,15],iso:3,isn:[23,17,12],penetr:2,imposs:[13,20],first:[19,20,2,3,10,13],origin:[22,11,0,1],dimens:[2,0,3],major:22,directli:10,onc:[6,4,5],independ:24,scene:[4,21],wedg:[16,15],knob_base_rad:[2,7],alreadi:21,least:12,wasn:1,thick:[2,7],open:12,straight:[22,11],size:[0,13,3,21],differ:[13,17,12,24],keypad:4,width:21,arch:11,top:[2,3,16,4],system:[13,12,9],wrapper:12,plastic:[2,7,18],toi:[1,13,9,18],draft:[2,3,7,20,21],too:[0,12],circl:[10,20,15,22,16,11],white:21,isometr:3,"final":[2,3,13,5],store:14,includ:1,submenu:19,shell:[11,20,15],option:[19,21,11,7,17,16,6,14,24],tool:6,copi:[2,20],"1x1x1":20,lower:[10,19,20],specifi:20,part:[23,11],consult:[16,6,14],exactli:[23,17],haven:12,png:[3,21],serv:13,wide:10,provid:[11,6],remov:[3,1,20,4,21],rate:20,knob_rad:[2,7],project:[3,12,21],reus:13,stp:14,str:13,subcent:[2,7,20],posit:[23,2,0,11,20],seri:22,comput:6,viewer:[5,19,21,13,8,24],well:[12,15],ani:[4,21],packag:2,to_draft:20,have:[20,23,2,15,21,6,12,8,24],"__main__":[3,13,5],need:[23,2,3,15,11,17,12,24],knob_draft:[2,7],featur:[2,3,14],issu:20,engin:[3,12],squar:[20,11,17],min:20,bezier:[22,15],click:4,note:[20,23,2,3,15,16,11,14,24],also:[0,20,22,23,7,14],robustli:1,without:22,build:[1,13,9,18],which:[1,20,23,5,22,11,12],noth:[3,20,24],singl:[0,2,15,11,18,13,9],even:4,begin:2,printer:6,allow:[13,20,12,4],set_foreground:[8,21],object:[23,0,6],reset_mode_draw:21,most:2,plai:1,regular:21,xsize:[2,3,7],segment:[22,10,11,15],why:[11,12,24],don:2,eject:[2,7],clear:[2,3,21,13,8,24],later:[10,2],metal:21,face:[20,23,2,4,11,7,15,17,16,8,14,9],pipe:[11,15],unchang:0,someth:[23,1,20,4,24],brep:[20,14,15],show:[2,13,18],opposit:[2,4],radiu:[10,20,2,22,16,7,6],syntax:12,polylin:20,corner:[10,2,20],find:[23,20],blender:4,onli:[2,11,20,4],locat:[23,20],menu:[19,13,4],occ:[1,20,23,3,11,12,14],configur:[19,8,9,18],enough:3,helic:[10,11],than:[19,20,2,16,6,14],black:3,analyz:2,factor:0,local:12,sure:[2,20],spun:11,"8x1":13,cube:[20,15],nearli:13,variou:[3,13,4],get:[2,11,20,12],handli:12,express:15,pocket:[23,20],nativ:14,"import":[2,3,5,6,7,12,13,14,9,24],report:20,requir:[2,3,12,9,18],solidbrick:[2,7],portion:[22,23],shape:[0,20,23,2,4,5,22,11,15,12,17,21,8,14,9,24],gather:[20,15,9],pydoc:[6,12],stl:[6,14],common:[23,15],nowher:1,where:12,view:[2,3,21,4,5,6,12,13,8,9,24],sew:20,set:[2,3,20,21],dump:20,startup:13,hasn:20,displai:[19,23,2,3,21,4,5,6,12,13,8,14,9,24],display_brick:13,see:[19,1,3,4,5,23,8,24],arc:[22,10,11,15],fail:20,close:[10,11,17,21],mode_draw:[3,8,21],best:20,extrud:[16,11],statu:4,wire:[20,2,15,10,11,17,14,9],extend:[22,16,12],boundari:[20,15],scaledi:0,tend:[2,20],face4:20,face5:20,figur:13,won:[20,4,18],face0:20,face1:20,face2:20,face3:20,drawn:[0,20],awai:[23,20],scaledx:0,scaledz:0,qt4:12,appreci:13,kei:4,hotkei:4,set_background:[3,8,21],screen:21,extens:21,entir:[15,21],len:20,ipython:[2,6,7,24,18],toler:20,come:[0,12],addit:20,both:[17,12],last:[10,19,6,24,5],howev:[2,23,12,21],alon:[5,12,13,8,9,24],equal:[10,2],etc:20,instanc:[3,12,24],vup:3,mani:[2,16,14,24],corrupt:20,whole:15,simpli:12,point:[10,0,20,2,21,22],color:[2,3,21],screendump:21,height:[2,3,7,18],post_base_rad:[2,7],path:14,assum:[],coincid:[2,23,20],poli:20,toru:[16,15],brick_:3,second:24,addition:[2,20,12],add:[2,13,24,12,19],layer:15,compon:2,"5mm":18,much:[6,15],interest:4,brick:[2,3,7,18,13,9],from_step:[14,15],loft:[2,11,7,15],imag:3,convert:[2,14],argument:[19,12],coordin:[4,21],understand:[15,5],togeth:[23,20],rang:[2,7],those:[23,1,20,4],"case":[2,3,20,12,4],replic:2,main:5,look:[19,1,2,15,21,6,7,12,18],solid:[20,23,2,15,11,4,16,14,9],align:2,easier:2,defin:[10,19,2,15,22,13],"while":[1,4],match:17,abov:[2,0,20],aid:[2,6],loop:2,wire0:20,wire1:20,wire2:20,wire3:20,wall_thick:[2,7],wire5:20,almost:2,edge10:20,edge11:20,edge0:20,edge1:20,edge2:20,edge3:20,edge4:20,cone:[20,2,15,16,7,24],edge6:20,edge7:20,edge8:20,edge9:20,unneed:[23,20],generate_imag:3,develop:[12,18],helix:[10,11,15],face_cent:20,perform:[2,0,23,20],suggest:12,make:[20,2,5,10,11,7],transpar:21,fewer:0,same:[0,20,2,4,22,23,18],complex:13,elong:10,document:[6,17,12,9],pan:[8,4,24],higher:[2,15],ball:2,closest:20,cubic:20,mode_hlr:[8,21],octagon:17,hand:0,capabl:3,fuse:[2,23,20,15],user:[12,9,5],improv:20,robust:[2,23],wherev:2,implement:[3,20],pull:19,wtop:[2,7],brep_mod:14,off:2,center:[10,20,2,3,15,22,16,4],vertex1:20,vertex0:20,vertex3:20,vertex2:20,vertex5:20,vertex4:20,vertex7:20,vertex6:20,exampl:[19,0,1,20,23,3,10,15,21,22,6,17,18,11,16,13,14,9],command:6,thi:[19,0,20,23,2,3,4,5,15,6,7,12,11,14,9,24],model:[19,1,20,2,3,15,5,6,7,12,13,8,9,24],from_svg:[14,15],dimension:14,usual:[2,20,12,15,5],rotatei:0,distanc:[10,11,4],just:12,less:[2,12],tip:2,rest:[],halfwai:21,rotatex:[0,11],ngon:[10,11,17,15],shorthand:0,skill:12,glue:[23,15],yet:[3,12],versu:2,opencascad:12,miscellan:[20,15,9],had:[11,1,15],prism:[11,15],littl:21,pythoncc:12,instanti:[10,15,5,22,16,17,13],fillet_rad:[2,7],overview:[6,20,15],els:[2,7],mode_shad:[8,21],approxim:20,ought:2,knob:[2,7],applic:19,around:[20,4],format:[6,14],read:[23,6,5],wall:[2,7],swig:12,rotatez:0,know:[19,23,12,4,18],background:[3,21],press:4,world:14,hollow:15,outerbrick:[2,7],name:[3,13,12],linux:12,like:[19,0,20,2,3,15,5,6,7,12,21,24],success:20,arbitrari:[2,11,4,21],spine:11,manual:[10,12],zoom:[8,4],post_rad:[2,7],api:[19,23,17,16,6,14],necessari:[23,20,12],either:23,output:20,brepprimapi:12,realiti:1,page:12,right:[0,20,4],old:[0,23],often:[10,20,1,17,23],simplifi:[23,20],interact:[8,9,24],some:[20,2,3,23,12,11],back:[23,20,24],intern:[12,9],enumer:[2,7,20],set_siz:[3,8,21],mirror:[0,15,9],successfulli:12,slice:[23,11,20,15],bottom:[2,3,16],set_scal:[3,8,21],overlap:23,mathemat:[20,17,15],exit:5,inject:[2,18],overcom:1,caviti:2,condit:20,content:9,complic:[1,13],refer:4,machin:2,core:2,run:[3,5,12,13,8,24],power:[13,12],quit:[8,21],widget:[],imaginari:20,ident:16,perpendicular:16,to_brep:[14,15],cumbersom:12,step:[1,14],although:20,offset:[2,11,15],"__name__":[3,13,5],post:[2,7],gthread:[],between:[2,23,20],wirefram:[4,21],"9999999999999995e":20,about:[0,20,5,10,23,11],quarter:22,rare:[23,15],materi:21,ysize:[2,3,7],slightli:20,helical_solid:[11,15],unfortun:[23,11,12],degre:[2,0,7],stand:[13,8,24,9,5],block:18,rotatedi:0,own:[2,12,15,5],pythonpath:12,within:[6,21],bound:[20,17,15],terminolog:15,three:[0,20,4],down:[19,4],wire4:20,wrap:12,your:[19,21,12,5,8,24],merg:[23,11,20],span:21,log:23,wai:[23,20],area:20,transfer:[15,14,9],support:20,rotat:[0,23,20,15,9],"long":[11,21],custom:[19,21],avail:[23,19,6],start:[2,3,13,24,5],interfac:5,inner:20,scalex:0,select:[19,8,4],"function":[19,0,23,2,3,10,4,5,22,16,7,15,17,13,14],from_brep:[14,15],hard:12,form:[2,0,23,4],offer:[16,20,14,4],forc:2,tupl:[19,20],translat:[0,20,23,2,5,10,11,7,24],molder:2,line:[0,3,21,4,5,22,23,13,24],buggi:[2,20],"true":[2,7],count:[2,7,20],notat:0,made:15,shell0:20,consist:12,"default":[2,7,21],wbottom:[2,7],smooth:[3,1],maximum:20,troubl:[23,11,1,12],directori:12,below:[23,13,20],problem:[23,20],similar:[16,18],stype:[11,14],curv:22,mirroredz:0,mirroredx:0,creat:[19,23,2,3,10,15,5,22,6,17,11,16,13,9,24],flat:17,certain:21,dure:15,convex:2,doesn:[19,11,20],mode:[3,4,21,13,8,24],mirroredi:0,exist:[19,0,23],file:[2,3,15,21,22,6,12,18,13,14,9],logo:14,ship:6,doe:[20,3,17,14],mold:[2,18],check:20,fill:[17,15,4],"0000e":20,readi:6,polygon:[10,11,20,15],set_project:[2,3,8,21],titl:19,edge_cent:[2,7],when:[19,0,20,2,3,4,23,17,18],detail:[19,16,12,9],planar:17,gtkglext:[],other:[23,2,11,7,15],futur:18,varieti:20,sprite:21,knob_top_rad:[2,7],you:[19,0,1,20,23,2,4,5,10,6,15,12,17,8,14,24],unlimit:13,nice:2,viewstandard:[8,21],"0001000025000001e":20,draw:[3,21,9,18],sequenc:15,"class":[10,0,20,15],vertex:[20,15,10,11,4,8],drad:[2,7],scale:[0,15,3,9,21],consid:[11,15],to_step:[14,15],concav:2,ccad:[0,2,3,4,5,10,15,6,7,12,13,8,14,24],axi:0,innerbrick:[2,7],algorithm:23,edge5:20,svg:[22,14],descript:6,orbit:[8,4],rule:[2,0],to_stl:[6,14,15],itself:20,text:[6,8],profil:11},objtypes:{},titles:["Moving, Rotating, Mirroring, and Scaling","Nuances","A Single Brick","Drawings","Using Display","Stand-Alone Viewing","Introduction","brick.py","Displaying","Contents","Creating Wires","Creating Derived Shapes","Details","Multiple Bricks","File Transfer","Modelling","Creating Solids","Creating Faces","Example - Building Toy","Configuring Display","Gathering Information and Miscellaneous Methods","Controlling Display","Creating Edges","Boolean Operations","Interactive Viewing"],objnames:{},filenames:["trms","example1_nuances","example1_singlebrick","example1_drawings","using_display","stand_alone","intro","example1_brickpy","displaying","contents","creating_wires","creating_derived","details","example1_multibrick","file_transfer","modelling","creating_solids","creating_faces","example1","configuring_display","logging","controlling_display","creating_edges","boolean","interactive"]}) \ No newline at end of file diff --git a/doc/html/stand_alone.html b/doc/html/stand_alone.html index 102e472..6a3ed10 100644 --- a/doc/html/stand_alone.html +++ b/doc/html/stand_alone.html @@ -1,25 +1,31 @@ + + + - Stand-Alone Viewing — ccad v0.12 documentation + Stand-Alone Viewing — ccad 0.13 documentation + + + - + @@ -37,36 +43,36 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • -

        Previous topic

        -

        Displaying

        -

        Next topic

        -

        Interactive Viewing

        -

        This Page

        - - - +

        Previous topic

        +

        Displaying

        +

        Next topic

        +

        Interactive Viewing

        +

        This Page

        + + +
        @@ -142,13 +148,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • \ No newline at end of file diff --git a/doc/html/trms.html b/doc/html/trms.html index fe7a97e..2e811f1 100644 --- a/doc/html/trms.html +++ b/doc/html/trms.html @@ -1,25 +1,31 @@ + + + - Moving, Rotating, Mirroring, and Scaling — ccad v0.12 documentation + Moving, Rotating, Mirroring, and Scaling — ccad 0.13 documentation + + + - + @@ -37,47 +43,47 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • -

        Table Of Contents

        -
        @@ -182,13 +188,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Modelling »
      • \ No newline at end of file diff --git a/doc/html/using_display.html b/doc/html/using_display.html index 7009c85..66fb96a 100644 --- a/doc/html/using_display.html +++ b/doc/html/using_display.html @@ -1,25 +1,31 @@ + + + - Using Display — ccad v0.12 documentation + Using Display — ccad 0.13 documentation + + + - + @@ -37,52 +43,52 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • -

        Table Of Contents

        -
        @@ -106,13 +112,13 @@

        View -> Side +
        • keypad 7 for top view
        • keypad 1 for front view
        • keypad 3 for right view
        • hold shift with those keys to see the opposite view
        -

        +

        View -> Zoom

        You can zoom in or out by using the menus, or using the Blender hotkeys:

        -
          +
          • keypad + to zoom in
          • keypad - to zoom out
          -
        +

        Select -> Shape

        @@ -204,13 +210,13 @@

        Navigation

      • previous |
      • -
      • ccad v0.12 documentation »
      • +
      • ccad 0.13 documentation »
      • Displaying »
      • \ No newline at end of file diff --git a/doc/logo.png b/doc/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..28c5cfe3d7921a691db96910518cb11c8b05e418 GIT binary patch literal 13216 zcmeIZ`9DzD68@SVq_N6tCV*Lgi(&wV@h?QG0gnfaL^5D2SKT zLYo4C(6F3h0Pl2rbqIt1(S;jYTs;N;;!pXegV#)ObC+-kgroT6AB`kIO9i~i7h!Te z!Z8$xK->)TgCGzH`GDI&;XXIve)6GV{zViWehB0|#KQRU)#&1N5~9%EZ-TnD@ho-r z`Kc>g&#x%lJ%1kDK}=fuO8wn$TRo<4o+4F7%nazyz7ai7`|O#tNt-#Vknu`qfdPm4 z+gW{zuCFBi0&ID$lj5FOx~kDDbo6E*g9-Rp%Zl&>d}@BLitjA= zct!F5F8)6dEch{zDP1KMMWB&|%AS^`!!zNpbyOTKqmaCeosu@cHf*6(2%`Pq!>8`_ zhQ}xZ<7XjCavPrXkC4RzCJsVmAFh1{^QKSrwS{=JXMV;kJaII z4Eov77)|bGtr<{AJ2DA0AUx?m4**!VWK|1#z=bS_tIecwx{NooP@hYlbjPw{JXlO^!Qb-bFTTv(~s?q zRZ~Vafu=K?H%F}_<-9(3@MV9w;H3lCgTHK_d!Q*&Rfq~0$>1@MxQQmo-*vr*N=~4%z3SBdQ$;$Y-CVuqf{>e zl4EkP*v93y#KfW_@o*O3nspz2IY16pRInZJ>wS4&;PYX*DkesG|3J={+mf;qiuKt@ zTd4K}o*0$sa4ZvcgmMJurojh?l3Oly?W#oGp^nkcHT>0H!kw5A=E{y&u?>F8&;lDjo9`v4R1)FBBf^KK#+v zYCbtH4AUOMKOV&VdjTgsV2|xax(85S>_DJV(A%(jOqi7TgmS$EVeLBEWAxOPP7Lg2 zswQ$6ia<@<5`w3ROst@h;{S*TRO=6uXOcSu`W71BW{bNQ%@Bh1VPmt;_)yaTmVhnz zzH|`DNsfSNf5iW2(Q@7Q0$@ec1xRh=FipL`O;rv6)w{g!wH*n2g&Pb2<;@(}jT&8O zeBa+Z=bDeF5oEjJ53GK(sR+tompA*j>B)65gq~_0bOmVfrx=$D0!{L8Ir!OFEg1g- zG9`HnXu3)91?8)(a5^3*{#6EfEo^zr;1$iWV!a5@tLo?8K$A{@-`B2)g}lvMa*#hA zg_ctfJN5kd0kvF|5cE&}Ztx6ufFD^Irrm>oO9*#{NoU^#HY9Wtrvyk>50tnzT}J!y zpIh?-V6d4KmAjo$lpBG;>f~Bn>)_~llfxFFJ&|$S?e|FAyoz5P>Snb2OBU-cVdvp$ zJ36UPs~$s!l7d*1Y|V1^qWlaC(%j5Q%?Fj~h+k9lLKfhey#lHuo6 zQyhYDlF$7gG)a8A<@Fn&WmBym!v_x$2O2Ib-9MruV~MRQ_)A#*OjzOb3Vg5)Oq*5X z><-5@#nD3we*TEpaL&A{+I!{jQTf1P7U#X z|0?&+S7wLKe*@PcH~1Rqv(cBUBw#awEevvJ?l&;Nvr!=rwDTmD>*84h$fHSb7dkrC0yK-W# z-twdIpVhzF7-R9X&|}P^5lZo?P*ZIJ;GQh4LS;e48d>JMX&^4$AF1_pR_7H|t z1$R}>geHyfn8%=|oyx1&8>a+Y%K#c18A|RWJD7CiO<;zm68a@vwtE^`k6$B!OOd6t zZc8@Lo;%SDeHze=Ih!k$WUFrbv8u?$qLLcyjN=8_+i0hgrU6yG8>yVrKDr;xdjS-C>iS#Y|!}H3Cx&c zy)BLBFvhIZgQ0|uLVug)h*gKS0}|cU;IX^_?EWTNM5LlZ=>9MX?YNjh$D*(3DjFDV zJa~kvW-2zR7dFzd)?)g$J3q;oyj&S$En1yXT)P+PLC(fr!DirIUCe*8d|vgR)%F9q z*8D0cEKX{3ff$oD3dKfZG1%^m$?jx-;^9Qzk=>h>bs}~Y`xDEI3-TNN(~puN?C*ef zOTYcVz2}ZL4)1h6M3Pia7%df@m`|RBT2l!Y@8%8cWTV-6;>y z5okHsQ|@|#zC6&2=Q*E!>hqz}hZO8w#-s%0D4Nf69M40mM$;tk5ji`MB=4~0(nl&C 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⊁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 bmyc+_|18u`n9E)QIFLt58j3~oX21UrJiyo( literal 0 HcmV?d00001 diff --git a/doc/select_vertex.png b/doc/select_vertex.png new file mode 100644 index 0000000000000000000000000000000000000000..cbdc229657fafb8f4809434b0fe052242c867a6b GIT binary patch literal 7695 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