From 4a4c8d25dc6ff997e90d9aa99e7e97d93b16bca6 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Thu, 5 Jul 2007 18:39:36 +0000 Subject: [PATCH] New layouts and style. They are somewhat independent (you can use the new layout with the old style and vice versa) but they belong together. Tested in Firefox, Safari, IE5.5, IE6, but there are still some features to be implemented before this is ready for 'main'. To use, first add "new_style_june_2007=true" to the app:universe section of universe_wsgi.ini (this gives you the new layout). Second change document_root to "%(here)s/static/june_2007_style/blue" in the app:static_style section. Style Features: simplifications, fewer 'hatched' images, space savings in some places, small changes to the color scheme (same general feel, but the colors are better matched). Main changes are to history, the new style support nested datasets much better. Layout features: no framesets (just iframes, some of which can be replaced with divs and ajax down the road). Frames are resizable and hideable. Tools can provide width hints and history will automatically hide (try UCSC main to see this). --- lib/galaxy/interfaces/root.py | 23 +- lib/galaxy/tools/__init__.py | 6 + static/june_2007_style/Makefile | 26 + static/june_2007_style/base.css.tmpl | 266 ++++++++ static/june_2007_style/blue/base.css | 266 ++++++++ static/june_2007_style/blue/base_bg.png | Bin 0 -> 232 bytes .../blue/button_bar_bg_light.png | Bin 0 -> 2819 bytes static/june_2007_style/blue/data_empty.png | Bin 0 -> 680 bytes static/june_2007_style/blue/data_error.png | Bin 0 -> 680 bytes static/june_2007_style/blue/data_ok.png | Bin 0 -> 675 bytes static/june_2007_style/blue/data_queued.png | Bin 0 -> 746 bytes static/june_2007_style/blue/data_running.gif | Bin 0 -> 2141 bytes .../blue/done_message_icon.png | Bin 0 -> 1490 bytes static/june_2007_style/blue/error_bg.png | Bin 0 -> 168 bytes static/june_2007_style/blue/error_large.png | Bin 0 -> 1052 bytes .../blue/error_message_icon.png | Bin 0 -> 1515 bytes static/june_2007_style/blue/error_small.png | Bin 0 -> 497 bytes .../june_2007_style/blue/footer_title_bg.png | Bin 0 -> 334 bytes static/june_2007_style/blue/form_body_bg.png | Bin 0 -> 178 bytes static/june_2007_style/blue/form_title_bg.png | Bin 0 -> 207 bytes static/june_2007_style/blue/gray_bg.png | Bin 0 -> 169 bytes static/june_2007_style/blue/hgrad.png | Bin 0 -> 131 bytes static/june_2007_style/blue/hgrad_over.png | Bin 0 -> 134 bytes static/june_2007_style/blue/history.css | 104 ++++ static/june_2007_style/blue/info_large.png | Bin 0 -> 624 bytes .../blue/info_message_icon.png | Bin 0 -> 1027 bytes static/june_2007_style/blue/info_small.png | Bin 0 -> 350 bytes static/june_2007_style/blue/masthead.css | 26 + static/june_2007_style/blue/masthead_bg.png | Bin 0 -> 128 bytes static/june_2007_style/blue/menu_bg.png | Bin 0 -> 624 bytes static/june_2007_style/blue/ok_bg.png | Bin 0 -> 168 bytes static/june_2007_style/blue/ok_large.png | Bin 0 -> 977 bytes static/june_2007_style/blue/ok_small.png | Bin 0 -> 503 bytes .../june_2007_style/blue/panel_header_bg.png | Bin 0 -> 144 bytes static/june_2007_style/blue/reset.css | 3 + .../june_2007_style/blue/tiny_arror_right.png | Bin 0 -> 2852 bytes .../june_2007_style/blue/tiny_arrow_left.png | Bin 0 -> 2851 bytes .../june_2007_style/blue/tiny_arrow_right.png | Bin 0 -> 2852 bytes static/june_2007_style/blue/tool_menu.css | 46 ++ static/june_2007_style/blue/wait_large.png | Bin 0 -> 1596 bytes static/june_2007_style/blue/wait_small.png | Bin 0 -> 562 bytes static/june_2007_style/blue/warn_bg.png | Bin 0 -> 169 bytes static/june_2007_style/blue/warn_large.png | Bin 0 -> 682 bytes .../blue/warn_message_icon.png | Bin 0 -> 1150 bytes static/june_2007_style/blue/warn_small.png | Bin 0 -> 416 bytes static/june_2007_style/blue_colors.ini | 53 ++ static/june_2007_style/blue_colors.ini.bak | 50 ++ static/june_2007_style/galaxy_icons.svg | 345 +++++++++++ static/june_2007_style/galaxy_spinner.fla | Bin 0 -> 30208 bytes static/june_2007_style/gradient.py | 72 +++ static/june_2007_style/history.css.tmpl | 104 ++++ static/june_2007_style/make_style.py | 66 ++ static/june_2007_style/masthead.css.tmpl | 26 + static/june_2007_style/png_over_color.py | 15 + static/june_2007_style/reset.css.tmpl | 3 + .../shared_images/data_empty.png | Bin 0 -> 497 bytes .../shared_images/data_error.png | Bin 0 -> 497 bytes .../june_2007_style/shared_images/data_ok.png | Bin 0 -> 503 bytes .../shared_images/data_queued.png | Bin 0 -> 562 bytes .../shared_images/data_running.gif | Bin 0 -> 2141 bytes .../shared_images/error_large.png | Bin 0 -> 1052 bytes .../shared_images/error_small.png | Bin 0 -> 497 bytes .../shared_images/info_large.png | Bin 0 -> 624 bytes .../shared_images/info_small.png | Bin 0 -> 350 bytes .../shared_images/ok_large.png | Bin 0 -> 977 bytes .../shared_images/ok_small.png | Bin 0 -> 503 bytes .../shared_images/wait_large.png | Bin 0 -> 1596 bytes .../shared_images/wait_small.png | Bin 0 -> 562 bytes .../shared_images/warn_large.png | Bin 0 -> 682 bytes .../shared_images/warn_small.png | Bin 0 -> 416 bytes static/june_2007_style/tool_menu.css.tmpl | 46 ++ static/scripts/jquery.dimensions.js | 574 ++++++++++++++++++ static/scripts/jquery.interface2.behavior.js | 230 +++++++ .../scripts/jquery.interface2.draggables.js | 249 ++++++++ static/scripts/jquery.interface2.iutil.js | 297 +++++++++ templates/history.tmpl | 6 +- templates/history_options.tmpl | 42 ++ templates/index_frames.tmpl | 6 +- templates/message.tmpl | 9 +- templates/tool_executed.tmpl | 2 + templates/tool_menu.tmpl | 14 +- tools/data_source/ucsc_tablebrowser.xml | 2 + 82 files changed, 2955 insertions(+), 22 deletions(-) create mode 100644 static/june_2007_style/Makefile create mode 100644 static/june_2007_style/base.css.tmpl create mode 100644 static/june_2007_style/blue/base.css create mode 100644 static/june_2007_style/blue/base_bg.png create mode 100644 static/june_2007_style/blue/button_bar_bg_light.png create mode 100644 static/june_2007_style/blue/data_empty.png create mode 100644 static/june_2007_style/blue/data_error.png create mode 100644 static/june_2007_style/blue/data_ok.png create mode 100644 static/june_2007_style/blue/data_queued.png create mode 100644 static/june_2007_style/blue/data_running.gif create mode 100644 static/june_2007_style/blue/done_message_icon.png create mode 100644 static/june_2007_style/blue/error_bg.png create mode 100644 static/june_2007_style/blue/error_large.png create mode 100644 static/june_2007_style/blue/error_message_icon.png create mode 100644 static/june_2007_style/blue/error_small.png create mode 100644 static/june_2007_style/blue/footer_title_bg.png create mode 100644 static/june_2007_style/blue/form_body_bg.png create mode 100644 static/june_2007_style/blue/form_title_bg.png create mode 100644 static/june_2007_style/blue/gray_bg.png create mode 100644 static/june_2007_style/blue/hgrad.png create mode 100644 static/june_2007_style/blue/hgrad_over.png create mode 100644 static/june_2007_style/blue/history.css create mode 100644 static/june_2007_style/blue/info_large.png create mode 100644 static/june_2007_style/blue/info_message_icon.png create mode 100644 static/june_2007_style/blue/info_small.png create mode 100644 static/june_2007_style/blue/masthead.css create mode 100644 static/june_2007_style/blue/masthead_bg.png create mode 100644 static/june_2007_style/blue/menu_bg.png create mode 100644 static/june_2007_style/blue/ok_bg.png create mode 100644 static/june_2007_style/blue/ok_large.png create mode 100644 static/june_2007_style/blue/ok_small.png create mode 100644 static/june_2007_style/blue/panel_header_bg.png create mode 100644 static/june_2007_style/blue/reset.css create mode 100644 static/june_2007_style/blue/tiny_arror_right.png create mode 100644 static/june_2007_style/blue/tiny_arrow_left.png create mode 100644 static/june_2007_style/blue/tiny_arrow_right.png create mode 100644 static/june_2007_style/blue/tool_menu.css create mode 100644 static/june_2007_style/blue/wait_large.png create mode 100644 static/june_2007_style/blue/wait_small.png create mode 100644 static/june_2007_style/blue/warn_bg.png create mode 100644 static/june_2007_style/blue/warn_large.png create mode 100644 static/june_2007_style/blue/warn_message_icon.png create mode 100644 static/june_2007_style/blue/warn_small.png create mode 100644 static/june_2007_style/blue_colors.ini create mode 100644 static/june_2007_style/blue_colors.ini.bak create mode 100644 static/june_2007_style/galaxy_icons.svg create mode 100644 static/june_2007_style/galaxy_spinner.fla create mode 100755 static/june_2007_style/gradient.py create mode 100644 static/june_2007_style/history.css.tmpl create mode 100755 static/june_2007_style/make_style.py create mode 100644 static/june_2007_style/masthead.css.tmpl create mode 100755 static/june_2007_style/png_over_color.py create mode 100644 static/june_2007_style/reset.css.tmpl create mode 100644 static/june_2007_style/shared_images/data_empty.png create mode 100644 static/june_2007_style/shared_images/data_error.png create mode 100644 static/june_2007_style/shared_images/data_ok.png create mode 100644 static/june_2007_style/shared_images/data_queued.png create mode 100644 static/june_2007_style/shared_images/data_running.gif create mode 100644 static/june_2007_style/shared_images/error_large.png create mode 100644 static/june_2007_style/shared_images/error_small.png create mode 100644 static/june_2007_style/shared_images/info_large.png create mode 100644 static/june_2007_style/shared_images/info_small.png create mode 100644 static/june_2007_style/shared_images/ok_large.png create mode 100644 static/june_2007_style/shared_images/ok_small.png create mode 100644 static/june_2007_style/shared_images/wait_large.png create mode 100644 static/june_2007_style/shared_images/wait_small.png create mode 100644 static/june_2007_style/shared_images/warn_large.png create mode 100644 static/june_2007_style/shared_images/warn_small.png create mode 100644 static/june_2007_style/tool_menu.css.tmpl create mode 100644 static/scripts/jquery.dimensions.js create mode 100644 static/scripts/jquery.interface2.behavior.js create mode 100644 static/scripts/jquery.interface2.draggables.js create mode 100644 static/scripts/jquery.interface2.iutil.js create mode 100644 templates/history_options.tmpl diff --git a/lib/galaxy/interfaces/root.py b/lib/galaxy/interfaces/root.py index 01e59c6aac3..173a761c5b9 100644 --- a/lib/galaxy/interfaces/root.py +++ b/lib/galaxy/interfaces/root.py @@ -24,14 +24,18 @@ class Universe(common.Root): @web.expose def index(self, trans, id=None, tool_id=None, mode=None, **kwd): - if mode: - trans.set_cookie(name=self.pref_cookie_name, value=mode) + # if mode: + # trans.set_cookie(name=self.pref_cookie_name, value=mode) + # else: + # mode = trans.get_cookie(name=self.pref_cookie_name) + # trans.ensure_valid_galaxy_session() + # result = trans.fill_template('index_frames.tmpl', mode=mode) + # return [ result ] + if trans.app.config.get( "new_style_june_2007", "false" ) == "true": + return trans.fill_template( "root/index.tmpl" ) else: - mode = trans.get_cookie(name=self.pref_cookie_name) - trans.ensure_valid_galaxy_session() - result = trans.fill_template('index_frames.tmpl', mode=mode) - return [ result ] - + return trans.fill_template( "index_frames.tmpl" ) + @web.expose def tool_menu( self, trans ): return trans.fill_template('tool_menu.tmpl', toolbox=self.get_toolbox() ) @@ -244,6 +248,11 @@ class Universe(common.Root): self.app.model.flush() return "OK" + @web.expose + def history_options( self, trans ): + """Displays a list of history related actions""" + return trans.fill_template( "history_options.tmpl", history = trans.get_history() ) + @web.expose def history_delete( self, trans, id = None, **kwd): """Deletes a list of histories, ensures that histories are owned by current user""" diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index 34e9e1ac6c0..7eec6077937 100644 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -258,6 +258,12 @@ class Tool: cls = action_elem.get( 'class' ) mod = __import__( module, globals(), locals(), [cls]) self.tool_action = getattr( mod, cls )() + # User interface hints + self.uihints = {} + uihints_elem = root.find( "uihints" ) + if uihints_elem is not None: + for key, value in uihints_elem.attrib.iteritems(): + self.uihints[ key ] = value # Tests tests_elem = root.find( "tests" ) if tests_elem: diff --git a/static/june_2007_style/Makefile b/static/june_2007_style/Makefile new file mode 100644 index 00000000000..448ff064b21 --- /dev/null +++ b/static/june_2007_style/Makefile @@ -0,0 +1,26 @@ +menu_bg.png : + ./gradient.py 9 1000 DDDDFF 9999FF FFFFFF 0 0 FFFFFF 1 1 > $@ + +base_bg.png : + ./gradient.py 9 1000 EEEEFF - FFFFFF 0 0 FFFFFF 1 1 > $@ + +masthead_bg.png : + ./gradient.py 9 50 023858 000000 000000 0 0.5 000000 1 1 > $@ + +footer_title_bg.png : + ./gradient.py 9 30 023858 000000 000000 0 0.5 000000 1 1 > $@ + +form_title_bg.png : + ./gradient.py 9 50 ebd9b2 b9a780 FFFFFF 0 0 FFFFFF 0.5 1 > $@ + +ok_bg.png : + ./gradient.py 9 200 AAFFAA - CCFFCC 0 0.5 CCFFCC 1 1 > $@ + +error_bg.png : + ./gradient.py 9 200 FFAAAA - FFCCCC 0 0.5 FFCCCC 1 1 > $@ + +warn_bg.png : + ./gradient.py 9 200 FFFFAA - FFFFCC 0 0.5 FFFFCC 1 1 > $@ + +gray_bg.png : + ./gradient.py 9 200 AAAAAA - CCCCCC 0 0.5 CCCCCC 1 1 > $@ diff --git a/static/june_2007_style/base.css.tmpl b/static/june_2007_style/base.css.tmpl new file mode 100644 index 00000000000..469e3d700df --- /dev/null +++ b/static/june_2007_style/base.css.tmpl @@ -0,0 +1,266 @@ +@import url( "reset.css" ); + +body +{ + font: 75% verdana, "Bitstream Vera Sans", geneva, arial, helvetica, helve, sans-serif; + background: $base_bg_bottom; + color: $base_text; + background-image: url(base_bg.png); + background-repeat: repeat-x; + background-position: top; + margin: 10px; + margin-right: 15px; + margin-left: 15px; +} + +a:link, a:visited, a:active +{ + color: $link_text; +} + +h1, h2, h3, h4 +{ + color: $header_text; + /*text-shadow: #bbb 2px 2px 1px;*/ +} + +hr +{ + border: none; + border-bottom: dotted $base_text 1px; +} + +div.toolForm +{ + border: solid $form_border 1px; +} + +div.toolFormTitle +{ + font-weight: bold; + padding: 5px; + background: $form_title_bg_bottom; + background-image: url(form_title_bg.png); + background-repeat: repeat-x; + background-position: top; + border-bottom: solid $form_border 1px; +} + +div.toolParamHelp +{ + font-style: italic; +} + +div.toolFormBody +{ + padding: 5px; + background: $form_body_bg_bottom; + background-image: url(form_body_bg.png); + background-repeat: repeat-x; + background-position: top; +} + +div.toolFormBody div.toolFormTitle +{ + background: transparent; + border: none; + font-weight: bold; + border-bottom: solid $form_border 1px; + margin-bottom: 5px; +} + +div.toolHelp +{ +} + +div.toolHelpBody +{ + width: 100%; + overflow: auto; +} + +select +{ + max-width: 300px; +} + +.errormessage, .warningmessage, .donemessage, .infomessage, .welcomemessage +{ + padding: 10px; + padding-left: 52px; + min-height: 32px; + border-top: 1px solid $error_message_border; + border-bottom: 1px solid $error_message_border; + background-color: $error_message_bg; + background-image: url(error_message_icon.png); + background-repeat: no-repeat; + background-position: 10px 10px; +} + +.warningmessage +{ + background-image: url(warn_message_icon.png); + border-color: $warn_message_border; + background-color: $warn_message_bg; +} + +.donemessage +{ + background-image: url(done_message_icon.png); + border-color: $done_message_border; + background-color: $done_message_bg; +} + +.infomessage +{ + background-image: url(info_message_icon.png); + border-color: $info_message_border; + background-color: $info_message_bg; +} + +.welcomemessage { + padding-left: 10px; + border-color: #6666AA; + background-color: #CCCCFF; + background-image: none; +} + +.errormessagesmall, .warningmessagesmall, .donemessagesmall, .infomessagesmall +{ + padding: 5px; + padding-left: 25px; + min-height: 25px; + border-top: 1px solid $error_message_border; + border-bottom: 1px solid $error_message_border; + background-color: $error_message_bg; + background-image: url(error_small.png); + background-repeat: no-repeat; + background-position: 5px 5px; +} + +.warningmessagesmall +{ + background-image: url(warn_small.png); + border-color: $warn_message_border; + background-color: $warn_message_bg; +} + +.donemessagesmall +{ + background-image: url(ok_small.png); + border-color: $done_message_border; + background-color: $done_message_bg; +} + +.infomessagesmall +{ + background-image: url(info_small.png); + border-color: $info_message_border; + background-color: $info_message_bg; +} + +.errormark, .warningmark, .donemark, .infomark, .ok_bgr, .err_bgr +{ + padding-left: 20px; + min-height: 15px; + background: url(error_small.png) no-repeat; +} + +.warningmark +{ + background-image: url(warn_small.png); +} + +.donemark +{ + background-image: url(ok_small.png); +} + +.infomark, .ok_bgr +{ + background-image: url(info_small.png); +} + +table.colored +{ + border-top: solid $table_border 1px; + border-bottom: solid $table_border 1px; +} + +table.colored td +{ + padding: 5px; +} + +table.colored tr.header +{ + background: $table_header_bg; + background-image: url(form_title_bg.png); + background-repeat: repeat-x; + background-position: top; + border-bottom: solid $table_border 1px; + font-weight: bold; +} + +table.colored tr +{ + background: $table_row_bg; +} + +div.debug +{ + margin: 10px; + padding: 5px; + background: #FFFF99; + border: solid #FFFF33 1px; + color: black; +} + +div.odd_row +{ + background: $odd_row_bg; +} + +#footer { + position: fixed; + background: $footer_bg; + width: 100%; + left: 0px; + bottom: 0px; + color: white; + z-index:10000; + opacity:0.9; + filter:alpha(opacity:90); +} + +#footer a { + color: white; +} + +.footerheader +{ + padding: 5px; + text-align:center; + background-image: url(footer_title_bg.png); + background-position: bottom right; +} + +.footermenu +{ + /*border-top: solid white 1px; */ +} + +.footermenuitem +{ + margin-top: 5px; + margin-bottom: 5px; + margin-right: 5px; + margin-left: 25px; + display: list-item; + list-style: square outside; +} + +.footermenumessage +{ + margin: 5px; +} \ No newline at end of file diff --git a/static/june_2007_style/blue/base.css b/static/june_2007_style/blue/base.css new file mode 100644 index 00000000000..0f6e46350ae --- /dev/null +++ b/static/june_2007_style/blue/base.css @@ -0,0 +1,266 @@ +@import url( "reset.css" ); + +body +{ + font: 75% verdana, "Bitstream Vera Sans", geneva, arial, helvetica, helve, sans-serif; + background: #FFFFFF; + color: #303030; + background-image: url(base_bg.png); + background-repeat: repeat-x; + background-position: top; + margin: 10px; + margin-right: 15px; + margin-left: 15px; +} + +a:link, a:visited, a:active +{ + color: #303030; +} + +h1, h2, h3, h4 +{ + color: #023858; + /*text-shadow: #bbb 2px 2px 1px;*/ +} + +hr +{ + border: none; + border-bottom: dotted #303030 1px; +} + +div.toolForm +{ + border: solid #d8b365 1px; +} + +div.toolFormTitle +{ + font-weight: bold; + padding: 5px; + background: #d2c099; + background-image: url(form_title_bg.png); + background-repeat: repeat-x; + background-position: top; + border-bottom: solid #d8b365 1px; +} + +div.toolParamHelp +{ + font-style: italic; +} + +div.toolFormBody +{ + padding: 5px; + background: #FFFFFF; + background-image: url(form_body_bg.png); + background-repeat: repeat-x; + background-position: top; +} + +div.toolFormBody div.toolFormTitle +{ + background: transparent; + border: none; + font-weight: bold; + border-bottom: solid #d8b365 1px; + margin-bottom: 5px; +} + +div.toolHelp +{ +} + +div.toolHelpBody +{ + width: 100%; + overflow: auto; +} + +select +{ + max-width: 300px; +} + +.errormessage, .warningmessage, .donemessage, .infomessage, .welcomemessage +{ + padding: 10px; + padding-left: 52px; + min-height: 32px; + border-top: 1px solid #AA6666; + border-bottom: 1px solid #AA6666; + background-color: #FFCCCC; + background-image: url(error_message_icon.png); + background-repeat: no-repeat; + background-position: 10px 10px; +} + +.warningmessage +{ + background-image: url(warn_message_icon.png); + border-color: #AAAA66; + background-color: #FFFFCC; +} + +.donemessage +{ + background-image: url(done_message_icon.png); + border-color: #66AA66; + background-color: #CCFFCC; +} + +.infomessage +{ + background-image: url(info_message_icon.png); + border-color: #6666AA; + background-color: #CCCCFF; +} + +.welcomemessage { + padding-left: 10px; + border-color: #6666AA; + background-color: #CCCCFF; + background-image: none; +} + +.errormessagesmall, .warningmessagesmall, .donemessagesmall, .infomessagesmall +{ + padding: 5px; + padding-left: 25px; + min-height: 25px; + border-top: 1px solid #AA6666; + border-bottom: 1px solid #AA6666; + background-color: #FFCCCC; + background-image: url(error_small.png); + background-repeat: no-repeat; + background-position: 5px 5px; +} + +.warningmessagesmall +{ + background-image: url(warn_small.png); + border-color: #AAAA66; + background-color: #FFFFCC; +} + +.donemessagesmall +{ + background-image: url(ok_small.png); + border-color: #66AA66; + background-color: #CCFFCC; +} + +.infomessagesmall +{ + background-image: url(info_small.png); + border-color: #6666AA; + background-color: #CCCCFF; +} + +.errormark, .warningmark, .donemark, .infomark, .ok_bgr, .err_bgr +{ + padding-left: 20px; + min-height: 15px; + background: url(error_small.png) no-repeat; +} + +.warningmark +{ + background-image: url(warn_small.png); +} + +.donemark +{ + background-image: url(ok_small.png); +} + +.infomark, .ok_bgr +{ + background-image: url(info_small.png); +} + +table.colored +{ + border-top: solid #d8b365 1px; + border-bottom: solid #d8b365 1px; +} + +table.colored td +{ + padding: 5px; +} + +table.colored tr.header +{ + background: #ebd9b2; + background-image: url(form_title_bg.png); + background-repeat: repeat-x; + background-position: top; + border-bottom: solid #d8b365 1px; + font-weight: bold; +} + +table.colored tr +{ + background: white; +} + +div.debug +{ + margin: 10px; + padding: 5px; + background: #FFFF99; + border: solid #FFFF33 1px; + color: black; +} + +div.odd_row +{ + background: #FFFF99; +} + +#footer { + position: fixed; + background: #023858; + width: 100%; + left: 0px; + bottom: 0px; + color: white; + z-index:10000; + opacity:0.9; + filter:alpha(opacity:90); +} + +#footer a { + color: white; +} + +.footerheader +{ + padding: 5px; + text-align:center; + background-image: url(footer_title_bg.png); + background-position: bottom right; +} + +.footermenu +{ + /*border-top: solid white 1px; */ +} + +.footermenuitem +{ + margin-top: 5px; + margin-bottom: 5px; + margin-right: 5px; + margin-left: 25px; + display: list-item; + list-style: square outside; +} + +.footermenumessage +{ + margin: 5px; +} \ No newline at end of file diff --git a/static/june_2007_style/blue/base_bg.png b/static/june_2007_style/blue/base_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ed02935794b997c7541288ac9fc7366173ec3a GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^oD2-iFF4qMES|(GtAG?+lDE4H!+#K5uy^@npa^@3 zr>`sfb#_)k6Omu6E;oQeU7jwEAr*7po^oVlU|?Y}`0~C+Ng$zm{p2Nl#jKu_ROp55 aG8wIUxzA{Q2>J_j6@#a%pUXO@geCwdj7M_- literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/button_bar_bg_light.png b/static/june_2007_style/blue/button_bar_bg_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3b31beb2a769b97daf5e8501e045b48ce4703c65 GIT binary patch literal 2819 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 QuQkYiPgg&ebxsLQ0Dxf`ga7~l literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/data_error.png b/static/june_2007_style/blue/data_error.png new file mode 100644 index 0000000000000000000000000000000000000000..e081c9c44ded12d81fcf8314f7ef24ecf8a08d6b GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^{28T81A!bQl>J7ywm)lr?3)d7qxLqv+@y$6(>zZoIr~ZQ9{yB!B&u zl-yTSdG^480}zEx8FBmn$sL}quf$_$$ip*P-PnMIeQ{PvSzE{RCk6&JKa~z`sQYWn z1_V%(lXjH76}hvLiAmt7q@(~Z4-lxS@$f8N%EQysBT(t)*1^3l)|wUKjKm$4pV{xU ztqhiw`0-OxLPl0m>cjukb^_J>o|{av7el2q|GO6+KT{XYW(pIJu^ zeE4mCq_h6Nk%7<5LkB+mwa&8GQ>V)faZ!?hXl;+uiNl8vT)1)Kz=2a-7f+lyb08r0 z>;VO(rd5$4Ukst@CQPj46;DV`PRPhjO$Z18I`R|iqL*)@+1LsTJIX661ZJhC#4$q^ z2ZTRw;J$Ljz#t>r*x=8vqXz<_Pai0F#>4FF%6dehva;i#&x9MPKvh8X!01uAw2+rU zQGns#$?3(8!HT(!?!gSX4T}2b^4;F5FVaeFGTbr!T7>rEy~4Kb_bT=MyI0tQ^);#Z zM{xcAZ~Oy;gA4gW~fg&V)kdd QuQkYiPgg&ebxsLQ0Dxf`ga7~l literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/data_ok.png b/static/june_2007_style/blue/data_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..63e81cce9489804b96093257e3f81b4b6216a1dd GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^{21}JofV%(xPio1m`~Lgx>vhN9 ze&?&Xk$CE{406yZ>9RBuRH$A zF#`d_WUD_PFKE{If$W;0WZmo7>fE}}Wlv9IW8=h!2ipHWYqyuPVudRG_VEROjg&I$ zV#zm^vJ(IP{Xae7w?%hjBcsqhkbfB=%65HxyGui_x5noWPppwG4+vb2^H1IJ<*!oA zyJOp5FM_(U>c{6solR`ae$H%cY;Hiz*2cC{jg2#mvrT+|yulUw)vks=9-e341XVvN zJ-mWP_`>5W=@yIX<|I!3B*vy5C*G!WF$b)7le#L;{QtF17j@3B`yc^v$|Yc+^9mb0 z-_!ycG1p9_M5nYb{Uvh o0h2&WW(rUSs%VKyI3#G98KPESPhfdFVdQ&MBb@08%$3&Hw-a literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/data_queued.png b/static/june_2007_style/blue/data_queued.png new file mode 100644 index 0000000000000000000000000000000000000000..355d6bbf063e5ccda72ea8a8f618ab88636b3598 GIT binary patch literal 746 zcmeAS@N?(olHy`uVBq!ia0vp^{2m>i_>+S^fRp z%=>$*r$7At{XNg2Lx*@KPMpZIX3ZK4)BC&2&;R-N_xEz3YM|*MXA}h)9Dr^z*I?n~ zaC5Dy^<`iy{bhDw))LkklDlT_RyJO#b%v**wpQUB7wJA|>a91cm0+tF@i|{P>!uP8IEX7QQ~N6X*$0z@0PXbui>`I5=HC$K+)f zlgx(4ts9pG9BXJO`?dVRzISmmJzf5&uIj4RU)42JQR&TI#)9&5mS@gXfpy!QF$4uW z^MMksFssFnypQlnRjlO^+s0G!nsbM?lAPyul{07TcUzyce36%;wu);vw=uKlgc^H@ za|MABS^M;qsP7jC%j$1BhhJY`FFDVq^3aF(_w9H5=$E&bsQdHd;DW`AKTAP0Oqx9T zvBUKa5e*HgiH&pS$Us9jC?v!rI4H=f^E5+_gQw@qC5sjQyQWCl^VL?xUN%wlE;{rn~Pw(o;)KrVx)tDnm{r-UW|=*34A literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/data_running.gif b/static/june_2007_style/blue/data_running.gif new file mode 100644 index 0000000000000000000000000000000000000000..ba19ad723f2c0075ccd11985c6563535871471eb GIT binary patch literal 2141 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 YSPan?vb*?kDgcS<>+SDVOQmQ04{<8Mh5!Hn literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/error_bg.png b/static/june_2007_style/blue/error_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a68067de6966a56c77f33d2129757acdf3c1f6c6 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^oIrengAGVpsh(y8Qfx`y?k)`fL2$v|<&%LT>?NMQ zuI$&@Sp`i*ezCgT01A0|x;TbJw7xxekdr}yhvlHloBc-BmxLzGS1Nwrc>7NFTMaWU y21fxFD7t>J=S=;3lgvvZvvzq*US^J9s#zJDvv%}#dYVx3viqYU=WD^Cb5oTUuLa1t(8JEC!JXT)1G8&(6Zxv-!yJIqNL1zWxSqG@lnBB>nxcW{ql} zn}c*3%F9*z!h&SMix*3V1#a5Ni)Cp{PReX%XH|PynMv+>aQSi=a)78!_KmhQ-oAzI zZkV56+VA>xc>Fk2NT4#j0DzY-;mQ@6Wf1P%fxCA@hsy{k4pmiVs$~$3>P4p@Y^0G0 zho&ajx;6jvO`D*rD}2d@WOxCMjj(rbVZV4B+S`i~Fj~;fao}h`roMj0UeNcHx@$cQ;^_ios;r;vbqHZX*gMHA7eq+UshYM+^b)2HQo zeqQ$d-8*x9QaKBxaWmex6;xIB9% zvr7BA78l{-MR@fpXf}dmQqDyxl^xUH54UgYo{3Dmo|~|}NcWn>$cS`7Gc$1Q8a#QD zpFD%{aapBQO1h!@_jQk9p9|2tVrdwkqxXd?SIXWOgWxffKrFXCS4);W*ycNCQ7n1z zm`q!)+zrf{DSdkkeLMaP!^q5E>kop9wy3NH`p~nZIHdg;wL!Nc_^&UgrjUPfJ^u;v Wjz5uYe6YR%00006c*njp zs7kTpmwTjSv+%nXEI_J^4Y|6GK@ANrL(~$Dq>0M=);mBj-VIbc*oZym^O{eP_JvQ4;WY9M`$I$7q zG;@wJpUZfp6M7eIIXpK}_f#U0Xo;Cj#muOqOgZBPgG-;WIZqbmi7xG}bb7)mFL`%2 z0*{R&a708&@-dvP$(-mM}kccr}UI)K9xknFq<|TmWjy z4nUS={Ob@NZxTKKiAa#oTy0xa$|TRYtnyzraN8SGIQuCK>6HG@4>40?pPEPfarmi1T-x2-6is^j2L9BBw{*&1wM zWxGl+@K?Hj&DiTu5KKzyo9^v}pv1&xi+2qTcUD_AFudSXFqCHk^5qHAvE{4v^UG#q zP@%2HFfm`G1qsd?0Myi-Hx%z5LXh_bX70l}M)(CIn&`fS;)tVCkyxD z@+iXVXSjn>?APf60R%A^3ag6WI<#_PGK0c;4%6e*yaU`D4))_j^3_~1$9QvTzc?$l zy?!Ui|KkDi(=RtD6kr32l2%kzt!SJ{XE5RjTXts&z6vJ4-chue5r0@1kMh&lD97iv9 zzsN-wP+y@;(wLSP^m!Wl(y~{CJrETz<&=5v9`>BJaLO@r&XOvZG5x0)o}?T^ z)4NJzQ544U-#JDr@d6S{?NkIC^8%7IHiFn%Svg=Qf}j?Hg0^0m#|YS@Ir;(aq#94)=Sb8x`hTYw)Q936FnFqVorw$$6p_BP$!0d{qS(iUtRHc<8K8+xZ=)WZ7-x5W6~s n>W?5zu-XJ^e;7^u$E*4aKDCVI=V)#_00000NkvXXu0mjf?*HC< literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/footer_title_bg.png b/static/june_2007_style/blue/footer_title_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..2c258128a60dc2b8161106708cda4733d4f203cd GIT binary patch literal 334 zcmV-U0kQsxP)w<+ zFq$HC*6p_efG!*S=l*Oi=CDSr8vD(Y<4uETlct-ASEzy25kN!4Xsi zadwSnW7ol|0(-teb`EK>kaSG84gj#%TRe*l#s*;T56H$oo&!~meaw)4Mw5kBV$$2L zzrJ4ZEYi>F-24scZsIvm7TDqwN!Mtyuo8@<3jp79JPXOH0gx}Co#I(&B}SP;XxB%_ g0%EAv#~AVa1J8pWf?jNiRR91007*qoM6N<$f-H=SlK=n! literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/form_body_bg.png b/static/june_2007_style/blue/form_body_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0cf6caf7fb213b8b9ecba2157a5b7e589ef8eaf5 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^oD2+%UpUx+toN_jlYtallDE4H!+#K5uy^@npa^@3 zr>`sfb#_)k6Omu6E;oQeA)YRdAr*7po?6Jrz`((*@b&-v=bUE3DOR4Z48kXgJb_!*VJ(Z&%DCw?6e_DmFJct~5>kSpRIw=M?`_ zCu%=NCB-hVn>#B{bLX7G>-(BKzg6^UPTMh|nz8zf_Y3dCYFmJoGkCiCxvX?NMQ zuI$&@Sp`i*dzni7fI{A$E{-7)t#2=G^C_Q>4yF}Jx%j=#k)j}sPiDzC1qwgwKp7&WB-R8*h0*z(xboFyt=akR{ E06D-lD*ylh literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/hgrad.png b/static/june_2007_style/blue/hgrad.png new file mode 100644 index 0000000000000000000000000000000000000000..e952d3daefaaa64f88009d6f3ab9511e4381f395 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT|>R8<0#)^t}M2*pj^6U4S$Y{B+)352QE?JR*yM zvR8<0#)^t}M2*pj^6U4S$Y{B+)352QE?JR*yM zv978y+C-15K{q6t$`u|3MetvF$cz=IAPyN3?i47ko-t^&dVPc57 WC};lZ?Vevi9SokXelF{r5}E*Grz%wd literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/history.css b/static/june_2007_style/blue/history.css new file mode 100644 index 00000000000..d0cbbb0e35b --- /dev/null +++ b/static/june_2007_style/blue/history.css @@ -0,0 +1,104 @@ +body +{ + background: #C1C9E5; + color: #303030; + background-image: url(menu_bg.png); + background-repeat: repeat-x; + background-position: top; + margin-top: 5px; + margin-right: 0; + margin-left: 0; + border: 0; + padding: 0; +} + +a +{ + color: #base_text; +} + +div.historyLinks +{ + padding: 5px; + margin: 5px; + padding-right: 5px; + padding-left: 5px; + margin-bottom: 5px; +} + +div.historyItem +{ + margin: 5px; + margin-right: 0px; + padding: 5px; + padding-right: 11px; + + border: solid #888888 1px; + border-left: solid #888888 5px; + border-right: none; + background: #EEEEEE; + background-image: url(gray_bg.png); + background-repeat: repeat-x; + background-position: top; +} + +div.historyItem div.historyItem +{ + margin-right: -11px; +} + +div.historyItem-ok +{ + border-color: #66AA66; + background: #CCFFCC; + /* + background-image: url(ok_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-error, div.historyItem-empty +{ + border-color: #AA6666; + background: #FFCCCC; + /* + background-image: url(error_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-running +{ + border-color: #AAAA66; + background: #FFFFCC; + /* + background-image: url(warn_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-queued +{ +} + +div.historyItemBody div +{ + padding-top: 2px; +} + +pre.peek +{ + background: white; + color: black; + width: 100%; + overflow: auto; +} + +pre.peek th +{ + color: white; + background: #023858; +} \ No newline at end of file diff --git a/static/june_2007_style/blue/info_large.png b/static/june_2007_style/blue/info_large.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac030b0b2431ce2c344135dd905608f4c61f886 GIT binary patch literal 624 zcmV-$0+0QPP)lVYdpqJv0r zkfI=>PF56c9PUzWZOA26)4>NqnlIno`zE=&erGw3gBL>32aE#4z=%F~dp1zq0Vlw* zJ{P6r+AG;=Wn_C>i7FQNT~*52u7@I*4YE5 z!nE$~g_jq&zYir2updJ$uc5fP2`%h090R&cvojer;+s(_!P!}016{Eo*^`qnG}Qdw z&Q2%;E&tK9%)fy^V<4Ybt6)41>+2C1aOZm>@iXGk2A{wN9wO9#uu+9$RGiqT>NP5k z+rmH*@ZKE!9u82nrKAkxBQTJclCnDu7f^-bUva55!A_)OWc0__IN9ROixUaQ4jnqs zsmBj=!2kb;3Jy$G=b3JvoAjXed!J*YQ1`{g2?B?i?d{vn8yWHJI`Igo45-ej@W94o z9`E->a(xGbvhrbjclS2uurMAz14D?Krsyv}3=gXY>0G~_o^ax9YC=JAa>9dW zYUddL|2H;xd;fgGcaZ!H39yMtHpS2W|G&Rqa^KlmM?XCKTg_&f#KXmrkkHZZ{vm!} zO2UdYDG3$-=UKFKa2eTnc_#}brlvk%0_*KLt0>5zz{7CB-lVS2iACY9)SA;;3kq+T z+babBeO6p_E?e-;-|5cVr>+EP00zsiFP#r>-rUTy?MT+Nsi_GM9vlz}4_Cj($O8oF z=Z$XE{W|i22jZ-%Z#@q${{PR@b0lj|-Q329ACrAP%36CA9{`D+pJ!+TaY9nnzc~-t zGovIWs;VR;JUk5z z{`@(4;KMiFm(z?53=C|lj~#$1{Wr&PqRm?#p7Zl2t`=sRXP+Lx0x{(0$7aU~5xm!~ zO%Unly|eG^fr6h#nS4Khq5=>FimuI@jhUMlDwgd$JKM9Iff)$EGK)MXdV>-mFd(D~ zK=vRrlr(vL=5lGWT3Sj;w2F04bQrq@*7vKoKAX^#V}MfuP-&**(0B3ZN!Unv^sl zIVI)5P4fk!2`MQ*^i_{4K!f7ZPfqt^xY2DOyeY^n&LvP84)ZocK`QknhJgUQyxfor{$ZE6#WdN+b|-r9P~a r1Z$A`a847!4$ literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/info_small.png b/static/june_2007_style/blue/info_small.png new file mode 100644 index 0000000000000000000000000000000000000000..81522c4447fc694b4262210a77378ec0e3a15d50 GIT binary patch literal 350 zcmV-k0iphhP)|Qo$>D0U_1a*4kJ`NM)~WtRjL;iY-hw zD@y!eVE%n?9*;Ls2mz$2JG|lm{t&MD>bxKysiXOp^uQh79DI=xQb7dMZ`d|Y53V|DqBQdTh* w|CARohVqX2#b%RNdc7_cw;0~m+qe9xZ+lBqfp03IYybcN07*qoM6N<$g4DN4&fv$_Y+(dgtTp5&E Wn3y-M?`Q_9X7F_Nb6Mw<&;$VGs3V#H literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/menu_bg.png b/static/june_2007_style/blue/menu_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a181ef9000d85878c8142b9e4a9dc4ccdab4ef06 GIT binary patch literal 624 zcmV-$0+0QPP)ZhZpDQ6H zD325%K8(fC7{3RQA+MGz9qn76@9(M0^>YJ+g#NF6u4>BP(^|>ldiPXypD5x3j_WBq zT%EgCi1Q>QB=jh>j~3m5c4M0IB|kbGv6MBR9WNRYA*9CB(Ws%7{4&Q`v{KP}-VQN$ z`O)EojM_rwx~r;vfYAsTLxj3|;zgsq8a1CdnL^0;PlWVLw{8y~nczG#tZ`yA5}KRr zEoDLvpJd@Ing|iSfCwSCZpPZNP&hvkm-#L&x&sk+WyH9q9S-&apq_{jQRBN7&d1f$ zU@yq_YAcnw5HlJ9EgINQCp1@2Lfv&o^rz@>gJUhvGsC^wM5z#=-Piybjnq>YBHAGl zB3iVNke-=`($R=m@_|wzS~M{l5g|_=+NW#D;l@JhX|6vZeVkbDh`9jxhQCq~5_%LO zS~L;zbZxF@BBK$om zP^kdl00G8YB81eF%Y3ZHk$N&3b@jyaaiACY@gpR}v_q|@0}+=w5%Rl6La&c&dcjzT z7>$s*z-A41Wpm|Agovd~s9W-RvDU5IT!`qI#Arl>jQ>c;|8klO5tkIPhel}b){Pkd zkuikWPe*LSR!>Ao>ls|~m9J4-NJyv+A=|Kl^)8=SaTZN{L+uYAc#330EiI@30000< KMNUMnLSTXs%N2nD literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/ok_bg.png b/static/june_2007_style/blue/ok_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..dd0f2731d641aac0a64a41481aaa760010186840 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^oIrengAGVpsh(y8Qfx`y?k)`fL2$v|<&%LT>?NMQ zuI$&@Sp`i*ezCgT01A0|x;TbJw7xxekdr}yhvlHloBc-BmxLzGS1Nwrcsr*0t%jKv ygQEZo6kWe~=0yE_lgvvZvvzq*US^J9s#zJzvUafshx`Vb%HZkh=d#Wzp$PzB4K<(u literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/ok_large.png b/static/june_2007_style/blue/ok_large.png new file mode 100644 index 0000000000000000000000000000000000000000..e68759ac9cb268f6bc00b855072951fbbebe8125 GIT binary patch literal 977 zcmV;?11|iDP){vz zE7Py?xbPVZ#}q||ELL2AIs)}qdr#_L`v5K%TxH9otpmUNWFM8@om}iZKRB!hm=$tK zU;hr&3?C;P%zVOUVIBHH_Mx7N*$qsLgjr+4p?fO?S9!sMIwY zMq^0}C!BSRwT(5|9{jw|%^x=srOwg#*U?f!adrtCCTuj>g5e+)-W^ub9cc-$qth_$ zY?S@vw>sVi-dGlp5H*eiEYDgIWv`rE#oRG-O}3B0j~wwGva&2-RKg+q^}6xvsdm(G zzwi-z^QsZ5cuv)wR6F)Z#qaV~@>}*;<@XIKpkUN=E)`q>z$R?e=DWE!`vDF;pE_qf zS+*=w{9XSYZuy(6k^}gJ{RJ0*ZP7kKOW{+NWiN~J`1|~fvyC&^dc(aGwauqJ_#qhq z7d4C-E(RpWz8t0VPiK@Tk{sap*JH_&12hZ!3o?N3#Hoh)`c$sXxK43Saoknf1MMtq zn@1q_)D;iEfLu*YuZ{7dK8HG3{jQXQJ~v?*ju}(stw@#}pfTitr&0qGSU&V z87Y+|z+sFpHdXYfHA-ULir{~~oW>9`BG>c3;KWO6GGuTJ00000NkvXXu0mjfi;T#7 literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/ok_small.png b/static/june_2007_style/blue/ok_small.png new file mode 100644 index 0000000000000000000000000000000000000000..dee022cee564f964b005862fe9bb72b92d31c90c GIT binary patch literal 503 zcmV^ z)3Iw)Q547V&wEM0A~C3_MFa;aQHQ9Zpo5T7bckS!ZsK2HOE(cgL~#^X4WhV-o53Ok zQBXnZQVVvlM8}rWsvuZF@!39ymxLISfWPf>&i8Wf@BB^>$FX*0=7KSlF^oLwm_;or z#?$S+K@-l*1-nqe8NF4-g{T;>w%`UhkDa}!Kq$5WpHYa4@oLzpRr-PZHy!ZdVBP85 zxJF+Eg7iCMc+%&oUJSid%8r=%F{AYHIARzNCFbpB4wxzbazxRQKUkk1*U+xB0qhfrvZ^F_t{)jrk te-qZoYC)3Smb!q|CP>?2H1$7Q^%q6FjoTAoV;KMd002ovPDHLkV1mt7=U@N; literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/panel_header_bg.png b/static/june_2007_style/blue/panel_header_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..37ce50151b8615ef483b2138c1ed4ec4d4b8d456 GIT binary patch literal 144 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 BNGAXQ literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/tiny_arrow_right.png b/static/june_2007_style/blue/tiny_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..05d1970b3fa3c1f236f6edd7ffb1bbad38c96e76 GIT binary patch literal 2852 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 AX#fBK literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/warn_large.png b/static/june_2007_style/blue/warn_large.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c4af28678a7fde4e22c821169d3dadaf5e222d GIT binary patch literal 682 zcmV;b0#*HqP)KSXm*f51SN{N3{av zYBUeHUBw*oxF?2cc^LsXfE_jFw&1Q9nrlg}z63E$#Rp6QO>)Eqj^ym z#4x5h03E2Qh-B1K?5+$D!!&8tYn0B3VQhH-j$>Q{0Tvjvyng{=n1VwMG%xCm7+OjJ zIEo3Q05BcL{slZ|0tKoTdc16mcE{Jy$7rJ<8S~ThvcC)+(*-JW*C8OQUEkX=^kT! zeND1O@E6X*MJWY4uQomW`f>9T3#jZR#{d6~V{&$!`0#QWTU}~>q{O+Y*#?BMlAfBvO#Ki}MKWT5dZc~y0_ zz*WX_@tX!7yY41E2o61*ZUa_)NS;-GeSCVwo`bU%C~s{14|Js7_CIMq{=b*EONE$s z=yAjU|B~xU{-y#0Vau8>9=n*UX%!nj8Q7^p73BVSeAZpkF6Nrz?IMXCrgvK&{_alS zu>|6UL+={w*+zOAg$1HJAAJ_tAn~%=_+y zCspkFYO%`ztkbFV!20j`l5%T}m+k`U%$}xnc>n$V6IvnW0%i9uoi6$B--AUnnfKXG zPpjA>rYZuJvv}}*`F9@v@R=9R0R3a@Kl|bN?duKnAjVoe`1h%sr+(kZ3wIdz-|IBE z6JI8Ej1?@`WbxqqbblWHFo{cdfEu^onDOxX@p2v@fEWyvzu5MfXTSaD%V!zu_kA+5 zxmh%`v9S^2nWigk=f4ZYzo^-H^gw}#_vHuY)i23>%vmnc9Av@_Ha{ux$H!l)huc?2 zxn%$O-rM-_Fy|$m!)$hOms5WH`k@F_Q&IUrjrnkW;Ud$bYy*Q8Aqidk?N1)~kYSbC zSF!K49b8qzY!%-(LOeW1A7?!Bky&E>;HhFD#GOe=KWf6;OkzV=?$7gt3w@nfw^E+@ zPcjSCga@HJ&wuzhOYLISznZ2a=2kzdW|#bS)yacu`18N$k!IWGrByut>o!i#V`6nU z@u}Ad>BaYb;pcDZy zE@rwVU$cY20iIbm+a6Z9bb0*zpWHEF!P2K5N@bEk6VyV=US9hjU-09c(HEb$C%*Wc znLF`XgZn{qTgk7_yN)|dv(7S3(m!%mUVbPwlT43n^|If_8 X$Phf~(c=f8a)rUu)z4*}Q$iB}`Gy$g literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue/warn_small.png b/static/june_2007_style/blue/warn_small.png new file mode 100644 index 0000000000000000000000000000000000000000..34c0c93b6256f57046caa273dd05ec0855e71f85 GIT binary patch literal 416 zcmV;R0bl-!P)1R49>+ z(J@P#Q544U-?fPe9f}%+3MK7SCr2mA;3z?*;M8m_sI*g|LkD%qamA5*gpXkQGoDd#rI|A1$(GYrQtkK~Icv?YcYgU(-!|F%(8`tB2AsH63t zU|;XVP%q)F)U4+#`Fh_?!DX~cSSyr5nfi9Vzq_J)mO5aggjYrQ3D4Ji9#iA4UMt}e zb3^IB_jEqx`#-ni;Ny^;DB}YfSimz>dohVSbbIj=7x=1~eR}}7QbO}m03hW60000< KMNUMnLSTZfIkmC? literal 0 HcmV?d00001 diff --git a/static/june_2007_style/blue_colors.ini b/static/june_2007_style/blue_colors.ini new file mode 100644 index 00000000000..879e9240ece --- /dev/null +++ b/static/june_2007_style/blue_colors.ini @@ -0,0 +1,53 @@ +base_text=#303030 +base_bg_top=#FFFFFF +base_bg_bottom=#FFFFFF +link_text=#303030 +header_text=#023858 +menu_bg_top=#DADFEF +menu_bg_over=#C1C9E5 +menu_bg_hatch=- +#menu_bg_hatch=#AAAAFF +# Forms +form_title_bg_top=#ebd9b2 +form_title_bg_bottom=#d2c099 +form_title_bg_hatch=- +form_border=#d8b365 +#form_body_bg=#FFFFFF +form_body_bg_top=#FFFFFF +form_body_bg_bottom=#FFFFFF +odd_row_bg=#FFFF99 +# Messages +error_message_border=#AA6666 +error_message_bg=#FFCCCC +warn_message_border=#AAAA66 +warn_message_bg=#FFFFCC +done_message_border=#66AA66 +done_message_bg=#CCFFCC +info_message_border=#6666AA +info_message_bg=#CCCCFF +# Tables +table_header_bg=#ebd9b2 +table_row_bg=white +table_border=#d8b365 +# Footers +footer_bg=#023858 +footer_title_bg=#023858 +footer_title_hatch=#000000 +# History +history_error_border=#AA6666 +history_error_bg=#FFCCCC +history_running_border=#AAAA66 +history_running_bg=#FFFFCC +history_ok_border=#66AA66 +history_ok_bg=#CCFFCC +history_queued_border=#888888 +history_queued_bg=#EEEEEE +peek_table_header=#023858 +# Masthead +masthead_bg=#2C3143 +masthead_text=#eeeeee +masthead_bg_hatch=- +masthead_link=#eeeeee +# Layout +panel_header_bg_top=#f5f5f5 +panel_header_bg_bottom=#cccccc diff --git a/static/june_2007_style/blue_colors.ini.bak b/static/june_2007_style/blue_colors.ini.bak new file mode 100644 index 00000000000..2878f74bed7 --- /dev/null +++ b/static/june_2007_style/blue_colors.ini.bak @@ -0,0 +1,50 @@ +base_text=#303030 +base_bg=#F4EBE2 +base_bg_top=#FFFFFF +link_text=#303030 +header_text=#023858 +menu_bg_top=#EEEEFF +menu_bg_over=#CCCCFF +menu_bg_hatch=- +#menu_bg_hatch=#AAAAFF +# Forms +form_title_bg=#FFFFFF +form_title_bg_hatch=#d2c099 +form_border=#AAAACC +form_body_bg=#FFFFDB +odd_row_bg=#FFFF99 +# Messages +error_message_border=#AA6666 +error_message_bg=#FFCCCC +warn_message_border=#AAAA66 +warn_message_bg=#FFFFCC +done_message_border=#66AA66 +done_message_bg=#CCFFCC +info_message_border=#6666AA +info_message_bg=#CCCCFF +# Tables +table_header_bg=#ebd9b2 +table_row_bg=white +table_border=#d8b365 +# Footers +footer_bg=#023858 +footer_title_bg=#023858 +footer_title_hatch=#000000 +# History +history_error_border=#AA6666 +history_error_bg=#FFCCCC +history_running_border=#AAAA66 +history_running_bg=#FFFFCC +history_ok_border=#66AA66 +history_ok_bg=#CCFFCC +history_queued_border=#888888 +history_queued_bg=#EEEEEE +peek_table_header=#023858 +# Masthead +masthead_bg=#011e30 +masthead_text=#eeeeee +masthead_bg_hatch=- +masthead_link=#eeeeee +# Layout +panel_header_bg_top=#f5f5f5 +panel_header_bg_bottom=#cccccc diff --git a/static/june_2007_style/galaxy_icons.svg b/static/june_2007_style/galaxy_icons.svg new file mode 100644 index 00000000000..6a34999b592 --- /dev/null +++ b/static/june_2007_style/galaxy_icons.svg @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/june_2007_style/galaxy_spinner.fla b/static/june_2007_style/galaxy_spinner.fla new file mode 100644 index 0000000000000000000000000000000000000000..e984be2a0eae9f801470baed62fe4f36e70c1313 GIT binary patch literal 30208 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 tf6!yYm 2: + col = parse_css_color( args[0] ) + alpha = float( args[1]) + pos = float( args[2] ) + pat.add_color_stop_rgba( pos, col[0], col[1], col[2], alpha ) + args = args[3:] + return pat + +def hatch( width, height, color ): + im_surf = cairo.ImageSurface( cairo.FORMAT_ARGB32, width, width ) + c = cairo.Context( im_surf ) + c.set_source_rgb ( *color ) + c.set_line_width( 0.75 ) + for i in range( 0, 2*max(height,width), 3 ): + c.move_to ( 0-10, i+10 ) + c.line_to ( width+10, i - width - 10 ) + c.stroke() + pat = cairo.SurfacePattern( im_surf ) + pat.set_extend (cairo.EXTEND_REPEAT) + return pat + +width = int( sys.argv[1] ) +height = int( sys.argv[2] ) + +surface = cairo.ImageSurface( cairo.FORMAT_ARGB32, width, height ) +c = cairo.Context( surface ) + +c.rectangle(0,0,width,height) +c.set_source_rgb( *parse_css_color( sys.argv[3] ) ) +c.fill() + +if sys.argv[4] != "-": + c.rectangle (0, 0, width, height) + c.set_source( hatch( width, height, parse_css_color( sys.argv[4] ) ) ) + c.fill() + +pat = cairo.LinearGradient(0.0, 0.0, 0.0, height) +pat.add_color_stop_rgba( 0, 1, 1, 1, 0 ) +pat.add_color_stop_rgba( 1, 1, 1, 1, 1 ) +c.rectangle (0, 0, width, height) +c.set_source( gradient( width, height, sys.argv[5:] ) ) +c.fill() + +surface.write_to_png( "/dev/stdout" ) diff --git a/static/june_2007_style/history.css.tmpl b/static/june_2007_style/history.css.tmpl new file mode 100644 index 00000000000..901a2fa82ab --- /dev/null +++ b/static/june_2007_style/history.css.tmpl @@ -0,0 +1,104 @@ +body +{ + background: $menu_bg_over; + color: $base_text; + background-image: url(menu_bg.png); + background-repeat: repeat-x; + background-position: top; + margin-top: 5px; + margin-right: 0; + margin-left: 0; + border: 0; + padding: 0; +} + +a +{ + color: #base_text; +} + +div.historyLinks +{ + padding: 5px; + margin: 5px; + padding-right: 5px; + padding-left: 5px; + margin-bottom: 5px; +} + +div.historyItem +{ + margin: 5px; + margin-right: 0px; + padding: 5px; + padding-right: 11px; + + border: solid $history_queued_border 1px; + border-left: solid $history_queued_border 5px; + border-right: none; + background: $history_queued_bg; + background-image: url(gray_bg.png); + background-repeat: repeat-x; + background-position: top; +} + +div.historyItem div.historyItem +{ + margin-right: -11px; +} + +div.historyItem-ok +{ + border-color: $history_ok_border; + background: $history_ok_bg; + /* + background-image: url(ok_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-error, div.historyItem-empty +{ + border-color: $history_error_border; + background: $history_error_bg; + /* + background-image: url(error_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-running +{ + border-color: $history_running_border; + background: $history_running_bg; + /* + background-image: url(warn_bg.png); + background-repeat: repeat-x; + background-position: top; + */ +} + +div.historyItem-queued +{ +} + +div.historyItemBody div +{ + padding-top: 2px; +} + +pre.peek +{ + background: white; + color: black; + width: 100%; + overflow: auto; +} + +pre.peek th +{ + color: white; + background: $peek_table_header; +} \ No newline at end of file diff --git a/static/june_2007_style/make_style.py b/static/june_2007_style/make_style.py new file mode 100755 index 00000000000..c0d6da6571a --- /dev/null +++ b/static/june_2007_style/make_style.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python2.4 + +import sys +from Cheetah.Template import Template +import string +from subprocess import Popen, PIPE +import os.path + +def run( cmd ): + return Popen( cmd, stdout=PIPE).communicate()[0] + +templates = [ ( "base.css.tmpl", "base.css" ), + ( "masthead.css.tmpl", "masthead.css"), + ( "history.css.tmpl", "history.css" ), + ( "tool_menu.css.tmpl", "tool_menu.css" ), + ( "reset.css.tmpl", "reset.css" ) ] + +images = [ + ( "./gradient.py 9 30 $panel_header_bg_top - $panel_header_bg_bottom 0 0 $panel_header_bg_bottom 1 1", "panel_header_bg.png" ), + ( "./gradient.py 9 1000 $menu_bg_top $menu_bg_hatch $menu_bg_over 0 0 $menu_bg_over 1 1", "menu_bg.png" ), + ( "./gradient.py 9 1000 $base_bg_top - $base_bg_bottom 0 0 $base_bg_bottom 1 1", "base_bg.png" ), + ( "./gradient.py 9 500 $form_body_bg_top - $form_body_bg_bottom 0 0 $form_body_bg_bottom 1 1", "form_body_bg.png" ), + ( "./gradient.py 9 50 $masthead_bg $masthead_bg_hatch", "masthead_bg.png" ), + ( "./gradient.py 9 30 $footer_title_bg $footer_title_hatch 000000 0 0.5 000000 1 1", "footer_title_bg.png" ), + ( "./gradient.py 9 50 $form_title_bg_top $form_title_bg_hatch $form_title_bg_bottom 0 0 $form_title_bg_bottom 1 1", "form_title_bg.png" ), + ( "./gradient.py 9 200 $history_ok_bg - FFFFFF 0 0.5 FFFFFF 0.5 1", "ok_bg.png" ), + ( "./gradient.py 9 200 $history_error_bg - FFFFFF 0 0.5 FFFFFF 0.5 1", "error_bg.png" ), + ( "./gradient.py 9 200 $history_running_bg - FFFFFF 0 0.5 FFFFFF 0.5 1", "warn_bg.png" ), + ( "./gradient.py 9 200 $history_queued_bg - FFFFFF 0 0.5 FFFFFF 0.5 1", "gray_bg.png" ) ] + +shared_images = [ + # Dialog boxes + ( "ok_large.png", "done_message_bg", "done_message_icon.png" ), + ( "info_large.png", "info_message_bg", "info_message_icon.png" ), + ( "warn_large.png", "warn_message_bg", "warn_message_icon.png" ), + ( "error_large.png", "error_message_bg", "error_message_icon.png" ), + # History icons + ( "ok_small.png", "history_ok_bg", "data_ok.png" ), + ( "error_small.png", "history_error_bg", "data_error.png" ), + ( "wait_small.png", "history_queued_bg", "data_queued.png" ) ] + + +vars, out_dir = sys.argv[1:] + +context = dict() +for line in open( vars ): + if line.startswith( '#' ): + continue + key, value = line.rstrip("\r\n").split( '=' ) + if value.startswith( '"' ) and value.endswith( '"' ): + value = value[1:-1] + context[key] = value + +for input, output in templates: + print input ,"->", output + open( os.path.join( out_dir, output ), "w" ).write( str( Template( file=input, searchList=[context] ) ) ) + +for rule, output in images: + t = string.Template( rule ).substitute( context ) + print t, "->", output + open( os.path.join( out_dir, output ), "w" ).write( run( t.split() ) ) + +for src, bg, out in shared_images: + t = "./png_over_color.py shared_images/%s %s %s" % ( src, context[bg], os.path.join( out_dir, out ) ) + print t + run( t.split() ) diff --git a/static/june_2007_style/masthead.css.tmpl b/static/june_2007_style/masthead.css.tmpl new file mode 100644 index 00000000000..0c759f2aba6 --- /dev/null +++ b/static/june_2007_style/masthead.css.tmpl @@ -0,0 +1,26 @@ +body +{ + background: $masthead_bg url(masthead_bg.png) bottom; + color: $masthead_text; + padding: 0; + border: 0; + margin: 3px; + margin-right: 5px; + margin-left: 5px; +} + +div.pageTitle +{ + font-size: 175%; + font-weight: bold; +} + +div.pageTitle a:link, div.pageTitle a:visited, div.pageTitle a:active, div.pageTitle a:hover +{ + text-decoration: none; +} + +a:link, a:visited, a:active +{ + color: $masthead_link; +} diff --git a/static/june_2007_style/png_over_color.py b/static/june_2007_style/png_over_color.py new file mode 100755 index 00000000000..b1a72c57cd0 --- /dev/null +++ b/static/june_2007_style/png_over_color.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python2.4 + +import sys +import Image +import ImageColor + +over = Image.open( sys.argv[1] ) +color = ImageColor.getrgb( sys.argv[2] ) + +new = Image.new( 'RGBA', over.size, color ) + +# 'Over' is passed twice since it has an alpha channel -- it is it's own mask +new.paste( over, over ) + +new.save( sys.argv[3] ) \ No newline at end of file diff --git a/static/june_2007_style/reset.css.tmpl b/static/june_2007_style/reset.css.tmpl new file mode 100644 index 00000000000..0eb970e56bf --- /dev/null +++ b/static/june_2007_style/reset.css.tmpl @@ -0,0 +1,3 @@ +/* Copyright (c) 2007, Yahoo! Inc. All rights reserved. */ +body {font:13px arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}table {font-size:inherit;font:100%;}select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}pre, code {font:115% monospace;*font-size:100%;}body * {line-height:1.22em;} +/*body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym {border:0;}*/ diff --git a/static/june_2007_style/shared_images/data_empty.png b/static/june_2007_style/shared_images/data_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..04cdc336153e17016e5b7fb7d1e113f129a06115 GIT binary patch literal 497 zcmV^ z)4NJzQ544U-#JDr@d6S{?NkIC^8%7IHiFn%Svg=Qf}j?Hg0^0m#|YS@Ir;(aq#94)=Sb8x`hTYw)Q936FnFqVorw$$6p_BP$!0d{qS(iUtRHc<8K8+xZ=)WZ7-x5W6~s n>W?5zu-XJ^e;7^u$E*4aKDCVI=V)#_00000NkvXXu0mjf?*HC< literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/data_error.png b/static/june_2007_style/shared_images/data_error.png new file mode 100644 index 0000000000000000000000000000000000000000..04cdc336153e17016e5b7fb7d1e113f129a06115 GIT binary patch literal 497 zcmV^ z)4NJzQ544U-#JDr@d6S{?NkIC^8%7IHiFn%Svg=Qf}j?Hg0^0m#|YS@Ir;(aq#94)=Sb8x`hTYw)Q936FnFqVorw$$6p_BP$!0d{qS(iUtRHc<8K8+xZ=)WZ7-x5W6~s n>W?5zu-XJ^e;7^u$E*4aKDCVI=V)#_00000NkvXXu0mjf?*HC< literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/data_ok.png b/static/june_2007_style/shared_images/data_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..dee022cee564f964b005862fe9bb72b92d31c90c GIT binary patch literal 503 zcmV^ z)3Iw)Q547V&wEM0A~C3_MFa;aQHQ9Zpo5T7bckS!ZsK2HOE(cgL~#^X4WhV-o53Ok zQBXnZQVVvlM8}rWsvuZF@!39ymxLISfWPf>&i8Wf@BB^>$FX*0=7KSlF^oLwm_;or z#?$S+K@-l*1-nqe8NF4-g{T;>w%`UhkDa}!Kq$5WpHYa4@oLzpRr-PZHy!ZdVBP85 zxJF+Eg7iCMc+%&oUJSid%8r=%F{AYHIARzNCFbpB4wxzbazxRQKUkk1*U+xB0qhfrvZ^F_t{)jrk te-qZoYC)3Smb!q|CP>?2H1$7Q^%q6FjoTAoV;KMd002ovPDHLkV1mt7=U@N; literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/data_queued.png b/static/june_2007_style/shared_images/data_queued.png new file mode 100644 index 0000000000000000000000000000000000000000..7202be864478e0b42878d1f3cc2064efaa064641 GIT binary patch literal 562 zcmV-20?qx2P)OX@!p<_qF6JEud;tp!aT}mgV?mhQ#exK{Qcww663!nixAOZXa20+g+jCU{BcNLqa z`3-mjbO2eFsnu#Un@x7R-Id<~UJb+e1du$!k4z?`tEvis>$=QlGft{eB%u=b?9$a|uLD_@$!4?2vV5}F!2%!mK2w@4~_&Y@rnj#EESc-6bnW70z6NV-%O*p=rVhGI;h9N9N zIDVL73C$9QB`ixgeiy|Nnj;KHSdMV~YKmYJM$wBRZoxxS6hl!gMR7bZ?les?G{w>s z$MZm$W+;ZCScc+wTIi-(ieV|1r8u4?hG~vsIEv*cjwcNfU=5n!1tLHO6n0}7rqPZ% z9^f!E&C)c-D+Dm^3`4UF&GCZ417(J#S(fH_{h)bSmPzYe$IX*(IB1MJ> z4JjcOCIO-ek_mn$MC>35VM<@YJxz`<>eIu2b=(M?f9#xvrRp3SIzT`NQG4DZf4K@A}+1f9;Xz zzVViI@?VWJWbYFbkO(3Lv6aLfmNVDYbFpk_TFhPN9@D9^k%Cx9N=Ze|nq$fhg>*^R zp!uB3sXXaEk-tB5Nlj6xbdABjAi7EST5;HKP7~c;){_1x|9DbD=FRsZrjRLshyX+d zAe0p~J)XvZL#<0`D_7Y^Lbopsl&I2ea_O+au{kkk=dp@Iisi5Fovr%LAh9~NW{)$p z*WaBhJ6T*U*qBu5+nrQs(^;PDGUinm*)uFZ-M^q!z0)HE*tEA`mcnG&5!X(!yt5!h zCfAz;>iO0S;WN`6`xLVsKAHN=?pe|eTQjukzJ1=9;rl6DV$PS1)TI|)*{#x<#@0&a zR%k!UIU3(H&m&(A6Im;Q{rd!>I_CL;AHDZfs^OrvH z)Jnn?#yHSlCNzr`GmDQW*Kc+-yol4U%9x(02vG0YNXXmQ!WhiV zSFnEAE_Tl{=DF4zOj8e}7iGxeye$JR_i$cmk8AJrC_|&Z6qzM#3^TU44qn?eyYPlr zAJu!+JXF_kI;@Po))tnzBV@@KUQ>Zk@GdWcydrs3CIH3zB$Xb!aN~7@&!yJc_Jt(Z zHos73H_1~aYn!#Px>ljH#pWyRzgU})aLSmpJx%;yP)hOUU|MGN+Uk-?k2TPf-6(!}Ph*deuWL(rIq5aW#&#;sw@zeR zylKO?x1Ac#b3{+=^gi33( zJ&hqzX-4tp$&2QI%FsAt;Vo~Azi092l^Ru_bs(lL-gh_Y;}k)*MntR`XMv$XOpG4pnX zWZp;PZmT}`hs7xz}bMn#^*PQ<TcZYFB_m6 zwrAj{((0{#mbgR~r)$}#dYVx3viqYU=WD^Cb5oTUuLa1t(8JEC!JXT)1G8&(6Zxv-!yJIqNL1zWxSqG@lnBB>nxcW{ql} zn}c*3%F9*z!h&SMix*3V1#a5Ni)Cp{PReX%XH|PynMv+>aQSi=a)78!_KmhQ-oAzI zZkV56+VA>xc>Fk2NT4#j0DzY-;mQ@6Wf1P%fxCA@hsy{k4pmiVs$~$3>P4p@Y^0G0 zho&ajx;6jvO`D*rD}2d@WOxCMjj(rbVZV4B+S`i~Fj~;fao}h`roMj0UeNcHx@$cQ;^_ios;r;vbqHZX*gMHA7eq+UshYM+^b)2HQo zeqQ$d-8*x9QaKBxaWmex6;xIB9% zvr7BA78l{-MR@fpXf}dmQqDyxl^xUH54UgYo{3Dmo|~|}NcWn>$cS`7Gc$1Q8a#QD zpFD%{aapBQO1h!@_jQk9p9|2tVrdwkqxXd?SIXWOgWxffKrFXCS4);W*ycNCQ7n1z zm`q!)+zrf{DSdkkeLMaP!^q5E>kop9wy3NH`p~nZIHdg;wL!Nc_^&UgrjUPfJ^u;v Wjz5uYe6YR%0000^ z)4NJzQ544U-#JDr@d6S{?NkIC^8%7IHiFn%Svg=Qf}j?Hg0^0m#|YS@Ir;(aq#94)=Sb8x`hTYw)Q936FnFqVorw$$6p_BP$!0d{qS(iUtRHc<8K8+xZ=)WZ7-x5W6~s n>W?5zu-XJ^e;7^u$E*4aKDCVI=V)#_00000NkvXXu0mjf?*HC< literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/info_large.png b/static/june_2007_style/shared_images/info_large.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac030b0b2431ce2c344135dd905608f4c61f886 GIT binary patch literal 624 zcmV-$0+0QPP)lVYdpqJv0r zkfI=>PF56c9PUzWZOA26)4>NqnlIno`zE=&erGw3gBL>32aE#4z=%F~dp1zq0Vlw* zJ{P6r+AG;=Wn_C>i7FQNT~*52u7@I*4YE5 z!nE$~g_jq&zYir2updJ$uc5fP2`%h090R&cvojer;+s(_!P!}016{Eo*^`qnG}Qdw z&Q2%;E&tK9%)fy^V<4Ybt6)41>+2C1aOZm>@iXGk2A{wN9wO9#uu+9$RGiqT>NP5k z+rmH*@ZKE!9u82nrKAkxBQTJclCnDu7f^-bUva55!|Qo$>D0U_1a*4kJ`NM)~WtRjL;iY-hw zD@y!eVE%n?9*;Ls2mz$2JG|lm{t&MD>bxKysiXOp^uQh79DI=xQb7dMZ`d|Y53V|DqBQdTh* w|CARohVqX2#b%RNdc7_cw;0~m+qe9xZ+lBqfp03IYybcN07*qoM6N<$g4DN{vz zE7Py?xbPVZ#}q||ELL2AIs)}qdr#_L`v5K%TxH9otpmUNWFM8@om}iZKRB!hm=$tK zU;hr&3?C;P%zVOUVIBHH_Mx7N*$qsLgjr+4p?fO?S9!sMIwY zMq^0}C!BSRwT(5|9{jw|%^x=srOwg#*U?f!adrtCCTuj>g5e+)-W^ub9cc-$qth_$ zY?S@vw>sVi-dGlp5H*eiEYDgIWv`rE#oRG-O}3B0j~wwGva&2-RKg+q^}6xvsdm(G zzwi-z^QsZ5cuv)wR6F)Z#qaV~@>}*;<@XIKpkUN=E)`q>z$R?e=DWE!`vDF;pE_qf zS+*=w{9XSYZuy(6k^}gJ{RJ0*ZP7kKOW{+NWiN~J`1|~fvyC&^dc(aGwauqJ_#qhq z7d4C-E(RpWz8t0VPiK@Tk{sap*JH_&12hZ!3o?N3#Hoh)`c$sXxK43Saoknf1MMtq zn@1q_)D;iEfLu*YuZ{7dK8HG3{jQXQJ~v?*ju}(stw@#}pfTitr&0qGSU&V z87Y+|z+sFpHdXYfHA-ULir{~~oW>9`BG>c3;KWO6GGuTJ00000NkvXXu0mjfi;T#7 literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/ok_small.png b/static/june_2007_style/shared_images/ok_small.png new file mode 100644 index 0000000000000000000000000000000000000000..dee022cee564f964b005862fe9bb72b92d31c90c GIT binary patch literal 503 zcmV^ z)3Iw)Q547V&wEM0A~C3_MFa;aQHQ9Zpo5T7bckS!ZsK2HOE(cgL~#^X4WhV-o53Ok zQBXnZQVVvlM8}rWsvuZF@!39ymxLISfWPf>&i8Wf@BB^>$FX*0=7KSlF^oLwm_;or z#?$S+K@-l*1-nqe8NF4-g{T;>w%`UhkDa}!Kq$5WpHYa4@oLzpRr-PZHy!ZdVBP85 zxJF+Eg7iCMc+%&oUJSid%8r=%F{AYHIARzNCFbpB4wxzbazxRQKUkk1*U+xB0qhfrvZ^F_t{)jrk te-qZoYC)3Smb!q|CP>?2H1$7Q^%q6FjoTAoV;KMd002ovPDHLkV1mt7=U@N; literal 0 HcmV?d00001 diff --git a/static/june_2007_style/shared_images/wait_large.png b/static/june_2007_style/shared_images/wait_large.png new file mode 100644 index 0000000000000000000000000000000000000000..480d6d9bc72adf19069f3b479a6436ba0bc174f5 GIT binary patch literal 1596 zcmV-C2E+M@P)GC{ARf!?pvGB$WVXfjPn6v}y|Q z1o%l5#gR-I3o>PpBxxt`6dU4mzz*Q4R<|jp4oH&pGY|pRt)lXO*vC&0T*!H%n4_@M6Kzr=+k^YAI;6pl$MqSzlanV;QdU-$U&+a=0q$rT6QquTGw5cUnwlEI;V{L; z#Y;*nE-oe<4&(Fr@*&oU9jF=;BplFI*z@|AE|&|ZGwm<|)Ir_c+>F!Z87+q5*F&u7?5dBTsX70?E;wlR}2*xNKTG_Y&eF4I!qym>=gTN|H0 zTiO9EmnooH6vc_f7C3^*#;mimlNT>un3h;sS;_I^#}Nb}cQTFfqV9qdU8pIO#l3s? zh{a;2c{Xm`$l=3>m#xksM*tj7r_&Am4HRawh(@DSRaH@1T56cb@Ap$!SjekauX3i; zfXW9C9{g2+dXlnq7*Q03n>TMVK0a=mufD#X-Me?2<|!#Dp|P=%ef#!V6`YC(IOGV0 zLcgLO1udZ{3ejkknwlD1E|+1xKp?>6&vDU{t;SRTl;|^KwVuO6%`dpIR*v>kY(AhgzD;Q!r^e@i)Kr2Z!aAk z9Z6}cR;^<1-sIl>>C-3u;u>}GCG^4CwQJe3WlNI5)YO!z1F|f0`}XZ+uK`=PZsqag z$9(wkA(7_sc-XdW+Y&uG2g)-ZDXq}o-_QN~_p`QNSXdwyi)HlzoT$O3VAi#3JbU&G zkH^Eog9mNd4GatriA0vnRu&l%T3cJYfDowr{M5dzD2lE9O=DvtJ9lP0i!(GdL?jYn zWW+r1kZx@0^mH$_KtimdD3-;hqobn(kH^F2&70G{mt~nqB*O6Uu%+@ce7q4SYOFG+ zw70k8cDq@(Ze1en?c2BX^z@ic2w4z!q6S+3%w?(b^Yh%gb&Hmk777Xq=;`TUaBwh} zRV?z*33QCZeL8Wvo0yp3^5x6f76ouh6vei5FANVfn!zbl?^lW$OvFQmJ2K7i0BZmH z+Ki%h8$Hva+4Xdxgm#gShC0000OX@!p<_qF6JEud;tp!aT}mgV?mhQ#exK{Qcww663!nixAOZXa20+g+jCU{BcNLqa z`3-mjbO2eFsnu#Un@x7R-Id<~UJb+e1du$!k4z?`tEvis>$=QlGft{eB%u=b?9$a|uLD_@$!4?2vV5}KSXm*f51SN{N3{av zYBUeHUBw*oxF?2cc^LsXfE_jFw&1Q9nrlg}z63E$#Rp6QO>)Eqj^ym z#4x5h03E2Qh-B1K?5+$D!!&8tYn0B3VQhH-j$>Q{0Tvjvyng{=n1VwMG%xCm7+OjJ zIEo3Q05BcL{slZ|0tKoTdc16mcE{Jy$7rJ<8S~ThvcC)+(*-JW*C81R49>+ z(J@P#Q544U-?fPe9f}%+3MK7SCr2mA;3z?*;M8m_sI*g|LkD%qamA5*gpXkQGoDd#rI|A1$(GYrQtkK~Icv?YcYgU(-!|F%(8`tB2AsH63t zU|;XVP%q)F)U4+#`Fh_?!DX~cSSyr5nfi9Vzq_J)mO5aggjYrQ3D4Ji9#iA4UMt}e zb3^IB_jEqx`#-ni;Ny^;DB}YfSimz>dohVSbbIj=7x=1~eR}}7QbO}m03hW60000< KMNUMnLSTZfIkmC? literal 0 HcmV?d00001 diff --git a/static/june_2007_style/tool_menu.css.tmpl b/static/june_2007_style/tool_menu.css.tmpl new file mode 100644 index 00000000000..ccf1ab9cad9 --- /dev/null +++ b/static/june_2007_style/tool_menu.css.tmpl @@ -0,0 +1,46 @@ +body +{ + background: white; + color: $base_text; + background: $menu_bg_over url(menu_bg.png) top repeat-x; + margin: 5px; + margin-right: 10px; + margin-left: 10px; +} + +hr +{ + border: none; + height: 0px; + margin-top: 0px; +} + +div.toolSectionPad +{ + margin: 0; + padding: 0; + height: 5px; + font-size: 0px; +} + +div.toolSectionDetailsInner +{ + margin-left: 5px; + margin-right: 5px; +} + +div.toolSectionTitle +{ + padding-bottom: 0px; + font-weight: bold; +} + +div.toolTitle +{ + padding-top: 5px; + padding-bottom: 5px; + margin-left: 16px; + margin-right: 10px; + display: list-item; + list-style: square outside; +} diff --git a/static/scripts/jquery.dimensions.js b/static/scripts/jquery.dimensions.js new file mode 100644 index 00000000000..8b33e954fc2 --- /dev/null +++ b/static/scripts/jquery.dimensions.js @@ -0,0 +1,574 @@ +/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * $LastChangedDate: 2007-07-01 21:19:35 -0400 (Sun, 01 Jul 2007) $ + * $Rev: 2209 $ + * + * Version: 1.0rc1 + */ + +(function($){ + +// store a copy of the core height and width methods +var height = $.fn.height, + width = $.fn.width; + +$.fn.extend({ + /** + * If used on document, returns the document's height (innerHeight). + * If used on window, returns the viewport's (window) height. + * See core docs on height() to see what happens when used on an element. + * + * @example $("#testdiv").height() + * @result 200 + * + * @example $(document).height() + * @result 800 + * + * @example $(window).height() + * @result 400 + * + * @name height + * @type Number + * @cat Plugins/Dimensions + */ + height: function() { + if ( this[0] == window ) + return self.innerHeight || + $.boxModel && document.documentElement.clientHeight || + document.body.clientHeight; + + if ( this[0] == document ) + return Math.max( document.body.scrollHeight, document.body.offsetHeight ); + + return height.apply(this, arguments); + }, + + /** + * If used on document, returns the document's width (innerWidth). + * If used on window, returns the viewport's (window) width. + * See core docs on width() to see what happens when used on an element. + * + * @example $("#testdiv").width() + * @result 200 + * + * @example $(document).width() + * @result 800 + * + * @example $(window).width() + * @result 400 + * + * @name width + * @type Number + * @cat Plugins/Dimensions + */ + width: function() { + if ( this[0] == window ) + return self.innerWidth || + $.boxModel && document.documentElement.clientWidth || + document.body.clientWidth; + + if ( this[0] == document ) + return Math.max( document.body.scrollWidth, document.body.offsetWidth ); + + return width.apply(this, arguments); + }, + + /** + * Returns the inner height value (without the border) for the first matched element. + * If used on document, returns the document's height (innerHeight). + * If used on window, returns the viewport's (window) height. + * + * @example $("#testdiv").innerHeight() + * @result 210 + * + * @name innerHeight + * @type Number + * @cat Plugins/Dimensions + */ + innerHeight: function() { + return this[0] == window || this[0] == document ? + this.height() : + this.is(':visible') ? + this[0].offsetHeight - num(this, 'borderTopWidth') - num(this, 'borderBottomWidth') : + this.height() + num(this, 'paddingTop') + num(this, 'paddingBottom'); + }, + + /** + * Returns the inner width value (without the border) for the first matched element. + * If used on document, returns the document's width (innerWidth). + * If used on window, returns the viewport's (window) width. + * + * @example $("#testdiv").innerWidth() + * @result 210 + * + * @name innerWidth + * @type Number + * @cat Plugins/Dimensions + */ + innerWidth: function() { + return this[0] == window || this[0] == document ? + this.width() : + this.is(':visible') ? + this[0].offsetWidth - num(this, 'borderLeftWidth') - num(this, 'borderRightWidth') : + this.width() + num(this, 'paddingLeft') + num(this, 'paddingRight'); + }, + + /** + * Returns the outer height value (including the border) for the first matched element. + * If used on document, returns the document's height (innerHeight). + * If used on window, returns the viewport's (window) height. + * + * @example $("#testdiv").outerHeight() + * @result 220 + * + * @name outerHeight + * @type Number + * @cat Plugins/Dimensions + */ + outerHeight: function() { + return this[0] == window || this[0] == document ? + this.height() : + this.is(':visible') ? + this[0].offsetHeight : + this.height() + num(this,'borderTopWidth') + num(this, 'borderBottomWidth') + num(this, 'paddingTop') + num(this, 'paddingBottom'); + }, + + /** + * Returns the outer width value (including the border) for the first matched element. + * If used on document, returns the document's width (innerWidth). + * If used on window, returns the viewport's (window) width. + * + * @example $("#testdiv").outerHeight() + * @result 1000 + * + * @name outerHeight + * @type Number + * @cat Plugins/Dimensions + */ + outerWidth: function() { + return this[0] == window || this[0] == document ? + this.width() : + this.is(':visible') ? + this[0].offsetWidth : + this.width() + num(this, 'borderLeftWidth') + num(this, 'borderRightWidth') + num(this, 'paddingLeft') + num(this, 'paddingRight'); + }, + + /** + * Returns how many pixels the user has scrolled to the right (scrollLeft). + * Works on containers with overflow: auto and window/document. + * + * @example $(window).scrollLeft() + * @result 100 + * + * @example $(document).scrollLeft() + * @result 100 + * + * @example $("#testdiv").scrollLeft() + * @result 100 + * + * @name scrollLeft + * @type Number + * @cat Plugins/Dimensions + */ + /** + * Sets the scrollLeft property for each element and continues the chain. + * Works on containers with overflow: auto and window/document. + * + * @example $(window).scrollLeft(100).scrollLeft() + * @result 100 + * + * @example $(document).scrollLeft(100).scrollLeft() + * @result 100 + * + * @example $("#testdiv").scrollLeft(100).scrollLeft() + * @result 100 + * + * @name scrollLeft + * @param Number value A positive number representing the desired scrollLeft. + * @type jQuery + * @cat Plugins/Dimensions + */ + scrollLeft: function(val) { + if ( val != undefined ) + // set the scroll left + return this.each(function() { + if (this == window || this == document) + window.scrollTo( val, $(window).scrollTop() ); + else + this.scrollLeft = val; + }); + + // return the scroll left offest in pixels + if ( this[0] == window || this[0] == document ) + return self.pageXOffset || + $.boxModel && document.documentElement.scrollLeft || + document.body.scrollLeft; + + return this[0].scrollLeft; + }, + + /** + * Returns how many pixels the user has scrolled to the bottom (scrollTop). + * Works on containers with overflow: auto and window/document. + * + * @example $(window).scrollTop() + * @result 100 + * + * @example $(document).scrollTop() + * @result 100 + * + * @example $("#testdiv").scrollTop() + * @result 100 + * + * @name scrollTop + * @type Number + * @cat Plugins/Dimensions + */ + /** + * Sets the scrollTop property for each element and continues the chain. + * Works on containers with overflow: auto and window/document. + * + * @example $(window).scrollTop(100).scrollTop() + * @result 100 + * + * @example $(document).scrollTop(100).scrollTop() + * @result 100 + * + * @example $("#testdiv").scrollTop(100).scrollTop() + * @result 100 + * + * @name scrollTop + * @param Number value A positive number representing the desired scrollTop. + * @type jQuery + * @cat Plugins/Dimensions + */ + scrollTop: function(val) { + if ( val != undefined ) + // set the scroll top + return this.each(function() { + if (this == window || this == document) + window.scrollTo( $(window).scrollLeft(), val ); + else + this.scrollTop = val; + }); + + // return the scroll top offset in pixels + if ( this[0] == window || this[0] == document ) + return self.pageYOffset || + $.boxModel && document.documentElement.scrollTop || + document.body.scrollTop; + + return this[0].scrollTop; + }, + + /** + * Returns the top and left positioned offset in pixels. + * The positioned offset is the offset between a positioned + * parent and the element itself. The position method takes + * an optional map of key value pairs to configure the way + * the offset is calculated. Here are the different options. + * + * (Boolean) margin - Should the margin of the element be included in the calculations? False by default. + * (Boolean) border - Should the border of the element be included in the calculations? False by default. + * (Boolean) padding - Should the padding of the element be included in the calcuations? False by default. + * (Boolean) scroll - Sould the scroll offsets of the parent elements be included int he calculations? False by default. + * When true it adds the total scroll offsets of all parents to the total offset and also adds two + * properties to the returned object, scrollTop and scrollLeft. + * + * Also an object can be passed as the second paramater to + * catch the value of the return and continue the chain. + * + * For accurate readings make sure to use pixel values for margins, borders and padding. + * + * @example $("#testdiv").position() + * @result { top: 100, left: 100 } + * + * @example $("#testdiv").position({ margin: true, border: true, padding: true }) + * @result { top: 90, left: 90 } + * + * @example var position = {}; + * $("#testdiv").position({}, position) + * @result position = { top: 100, left: 100 } + * + * @name position + * @param Map options Optional settings to configure the way the offset is calculated. + * @param Object returnObject Optional An object to store the return value in, so as not to break the chain. If passed in the + * chain will not be broken and the result will be assigned to this object. + * @type Object + * @cat Plugins/Dimensions + */ + position: function(options, returnObject) { + var elem = this[0], parent = elem.parentNode, op = elem.offsetParent, + options = $.extend({ margin: false, border: false, padding: false, scroll: false }, options || {}), + x = elem.offsetLeft, + y = elem.offsetTop, + sl = elem.scrollLeft, + st = elem.scrollTop; + + // Mozilla and IE do not add the border + if ($.browser.mozilla || $.browser.msie) { + // add borders to offset + x += num(elem, 'borderLeftWidth'); + y += num(elem, 'borderTopWidth'); + } + + // Safari and opera includes border on positioned parents + if (($.browser.safari || $.browser.opera) && $.css(op, 'position') != 'static') { + x -= num(op, 'borderLeftWidth'); + y -= num(op, 'borderTopWidth'); + } + + if ($.browser.mozilla) { + do { + // Mozilla does not add the border for a parent that has overflow set to anything but visible + if (parent != elem && $.css(parent, 'overflow') != 'visible') { + x += num(parent, 'borderLeftWidth'); + y += num(parent, 'borderTopWidth'); + } + + if (parent == op) break; // break if we are already at the offestParent + } while ((parent = parent.parentNode) && parent.tagName != 'BODY'); + } + + if ($.browser.msie && (op.tagName != 'BODY' && $.css(op, 'position') == 'static')) { + do { + x += op.offsetLeft; + y += op.offsetTop; + // add borders to offset + x += num(op, 'borderLeftWidth'); + y += num(op, 'borderTopWidth'); + } while ((op = op.offsetParent) && (op.tagName != 'BODY' && $.css(op, 'position') == 'static')); + } + + var returnValue = handleOffsetReturn(elem, options, x, y, sl, st); + + if (returnObject) { $.extend(returnObject, returnValue); return this; } + else { return returnValue; } + }, + + /** + * Returns the location of the element in pixels from the top left corner of the viewport. + * The offset method takes an optional map of key value pairs to configure the way + * the offset is calculated. Here are the different options. + * + * (Boolean) margin - Should the margin of the element be included in the calculations? True by default. + * (Boolean) border - Should the border of the element be included in the calculations? False by default. + * (Boolean) padding - Should the padding of the element be included in the calcuations? False by default. + * (Boolean) scroll - Sould the scroll offsets of the parent elements be included int he calculations? True by default. + * When true it adds the total scroll offsets of all parents to the total offset and also adds two + * properties to the returned object, scrollTop and scrollLeft. + * (Boolean) lite - When true it will use the offsetLite method instead of the full-blown, slower offset method. False by default. + * Only use this when margins, borders and padding calculations don't matter. + * + * Also an object can be passed as the second paramater to + * catch the value of the return and continue the chain. + * + * For accurate readings make sure to use pixel values for margins, borders and padding. + * + * Known issues: + * - Issue: A div positioned relative or static without any content before it and its parent will report an offsetTop of 0 in Safari + * Workaround: Place content before the relative div ... and set height and width to 0 and overflow to hidden + * + * @example $("#testdiv").offset() + * @result { top: 100, left: 100, scrollTop: 10, scrollLeft: 10 } + * + * @example $("#testdiv").offset({ scroll: false }) + * @result { top: 90, left: 90 } + * + * @example var offset = {} + * $("#testdiv").offset({ scroll: false }, offset) + * @result offset = { top: 90, left: 90 } + * + * @name offset + * @param Map options Optional settings to configure the way the offset is calculated. + * @param Object returnObject An object to store the return value in, so as not to break the chain. If passed in the + * chain will not be broken and the result will be assigned to this object. + * @type Object + * @cat Plugins/Dimensions + */ + offset: function(options, returnObject) { + var x = 0, y = 0, sl = 0, st = 0, + elem = this[0], parent = this[0], op, parPos, elemPos = $.css(elem, 'position'), + mo = $.browser.mozilla, ie = $.browser.msie, sf = $.browser.safari, oa = $.browser.opera, + absparent = false, relparent = false, + options = $.extend({ margin: true, border: false, padding: false, scroll: true, lite: false }, options || {}); + + // Use offsetLite if lite option is true + if (options.lite) return this.offsetLite(options, returnObject); + + if (elem.tagName == 'BODY') { + // Safari is the only one to get offsetLeft and offsetTop properties of the body "correct" + // Except they all mess up when the body is positioned absolute or relative + x = elem.offsetLeft; + y = elem.offsetTop; + // Mozilla ignores margin and subtracts border from body element + if (mo) { + x += num(elem, 'marginLeft') + (num(elem, 'borderLeftWidth')*2); + y += num(elem, 'marginTop') + (num(elem, 'borderTopWidth') *2); + } else + // Opera ignores margin + if (oa) { + x += num(elem, 'marginLeft'); + y += num(elem, 'marginTop'); + } else + // IE does not add the border in Standards Mode + if (ie && jQuery.boxModel) { + x += num(elem, 'borderLeftWidth'); + y += num(elem, 'borderTopWidth'); + } + } else { + do { + parPos = $.css(parent, 'position'); + + x += parent.offsetLeft; + y += parent.offsetTop; + + // Mozilla and IE do not add the border + if (mo || ie) { + // add borders to offset + x += num(parent, 'borderLeftWidth'); + y += num(parent, 'borderTopWidth'); + + // Mozilla does not include the border on body if an element isn't positioned absolute and is without an absolute parent + if (mo && parPos == 'absolute') absparent = true; + // IE does not include the border on the body if an element is position static and without an absolute or relative parent + if (ie && parPos == 'relative') relparent = true; + } + + op = parent.offsetParent; + if (options.scroll || mo) { + do { + if (options.scroll) { + // get scroll offsets + sl += parent.scrollLeft; + st += parent.scrollTop; + } + + // Mozilla does not add the border for a parent that has overflow set to anything but visible + if (mo && parent != elem && $.css(parent, 'overflow') != 'visible') { + x += num(parent, 'borderLeftWidth'); + y += num(parent, 'borderTopWidth'); + } + + parent = parent.parentNode; + } while (parent != op); + } + parent = op; + + if (parent.tagName == 'BODY' || parent.tagName == 'HTML') { + // Safari and IE Standards Mode doesn't add the body margin for elments positioned with static or relative + if ((sf || (ie && $.boxModel)) && elemPos != 'absolute' && elemPos != 'fixed') { + x += num(parent, 'marginLeft'); + y += num(parent, 'marginTop'); + } + // Mozilla does not include the border on body if an element isn't positioned absolute and is without an absolute parent + // IE does not include the border on the body if an element is positioned static and without an absolute or relative parent + if ( (mo && !absparent && elemPos != 'fixed') || + (ie && elemPos == 'static' && !relparent) ) { + x += num(parent, 'borderLeftWidth'); + y += num(parent, 'borderTopWidth'); + } + break; // Exit the loop + } + } while (parent); + } + + var returnValue = handleOffsetReturn(elem, options, x, y, sl, st); + + if (returnObject) { $.extend(returnObject, returnValue); return this; } + else { return returnValue; } + }, + + /** + * Returns the location of the element in pixels from the top left corner of the viewport. + * This method is much faster than offset but not as accurate. This method can be invoked + * by setting the lite option to true in the offset method. + * The offsetLite method takes an optional map of key value pairs to configure the way + * the offset is calculated. Here are the different options. + * + * (Boolean) margin - Should the margin of the element be included in the calculations? True by default. + * (Boolean) border - Should the border of the element be included in the calculations? False by default. + * (Boolean) padding - Should the padding of the element be included in the calcuations? False by default. + * (Boolean) scroll - Sould the scroll offsets of the parent elements be included int he calculations? True by default. + * When true it adds the total scroll offsets of all parents to the total offset and also adds two + * properties to the returned object, scrollTop and scrollLeft. + * + * @name offsetLite + * @param Map options Optional settings to configure the way the offset is calculated. + * @param Object returnObject An object to store the return value in, so as not to break the chain. If passed in the + * chain will not be broken and the result will be assigned to this object. + * @type Object + * @cat Plugins/Dimensions + */ + offsetLite: function(options, returnObject) { + var x = 0, y = 0, sl = 0, st = 0, parent = this[0], op, + options = $.extend({ margin: true, border: false, padding: false, scroll: true }, options || {}); + + do { + x += parent.offsetLeft; + y += parent.offsetTop; + + op = parent.offsetParent; + if (options.scroll) { + // get scroll offsets + do { + sl += parent.scrollLeft; + st += parent.scrollTop; + parent = parent.parentNode; + } while(parent != op); + } + parent = op; + } while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML'); + + var returnValue = handleOffsetReturn(this[0], options, x, y, sl, st); + + if (returnObject) { $.extend(returnObject, returnValue); return this; } + else { return returnValue; } + } +}); + +/** + * Handles converting a CSS Style into an Integer. + * @private + */ +var num = function(el, prop) { + return parseInt($.css(el.jquery?el[0]:el,prop))||0; +}; + +/** + * Handles the return value of the offset and offsetLite methods. + * @private + */ +var handleOffsetReturn = function(elem, options, x, y, sl, st) { + if ( !options.margin ) { + x -= num(elem, 'marginLeft'); + y -= num(elem, 'marginTop'); + } + + // Safari and Opera do not add the border for the element + if ( options.border && ($.browser.safari || $.browser.opera) ) { + x += num(elem, 'borderLeftWidth'); + y += num(elem, 'borderTopWidth'); + } else if ( !options.border && !($.browser.safari || $.browser.opera) ) { + x -= num(elem, 'borderLeftWidth'); + y -= num(elem, 'borderTopWidth'); + } + + if ( options.padding ) { + x += num(elem, 'paddingLeft'); + y += num(elem, 'paddingTop'); + } + + // do not include scroll offset on the element + if ( options.scroll ) { + sl -= elem.scrollLeft; + st -= elem.scrollTop; + } + + return options.scroll ? { top: y - st, left: x - sl, scrollTop: st, scrollLeft: sl } + : { top: y, left: x }; +}; + +})(jQuery); \ No newline at end of file diff --git a/static/scripts/jquery.interface2.behavior.js b/static/scripts/jquery.interface2.behavior.js new file mode 100644 index 00000000000..4d68e466083 --- /dev/null +++ b/static/scripts/jquery.interface2.behavior.js @@ -0,0 +1,230 @@ + +(function($) { + //drag and drop manager + $.DDM = { + + //define a new draggable behavior + drag: function(el, options) { + el.DB = new $.dragBehavior(el, options); + }, + + //define a new droppable behavior + drop: function(el, options) { + el.DrB = new $.dropBehavior(el, options); + }, + + //drop targets + targets: [], + + //current pointer position + pointer: null, + + shiftKey: false, + altKey: false, + ctrlKey: false, + + //dragged element/elements + dragged: null, + + //timeout holder + preventionTimeout: null, + + mouseMove: function(e) { + if (!$.DDM.dragged) { + return false; + } + if (e) { + //store current event target + $.DDM.currentTarget = e.target; + + //store pointer position + $.DDM.pointer = $.DDM.dragged.DB.getPointer.apply($.DDM.dragged,[e]); + $.DDM.shiftKey = e.shiftKey; + $.DDM.altKey = e.altKey; + $.DDM.ctrlKey = e.ctrlKey; + } + + //if the pointer was not moved enough do not start the dragging action + if (!$.DDM.dragged.DB.dragThreshMet) { + var snap = Math.max( + Math.abs($.DDM.pointer.x - $.DDM.dragged.DB.pointer.x), + Math.abs($.DDM.pointer.y - $.DDM.dragged.DB.pointer.y) + ); + if (snap >= $.DDM.dragged.DB.snap) { + return $.DDM.startDrag(e); + } + return; + } + + $.DDM.dragged.DB.beforeDrag.apply($.DDM.dragged, [e]); + var toReturn = $.DDM.dragged.DB.drag.apply($.DDM.dragged, [e]); + + //checks if dragged element validates against drop targets + if ($.DDM.dragged.DB.hasTargets) { + for (var i=0; i< $.DDM.dragged.DB.targets.length; i++) { + $.DDM.dragged.DB.targets[i].DrB.checkTarget.apply($.DDM.dragged.DB.targets[i], [e]); + } + } + + if (toReturn === false) { + return false; + } + return; + }, + + mouseUp: function(e) { + if (!$.DDM.dragged) + return; + $.DDM.currentTarget = e.target; + var toReturn = true; + var dragged = $.DDM.dragged ; + clearTimeout($.DDM.preventionTimeout); + + //if the dragging action started + if (dragged.DB.dragThreshMet) { + dragged.DB.beforeStopDrag.apply(dragged,[e]); + toReturn = dragged.DB.stopDrag.apply(dragged,[e]); + } else { + if(dragged.DB.proxy) { $(dragged.DB.proxy).remove(); } + dragged.DB.onClickOnly.apply(dragged,[e]); + } + + $.DDM.clearTargets(e); + $.DDM.clearOptions(); + + $(document).unbind('mousemove', $.DDM.mouseMove); + $(document).unbind('mouseup', $.DDM.mouseUp); + + return toReturn; + }, + //start the dragging action + startDrag: function(e) { + if (!$.DDM.dragged) + return; + $.DDM.dragged.DB.dragThreshMet = true; + clearTimeout($.DDM.preventionTimeout ); + $.DDM.dragged.DB.beforeStartDrag.apply($.DDM.dragged, [e]); + + return $.DDM.dragged.DB.startDrag.apply($.DDM.dragged, [e]); + }, + + //check the drop targets and validate if are posibile targets for current dragged element + findTargets: function() { + $.DDM.dragged.DB.targets = []; + for( var i=0; i< $.DDM.targets.length; i++) { + for (var j in $.DDM.targets[i].DrB.groups) { + if ($.DDM.dragged.DB.groups[j] && $.DDM.targets[i].DrB.isTarget.apply($.DDM.targets[i])) { + $.DDM.targets[i].DrB.onActivate.apply($.DDM.targets[i]); + $.DDM.dragged.DB.targets[$.DDM.dragged.DB.targets.length] = $.DDM.targets[i]; + break; + } + } + } + $.DDM.dragged.DB.hasTargets = ($.DDM.dragged.DB.targets.length>0) ; + }, + + //clear the previously activated drop targets + clearTargets: function(e) { + for (var i=0; i< $.DDM.dragged.DB.targets.length; i++) { + $.DDM.dragged.DB.targets[i].DrB.onDeactivate.apply($.DDM.dragged.DB.targets[i], [e]); + } + $.DDM.dragged.DB.targets = []; + $.DDM.dragged.DB.hasTargets = false; + }, + + //clear all options stored in the dragging action + clearOptions: function() { + $.DDM.currentTarget = null; + $.DDM.dragged.DB.dragThreshMet = false; + $.DDM.dragged.DB.draggedEls = null; + $.DDM.dragged = null; + } + }; + + //drag behavior object + $.dragBehavior = function(el, options) { + this.init(el, options); + }; + + $.dragBehavior.prototype = { + draggedEls: null, + groups: {'default':true}, + size: null, + offset: null, + pointer: null, + proxy: null, + dragThreshMet: false, + preventionTimeout: 400, + beforeStartDrag: function(){}, + getPointer: function(e){return {x:e.pageX,y:e.pageY}}, + startDrag: function() {}, + beforeDrag: function(){}, + drag: function(){}, + beforeStopDrag: function(){}, + stopDrag: function(){}, + targets: [], + hasTargets: false, + snap: 0, + getDraggedEls: function(el) { + return el; + }, + init: function(el, options) { + $(el).bind('mousedown', this.mouseDown); + $.extend(this, options); + el.onselectstart = function(){return false;}; + el.ondrag = function(){return false;}; + el.unselectable = "on"; + }, + + mouseDown: function(e) { + if (!this.DB) { + return false; + } + $(document).bind('mousemove', $.DDM.mouseMove); + $(document).bind('mouseup', $.DDM.mouseUp); + $.DDM.currentTarget = e.target; + $.DDM.shiftKey = e.shiftKey; + $.DDM.altKey = e.altKey; + $.DDM.ctrlKey = e.ctrlKey; + this.DB.draggedEls = this.DB.getDraggedEls(this, e); + if (!this.DB.draggedEls) { + return; + } + $.DDM.dragged = this; + $.DDM.dragged.DB.dragThreshMet = false; + $.DDM.dragged.DB.pointer = $.DDM.pointer = {x:e.pageX, y:e.pageY}; + $.DDM.findTargets(); + if (this.DB.preventionTimeout) { + $.DDM.preventionTimeout = setTimeout(function(){$.DDM.startDrag(e)}, this.DB.preventionTimeout); + return false; + } + if (this.DB.snap) { + return false; + } + return $.DDM.startDrag(e); + } + }; + //drop behavior object + $.dropBehavior = function(el, options) { + this.init(el, options); + }; + $.dropBehavior.prototype = { + isTarget: function() {return false}, + onActivate: function(){}, + onDeactivate: function(){}, + checkTarget: function() {return false}, + onHover: function(){}, + onOut: function(){}, + onDrop: function(){}, + position: null, + size: null, + tolerance: 'pointer', + groups: {'default':true}, + isOver: false, + init: function(el, options) { + $.DDM.targets[$.DDM.targets.length] = el; + $.extend(this, options); + } + }; + + })(jQuery); \ No newline at end of file diff --git a/static/scripts/jquery.interface2.draggables.js b/static/scripts/jquery.interface2.draggables.js new file mode 100644 index 00000000000..d2d0cc13b29 --- /dev/null +++ b/static/scripts/jquery.interface2.draggables.js @@ -0,0 +1,249 @@ + +(function($) { + $.fn.draggable = function(options) { + options = $.extend({ + beforeDrag: function(e) { + var position, delta; + //if cursorAt then the element is positioned at cursor position + if (options.cursorAt) { + position = { + x: $.DDM.pointer.x + this.DB.extraOffset.x, + y: $.DDM.pointer.y + this.DB.extraOffset.y + } + } else { + delta = { + x: $.DDM.pointer.x - this.DB.pointer.x , + y: $.DDM.pointer.y - this.DB.pointer.y + } + + //apply grid + if (this.DB.grid) { + delta = this.DB.applyGrid(delta); + } + //if there are limits then recalculate delta + if (this.DB.limitOffset) { + delta = { + x: Math.max( + this.DB.limitOffset.x, + Math.min( + this.DB.position.x + delta.x, + this.DB.limitOffset.x + this.DB.limitOffset.w - this.DB.size.wb + )) - this.DB.position.x, + y: Math.max( + this.DB.limitOffset.y, + Math.min( + this.DB.position.y + delta.y, + this.DB.limitOffset.y + this.DB.limitOffset.h - this.DB.size.hb + ))-this.DB.position.y + }; + + } + position = { + x: this.DB.offset.x + delta.x, + y: this.DB.offset.y + delta.y + }; + } + if (this.DB.dragModifier) { + position = this.DB.dragModifier(position); + } + this.DB.onDrag.apply(this.DB.draggedEls, [this.DB.proxy||this.DB.draggedEls, position]); + $(this.DB.proxy||this.DB.draggedEls).css({ + left: position.x + 'px', + top: position.y + 'px' + }); + return false; + }, + beforeStartDrag: function() { + //get element position, offset position and size + this.DB.position = $.iUtil.getPosition(this.DB.draggedEls); + this.DB.size = $.iUtil.getSize(this.DB.draggedEls); + this.DB.offset = { + x: this.DB.draggedEls.offsetLeft, + y: this.DB.draggedEls.offsetTop + }; + /*this.DB.offset = { + x: parseInt($.curCSS(this.DB.draggedEls, 'left'), 10)||0, + y: parseInt($.curCSS(this.DB.draggedEls, 'top'), 10)||0 + };*/ + //if cursorAt then calculate the extra offset + if (this.DB.cursorAt) { + this.DB.extraOffset = { + x: this.DB.cursorAt.left ? + (this.DB.cursorAt.left * (-1)) + : this.DB.cursorAt.right ? + (- this.DB.size.wb + this.DB.cursorAt.right) + : 0, + y: this.DB.cursorAt.top ? + (this.DB.cursorAt.top * (-1)) + : this.DB.cursorAt.bottom ? + (- this.DB.size.hb + this.DB.cursorAt.bottom) + : 0 + }; + } + //if containment then calculates the limits + if (this.DB.containment) { + //if a node then get node position and size and calculate limits + if (this.DB.containment.parentNode) { + this.DB.limitOffset = $.extend( + $.iUtil.getPosition(this.DB.containment), + $.iUtil.getSize(this.DB.containment) + ); + this.DB.limitOffset.h = this.DB.limitOffset.hb; + this.DB.limitOffset.w = this.DB.limitOffset.wb; + //if document then get document size + } else if(this.DB.containment === 'document') { + var clientScroll = $.iUtil.getScroll(); + this.DB.limitOffset = { + x: 0, + y: 0, + h: Math.max(clientScroll.h,clientScroll.ih), + w: Math.max(clientScroll.w,clientScroll.iw) + }; + //if viewport then get document size and scroll + } else if(this.DB.containment === 'viewport') { + var clientScroll = $.iUtil.getScroll(); + this.DB.limitOffset = { + x: clientScroll.l, + y: clientScroll.t, + h: Math.min(clientScroll.h,clientScroll.ih), + w: Math.min(clientScroll.w,clientScroll.iw) + }; + } else { + this.DB.limitOffset = this.DB.containment; + } + } + var el = this.DB.proxy||this.DB.draggedEls; + + //store old zIndex value to restore later + if (options.zIndex) { + this.DB.oldZIndex = $.attr(el, 'zIndex'); + el.style.zIndex = 'number' == typeof options.zIndex ? options.zIndex : 1999; + } + + el.style.display = ''; + this.DB.beforeDrag.apply(this); + }, + startDrag: function() { + this.DB.onStart.apply(this.DB.draggedEls, [this.DB.proxy||this.DB.draggedEls, $.DDM.dragged.DB.targets]); + return false; + }, + //get pointer (overides the default fonction because of the axis option) + getPointer: function(e){ + return { + x : this.DB.axis === 'y' ? this.DB.pointer.x : e.pageX, + y : this.DB.axis === 'x' ? this.DB.pointer.y : e.pageY + }; + }, + beforeStopDrag: function() { + var handledByUser = this.DB.onStop.apply( + this.DB.draggedEls, + [ + this.DB.proxy||this.DB.draggedEls, + this.DB.revert ? + this.DB.offset : + ( + this.DB.proxy ? + {x:this.DB.proxy.offsetLeft,y:this.DB.proxy.offsetTop} + : + {x:this.DB.draggedEls.offsetLeft, y:this.DB.draggedEls.offsetTop} + ) + ]); + //if used chooses not to handle the stop dragging action then clear proxy and position teh element + if (handledByUser === false) { + if (this.DB.revert) { + $(this.DB.draggedEls).css({ + left: this.DB.offset.x + 'px', + top: this.DB.offset.y + 'px' + }); + } + if(this.DB.proxy) { + if (!this.DB.revert) { + $(this.DB.draggedEls).css({ + left: this.DB.proxy.offsetLeft + 'px', + top: this.DB.proxy.offsetTop + 'px' + }); + } + $(this.DB.proxy).remove(); + } + } + //reverse to the old zIndex + if (options.zIndex) { + this.DB.draggedEls.style.zIndex = this.DB.oldZIndex; + } + return false; + }, + getDraggedEls: function(el) { + //find element that needs to be dragged + var del = el.DB.toDrag||el, + isAllowed = true; + //if the event was fired by a illegal element or condition then stop the dragging + if ('function' == typeof options.dragPrevention) { + isAllowed = options.dragPrevention.apply(del,[$.DDM.currentTarget]); + } else if ('string' == typeof options.dragPrevention) { + var chunks = options.dragPrevention.toUpperCase().split(','); + jQuery.each( + chunks, + function() { + if ($.DDM.currentTarget.nodeName == this){ + isAllowed=false + } + } + ); + } + if (isAllowed == true) { + //if proxy is required add it to the DOM + if(options.ghostly || options.helper === 'clone') { + if (options.helper == 'clone') { + options.ghostly = true; + } + el.DB.proxy = $(del).clone(true).insertAfter(del).hide()[0]; + } else if (options.helper) { + el.DB.proxy = $(options.helper.apply(del)).hide()[0]; + } + if (el.DB.proxy) { + $(el.DB.proxy).css({ + top: $.curCSS(del, 'top'), + left: $.curCSS(del, 'left'), + display: 'none' + }); + } + return del; + } + return; + }, + //apply grid to current position + applyGrid: function(delta) { + return { + x: parseInt((delta.x + (this.grid.x* delta.x/Math.abs(delta.x))/2)/this.grid.x, 10) * this.grid.x, + y: parseInt((delta.y + (this.grid.y* delta.y/Math.abs(delta.y))/2)/this.grid.y, 10) * this.grid.y + }; + }, + onStart: function(){return false;}, + onStop: function(){return false;}, + onDrag: function(){return false;} + }, options||{}); + + return this.each(function(){ + var el = $(this); + //find the handle + var toDrag = this; + if (options.handle) { + el = $(options.handle, this); + if (el.size() == 0 ) + el = this; + } + + if (options.preventionDistance) { + options.snap = options.preventionDistance; + } + + //iterate each element and add drag behavior + el.each(function(){ + if (!this.DB) { + $.DDM.drag(this, options); + if (options.handle) this.DB.toDrag = toDrag; + } + }); + }); + }; + })(jQuery); \ No newline at end of file diff --git a/static/scripts/jquery.interface2.iutil.js b/static/scripts/jquery.interface2.iutil.js new file mode 100644 index 00000000000..9850fe97e56 --- /dev/null +++ b/static/scripts/jquery.interface2.iutil.js @@ -0,0 +1,297 @@ +/** + * Interface Elements for jQuery + * utility function + * + * http://interface.eyecon.ro + * + * Copyright (c) 2006 Stefan Petre + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * + */ + +jQuery.iUtil = { + getPosition : function(e, forceIt) + { + var x = 0; + var y = 0; + var es = e.style; + var restoreStyles = false; + if (forceIt && jQuery.curCSS(e,'display') == 'none') { + var oldVisibility = es.visibility; + var oldPosition = es.position; + restoreStyles = true; + es.visibility = 'hidden'; + es.display = 'block'; + es.position = 'absolute'; + } + var el = e; + if (el.getBoundingClientRect) { // IE + var box = el.getBoundingClientRect(); + x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2; + y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2; + } else { + x = el.offsetLeft; + y = el.offsetTop; + el = el.offsetParent; + if (e != el) { + while (el) { + x += el.offsetLeft; + y += el.offsetTop; + el = el.offsetParent; + } + } + if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) { + x -= document.body.offsetLeft; + y -= document.body.offsetTop; + } + el = e.parentNode; + while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML') + { + if (jQuery.curCSS(el, 'display') != 'inline') { + x -= el.scrollLeft; + y -= el.scrollTop; + } + el = el.parentNode; + } + } + if (restoreStyles == true) { + es.display = 'none'; + es.position = oldPosition; + es.visibility = oldVisibility; + } + return {x:x, y:y}; + }, + getPositionLite : function(el) + { + var x = 0, y = 0; + while(el) { + x += el.offsetLeft || 0; + y += el.offsetTop || 0; + el = el.offsetParent; + } + return {x:x, y:y}; + }, + getSize : function(e) + { + var w = parseInt(jQuery.curCSS(e,'width'), 10); + var h = parseInt(jQuery.curCSS(e,'height'), 10); + var wb = 0; + var hb = 0; + if (jQuery.curCSS(e, 'display') != 'none') { + wb = e.offsetWidth; + hb = e.offsetHeight; + } else { + var es = e.style; + var oldVisibility = es.visibility; + var oldPosition = es.position; + es.visibility = 'hidden'; + es.display = 'block'; + es.position = 'absolute'; + wb = e.offsetWidth; + hb = e.offsetHeight; + es.display = 'none'; + es.position = oldPosition; + es.visibility = oldVisibility; + } + return {w:w, h:h, wb:wb, hb:hb}; + }, + getSizeLite : function(el) + { + return { + wb:el.offsetWidth||0, + hb:el.offsetHeight||0 + }; + }, + getClient : function(e) + { + var h, w; + if (e) { + w = e.clientWidth; + h = e.clientHeight; + } else { + var de = document.documentElement; + w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; + h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; + } + return {w:w,h:h}; + }, + getScroll : function (e) + { + var t=0, l=0, w=0, h=0, iw=0, ih=0; + if (e && e.nodeName.toLowerCase() != 'body') { + t = e.scrollTop; + l = e.scrollLeft; + w = e.scrollWidth; + h = e.scrollHeight; + } else { + if (document.body) { + t = document.body.scrollTop; + l = document.body.scrollLeft; + w = document.body.scrollWidth; + h = document.body.scrollHeight; + } else if (document.documentElement) { + t = document.documentElement.scrollTop; + l = document.documentElement.scrollLeft; + w = document.documentElement.scrollWidth; + h = document.documentElement.scrollHeight; + } + iw = self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0; + ih = self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0; + } + return { t: t, l: l, w: w, h: h, iw: iw, ih: ih }; + }, + getMargins : function(e, toInteger) + { + var t = jQuery.curCSS(e,'marginTop') || ''; + var r = jQuery.curCSS(e,'marginRight') || ''; + var b = jQuery.curCSS(e,'marginBottom') || ''; + var l = jQuery.curCSS(e,'marginLeft') || ''; + if (toInteger) + return { + t: parseInt(t, 10)||0, + r: parseInt(r, 10)||0, + b: parseInt(b, 10)||0, + l: parseInt(l, 10) + }; + else + return {t: t, r: r, b: b, l: l}; + }, + getPadding : function(e, toInteger) + { + var t = jQuery.curCSS(e,'paddingTop') || ''; + var r = jQuery.curCSS(e,'paddingRight') || ''; + var b = jQuery.curCSS(e,'paddingBottom') || ''; + var l = jQuery.curCSS(e,'paddingLeft') || ''; + if (toInteger) + return { + t: parseInt(t, 10)||0, + r: parseInt(r, 10)||0, + b: parseInt(b, 10)||0, + l: parseInt(l, 10) + }; + else + return {t: t, r: r, b: b, l: l}; + }, + getBorder : function(e, toInteger) + { + var t = jQuery.curCSS(e,'borderTopWidth') || ''; + var r = jQuery.curCSS(e,'borderRightWidth') || ''; + var b = jQuery.curCSS(e,'borderBottomWidth') || ''; + var l = jQuery.curCSS(e,'borderLeftWidth') || ''; + if (toInteger) + return { + t: parseInt(t, 10)||0, + r: parseInt(r, 10)||0, + b: parseInt(b, 10)||0, + l: parseInt(l, 10)||0 + }; + else + return {t: t, r: r, b: b, l: l}; + }, + getPointer : function(event) + { + var x = event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || 0; + var y = event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || 0; + return {x:x, y:y}; + }, + traverseDOM : function(nodeEl, func) + { + func(nodeEl); + nodeEl = nodeEl.firstChild; + while(nodeEl){ + jQuery.iUtil.traverseDOM(nodeEl, func); + nodeEl = nodeEl.nextSibling; + } + }, + purgeEvents : function(nodeEl) + { + jQuery.iUtil.traverseDOM( + nodeEl, + function(el) + { + for(var attr in el){ + if(typeof el[attr] === 'function') { + el[attr] = null; + } + } + } + ); + }, + getInnerWidth : function(el, scroll) { + var offsetW = el.offsetWidth; + return scroll ? Math.max(el.scrollWidth,offsetW) - offsetW + el.clientWidth:el.clientWidth; + /*return (scroll ? Math.max(el.scrollWidth,el.offsetWidth) : el.offsetWidth) + - (parseInt($.curCSS(el, 'borderLeftWidth'), 10)||0) + - (parseInt($.curCSS(el, 'borderRightWidth'), 10)||0);*/ + }, + getInnerHeight : function(el, scroll) { + var offsetH = el.offsetHeight; + return scroll ? Math.max(el.scrollHeight,offsetH) - offsetH + el.clientHeight:el.clientHeight; + /*return (scroll ? Math.max(el.scrollHeight,el.offsetHeight) : el.offsetHeight) + - (parseInt($.curCSS(el, 'borderTopWidth'), 10)||0) + - (parseInt($.curCSS(el, 'borderBottomWidth'), 10)||0);*/ + }, + getExtraWidth : function(el) { + if($.boxModel) + return (parseInt($.curCSS(el, 'paddingLeft'), 10)||0) + + (parseInt($.curCSS(el, 'paddingRight'), 10)||0) + + (parseInt($.curCSS(el, 'borderLeftWidth'), 10)||0) + + (parseInt($.curCSS(el, 'borderRightWidth'), 10)||0); + return 0; + }, + getExtraHeight : function(el) { + if($.boxModel) + return (parseInt($.curCSS(el, 'paddingTop'), 10)||0) + + (parseInt($.curCSS(el, 'paddingBottom'), 10)||0) + + (parseInt($.curCSS(el, 'borderTopWidth'), 10)||0) + + (parseInt($.curCSS(el, 'borderBottomWidth'), 10)||0); + return 0; + }, + isChildOf: function(parentEl, el, container) { + if (parentEl == el) { + return true; + } + if (parentEl.contains && !$.browser.safari) { + return parentEl.contains(el); + } + if ( parentEl.compareDocumentPosition ) { + return !!(parentEl.compareDocumentPosition(el) & 16); + } + var prEl = el.parentNode; + while(prEl && prEl != container) { + if (prEl == parentEl) + return true; + prEl = prEl.parentNode; + } + return false; + }, + centerEl : function(el, axis) + { + var clientScroll = $.iUtil.getScroll(); + var size = $.iUtil.getSize(el); + if (!axis || axis == 'vertically') + $(el).css( + { + top: clientScroll.t + ((Math.min(clientScroll.h,clientScroll.ih) - size.hb)/2) + 'px' + } + ); + if (!axis || axis == 'horizontally') + $(el).css( + { + left: clientScroll.l + ((Math.min(clientScroll.w,clientScroll.iw) - size.wb)/2) + 'px' + } + ); + } +}; + +// Helper function to support older browsers! +[].indexOf || (Array.prototype.indexOf = function(v, n){ + n = (n == null) ? 0 : n; + var m = this.length; + for (var i=n; i -